diff -Nru mysql-5.6-5.6.27/BUILD-CMAKE mysql-5.6-5.6.33/BUILD-CMAKE --- mysql-5.6-5.6.27/BUILD-CMAKE 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/BUILD-CMAKE 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -The latest information about building MySQL with CMake is located on -http://dev.mysql.com/doc/internals/en/cmake.html - -See also BUILD/README diff -Nru mysql-5.6-5.6.27/client/client_priv.h mysql-5.6-5.6.33/client/client_priv.h --- mysql-5.6-5.6.27/client/client_priv.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/client_priv.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -100,6 +100,7 @@ OPT_SERVER_PUBLIC_KEY, OPT_ENABLE_CLEARTEXT_PLUGIN, OPT_CONNECTION_SERVER_ID, + OPT_SSL_MODE, OPT_MAX_CLIENT_OPTION }; @@ -123,3 +124,36 @@ */ #define PERFORMANCE_SCHEMA_DB_NAME "performance_schema" +/** + Wrapper for mysql_real_connect() that checks if SSL connection is establised. + + The function calls mysql_real_connect() first, then if given ssl_required==TRUE + argument (i.e. --ssl-mode=REQUIRED option used) checks current SSL chiper to + ensure that SSL is used for current connection. + Otherwise it returns NULL and sets errno to CR_SSL_CONNECTION_ERROR. + + All clients (except mysqlbinlog which disregards SSL options) use this function + instead of mysql_real_connect() to handle --ssl-mode=REQUIRED option. +*/ +MYSQL *mysql_connect_ssl_check(MYSQL *mysql_arg, const char *host, + const char *user, const char *passwd, + const char *db, uint port, + const char *unix_socket, ulong client_flag, + my_bool ssl_required MY_ATTRIBUTE((unused))) +{ + MYSQL *mysql= mysql_real_connect(mysql_arg, host, user, passwd, db, port, + unix_socket, client_flag); +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) + if (mysql && /* connection established. */ + ssl_required && /* --ssl-mode=REQUIRED. */ + !mysql_get_ssl_cipher(mysql)) /* non-SSL connection. */ + { + NET *net= &mysql->net; + net->last_errno= CR_SSL_CONNECTION_ERROR; + strmov(net->last_error, "--ssl-mode=REQUIRED option forbids non SSL connections"); + strmov(net->sqlstate, "HY000"); + return NULL; + } +#endif + return mysql; +} diff -Nru mysql-5.6-5.6.27/client/mysqladmin.cc mysql-5.6-5.6.33/client/mysqladmin.cc --- mysql-5.6-5.6.27/client/mysqladmin.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqladmin.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -237,7 +237,7 @@ static const char *load_default_groups[]= { "mysqladmin","client",0 }; my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { int error = 0; @@ -528,7 +528,7 @@ } -sig_handler endprog(int signal_number __attribute__((unused))) +sig_handler endprog(int signal_number MY_ATTRIBUTE((unused))) { interrupted=1; } @@ -551,8 +551,9 @@ for (;;) { - if (mysql_real_connect(mysql,host,user,opt_password,NullS,tcp_port, - unix_port, CLIENT_REMEMBER_OPTIONS)) + if (mysql_connect_ssl_check(mysql, host, user, opt_password, NullS, + tcp_port, unix_port, + CLIENT_REMEMBER_OPTIONS, opt_ssl_required)) { mysql->reconnect= 1; if (info) @@ -1105,7 +1106,7 @@ int offset= sprintf(buffer, "ALTER USER USER() IDENTIFIED BY '"); int length= (int)mysql_real_escape_string(mysql, buffer + offset, - typed_password, + typed_password, (ulong) strlen(typed_password)); if (length == -1) { @@ -1415,7 +1416,7 @@ /* 3.rd argument, uint row, is not in use. Don't remove! */ static void print_row(MYSQL_RES *result, MYSQL_ROW cur, - uint row __attribute__((unused))) + uint row MY_ATTRIBUTE((unused))) { uint i,length; MYSQL_FIELD *field; @@ -1450,9 +1451,9 @@ } -static void print_relative_row_vert(MYSQL_RES *result __attribute__((unused)), +static void print_relative_row_vert(MYSQL_RES *result MY_ATTRIBUTE((unused)), MYSQL_ROW cur, - uint row __attribute__((unused))) + uint row MY_ATTRIBUTE((unused))) { uint length; ulonglong tmp; diff -Nru mysql-5.6-5.6.27/client/mysqlbinlog.cc mysql-5.6-5.6.33/client/mysqlbinlog.cc --- mysql-5.6-5.6.27/client/mysqlbinlog.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqlbinlog.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1819,7 +1819,7 @@ extern "C" my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { bool tty_password=0; @@ -1917,6 +1917,12 @@ */ static Exit_status safe_connect() { + /* + A possible old connection's resources are reclaimed now + at new connect attempt. The final safe_connect resources + are mysql_closed at the end of program, explicitly. + */ + mysql_close(mysql); mysql= mysql_init(NULL); if (!mysql) diff -Nru mysql-5.6-5.6.27/client/mysql.cc mysql-5.6-5.6.33/client/mysql.cc --- mysql-5.6-5.6.27/client/mysql.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysql.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1486,8 +1486,9 @@ 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 (!mysql_connect_ssl_check(kill_mysql, current_host, current_user, + opt_password, "", opt_mysql_port, + opt_mysql_unix_port, 0, opt_ssl_required)) { tee_fprintf(stdout, "%s -- sorry, cannot connect to server to kill query, giving up ...\n", reason); goto err; @@ -1818,7 +1819,7 @@ my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -2754,8 +2755,8 @@ */ static char **new_mysql_completion(const char *text, - int start __attribute__((unused)), - int end __attribute__((unused))) + int start MY_ATTRIBUTE((unused)), + int end MY_ATTRIBUTE((unused))) { if (!status.batch && !quick) #if defined(USE_NEW_READLINE_INTERFACE) @@ -3165,8 +3166,8 @@ } -static int com_server_help(String *buffer __attribute__((unused)), - char *line __attribute__((unused)), char *help_arg) +static int com_server_help(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused)), char *help_arg) { MYSQL_ROW cur; const char *server_cmd; @@ -3272,8 +3273,8 @@ } static int -com_help(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_help(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { reg1 int i, j; char * help_arg= strchr(line,' '), buff[32], *end; @@ -3312,7 +3313,7 @@ /* ARGSUSED */ static int -com_clear(String *buffer,char *line __attribute__((unused))) +com_clear(String *buffer,char *line MY_ATTRIBUTE((unused))) { #ifdef HAVE_READLINE if (status.add_to_history) @@ -3324,7 +3325,7 @@ /* ARGSUSED */ static int -com_charset(String *buffer __attribute__((unused)), char *line) +com_charset(String *buffer MY_ATTRIBUTE((unused)), char *line) { char buff[256], *param; const CHARSET_INFO *new_cs; @@ -3356,7 +3357,7 @@ static int -com_go(String *buffer,char *line __attribute__((unused))) +com_go(String *buffer,char *line MY_ATTRIBUTE((unused))) { char buff[200]; /* about 110 chars used so far */ char time_buff[52+3+1]; /* time max + space&parens + NUL */ @@ -4117,8 +4118,8 @@ } static int -com_tee(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_tee(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { char file_name[FN_REFLEN], *end, *param; @@ -4160,8 +4161,8 @@ static int -com_notee(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_notee(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { if (opt_outfile) end_tee(); @@ -4175,8 +4176,8 @@ #ifdef USE_POPEN static int -com_pager(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_pager(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { char pager_name[FN_REFLEN], *end, *param; @@ -4219,8 +4220,8 @@ static int -com_nopager(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_nopager(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { strmov(pager, "stdout"); opt_nopager=1; @@ -4237,7 +4238,7 @@ #ifdef USE_POPEN static int -com_edit(String *buffer,char *line __attribute__((unused))) +com_edit(String *buffer,char *line MY_ATTRIBUTE((unused))) { char filename[FN_REFLEN],buff[160]; int fd,tmp; @@ -4281,16 +4282,16 @@ /* If arg is given, exit without errors. This happens on command 'quit' */ static int -com_quit(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_quit(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { status.exit_status=0; return 1; } static int -com_rehash(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_rehash(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { #ifdef HAVE_READLINE build_completion_hash(1, 0); @@ -4301,8 +4302,8 @@ #ifdef USE_POPEN static int -com_shell(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_shell(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { char *shell_cmd; @@ -4329,7 +4330,7 @@ static int -com_print(String *buffer,char *line __attribute__((unused))) +com_print(String *buffer,char *line MY_ATTRIBUTE((unused))) { tee_puts("--------------", stdout); (void) tee_fputs(buffer->c_ptr(), stdout); @@ -4394,7 +4395,7 @@ } -static int com_source(String *buffer __attribute__((unused)), +static int com_source(String *buffer MY_ATTRIBUTE((unused)), char *line) { char source_name[FN_REFLEN], *end, *param; @@ -4449,7 +4450,7 @@ /* ARGSUSED */ static int -com_delimiter(String *buffer __attribute__((unused)), char *line) +com_delimiter(String *buffer MY_ATTRIBUTE((unused)), char *line) { char buff[256], *tmp; @@ -4478,7 +4479,7 @@ /* ARGSUSED */ static int -com_use(String *buffer __attribute__((unused)), char *line) +com_use(String *buffer MY_ATTRIBUTE((unused)), char *line) { char *tmp, buff[FN_REFLEN + 1]; int select_db; @@ -4623,8 +4624,8 @@ } static int -com_warnings(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_warnings(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { show_warnings = 1; put_info("Show warnings enabled.",INFO_INFO); @@ -4632,8 +4633,8 @@ } static int -com_nowarnings(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_nowarnings(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { show_warnings = 0; put_info("Show warnings disabled.",INFO_INFO); @@ -4815,9 +4816,10 @@ "program_name", "mysql"); mysql_options(&mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &handle_expired); - if (!mysql_real_connect(&mysql, host, user, password, - database, opt_mysql_port, opt_mysql_unix_port, - connect_flag | CLIENT_MULTI_STATEMENTS)) + if (!mysql_connect_ssl_check(&mysql, host, user, password, + database, opt_mysql_port, opt_mysql_unix_port, + connect_flag | CLIENT_MULTI_STATEMENTS, + opt_ssl_required)) { if (!silent || (mysql_errno(&mysql) != CR_CONN_HOST_ERROR && @@ -4912,8 +4914,8 @@ static int -com_status(String *buffer __attribute__((unused)), - char *line __attribute__((unused))) +com_status(String *buffer MY_ATTRIBUTE((unused)), + char *line MY_ATTRIBUTE((unused))) { const char *status_str; char buff[40]; @@ -5553,7 +5555,7 @@ } } -static int com_prompt(String *buffer __attribute__((unused)), +static int com_prompt(String *buffer MY_ATTRIBUTE((unused)), char *line) { char *ptr=strchr(line, ' '); diff -Nru mysql-5.6-5.6.27/client/mysqlcheck.c mysql-5.6-5.6.33/client/mysqlcheck.c --- mysql-5.6-5.6.27/client/mysqlcheck.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqlcheck.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,6 +43,8 @@ opt_fix_table_names= 0, opt_fix_db_names= 0, opt_upgrade= 0, opt_write_binlog= 1, opt_secure_auth=TRUE; static uint verbose = 0, opt_mysql_port=0; +static uint opt_enable_cleartext_plugin= 0; +static my_bool using_opt_enable_cleartext_plugin= 0; static int my_end_arg; static char * opt_mysql_unix_port = 0; static char *opt_password = 0, *current_user = 0, @@ -116,6 +118,10 @@ "Default authentication client-side plugin to use.", &opt_default_auth, &opt_default_auth, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"enable_cleartext_plugin", OPT_ENABLE_CLEARTEXT_PLUGIN, + "Enable/disable the clear text authentication plugin.", + &opt_enable_cleartext_plugin, &opt_enable_cleartext_plugin, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, {"fast",'F', "Check only tables that haven't been closed properly.", &opt_fast, &opt_fast, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, @@ -219,13 +225,13 @@ static int process_all_tables_in_db(char *database); static int process_one_db(char *database); static int use_db(char *database); -static int handle_request_for_tables(char *tables, uint length); +static int handle_request_for_tables(char *tables, size_t length); static int dbConnect(char *host, char *user,char *passwd); static void dbDisconnect(char *host); static void DBerror(MYSQL *mysql, const char *when); static void safe_exit(int error); static void print_result(); -static uint fixed_name_length(const char *name); +static size_t fixed_name_length(const char *name); static char *fix_table_name(char *dest, char *src); int what_to_do = 0; @@ -264,7 +270,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { int orig_what_to_do= what_to_do; @@ -338,6 +344,9 @@ verbose++; break; case 'V': print_version(); exit(0); + case OPT_ENABLE_CLEARTEXT_PLUGIN: + using_opt_enable_cleartext_plugin= TRUE; + break; case OPT_MYSQL_PROTOCOL: opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, opt->name); @@ -492,7 +501,7 @@ *end++= ','; } *--end = 0; - handle_request_for_tables(table_names_comma_sep + 1, (uint) (tot_length - 1)); + handle_request_for_tables(table_names_comma_sep + 1, tot_length - 1); my_free(table_names_comma_sep); } else @@ -502,10 +511,10 @@ } /* process_selected_tables */ -static uint fixed_name_length(const char *name) +static size_t fixed_name_length(const char *name) { const char *p; - uint extra_length= 2; /* count the first/last backticks */ + size_t extra_length= 2; /* count the first/last backticks */ for (p= name; *p; p++) { @@ -514,7 +523,7 @@ else if (*p == '.') extra_length+= 2; } - return (uint) ((p - name) + extra_length); + return (size_t) ((p - name) + extra_length); } @@ -570,7 +579,7 @@ */ char *tables, *end; - uint tot_length = 0; + size_t tot_length = 0; while ((row = mysql_fetch_row(res))) tot_length+= fixed_name_length(row[0]) + 2; @@ -628,7 +637,9 @@ int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; - sprintf(qbuf, "RENAME TABLE `%s` TO `%s`", name, name + 9); + my_snprintf(qbuf, sizeof(qbuf), "RENAME TABLE `%s` TO `%s`", + name, name + 9); + rc= run_query(qbuf); if (verbose) printf("%-50s %s\n", name, rc ? "FAILED" : "OK"); @@ -641,7 +652,8 @@ int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; - sprintf(qbuf, "ALTER DATABASE `%s` UPGRADE DATA DIRECTORY NAME", name); + my_snprintf(qbuf, sizeof(qbuf), "ALTER DATABASE `%s` UPGRADE DATA DIRECTORY " + "NAME", name); rc= run_query(qbuf); if (verbose) printf("%-50s %s\n", name, rc ? "FAILED" : "OK"); @@ -659,7 +671,7 @@ ptr= strmov(query, "ALTER TABLE "); ptr= fix_table_name(ptr, name); ptr= strxmov(ptr, " FORCE", NullS); - if (mysql_real_query(sock, query, (uint)(ptr - query))) + if (mysql_real_query(sock, query, (ulong)(ptr - query))) { fprintf(stderr, "Failed to %s\n", query); fprintf(stderr, "Error: %s\n", mysql_error(sock)); @@ -712,10 +724,10 @@ return run_query(stmt); } -static int handle_request_for_tables(char *tables, uint length) +static int handle_request_for_tables(char *tables, size_t length) { char *query, *end, options[100], message[100]; - uint query_length= 0; + size_t query_length= 0, query_size= sizeof(char)*(length+110); const char *op = 0; options[0] = 0; @@ -746,10 +758,14 @@ return fix_table_storage_name(tables); } - if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) + if (!(query =(char *) my_malloc(query_size, MYF(MY_WME)))) + { return 1; + } if (opt_all_in_1) { + DBUG_ASSERT(strlen(op)+strlen(tables)+strlen(options)+8+1 <= query_size); + /* No backticks here as we added them before */ query_length= sprintf(query, "%s TABLE %s %s", op, tables, options); } @@ -760,7 +776,7 @@ ptr= strmov(strmov(query, op), " TABLE "); ptr= fix_table_name(ptr, tables); ptr= strxmov(ptr, " ", options, NullS); - query_length= (uint) (ptr - query); + query_length= (size_t) (ptr - query); } if (mysql_real_query(sock, query, query_length)) { @@ -844,7 +860,10 @@ prev_alter[0]= 0; } else - strcpy(prev_alter, alter_txt); + { + strncpy(prev_alter, alter_txt, MAX_ALTER_STR_SIZE-1); + prev_alter[MAX_ALTER_STR_SIZE-1]= 0; + } } } } @@ -907,12 +926,18 @@ if (opt_default_auth && *opt_default_auth) mysql_options(&mysql_connection, MYSQL_DEFAULT_AUTH, opt_default_auth); + if (using_opt_enable_cleartext_plugin) + mysql_options(&mysql_connection, MYSQL_ENABLE_CLEARTEXT_PLUGIN, + (char *) &opt_enable_cleartext_plugin); + mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset); mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlcheck"); - if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd, - NULL, opt_mysql_port, opt_mysql_unix_port, 0))) + if (!(sock = mysql_connect_ssl_check(&mysql_connection, host, user, passwd, + NULL, opt_mysql_port, + opt_mysql_unix_port, 0, + opt_ssl_required))) { DBerror(&mysql_connection, "when trying to connect"); DBUG_RETURN(1); @@ -993,7 +1018,7 @@ process_databases(argv); if (opt_auto_repair) { - uint i; + size_t i; if (!opt_silent && (tables4repair.elements || tables4rebuild.elements)) puts("\nRepairing tables"); diff -Nru mysql-5.6-5.6.27/client/mysql_config_editor.cc mysql-5.6-5.6.33/client/mysql_config_editor.cc --- mysql-5.6-5.6.27/client/mysql_config_editor.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysql_config_editor.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -209,7 +209,7 @@ my_bool my_program_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -230,7 +230,7 @@ my_bool my_set_command_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -257,7 +257,7 @@ my_bool my_remove_command_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -281,7 +281,7 @@ my_bool my_print_command_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -305,7 +305,7 @@ my_bool my_reset_command_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { diff -Nru mysql-5.6-5.6.27/client/mysqldump.c mysql-5.6-5.6.33/client/mysqldump.c --- mysql-5.6-5.6.27/client/mysqldump.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqldump.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -87,7 +87,7 @@ static void add_load_option(DYNAMIC_STRING *str, const char *option, const char *option_value); -static ulong find_set(TYPELIB *lib, const char *x, uint length, +static ulong find_set(TYPELIB *lib, const char *x, size_t length, char **err_pos, uint *err_len); static char *alloc_query_str(ulong size); @@ -131,6 +131,8 @@ #define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2 #define MYSQL_OPT_SLAVE_DATA_EFFECTIVE_SQL 1 #define MYSQL_OPT_SLAVE_DATA_COMMENTED_SQL 2 +static uint opt_enable_cleartext_plugin= 0; +static my_bool using_opt_enable_cleartext_plugin= 0; static uint opt_mysql_port= 0, opt_master_data; static uint opt_slave_data; static uint my_end_arg; @@ -546,6 +548,10 @@ "Default authentication client-side plugin to use.", &opt_default_auth, &opt_default_auth, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"enable_cleartext_plugin", OPT_ENABLE_CLEARTEXT_PLUGIN, + "Enable/disable the clear text authentication plugin.", + &opt_enable_cleartext_plugin, &opt_enable_cleartext_plugin, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; @@ -756,7 +762,7 @@ uchar* get_table_key(const char *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= strlen(entry); return (uchar*) entry; @@ -764,7 +770,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch (optid) { @@ -879,7 +885,7 @@ opt_set_charset= 0; opt_compatible_mode_str= argument; opt_compatible_mode= find_set(&compatible_mode_typelib, - argument, (uint) strlen(argument), + argument, strlen(argument), &err_ptr, &err_len); if (err_len) { @@ -889,7 +895,7 @@ } #if !defined(DBUG_OFF) { - uint size_for_sql_mode= 0; + size_t size_for_sql_mode= 0; const char **ptr; for (ptr= compatible_mode_names; *ptr; ptr++) size_for_sql_mode+= strlen(*ptr); @@ -916,6 +922,9 @@ default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; break; } + case (int) OPT_ENABLE_CLEARTEXT_PLUGIN: + using_opt_enable_cleartext_plugin= TRUE; + break; case (int) OPT_MYSQL_PROTOCOL: opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, opt->name); @@ -1173,8 +1182,8 @@ break; } - strncpy(db_cl_name, db_cl_row[0], db_cl_size); - db_cl_name[db_cl_size - 1]= 0; /* just in case. */ + strncpy(db_cl_name, db_cl_row[0], db_cl_size-1); + db_cl_name[db_cl_size - 1]= 0; } while (FALSE); @@ -1185,7 +1194,7 @@ static char *my_case_str(const char *str, - uint str_len, + size_t str_len, const char *token, uint token_len) { @@ -1401,7 +1410,7 @@ */ static char *cover_definer_clause(const char *stmt_str, - uint stmt_length, + size_t stmt_length, const char *definer_version_str, uint definer_version_length, const char *stmt_version_str, @@ -1537,12 +1546,17 @@ if (opt_default_auth && *opt_default_auth) mysql_options(&mysql_connection, MYSQL_DEFAULT_AUTH, opt_default_auth); + if (using_opt_enable_cleartext_plugin) + mysql_options(&mysql_connection, MYSQL_ENABLE_CLEARTEXT_PLUGIN, + (char *) &opt_enable_cleartext_plugin); + mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqldump"); - if (!(mysql= mysql_real_connect(&mysql_connection,host,user,passwd, - NULL,opt_mysql_port,opt_mysql_unix_port, - 0))) + if (!(mysql= mysql_connect_ssl_check(&mysql_connection, host, user, + passwd, NULL, opt_mysql_port, + opt_mysql_unix_port, 0, + opt_ssl_required))) { DB_error(&mysql_connection, "when trying to connect"); DBUG_RETURN(1); @@ -1589,14 +1603,14 @@ } /* dbDisconnect */ -static void unescape(FILE *file,char *pos,uint length) +static void unescape(FILE *file,char *pos, size_t length) { char *tmp; DBUG_ENTER("unescape"); if (!(tmp=(char*) my_malloc(length*2+1, MYF(MY_WME)))) die(EX_MYSQLERR, "Couldn't allocate memory"); - mysql_real_escape_string(&mysql_connection, tmp, pos, length); + mysql_real_escape_string(&mysql_connection, tmp, pos, (ulong)length); fputc('\'', file); fputs(tmp, file); fputc('\'', file); @@ -1710,7 +1724,7 @@ Quote '<' '>' '&' '\"' chars and print a string to the xml_file. */ -static void print_quoted_xml(FILE *xml_file, const char *str, ulong len, +static void print_quoted_xml(FILE *xml_file, const char *str, size_t len, my_bool is_attribute_name) { const char *end; @@ -1907,7 +1921,7 @@ const char *str_create) { uint i; - my_bool body_found __attribute__((unused)) = 0; + my_bool body_found MY_ATTRIBUTE((unused)) = 0; char *create_stmt_ptr= NULL; ulong create_stmt_len= 0; MYSQL_FIELD *field; @@ -1969,7 +1983,7 @@ squeezed to a single hyphen. */ -static void print_xml_comment(FILE *xml_file, ulong len, +static void print_xml_comment(FILE *xml_file, size_t len, const char *comment_string) { const char* end; @@ -2086,7 +2100,7 @@ DBUG_ENTER("dump_events_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); - mysql_real_escape_string(mysql, db_name_buff, db, strlen(db)); + mysql_real_escape_string(mysql, db_name_buff, db, (ulong)strlen(db)); /* nice comments */ print_comment(sql_file, 0, @@ -2205,6 +2219,11 @@ (const char *) (query_str != NULL ? query_str : row[3]), (const char *) delimiter); + if(query_str) + { + my_free(query_str); + query_str= NULL; + } restore_time_zone(sql_file, delimiter); restore_sql_mode(sql_file, delimiter); @@ -2298,7 +2317,7 @@ DBUG_ENTER("dump_routines_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); - mysql_real_escape_string(mysql, db_name_buff, db, strlen(db)); + mysql_real_escape_string(mysql, db_name_buff, db, (ulong)strlen(db)); /* nice comments */ print_comment(sql_file, 0, @@ -2352,9 +2371,9 @@ if the user has EXECUTE privilege he see routine names, but NOT the routine body of other routines that are not the creator of! */ - DBUG_PRINT("info",("length of body for %s row[2] '%s' is %d", + DBUG_PRINT("info",("length of body for %s row[2] '%s' is %zu", routine_name, row[2] ? row[2] : "(null)", - row[2] ? (int) strlen(row[2]) : 0)); + row[2] ? strlen(row[2]) : 0)); if (row[2] == NULL) { print_comment(sql_file, 1, "\n-- insufficient privileges to %s\n", @@ -3901,7 +3920,7 @@ int i; char name_buff[NAME_LEN*2+3]; - mysql_real_escape_string(mysql, name_buff, db, strlen(db)); + mysql_real_escape_string(mysql, name_buff, db, (ulong)strlen(db)); init_dynamic_string_checked(&where, " AND TABLESPACE_NAME IN (" "SELECT DISTINCT TABLESPACE_NAME FROM" @@ -3914,7 +3933,7 @@ for (i=0 ; iname); @@ -416,8 +426,19 @@ MYSQL *mysql; if (verbose) fprintf(stdout, "Connecting to %s\n", host ? host : "localhost"); - if (!(mysql= mysql_init(NULL))) - return 0; + if (opt_use_threads && !lock_tables) + { + pthread_mutex_lock(&init_mutex); + if (!(mysql= mysql_init(NULL))) + { + pthread_mutex_unlock(&init_mutex); + return 0; + } + pthread_mutex_unlock(&init_mutex); + } + else + if (!(mysql= mysql_init(NULL))) + return 0; if (opt_compress) mysql_options(mysql,MYSQL_OPT_COMPRESS,NullS); if (opt_local_file) @@ -451,13 +472,17 @@ if (opt_default_auth && *opt_default_auth) mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth); + if (using_opt_enable_cleartext_plugin) + mysql_options(mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, + (char*)&opt_enable_cleartext_plugin); + mysql_options(mysql, MYSQL_SET_CHARSET_NAME, default_charset); mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlimport"); - if (!(mysql_real_connect(mysql,host,user,passwd, - database,opt_mysql_port,opt_mysql_unix_port, - 0))) + if (!(mysql_connect_ssl_check(mysql, host, user, passwd, database, + opt_mysql_port, opt_mysql_unix_port, + 0, opt_ssl_required))) { ignore_errors=0; /* NO RETURN FROM db_error */ db_error(mysql); @@ -598,7 +623,7 @@ pthread_cond_signal(&count_threshhold); pthread_mutex_unlock(&counter_mutex); mysql_thread_end(); - + pthread_exit(0); return 0; } @@ -624,15 +649,31 @@ if (opt_use_threads && !lock_tables) { - pthread_t mainthread; /* Thread descriptor */ - pthread_attr_t attr; /* Thread attributes */ + char **save_argv; + uint worker_thread_count= 0, table_count= 0, i= 0; + pthread_t *worker_threads; /* Thread descriptor */ + pthread_attr_t attr; /* Thread attributes */ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, - PTHREAD_CREATE_DETACHED); + PTHREAD_CREATE_JOINABLE); + pthread_mutex_init(&init_mutex, NULL); pthread_mutex_init(&counter_mutex, NULL); pthread_cond_init(&count_threshhold, NULL); + /* Count the number of tables. This number denotes the total number + of threads spawn. + */ + save_argv= argv; + for (table_count= 0; *argv != NULL; argv++) + table_count++; + argv= save_argv; + + if (!(worker_threads= (pthread_t*) my_malloc(table_count * + sizeof(*worker_threads), + MYF(0)))) + return -2; + for (counter= 0; *argv != NULL; argv++) /* Loop through tables */ { pthread_mutex_lock(&counter_mutex); @@ -647,15 +688,16 @@ counter++; pthread_mutex_unlock(&counter_mutex); /* now create the thread */ - if (pthread_create(&mainthread, &attr, worker_thread, - (void *)*argv) != 0) + if (pthread_create(&worker_threads[worker_thread_count], &attr, + worker_thread, (void *)*argv) != 0) { pthread_mutex_lock(&counter_mutex); counter--; pthread_mutex_unlock(&counter_mutex); - fprintf(stderr,"%s: Could not create thread\n", - my_progname); + fprintf(stderr,"%s: Could not create thread\n", my_progname); + continue; } + worker_thread_count++; } /* @@ -670,9 +712,18 @@ pthread_cond_timedwait(&count_threshhold, &counter_mutex, &abstime); } pthread_mutex_unlock(&counter_mutex); + pthread_mutex_destroy(&init_mutex); pthread_mutex_destroy(&counter_mutex); pthread_cond_destroy(&count_threshhold); pthread_attr_destroy(&attr); + + for(i= 0; i < worker_thread_count; i++) + { + if (pthread_join(worker_threads[i], NULL)) + fprintf(stderr,"%s: Could not join worker thread.\n", my_progname); + } + + my_free(worker_threads); } else { diff -Nru mysql-5.6-5.6.27/client/mysql_plugin.c mysql-5.6-5.6.33/client/mysql_plugin.c --- mysql-5.6-5.6.27/client/mysql_plugin.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysql_plugin.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -406,7 +406,7 @@ static void usage(void) { PRINT_VERSION; - puts("Copyright (c) 2011, Oracle and/or its affiliates. " + puts("Copyright (c) 2011, 2016, Oracle and/or its affiliates. " "All rights reserved.\n"); puts("Enable or disable plugins."); printf("\nUsage: %s [options] ENABLE|DISABLE\n\nOptions:\n", @@ -471,7 +471,7 @@ static my_bool get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -793,6 +793,11 @@ /* read the plugin config file and check for match against argument */ else { + if (strlen(argv[i]) + 4 + 1 > FN_REFLEN) + { + fprintf(stderr, "ERROR: argument is too long.\n"); + return 1; + } strcpy(plugin_name, argv[i]); strcpy(config_file, argv[i]); strcat(config_file, ".ini"); @@ -884,6 +889,7 @@ if (opt_basedir[i-1] != FN_LIBCHAR || opt_basedir[i-1] != FN_LIBCHAR2) { char buff[FN_REFLEN]; + memset(buff, 0, sizeof(buff)); strncpy(buff, opt_basedir, sizeof(buff) - 1); #ifdef __WIN__ diff -Nru mysql-5.6-5.6.27/client/mysqlshow.c mysql-5.6-5.6.33/client/mysqlshow.c --- mysql-5.6-5.6.27/client/mysqlshow.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqlshow.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,6 +38,8 @@ static uint opt_verbose=0; static char *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME; static char *opt_plugin_dir= 0, *opt_default_auth= 0; +static uint opt_enable_cleartext_plugin= 0; +static my_bool using_opt_enable_cleartext_plugin= 0; static my_bool opt_secure_auth= TRUE; #ifdef HAVE_SMEM @@ -53,9 +55,9 @@ static int list_table_status(MYSQL *mysql,const char *db,const char *table); static int list_fields(MYSQL *mysql,const char *db,const char *table, const char *field); -static void print_header(const char *header,uint head_length,...); -static void print_row(const char *header,uint head_length,...); -static void print_trailer(uint length,...); +static void print_header(const char *header,size_t head_length,...); +static void print_row(const char *header,size_t head_length,...); +static void print_trailer(size_t length,...); static void print_res_header(MYSQL_RES *result); static void print_res_top(MYSQL_RES *result); static void print_res_row(MYSQL_RES *result,MYSQL_ROW cur); @@ -147,13 +149,17 @@ if (opt_default_auth && *opt_default_auth) mysql_options(&mysql, MYSQL_DEFAULT_AUTH, opt_default_auth); + if (using_opt_enable_cleartext_plugin) + mysql_options(&mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, + (char*)&opt_enable_cleartext_plugin); + mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlshow"); - if (!(mysql_real_connect(&mysql,host,user,opt_password, - (first_argument_uses_wildcards) ? "" : - argv[0],opt_mysql_port,opt_mysql_unix_port, - 0))) + if (!(mysql_connect_ssl_check(&mysql, host, user, opt_password, + (first_argument_uses_wildcards) ? "" : + argv[0], opt_mysql_port, opt_mysql_unix_port, + 0, opt_ssl_required))) { fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql)); exit(1); @@ -215,6 +221,10 @@ "Default authentication client-side plugin to use.", &opt_default_auth, &opt_default_auth, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"enable_cleartext_plugin", OPT_ENABLE_CLEARTEXT_PLUGIN, + "Enable/disable the clear text authentication plugin.", + &opt_enable_cleartext_plugin, &opt_enable_cleartext_plugin, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Connect to host.", &host, &host, 0, GET_STR, @@ -304,7 +314,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -332,6 +342,9 @@ opt_protocol = MYSQL_PROTOCOL_PIPE; #endif break; + case (int) OPT_ENABLE_CLEARTEXT_PLUGIN: + using_opt_enable_cleartext_plugin= TRUE; + break; case OPT_MYSQL_PROTOCOL: opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, opt->name); @@ -384,10 +397,11 @@ list_dbs(MYSQL *mysql,const char *wild) { const char *header; - uint length, counter = 0; + size_t length = 0; + uint counter = 0; ulong rowcount = 0L; char tables[NAME_LEN+1], rows[NAME_LEN+1]; - char query[255]; + char query[NAME_LEN + 100]; MYSQL_FIELD *field; MYSQL_RES *result; MYSQL_ROW row= NULL, rrow; @@ -422,7 +436,7 @@ printf("Wildcard: %s\n",wild); header="Databases"; - length=(uint) strlen(header); + length= strlen(header); field=mysql_fetch_field(result); if (length < field->max_length) length=field->max_length; @@ -454,7 +468,8 @@ MYSQL_ROW trow; while ((trow = mysql_fetch_row(tresult))) { - sprintf(query,"SELECT COUNT(*) FROM `%s`",trow[0]); + my_snprintf(query, sizeof(query), + "SELECT COUNT(*) FROM `%s`", trow[0]); if (!(mysql_query(mysql,query))) { MYSQL_RES *rresult; @@ -509,8 +524,9 @@ list_tables(MYSQL *mysql,const char *db,const char *table) { const char *header; - uint head_length, counter = 0; - char query[255], rows[NAME_LEN], fields[16]; + size_t head_length; + uint counter = 0; + char query[NAME_LEN + 100], rows[NAME_LEN], fields[16]; MYSQL_FIELD *field; MYSQL_RES *result; MYSQL_ROW row, rrow; @@ -546,7 +562,7 @@ putchar('\n'); header="Tables"; - head_length=(uint) strlen(header); + head_length= strlen(header); field=mysql_fetch_field(result); if (head_length < field->max_length) head_length=field->max_length; @@ -595,7 +611,8 @@ if (opt_verbose > 1) { /* Print the count of rows for each table */ - sprintf(query,"SELECT COUNT(*) FROM `%s`",row[0]); + my_snprintf(query, sizeof(query), "SELECT COUNT(*) FROM `%s`", + row[0]); if (!(mysql_query(mysql,query))) { if ((rresult = mysql_store_result(mysql))) @@ -655,13 +672,15 @@ static int list_table_status(MYSQL *mysql,const char *db,const char *wild) { - char query[1024],*end; + char query[NAME_LEN + 100]; + int len; MYSQL_RES *result; MYSQL_ROW row; - end=strxmov(query,"show table status from `",db,"`",NullS); - if (wild && wild[0]) - strxmov(end," like '",wild,"'",NullS); + len= sizeof(query); + len-= my_snprintf(query, len, "show table status from `%s`", db); + if (wild && wild[0] && len) + strxnmov(query + strlen(query), len - 1, " like '", wild, "'", NullS); if (mysql_query(mysql,query) || !(result=mysql_store_result(mysql))) { fprintf(stderr,"%s: Cannot get status for db: %s, table: %s: %s\n", @@ -693,7 +712,8 @@ list_fields(MYSQL *mysql,const char *db,const char *table, const char *wild) { - char query[1024],*end; + char query[NAME_LEN + 100]; + size_t len; MYSQL_RES *result; MYSQL_ROW row; ulong UNINIT_VAR(rows); @@ -707,7 +727,7 @@ if (opt_count) { - sprintf(query,"select count(*) from `%s`", table); + my_snprintf(query, sizeof(query), "select count(*) from `%s`", table); if (mysql_query(mysql,query) || !(result=mysql_store_result(mysql))) { fprintf(stderr,"%s: Cannot get record count for db: %s, table: %s: %s\n", @@ -719,9 +739,11 @@ mysql_free_result(result); } - end=strmov(strmov(strmov(query,"show /*!32332 FULL */ columns from `"),table),"`"); - if (wild && wild[0]) - strxmov(end," like '",wild,"'",NullS); + len= sizeof(query); + len-= my_snprintf(query, len, "show /*!32332 FULL */ columns from `%s`", + table); + if (wild && wild[0] && len) + strxnmov(query + strlen(query), len - 1, " like '", wild, "'", NullS); if (mysql_query(mysql,query) || !(result=mysql_store_result(mysql))) { fprintf(stderr,"%s: Cannot list columns in db: %s, table: %s: %s\n", @@ -742,7 +764,7 @@ print_res_top(result); if (opt_show_keys) { - end=strmov(strmov(strmov(query,"show keys from `"),table),"`"); + my_snprintf(query, sizeof(query), "show keys from `%s`", table); if (mysql_query(mysql,query) || !(result=mysql_store_result(mysql))) { fprintf(stderr,"%s: Cannot list keys in db: %s, table: %s: %s\n", @@ -769,10 +791,10 @@ *****************************************************************************/ static void -print_header(const char *header,uint head_length,...) +print_header(const char *header,size_t head_length,...) { va_list args; - uint length,i,str_length,pre_space; + size_t length,i,str_length,pre_space; const char *field; va_start(args,head_length); @@ -795,10 +817,10 @@ putchar('|'); for (;;) { - str_length=(uint) strlen(field); + str_length= strlen(field); if (str_length > length) str_length=length+1; - pre_space=(uint) (((int) length-(int) str_length)/2)+1; + pre_space= ((length- str_length)/2)+1; for (i=0 ; i < pre_space ; i++) putchar(' '); for (i = 0 ; i < str_length ; i++) @@ -832,11 +854,11 @@ static void -print_row(const char *header,uint head_length,...) +print_row(const char *header,size_t head_length,...) { va_list args; const char *field; - uint i,length,field_length; + size_t i,length,field_length; va_start(args,head_length); field=header; length=head_length; @@ -845,7 +867,7 @@ putchar('|'); putchar(' '); fputs(field,stdout); - field_length=(uint) strlen(field); + field_length= strlen(field); for (i=field_length ; i <= length ; i++) putchar(' '); if (!(field=va_arg(args,char *))) @@ -859,10 +881,10 @@ static void -print_trailer(uint head_length,...) +print_trailer(size_t head_length,...) { va_list args; - uint length,i; + size_t length,i; va_start(args,head_length); length=head_length; @@ -905,7 +927,7 @@ mysql_field_seek(result,0); while((field = mysql_fetch_field(result))) { - if ((length=(uint) strlen(field->name)) > field->max_length) + if ((length= strlen(field->name)) > field->max_length) field->max_length=length; else length=field->max_length; diff -Nru mysql-5.6-5.6.27/client/mysqlslap.c mysql-5.6-5.6.33/client/mysqlslap.c --- mysql-5.6-5.6.27/client/mysqlslap.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqlslap.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -369,9 +369,9 @@ (char*) &opt_enable_cleartext_plugin); if (!opt_only_print) { - if (!(mysql_real_connect(&mysql, host, user, opt_password, - NULL, opt_mysql_port, - opt_mysql_unix_port, connect_flags))) + if (!(mysql_connect_ssl_check(&mysql, host, user, opt_password, + NULL, opt_mysql_port, opt_mysql_unix_port, + connect_flags, opt_ssl_required))) { fprintf(stderr,"%s: Error when connecting to server: %s\n", my_progname,mysql_error(&mysql)); @@ -736,7 +736,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { DBUG_ENTER("get_one_option"); diff -Nru mysql-5.6-5.6.27/client/mysqltest.cc mysql-5.6-5.6.33/client/mysqltest.cc --- mysql-5.6-5.6.27/client/mysqltest.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysqltest.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -547,12 +547,12 @@ void replace_strings_append(struct st_replace *rep, DYNAMIC_STRING* ds, const char *from, int len); -static void cleanup_and_exit(int exit_code) __attribute__((noreturn)); +static void cleanup_and_exit(int exit_code) MY_ATTRIBUTE((noreturn)); void die(const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 1, 2) __attribute__((noreturn)); + ATTRIBUTE_FORMAT(printf, 1, 2) MY_ATTRIBUTE((noreturn)); void abort_not_supported_test(const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 1, 2) __attribute__((noreturn)); + ATTRIBUTE_FORMAT(printf, 1, 2) MY_ATTRIBUTE((noreturn)); void verbose_msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2); void log_msg(const char *fmt, ...) @@ -2121,7 +2121,7 @@ C_MODE_START static uchar *get_var_key(const uchar* var, size_t *len, - my_bool __attribute__((unused)) t) + my_bool MY_ATTRIBUTE((unused)) t) { register char* key; key = ((VAR*)var)->name; @@ -4320,7 +4320,7 @@ } -void do_wait_for_slave_to_stop(struct st_command *c __attribute__((unused))) +void do_wait_for_slave_to_stop(struct st_command *c MY_ATTRIBUTE((unused))) { static int SLAVE_POLL_INTERVAL= 300000; MYSQL* mysql = &cur_con->mysql; @@ -5315,8 +5315,9 @@ "program_name", "mysqltest"); mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); - while(!mysql_real_connect(mysql, host,user, pass, db, port, sock, - CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS)) + while(!mysql_connect_ssl_check(mysql, host,user, pass, db, port, sock, + CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS, + opt_ssl_required)) { /* Connect failed @@ -5420,8 +5421,9 @@ mysql_options4(con, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqltest"); mysql_options(con, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); - while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, - CLIENT_MULTI_STATEMENTS)) + while (!mysql_connect_ssl_check(con, host, user, pass, db, port, + sock ? sock: 0, CLIENT_MULTI_STATEMENTS, + opt_ssl_required)) { /* If we have used up all our connections check whether this @@ -8392,6 +8394,13 @@ "use # if you intended to write a comment"); } } + DBUG_VOID_RETURN; +} + + +void update_expected_errors(struct st_command* command) +{ + DBUG_ENTER("update_expected_errors"); /* Set expected error on command */ memcpy(&command->expected_errors, &saved_expected_errors, @@ -8409,7 +8418,7 @@ */ -void mark_progress(struct st_command* command __attribute__((unused)), +void mark_progress(struct st_command* command MY_ATTRIBUTE((unused)), int line) { static ulonglong progress_start= 0; // < Beware @@ -8771,6 +8780,9 @@ if (command->type == Q_UNKNOWN || command->type == Q_COMMENT_WITH_COMMAND) get_command_type(command); + if(saved_expected_errors.count > 0) + update_expected_errors(command); + if (parsing_disabled && command->type != Q_ENABLE_PARSING && command->type != Q_DISABLE_PARSING) @@ -9453,7 +9465,7 @@ void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds, const char *str, - int len __attribute__((unused))) + int len MY_ATTRIBUTE((unused))) { reg1 REPLACE *rep_pos; reg2 REPLACE_STRING *rep_str; diff -Nru mysql-5.6-5.6.27/client/mysql_upgrade.c mysql-5.6-5.6.33/client/mysql_upgrade.c --- mysql-5.6-5.6.27/client/mysql_upgrade.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/client/mysql_upgrade.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -310,6 +310,7 @@ case OPT_DEFAULT_AUTH: /* --default-auth */ add_one_option(&conn_args, opt, argument); break; +#include } if (add_option) @@ -400,6 +401,10 @@ va_end(args); + /* If given --ssl-mode=REQUIRED propagate it to the tool. */ + if (opt_ssl_required) + dynstr_append(&ds_cmdline, "--ssl-mode=REQUIRED"); + #ifdef __WIN__ dynstr_append(&ds_cmdline, "\""); #endif @@ -763,7 +768,7 @@ } -/** performs the same operation as mysqlcheck_upgrade, but on the mysql db */ +/** performs the same operation as mysqlcheck_fixnames, but on the mysql db */ static int run_mysqlcheck_mysql_db_fixnames(void) { print_conn_args("mysqlcheck"); @@ -929,10 +934,16 @@ if (init_dynamic_string(&ds_version, NULL, NAME_CHAR_LEN, NAME_CHAR_LEN)) die("Out of memory"); - if (run_query("show variables like 'version'", - &ds_version, FALSE) || - extract_variable_from_show(&ds_version, version_str)) + if (run_query("show variables like 'version'", &ds_version, FALSE)) + { + fprintf(stderr, "Error: Failed while fetching Server version! Could be" + " due to unauthorized access.\n"); + dynstr_free(&ds_version); + return 1; /* Query failed */ + } + if (extract_variable_from_show(&ds_version, version_str)) { + fprintf(stderr, "Error: Failed while extracting Server version!\n"); dynstr_free(&ds_version); return 1; /* Query failed */ } @@ -1027,17 +1038,37 @@ Then do the upgrade. And then run mysqlcheck on all tables. */ - if ((!opt_systables_only && - (run_mysqlcheck_mysql_db_fixnames() || run_mysqlcheck_mysql_db_upgrade())) || - run_sql_fix_privilege_tables() || - (!opt_systables_only && - (run_mysqlcheck_fixnames() || run_mysqlcheck_upgrade()))) + if (!opt_systables_only) { - /* - The upgrade failed to complete in some way or another, - significant error message should have been printed to the screen - */ - die("Upgrade failed" ); + if (run_mysqlcheck_mysql_db_fixnames()) + { + die("Error during call to mysql_check for fixing the db/tables names on " + "mysql db"); + } + if (run_mysqlcheck_mysql_db_upgrade()) + { + die("Error during call to mysql_check for upgrading the tables names on " + "mysql db"); + } + } + if (run_sql_fix_privilege_tables()) + { + /* Specific error msg (if present) would be printed in the function call + * above */ + die("Upgrade failed"); + } + if (!opt_systables_only) + { + if (run_mysqlcheck_fixnames()) + { + die("Error during call to mysql_check for fixing the db/tables names on " + "all db(s) except mysql"); + } + if (run_mysqlcheck_upgrade()) + { + die("Error during call to mysql_check for upgrading the tables names on " + "all db(s) except mysql"); + } } verbose("OK"); diff -Nru mysql-5.6-5.6.27/cmake/build_configurations/compiler_options.cmake mysql-5.6-5.6.33/cmake/build_configurations/compiler_options.cmake --- mysql-5.6-5.6.27/cmake/build_configurations/compiler_options.cmake 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/cmake/build_configurations/compiler_options.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -66,11 +66,9 @@ SET(SUNPRO_CXX_LIBRARY "stlport4" CACHE STRING "What C++ library to use. The server needs stlport4. It is possible to build the client libraries with -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd") - MESSAGE(STATUS "SUNPRO_CXX_LIBRARY ${SUNPRO_CXX_LIBRARY}") - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i386") SET(COMMON_C_FLAGS "-g -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic") - SET(COMMON_CXX_FLAGS "-g0 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic -library=${SUNPRO_CXX_LIBRARY}") + SET(COMMON_CXX_FLAGS "-g0 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic") # We have to specify "-xO1" for DEBUG flags here, # see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6879978 SET(CMAKE_C_FLAGS_DEBUG "-xO1 ${COMMON_C_FLAGS}") @@ -84,8 +82,8 @@ ENDIF() ELSE() # Assume !x86 is SPARC - SET(COMMON_C_FLAGS "-g -Xa -xstrconst -mt") - SET(COMMON_CXX_FLAGS "-g0 -mt -library=${SUNPRO_CXX_LIBRARY}") + SET(COMMON_C_FLAGS "-g -xstrconst -mt") + SET(COMMON_CXX_FLAGS "-g0 -mt") IF(32BIT) SET(COMMON_C_FLAGS "${COMMON_C_FLAGS} -xarch=sparc") SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} -xarch=sparc") diff -Nru mysql-5.6-5.6.27/cmake/os/WindowsCache.cmake mysql-5.6-5.6.33/cmake/os/WindowsCache.cmake --- mysql-5.6-5.6.27/cmake/os/WindowsCache.cmake 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/cmake/os/WindowsCache.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -231,7 +231,6 @@ SET(HAVE_SIZEOF_U_INT32_T FALSE CACHE INTERNAL "") SET(HAVE_SIZE_OF_SSIZE_T FALSE CACHE INTERNAL "") SET(HAVE_SLEEP CACHE INTERNAL "") -SET(HAVE_SNPRINTF CACHE INTERNAL "") SET(HAVE_SOCKADDR_IN_SIN_LEN CACHE INTERNAL "") SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "") SET(HAVE_SOCKADDR_STORAGE_SS_FAMILY 1 CACHE INTERNAL "") @@ -306,7 +305,6 @@ SET(HAVE_TIMES CACHE INTERNAL "") SET(HAVE_TIMESPEC_TS_SEC CACHE INTERNAL "") SET(HAVE_TIME_H 1 CACHE INTERNAL "") -SET(HAVE_TZNAME 1 CACHE INTERNAL "") SET(HAVE_UNISTD_H CACHE INTERNAL "") SET(HAVE_UTIME_H CACHE INTERNAL "") SET(HAVE_VALLOC CACHE INTERNAL "") @@ -333,6 +331,7 @@ IF(MSVC_VERSION GREATER 1310) SET(HAVE_strtok_s 1 CACHE INTERNAL "") ENDIF() +SET(HAVE__tzname 1 CACHE INTERNAL "") SET(STDC_HEADERS CACHE 1 INTERNAL "") SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "") SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "") diff -Nru mysql-5.6-5.6.27/cmake/os/Windows.cmake mysql-5.6-5.6.33/cmake/os/Windows.cmake --- mysql-5.6-5.6.27/cmake/os/Windows.cmake 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/cmake/os/Windows.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -186,12 +186,13 @@ CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h) CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h) CHECK_SYMBOL_REPLACEMENT(finite _finite float.h) +CHECK_SYMBOL_REPLACEMENT(tzname _tzname time.h) +CHECK_SYMBOL_REPLACEMENT(snprintf _snprintf stdio.h) CHECK_FUNCTION_REPLACEMENT(popen _popen) CHECK_FUNCTION_REPLACEMENT(pclose _pclose) CHECK_FUNCTION_REPLACEMENT(access _access) CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp) CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp) -CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf) CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s) CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64) CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64) diff -Nru mysql-5.6-5.6.27/cmake/plugin.cmake mysql-5.6-5.6.33/cmake/plugin.cmake --- mysql-5.6-5.6.27/cmake/plugin.cmake 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/cmake/plugin.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -175,6 +175,15 @@ COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN") TARGET_LINK_LIBRARIES (${target} mysqlservices) + GET_TARGET_PROPERTY(LINK_FLAGS ${target} LINK_FLAGS) + IF(NOT LINK_FLAGS) + # Avoid LINK_FLAGS-NOTFOUND + SET(LINK_FLAGS) + ENDIF() + SET_TARGET_PROPERTIES(${target} PROPERTIES + LINK_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${LINK_FLAGS} " + ) + # Plugin uses 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 diff -Nru mysql-5.6-5.6.27/CMakeLists.txt mysql-5.6-5.6.33/CMakeLists.txt --- mysql-5.6-5.6.27/CMakeLists.txt 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,6 +19,11 @@ CMAKE_POLICY(VERSION 2.8) endif() +# We use CMAKE_SHARED_LIBRARY__FLAGS. See cmake --help-policy CMP0018 +IF(CMAKE_VERSION VERSION_GREATER "2.8.8") + CMAKE_POLICY(SET CMP0018 OLD) +ENDIF() + # We use PROPERTIES LINK_INTERFACE_LIBRARIES. See cmake --help-policy CMP0022 IF(CMAKE_VERSION VERSION_EQUAL "2.8.12" OR CMAKE_VERSION VERSION_GREATER "2.8.12") @@ -383,9 +388,16 @@ SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}") ENDIF() -SET(TMPDIR "P_tmpdir" - CACHE PATH - "PATH to MySQL TMP dir. Defaults to the P_tmpdir macro in ") +IF(WIN32) # P_tmpdir is not defined on Windows as of VS2015. + SET(TMPDIR "" # So we use empty path as default. In practice TMP/TEMP is used + CACHE PATH + "PATH to MySQL TMP dir") +ELSE() + SET(TMPDIR "P_tmpdir" + CACHE PATH + "PATH to MySQL TMP dir. Defaults to the P_tmpdir macro in ") +ENDIF() + IF(TMPDIR STREQUAL "P_tmpdir") # Do not quote it, to refer to the P_tmpdir macro. SET(DEFAULT_TMPDIR "P_tmpdir") @@ -427,6 +439,13 @@ ENABLE_TESTING() ENDIF() +OPTION(WITH_SYMVER16 + "Export libmysqlclient_16 and libmysqlclient_18 symbol versions" OFF) + +IF(WITH_SYMVER16) + ADD_DEFINITIONS(-DEXPORT_SYMVER16) +ENDIF() + IF(NOT WITHOUT_SERVER) SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "") # Add storage engines and plugins. @@ -446,10 +465,6 @@ ADD_SUBDIRECTORY(libmysql) IF(WITH_UNIT_TESTS) - ADD_SUBDIRECTORY(unittest) - ADD_SUBDIRECTORY(unittest/examples) - ADD_SUBDIRECTORY(unittest/mytap) - ADD_SUBDIRECTORY(unittest/mytap/t) # Visual Studio 11 needs this extra flag in order to compile gmock. IF(WIN32) ADD_DEFINITIONS( /D _VARIADIC_MAX=10 ) @@ -458,7 +473,10 @@ IF(HAVE_LLVM_LIBCPP) ADD_DEFINITIONS(-DGTEST_USE_OWN_TR1_TUPLE=1) ENDIF() - ADD_SUBDIRECTORY(unittest/gunit) + ADD_SUBDIRECTORY(unittest) + ADD_SUBDIRECTORY(unittest/examples) + ADD_SUBDIRECTORY(unittest/mytap) + ADD_SUBDIRECTORY(unittest/mytap/t) ENDIF() ADD_SUBDIRECTORY(extra) @@ -554,15 +572,11 @@ ) INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme) INSTALL(FILES ${CMAKE_BINARY_DIR}/Docs/INFO_SRC ${CMAKE_BINARY_DIR}/Docs/INFO_BIN DESTINATION ${INSTALL_DOCDIR}) - IF(UNIX) - INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme) - ENDIF() # MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied") MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION) INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR} COMPONENT Documentation - PATTERN "INSTALL-BINARY" EXCLUDE PATTERN "Makefile.*" EXCLUDE PATTERN "glibc*" EXCLUDE PATTERN "linuxthreads.txt" EXCLUDE diff -Nru mysql-5.6-5.6.27/config.h.cmake mysql-5.6-5.6.33/config.h.cmake --- mysql-5.6-5.6.27/config.h.cmake 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/config.h.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -395,6 +395,7 @@ #cmakedefine HAVE_UINT64 1 #cmakedefine SIZEOF_BOOL @SIZEOF_BOOL@ #cmakedefine HAVE_BOOL 1 +#cmakedefine HAVE_STRUCT_TIMESPEC #cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@ @@ -517,6 +518,7 @@ #cmakedefine strtok_r @strtok_r@ #cmakedefine strtoll @strtoll@ #cmakedefine strtoull @strtoull@ +#cmakedefine tzname @tzname@ #cmakedefine vsnprintf @vsnprintf@ #if (_MSC_VER > 1310) # define HAVE_SETENV diff -Nru mysql-5.6-5.6.27/configure.cmake mysql-5.6-5.6.33/configure.cmake --- mysql-5.6-5.6.27/configure.cmake 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/configure.cmake 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,6 +43,13 @@ ENDIF() +IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCXX) + ## We will be using gcc to generate .so files + ## Add C flags (e.g. -m64) to CMAKE_SHARED_LIBRARY_C_FLAGS + SET(CMAKE_SHARED_LIBRARY_C_FLAGS + "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}") +ENDIF() + # System type affects version_compile_os variable IF(NOT SYSTEM_TYPE) @@ -60,13 +67,27 @@ # The default C++ library for SunPro is really old, and not standards compliant. # http://www.oracle.com/technetwork/server-storage/solaris10/cmp-stlport-libcstd-142559.html -# Use stlport rather than Rogue Wave. +# Use stlport rather than Rogue Wave, +# unless otherwise specified on command line. IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - IF(SUNPRO_CXX_LIBRARY) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=${SUNPRO_CXX_LIBRARY}") + IF(CMAKE_CXX_FLAGS MATCHES "-std=") + ADD_DEFINITIONS(-D__MATHERR_RENAME_EXCEPTION) + SET(CMAKE_SHARED_LIBRARY_C_FLAGS + "${CMAKE_SHARED_LIBRARY_C_FLAGS} -lc") + SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS + "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} -lstdc++ -lgcc_s -lCrunG3 -lc") + SET(QUOTED_CMAKE_CXX_LINK_FLAGS "-lstdc++ -lgcc_s -lCrunG3 -lc") ELSE() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4") + IF(SUNPRO_CXX_LIBRARY) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=${SUNPRO_CXX_LIBRARY}") + IF(SUNPRO_CXX_LIBRARY STREQUAL "stdcxx4") + ADD_DEFINITIONS(-D__MATHERR_RENAME_EXCEPTION) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=extdef") + ENDIF() + ELSE() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4") + ENDIF() ENDIF() ENDIF() ENDIF() @@ -88,45 +109,114 @@ GET_FILENAME_COMPONENT(${OUT} ${IN} PATH) ENDMACRO() +MACRO(FIND_REAL_LIBRARY SOFTLINK_NAME REALNAME) + # We re-distribute libstlport.so/libstdc++.so which are both symlinks. + # There is no 'readlink' on solaris, so we use perl to follow links: + SET(PERLSCRIPT + "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;") + EXECUTE_PROCESS( + COMMAND perl -e "${PERLSCRIPT}" ${SOFTLINK_NAME} + RESULT_VARIABLE result + OUTPUT_VARIABLE real_library + ) + SET(REALNAME ${real_library}) +ENDMACRO() + +MACRO(EXTEND_CXX_LINK_FLAGS LIBRARY_PATH) + # Using the $ORIGIN token with the -R option to locate the libraries + # on a path relative to the executable: + # We need an extra backslash to pass $ORIGIN to the mysql_config script... + SET(QUOTED_CMAKE_CXX_LINK_FLAGS + "${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH}") + SET(CMAKE_CXX_LINK_FLAGS + "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") + MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}") +ENDMACRO() + +MACRO(EXTEND_C_LINK_FLAGS LIBRARY_PATH) + SET(QUOTED_CMAKE_C_LINK_FLAGS + "${CMAKE_C_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH}") + SET(CMAKE_C_LINK_FLAGS + "${CMAKE_C_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") + MESSAGE(STATUS "CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS + "${CMAKE_SHARED_LIBRARY_C_FLAGS} -R'\$ORIGIN/..' -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") +ENDMACRO() + IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_C_COMPILER_ID MATCHES "SunPro" AND CMAKE_CXX_FLAGS MATCHES "stlport4") DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH) - SET(STLPORT_SUFFIX "lib/stlport4") - IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") - SET(STLPORT_SUFFIX "lib/stlport4/v9") + # Also extract real path to the compiler(which is normally + # in /prod/bin) and try to find the + # stlport libs relative to that location as well. + GET_FILENAME_COMPONENT(CXX_REALPATH ${CMAKE_CXX_COMPILER} REALPATH) + + # CC -V yields + # CC: Studio 12.5 Sun C++ 5.14 SunOS_sparc Dodona 2016/04/04 + # CC: Sun C++ 5.13 SunOS_sparc Beta 2014/03/11 + # CC: Sun C++ 5.11 SunOS_sparc 2010/08/13 + + EXECUTE_PROCESS( + COMMAND ${CMAKE_CXX_COMPILER} "-V" + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr + RESULT_VARIABLE result + ) + IF(result) + MESSAGE(FATAL_ERROR "Failed to execute ${CMAKE_CXX_COMPILER} -V") ENDIF() - IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") - SET(STLPORT_SUFFIX "lib/stlport4/amd64") + + STRING(REGEX MATCH "CC: Sun C\\+\\+ 5\\.([0-9]+)" VERSION_STRING ${stderr}) + IF (NOT CMAKE_MATCH_1 OR CMAKE_MATCH_1 STREQUAL "") + STRING(REGEX MATCH "CC: Studio 12\\.5 Sun C\\+\\+ 5\\.([0-9]+)" + VERSION_STRING ${stderr}) + ENDIF() + SET(CC_MINOR_VERSION ${CMAKE_MATCH_1}) + + IF(${CC_MINOR_VERSION} GREATER 12) + SET(STLPORT_SUFFIX "lib/compilers/stlport4") + IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") + SET(STLPORT_SUFFIX "lib/compilers/stlport4/sparcv9") + ENDIF() + IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") + SET(STLPORT_SUFFIX "lib/compilers/stlport4/amd64") + ENDIF() + ELSE() + SET(STLPORT_SUFFIX "lib/stlport4") + IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") + SET(STLPORT_SUFFIX "lib/stlport4/v9") + ENDIF() + IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") + SET(STLPORT_SUFFIX "lib/stlport4/amd64") + ENDIF() ENDIF() FIND_LIBRARY(STL_LIBRARY_NAME NAMES "stlport" PATHS ${CXX_PATH}/../${STLPORT_SUFFIX} + ${CXX_REALPATH}/../../${STLPORT_SUFFIX} ) MESSAGE(STATUS "STL_LIBRARY_NAME ${STL_LIBRARY_NAME}") IF(STL_LIBRARY_NAME) DIRNAME(${STL_LIBRARY_NAME} STLPORT_PATH) - # We re-distribute libstlport.so which is a symlink to libstlport.so.1 - # There is no 'readlink' on solaris, so we use perl to follow links: - SET(PERLSCRIPT - "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;") - EXECUTE_PROCESS( - COMMAND perl -e "${PERLSCRIPT}" ${STL_LIBRARY_NAME} - RESULT_VARIABLE result - OUTPUT_VARIABLE real_library - ) + FIND_REAL_LIBRARY(${STL_LIBRARY_NAME} real_library) MESSAGE(STATUS "INSTALL ${STL_LIBRARY_NAME} ${real_library}") INSTALL(FILES ${STL_LIBRARY_NAME} ${real_library} - DESTINATION ${INSTALL_LIBDIR} COMPONENT Development) - # Using the $ORIGIN token with the -R option to locate the libraries - # on a path relative to the executable: - # We need an extra backslash to pass $ORIGIN to the mysql_config script... - SET(QUOTED_CMAKE_CXX_LINK_FLAGS - "${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${STLPORT_PATH}") - SET(CMAKE_CXX_LINK_FLAGS - "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${STLPORT_PATH}") - MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}") + DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries) + EXTEND_C_LINK_FLAGS(${STLPORT_PATH}) + EXTEND_CXX_LINK_FLAGS(${STLPORT_PATH}) + ELSE() + MESSAGE(STATUS "Failed to find the required stlport library, print some" + "variables to help debugging and bail out") + MESSAGE(STATUS "CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER}") + MESSAGE(STATUS "CXX_PATH ${CXX_PATH}") + MESSAGE(STATUS "CXX_REALPATH ${CXX_REALPATH}") + MESSAGE(STATUS "STLPORT_SUFFIX ${STLPORT_SUFFIX}") + MESSAGE(STATUS "PATH: ${CXX_PATH}/../${STLPORT_SUFFIX}") + MESSAGE(STATUS "PATH: ${CXX_REALPATH}/../../${STLPORT_SUFFIX}") + MESSAGE(FATAL_ERROR + "Could not find the required stlport library.") ENDIF() ENDIF() @@ -666,7 +756,7 @@ MY_CHECK_TYPE_SIZE(short SHORT) MY_CHECK_TYPE_SIZE(int INT) MY_CHECK_TYPE_SIZE("long long" LONG_LONG) -SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h) +SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h time.h) MY_CHECK_TYPE_SIZE(off_t OFF_T) MY_CHECK_TYPE_SIZE(uchar UCHAR) MY_CHECK_TYPE_SIZE(uint UINT) @@ -681,6 +771,7 @@ MY_CHECK_TYPE_SIZE(int64 INT64) MY_CHECK_TYPE_SIZE(uint64 UINT64) MY_CHECK_TYPE_SIZE(time_t TIME_T) +MY_CHECK_TYPE_SIZE("struct timespec" STRUCT_TIMESPEC) SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h) MY_CHECK_TYPE_SIZE(bool BOOL) SET(CMAKE_EXTRA_INCLUDE_FILES) diff -Nru mysql-5.6-5.6.27/dbug/tests.c mysql-5.6-5.6.33/dbug/tests.c --- mysql-5.6-5.6.27/dbug/tests.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/dbug/tests.c 2016-08-26 11:22:35.000000000 +0000 @@ -73,7 +73,7 @@ DBUG_EVALUATE_IF("evaluate_if", "ON", "OFF")); DBUG_EXECUTE_IF("pop", DBUG_POP(); ); { - char s[1000] __attribute__((unused)); + char s[1000] MY_ATTRIBUTE((unused)); DBUG_EXPLAIN(s, sizeof(s)-1); DBUG_PRINT("explain", ("dbug explained: %s", s)); } diff -Nru mysql-5.6-5.6.27/debian/changelog mysql-5.6-5.6.33/debian/changelog --- mysql-5.6-5.6.27/debian/changelog 2015-10-26 19:53:07.000000000 +0000 +++ mysql-5.6-5.6.33/debian/changelog 2016-09-19 18:00:35.000000000 +0000 @@ -1,3 +1,78 @@ +mysql-5.6 (5.6.33-0ubuntu0.14.04.1) trusty-security; urgency=medium + + * SECURITY UPDATE: Update to 5.6.33 to fix security issues + - CVE-2016-6662 + * debian/rules: new version no longer ships unit.pl. + * debian/control: added libjson-perl to Build-Depends. + + -- Marc Deslauriers Mon, 19 Sep 2016 08:37:23 -0400 + +mysql-5.6 (5.6.31-0ubuntu0.14.04.2) trusty-security; urgency=medium + + * SECURITY UPDATE: Update to 5.6.31 to fix security issues (LP: #1604796) + - http://www.oracle.com/technetwork/security-advisory/cpujul2016-2881720.html + - CVE-2016-3459 + - CVE-2016-3477 + - CVE-2016-3486 + - CVE-2016-3501 + - CVE-2016-3521 + - CVE-2016-3614 + - CVE-2016-3615 + - CVE-2016-5439 + - CVE-2016-5440 + * debian/patches/fix-man-page-links.patch: removed, upstream. + * debian/patches/arm64_ftbfs_workaround.patch: Work around gcc 4.9 arm64 + optimisation bug. + + -- Marc Deslauriers Thu, 21 Jul 2016 09:15:32 -0400 + +mysql-5.6 (5.6.30-0ubuntu0.14.04.1) trusty-security; urgency=medium + + * SECURITY UPDATE: Update to 5.6.30 to fix security issues (LP: #1572559) + - http://www.oracle.com/technetwork/security-advisory/cpuapr2016v3-2985753.html + - CVE-2016-0639 + - CVE-2016-0640 + - CVE-2016-0641 + - CVE-2016-0642 + - CVE-2016-0643 + - CVE-2016-0644 + - CVE-2016-0646 + - CVE-2016-0647 + - CVE-2016-0648 + - CVE-2016-0649 + - CVE-2016-0650 + - CVE-2016-0655 + - CVE-2016-0661 + - CVE-2016-0665 + - CVE-2016-0666 + - CVE-2016-0668 + - CVE-2016-2047 + + -- Marc Deslauriers Thu, 21 Apr 2016 13:35:32 -0400 + +mysql-5.6 (5.6.28-0ubuntu0.14.04.1) trusty-security; urgency=medium + + * SECURITY UPDATE: Update to 5.6.27 to fix security issues (LP: #1537750) + - http://www.oracle.com/technetwork/topics/security/cpujan2016-2367955.html + - CVE-2016-0503 + - CVE-2016-0504 + - CVE-2016-0505 + - CVE-2016-0546 + - CVE-2016-0595 + - CVE-2016-0596 + - CVE-2016-0597 + - CVE-2016-0598 + - CVE-2016-0600 + - CVE-2016-0606 + - CVE-2016-0607 + - CVE-2016-0608 + - CVE-2016-0609 + - CVE-2016-0610 + - CVE-2016-0611 + * debian/patches/fix_testsuite_date.patch: removed, upstream. + + -- Marc Deslauriers Mon, 25 Jan 2016 12:55:19 -0500 + mysql-5.6 (5.6.27-0ubuntu0.14.04.1) trusty-security; urgency=medium * SECURITY UPDATE: Update to 5.6.27 to fix security issues (LP: #1508441) diff -Nru mysql-5.6-5.6.27/debian/control mysql-5.6-5.6.33/debian/control --- mysql-5.6-5.6.27/debian/control 2014-07-21 10:55:37.000000000 +0000 +++ mysql-5.6-5.6.33/debian/control 2016-09-19 18:00:37.000000000 +0000 @@ -16,6 +16,7 @@ gawk, hardening-wrapper, libaio-dev[linux-any], + libjson-perl, libncurses5-dev (>= 5.0-6), libreadline-dev, libwrap0-dev (>= 7.6-8.3), diff -Nru mysql-5.6-5.6.27/debian/patches/arm64_ftbfs_workaround.patch mysql-5.6-5.6.33/debian/patches/arm64_ftbfs_workaround.patch --- mysql-5.6-5.6.27/debian/patches/arm64_ftbfs_workaround.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/debian/patches/arm64_ftbfs_workaround.patch 2016-07-21 13:15:13.000000000 +0000 @@ -0,0 +1,53 @@ +Author: Robie Basak +Description: Work around gcc 4.9 arm64 optimisation bug +Bug-Ubuntu: https://launchpad.net/bugs/1353729 +Last-Update: 2014-09-17 + +--- a/storage/perfschema/pfs_account.h ++++ b/storage/perfschema/pfs_account.h +@@ -100,7 +100,12 @@ + PFS_account * + find_or_create_account(PFS_thread *thread, + const char *username, uint username_length, +- const char *hostname, uint hostname_length); ++ const char *hostname, uint hostname_length) ++#if defined(__aarch64__) ++ /* Workaround for https://launchpad.net/bugs/1353729 */ ++ __attribute__((optimize("O1"))) ++#endif ++; + + PFS_account *sanitize_account(PFS_account *unsafe); + void purge_all_account(void); +--- a/storage/perfschema/pfs_host.h ++++ b/storage/perfschema/pfs_host.h +@@ -92,7 +92,12 @@ + void cleanup_host_hash(void); + + PFS_host *find_or_create_host(PFS_thread *thread, +- const char *hostname, uint hostname_length); ++ const char *hostname, uint hostname_length) ++#if defined(__aarch64__) ++ /* Workaround for https://launchpad.net/bugs/1353729 */ ++ __attribute__((optimize("O1"))) ++#endif ++; + + PFS_host *sanitize_host(PFS_host *unsafe); + void purge_all_host(void); +--- a/storage/perfschema/pfs_user.h ++++ b/storage/perfschema/pfs_user.h +@@ -93,7 +93,12 @@ + + PFS_user * + find_or_create_user(PFS_thread *thread, +- const char *username, uint username_length); ++ const char *username, uint username_length) ++#if defined(__aarch64__) ++ /* Workaround for https://launchpad.net/bugs/1353729 */ ++ __attribute__((optimize("O1"))) ++#endif ++; + + PFS_user *sanitize_user(PFS_user *unsafe); + void purge_all_user(void); diff -Nru mysql-5.6-5.6.27/debian/patches/fix-man-page-links.patch mysql-5.6-5.6.33/debian/patches/fix-man-page-links.patch --- mysql-5.6-5.6.27/debian/patches/fix-man-page-links.patch 2014-07-21 10:55:37.000000000 +0000 +++ mysql-5.6-5.6.33/debian/patches/fix-man-page-links.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man/mysqltest.1 -+.so man1/mysqltest.1 diff -Nru mysql-5.6-5.6.27/debian/patches/fix_testsuite_date.patch mysql-5.6-5.6.33/debian/patches/fix_testsuite_date.patch --- mysql-5.6-5.6.27/debian/patches/fix_testsuite_date.patch 2015-10-26 14:44:20.000000000 +0000 +++ mysql-5.6-5.6.33/debian/patches/fix_testsuite_date.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -Description: fix test suite failure caused by arbitrary date in the future - no longer being in the future. -Author: Marc Deslauriers -Forwarded: no - -Index: mysql-5.5-5.5.46/mysql-test/t/events_1.test -=================================================================== ---- mysql-5.5-5.5.46.orig/mysql-test/t/events_1.test 2015-10-21 13:26:39.556707402 -0400 -+++ mysql-5.5-5.5.46/mysql-test/t/events_1.test 2015-10-21 13:26:39.552707356 -0400 -@@ -125,7 +125,7 @@ - - create table t_event3 (a int, b float); - drop event if exists event3; --create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); -+create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20251010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); - let $wait_condition=SELECT count(*)=0 from t_event3; - --source include/wait_condition.inc - select count(*) from t_event3; -Index: mysql-5.5-5.5.46/mysql-test/r/events_1.result -=================================================================== ---- mysql-5.5-5.5.46.orig/mysql-test/r/events_1.result 2015-09-18 10:32:54.000000000 -0400 -+++ mysql-5.5-5.5.46/mysql-test/r/events_1.result 2015-10-21 15:17:27.193404864 -0400 -@@ -114,7 +114,7 @@ - drop event if exists event3; - Warnings: - Note 1305 Event event3 does not exist --create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); -+create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20251010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); - select count(*) from t_event3; - count(*) - 0 diff -Nru mysql-5.6-5.6.27/debian/patches/series mysql-5.6-5.6.33/debian/patches/series --- mysql-5.6-5.6.27/debian/patches/series 2015-10-26 14:44:20.000000000 +0000 +++ mysql-5.6-5.6.33/debian/patches/series 2016-07-21 13:15:13.000000000 +0000 @@ -1,8 +1,7 @@ -fix-man-page-links.patch hurd.patch scripts__mysqld_safe.sh__signals.patch disable_tests.patch fix_standalone_tests.patch kfreebsd_tests.patch spelling.patch -fix_testsuite_date.patch +arm64_ftbfs_workaround.patch diff -Nru mysql-5.6-5.6.27/debian/patches/spelling.patch mysql-5.6-5.6.33/debian/patches/spelling.patch --- mysql-5.6-5.6.27/debian/patches/spelling.patch 2015-10-26 14:43:49.000000000 +0000 +++ mysql-5.6-5.6.33/debian/patches/spelling.patch 2016-09-19 12:37:10.000000000 +0000 @@ -3,10 +3,10 @@ Preceeding -> preceding Last-Update: 2012-05-19 Forwarded: no -Index: mysql-5.6-5.6.27/libevent/event.3 +Index: mysql-5.6.33/libevent/event.3 =================================================================== ---- mysql-5.6-5.6.27.orig/libevent/event.3 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/libevent/event.3 2015-10-26 10:43:39.726565357 -0400 +--- mysql-5.6.33.orig/libevent/event.3 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/libevent/event.3 2016-09-19 08:37:08.835152879 -0400 @@ -253,7 +253,7 @@ or .Va EV_WRITE . @@ -16,10 +16,10 @@ .Fn event_set , can provide its callback function with a bitwise-OR of more than one triggered event. -Index: mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_ddl.test +Index: mysql-5.6.33/mysql-test/extra/rpl_tests/rpl_ddl.test =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/extra/rpl_tests/rpl_ddl.test 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_ddl.test 2015-10-26 10:43:39.726565357 -0400 +--- mysql-5.6.33.orig/mysql-test/extra/rpl_tests/rpl_ddl.test 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/extra/rpl_tests/rpl_ddl.test 2016-09-19 08:37:08.835152879 -0400 @@ -98,8 +98,8 @@ # --> less switching of AUTOCOMMIT mode on master side. # @@ -31,10 +31,10 @@ # because the sql error code of the statement might be 0) bug # and these rules are ignored, a following test sequence might earn ugly # effects like failing 'sync_slave_with_master', crashes of the slave or -Index: mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_row_basic.test +Index: mysql-5.6.33/mysql-test/extra/rpl_tests/rpl_row_basic.test =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/extra/rpl_tests/rpl_row_basic.test 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_row_basic.test 2015-10-26 10:43:39.726565357 -0400 +--- mysql-5.6.33.orig/mysql-test/extra/rpl_tests/rpl_row_basic.test 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/extra/rpl_tests/rpl_row_basic.test 2016-09-19 08:37:08.835152879 -0400 @@ -221,7 +221,7 @@ SELECT * FROM t7 ORDER BY C1; @@ -53,10 +53,10 @@ # temprorarily set @@global.slave_exec_mode= 'IDEMPOTENT'; -Index: mysql-5.6-5.6.27/mysql-test/include/wait_until_count_sessions.inc +Index: mysql-5.6.33/mysql-test/include/wait_until_count_sessions.inc =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/include/wait_until_count_sessions.inc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/include/wait_until_count_sessions.inc 2015-10-26 10:43:39.726565357 -0400 +--- mysql-5.6.33.orig/mysql-test/include/wait_until_count_sessions.inc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/include/wait_until_count_sessions.inc 2016-09-19 08:37:08.835152879 -0400 @@ -10,7 +10,7 @@ # 1. We wait for $current_sessions <= $count_sessions because in the use case # with count_sessions.inc before and wait_until_count_sessions.inc after @@ -66,10 +66,10 @@ # sessions at test begin($count_sessions) = m + n # sessions of the previous test which will be soon disconnected = n (n >= 0) # sessions at test end ($current sessions, assuming the test disconnects -Index: mysql-5.6-5.6.27/mysql-test/suite/funcs_1/views/func_view.inc +Index: mysql-5.6.33/mysql-test/suite/funcs_1/views/func_view.inc =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/suite/funcs_1/views/func_view.inc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/suite/funcs_1/views/func_view.inc 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/mysql-test/suite/funcs_1/views/func_view.inc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/suite/funcs_1/views/func_view.inc 2016-09-19 08:37:08.835152879 -0400 @@ -285,7 +285,7 @@ # other interesting value # numbers -> 0 @@ -79,10 +79,10 @@ # FIXME enum, set ?? INSERT INTO t1_values SET my_char_30 = ' ---äÖüß@µ*$-- ', -Index: mysql-5.6-5.6.27/mysql-test/suite/funcs_1/views/views_master.inc +Index: mysql-5.6.33/mysql-test/suite/funcs_1/views/views_master.inc =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/suite/funcs_1/views/views_master.inc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/suite/funcs_1/views/views_master.inc 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/mysql-test/suite/funcs_1/views/views_master.inc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/suite/funcs_1/views/views_master.inc 2016-09-19 08:37:08.835152879 -0400 @@ -545,7 +545,7 @@ # view names are accepted, at creation time, alteration time, # and drop time. @@ -92,10 +92,10 @@ # database name --disable_warnings DROP VIEW IF EXISTS v1 ; -Index: mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_ddl.test +Index: mysql-5.6.33/mysql-test/suite/rpl/t/rpl_ddl.test =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/suite/rpl/t/rpl_ddl.test 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_ddl.test 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/mysql-test/suite/rpl/t/rpl_ddl.test 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/suite/rpl/t/rpl_ddl.test 2016-09-19 08:37:08.835152879 -0400 @@ -13,10 +13,10 @@ # sequences start. # @@ -109,10 +109,10 @@ # because the sql error code of the statement might be 0) bug # and these rules are ignored, a following test sequence might earn ugly # effects like failing 'sync_slave_with_master', crashes of the slave or -Index: mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test +Index: mysql-5.6.33/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test 2016-09-19 08:37:08.835152879 -0400 @@ -239,7 +239,7 @@ UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1; SELECT * FROM t1 ORDER BY a; @@ -122,10 +122,10 @@ # temprorarily set @@global.slave_exec_mode= 'IDEMPOTENT'; --echo **** On Master **** -Index: mysql-5.6-5.6.27/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test +Index: mysql-5.6.33/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test =================================================================== ---- mysql-5.6-5.6.27.orig/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test 2016-09-19 08:37:08.835152879 -0400 @@ -13,10 +13,10 @@ # sequences start. # @@ -139,10 +139,10 @@ # because the sql error code of the statement might be 0) bug # and these rules are ignored, a following test sequence might earn ugly # effects like failing 'sync_slave_with_master', crashes of the slave or -Index: mysql-5.6-5.6.27/sql/abstract_query_plan.cc +Index: mysql-5.6.33/sql/abstract_query_plan.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/abstract_query_plan.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/abstract_query_plan.cc 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/sql/abstract_query_plan.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/abstract_query_plan.cc 2016-09-19 08:37:08.835152879 -0400 @@ -336,7 +336,7 @@ { /* @@ -152,10 +152,10 @@ This operation is therefor not pushable. */ DBUG_PRINT("info", -Index: mysql-5.6-5.6.27/sql/ha_ndbcluster_push.cc +Index: mysql-5.6.33/sql/ha_ndbcluster_push.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/ha_ndbcluster_push.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/ha_ndbcluster_push.cc 2015-10-26 10:43:39.730565406 -0400 +--- mysql-5.6.33.orig/sql/ha_ndbcluster_push.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/ha_ndbcluster_push.cc 2016-09-19 08:37:08.835152879 -0400 @@ -1271,7 +1271,7 @@ if (m_join_scope.contain(referred_table_no)) { @@ -165,11 +165,11 @@ const NdbQueryOperationDef* const parent_op= m_tables[referred_table_no].m_op; DBUG_ASSERT(parent_op != NULL); -Index: mysql-5.6-5.6.27/sql/log_event.cc +Index: mysql-5.6.33/sql/log_event.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/log_event.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/log_event.cc 2015-10-26 10:43:39.730565406 -0400 -@@ -4661,7 +4661,7 @@ +--- mysql-5.6.33.orig/sql/log_event.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/log_event.cc 2016-09-19 08:37:08.839152927 -0400 +@@ -4654,7 +4654,7 @@ if ((error= rows_event_stmt_cleanup(const_cast(rli), thd))) { const_cast(rli)->report(ERROR_LEVEL, error, @@ -178,11 +178,11 @@ "the group log file/position: %s %s", const_cast(rli)->get_group_master_log_name(), llstr(const_cast(rli)->get_group_master_log_pos(), -Index: mysql-5.6-5.6.27/sql/rpl_utility.cc +Index: mysql-5.6.33/sql/rpl_utility.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/rpl_utility.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/rpl_utility.cc 2015-10-26 10:43:39.730565406 -0400 -@@ -1619,7 +1619,7 @@ +--- mysql-5.6.33.orig/sql/rpl_utility.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/rpl_utility.cc 2016-09-19 08:37:08.839152927 -0400 +@@ -1644,7 +1644,7 @@ void Deferred_log_events::rewind() { /* @@ -191,11 +191,11 @@ deferred because of slave side filtering. */ if (!is_empty()) -Index: mysql-5.6-5.6.27/sql/sql_optimizer.cc +Index: mysql-5.6.33/sql/sql_optimizer.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/sql_optimizer.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/sql_optimizer.cc 2015-10-26 10:43:39.734565455 -0400 -@@ -971,7 +971,7 @@ +--- mysql-5.6.33.orig/sql/sql_optimizer.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/sql_optimizer.cc 2016-09-19 08:37:08.839152927 -0400 +@@ -973,7 +973,7 @@ } } } @@ -204,10 +204,10 @@ (simple_order || skip_sort_order)) // which is possibly skippable { if (test_if_skip_sort_order(tab, order, m_select_limit, false, -Index: mysql-5.6-5.6.27/sql/sql_rewrite.cc +Index: mysql-5.6.33/sql/sql_rewrite.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/sql_rewrite.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/sql_rewrite.cc 2015-10-26 10:43:39.734565455 -0400 +--- mysql-5.6.33.orig/sql/sql_rewrite.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/sql_rewrite.cc 2016-09-19 08:37:08.839152927 -0400 @@ -40,7 +40,7 @@ @@ -226,11 +226,11 @@ @param str The string to append to @param comma Prepend a comma? -Index: mysql-5.6-5.6.27/sql/sql_yacc.cc +Index: mysql-5.6.33/sql/sql_yacc.cc =================================================================== ---- mysql-5.6-5.6.27.orig/sql/sql_yacc.cc 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/sql_yacc.cc 2015-10-26 10:43:39.738565503 -0400 -@@ -39094,7 +39094,7 @@ +--- mysql-5.6.33.orig/sql/sql_yacc.cc 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/sql_yacc.cc 2016-09-19 08:37:08.843152974 -0400 +@@ -37176,7 +37176,7 @@ { /* Not in trigger assigning value to new row, @@ -239,11 +239,11 @@ */ my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; -Index: mysql-5.6-5.6.27/sql/sql_yacc.yy +Index: mysql-5.6.33/sql/sql_yacc.yy =================================================================== ---- mysql-5.6-5.6.27.orig/sql/sql_yacc.yy 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/sql/sql_yacc.yy 2015-10-26 10:43:39.738565503 -0400 -@@ -14585,7 +14585,7 @@ +--- mysql-5.6.33.orig/sql/sql_yacc.yy 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/sql/sql_yacc.yy 2016-09-19 08:37:08.847153022 -0400 +@@ -14596,7 +14596,7 @@ | SESSION_SYM '.' { $$=OPT_SESSION; } ; @@ -252,7 +252,7 @@ option_value_following_option_type: internal_variable_name equal set_expr_or_default { -@@ -14602,7 +14602,7 @@ +@@ -14613,7 +14613,7 @@ { /* Not in trigger assigning value to new row, @@ -261,7 +261,7 @@ */ my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; -@@ -14610,7 +14610,7 @@ +@@ -14621,7 +14621,7 @@ } ; @@ -270,10 +270,10 @@ option_value_no_option_type: internal_variable_name equal { -Index: mysql-5.6-5.6.27/storage/myisam/mi_rnext.c +Index: mysql-5.6.33/storage/myisam/mi_rnext.c =================================================================== ---- mysql-5.6-5.6.27.orig/storage/myisam/mi_rnext.c 2015-10-26 10:43:39.742565552 -0400 -+++ mysql-5.6-5.6.27/storage/myisam/mi_rnext.c 2015-10-26 10:43:39.738565503 -0400 +--- mysql-5.6.33.orig/storage/myisam/mi_rnext.c 2016-09-19 08:37:08.847153022 -0400 ++++ mysql-5.6.33/storage/myisam/mi_rnext.c 2016-09-19 08:37:08.847153022 -0400 @@ -65,7 +65,7 @@ Normally SQL layer would never request "search next" if "search first" failed. But HANDLER may do anything. diff -Nru mysql-5.6-5.6.27/debian/rules mysql-5.6-5.6.33/debian/rules --- mysql-5.6-5.6.27/debian/rules 2015-10-26 19:52:53.000000000 +0000 +++ mysql-5.6-5.6.33/debian/rules 2016-09-19 13:32:43.000000000 +0000 @@ -141,7 +141,6 @@ override_dh_auto_test: @echo "RULES.$@" ifeq ($(findstring nocheck,$(DEB_BUILD_OPTIONS)),) - cp unittest/unit.pl $(builddir)/unittest/ cp -r mysql-test/* $(builddir)/mysql-test/ cp -r sql/share/* $(builddir)/sql/share/ cp -r scripts/*sql $(builddir)/scripts/ diff -Nru mysql-5.6-5.6.27/Docs/ChangeLog mysql-5.6-5.6.33/Docs/ChangeLog --- mysql-5.6-5.6.27/Docs/ChangeLog 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/Docs/ChangeLog 2016-08-26 11:32:53.000000000 +0000 @@ -1,2061 +1,771 @@ -commit 0f6cfdf6a16c7c5806786a194cd4f40a2eb3a9e1 -Author: Robert Golebiowski -Date: Fri Sep 18 11:18:25 2015 +0200 +commit 259f2ca9477c92b6e9a91cb37dac19d24ffcacd9 +Author: Terje Rosten +Date: Fri Aug 26 11:26:23 2016 +0200 - Updated yassl to yassl-2.3.8 - - (cherry picked from commit 7f9941eab55ed672bfcccd382dafbdbcfdc75aaa) - -commit 1df863e9e8e43e3a96fd98a28cc3194449cceb94 -Author: Robert Golebiowski -Date: Fri Sep 18 10:35:09 2015 +0200 - - Bug #21025377 CAN'T CONNECT TO SSL ENABLED SERVER FIRST 30 SEC AFTER - INITIAL STARTUP - - Updated yassl to yassl-2.3.7e - - (cherry picked from commit 6e21c8c04b922bdb60b6a7c174709d2e1bdd3618) - -commit 7516bc111acac1292ca0fbfd97ff07970fba064e -Author: Venkatesh Duggirala -Date: Fri Sep 11 18:56:07 2015 +0530 - - Bug#21816399 5.6.24: LOST DATA DURING MASTER RESTART IF PARTIAL TRANSACT HAS BEEN DOWNLOADED - - Problem: If dump thread is killed (during shutdown/explicit kill) during - dumping a non-active binary log, events in that binary log are getting - skipped completely and not getting replicated to slave. - - Analysis: During bug#19975697 fix, we have identified a case where a dump - thread is unnecessarily looping through a binary log file even if it is - in killed state. Problem is big enough if the binary log file is huge - Hence we fixed it by adding thd->killed flag check in while condition. - But after the while loop is exited, it was not checked whether while loop - was broken due to thd->killed condition or not. Earlier the code after - the while loop assumes that the loop processes full binary log file and - dump thread can be safely moved to next binary log. - But with this new condition, it is not the case. - - Fix: A condition "if (thd->killed)" after the while loop and should exit - the dump thread without doing any work. - - (cherry picked from commit 97d9f26d153e1aa688a5328c5e691953a2761e4d) - -commit fbdcb9954d0e36be51a6b559f991e3601f926695 -Author: Lars Tangvald -Date: Fri Sep 4 15:15:10 2015 +0200 - - Created default.release for firewall plugin so tests will be run for release build - - (cherry picked from commit 88db0500a0e913d65164422b01c9da67350eb4f3) - -commit 7f8acabfca414a3e03a727f7fc7be2703168425e -Author: Balasubramanian Kandasamy -Date: Fri Sep 4 17:12:02 2015 +0530 - - Bug#21775221 ADD NUMACTL-DEVEL AS BUILDREQ TO RPM SPEC FILES - - Description: - - Set Numa Mempolicy for optimum mysqld performance added - libnuma.so as build prerequisite on Linux. - - To build with support for this feature numactl devel files are required. - - Fix: - - Added numactl-devel as build pre-requisite for OL/RHEL/Fedora/docker - and libnuma-devel for SLES in the spec file. + Merge branch 'mysql-5.5' into mysql-5.6 - (cherry picked from commit 18fbfc582f9490d6632c0152d51a3ad19f9660a0) + (cherry picked from commit fa1aafe9819cb2d9389968f95f91f00f58997df4) -commit a5c8eb8cb78983413b29c4e05f96597151c1994a -Author: Tor Didriksen -Date: Fri Sep 4 13:36:18 2015 +0200 +commit cd9aa1d8f0d18c9cabe763ed4dfef17f7f6bd62e +Author: Sivert Sorumgard +Date: Wed Aug 24 14:03:11 2016 +0200 - Bug#21785074 BUILD BREAKS IF COMPILED AGAINST OLDER NUMACTL HEADERS + Merge branch 'mysql-5.5' into mysql-5.6 - Fix: extend the cmake check with new numa features, - do not set HAVE_LIBNUMA if built against older numa headers. + (cherry picked from commit 3084723f76d19990f3573c5ec614709f567df78b) -commit 40b33206d217239a5f4e4113d487010c851554ef -Author: Venkatesh Duggirala -Date: Fri Sep 4 11:26:53 2015 +0530 +commit 4dec730874c3669d3dfe6b42e8e10790993ab69b +Author: Jon Olav Hauglid +Date: Fri Aug 19 09:16:27 2016 +0200 - Bug #19286708 REPLICATION BROKEN AFTER CREATION OF SCHEDULED EVENTS + Merge branch 'mysql-5.5' into mysql-5.6 - Reverting patch due to a regression + (cherry picked from commit 3682c8928e0b538739ca3d7c93b74e3bd2f9a001) -commit 4facaa3572c0f907d922c53730c08ad68cc60054 -Author: Balasubramanian Kandasamy -Date: Thu Sep 3 17:52:13 2015 +0530 +commit 6c4c5c8cf205c4fae0182ce8e2c9f92a8bd43321 +Author: Terje Rosten +Date: Thu Aug 18 16:49:08 2016 +0200 - Bug#21775221 ADD NUMACTL-DEVEL AS BUILDREQ TO RPM SPEC FILES - - Description: - - Set Numa Mempolicy for optimum mysqld performance added - libnuma.so as build prerequisite on Linux. - - To build with support for this feature numactl devel files are required. - - Fix: - - Added numactl-devel as build pre-requisite for OL/RHEL/Fedora/docker - and libnuma-devel for SLES in the spec file. + Merge branch 'mysql-5.5' into mysql-5.6 - (cherry picked from commit 45d038b07faf7fd2d508fff77ed9322c3a3c3f0c) + (cherry picked from commit b91d851f82ba70bf775422d42c0e853f9116cbb1) -commit bb6b072e6a7689c2b7c642ba1f35655090b6b551 -Author: Tor Didriksen -Date: Thu Sep 3 10:16:24 2015 +0200 +commit e945f3b6e99d23c89dc9580885e4bf89ab006ccf +Author: Deepa Dixit +Date: Fri Aug 5 16:09:51 2016 +0530 - Bug#21774859 CMAKE CHECKS FOR NUMA SUPPORT TOO WEAK - - The check for numa availability implemented by the patch for - Bug #18871046 SET NUMA MEMPOLICY FOR OPTIMUM MYSQLD PERFORMANCE - was wrong: it forgot to restore CMAKE_REQUIRED_LIBRARIES after the check. + Bug#22818781: EXPLAIN_JSON_VALIDATE.TEST FAILS ON WINDOWS PRE-PUSH TESTING - This affects all subsequent platform feature tests that rely on cmakes - CHECK_CXX_SOURCE_COMPILES. In particular: on platforms which do not have - numa support, the test for 'HAVE_PEERCRED' will also fail, and the - 'auth_socket' plugin will not be built. - -commit 56c2c3d4ecdab0b2ab1bab8abd01c5de509e6550 -Merge: 928440d 282ed17 -Author: Murthy Narkedimilli -Date: Mon Aug 31 20:43:30 2015 +0200 - - Empty version change upmerge - -commit 282ed178bb3e456cbdbc6b98032c36ccaa867f8f -Author: Murthy Narkedimilli -Date: Mon Aug 31 20:36:03 2015 +0200 - - Raise version number after cloning 5.5.46 - -commit 928440d4bb1c0f436dd4a23bc95fd7d416a3350b -Author: Ajo Robert -Date: Mon Aug 31 15:08:59 2015 +0530 - - Revert "Bug #20201006 spamming show processlist prevents old" + Issue: + ------ + The explain_json_validate test calls a python script which accepts arguments. + If the arguments are passed with wildcard characters, Windows cannot parse + them and hence the test fails. - This reverts commit 883e25e945f304f05130ee541f7962004ed9aa90. + Fix: + ---- + The fix involved adding an additional check if the test was running on Windows + so that the arguments can be parsed correctly. + Also, Python is not installed on Windows by default, and therefore the + script is now ported to perl. Before the test used to be skipped if the machine + did not have either Python or JSON support, but now it fails if it does not + have JSON or perl support. + Since the python script has been removed, all the tests which were using that + script are now using the perl script. + + Reviewed-by: Horst Hunger + Reviewed-by: Guilhem Bichot + RB: 12537 -commit 0eb0cf1dbe3b10724b4fdfe80298fc51f9a4c8c9 -Author: Jon Olav Hauglid -Date: Tue Jun 30 15:17:57 2015 +0200 +commit 63a16c346f535990309f9985ffc4aabf1fe6cd5e +Author: Shaohua Wang +Date: Fri Aug 5 09:05:18 2016 +0200 - Bug#21682439: BACKPORT OF BUG#20928289 TO MYSQL 5.6 - - Backport from mysql-5.7 to mysql-5.6 of: + BUG#23760086 INNODB: ASSERTION FAILURE: MACH0DATA.IC:56:(N | 0XFFFFUL) + <= 0XFFFFUL - Bug#20928289: DEFAULT CMAKE EXCLUDES UTF8_5624_1 CHARSET, - REQUIRED FOR MAIN.CTYPE_LDML + Analysis: In row_log_table_delete(), extern size could be greater + than 2 bytes int if there are enough index on blob columns. - The problem was that on platforms where char is unsigned, - the server was unable to parse collation defintions which - included non-7bit ASCII characters. Affected platforms - include ARM and PowerPC. + Solution: Use 4 bytes int other than 2 bytes for extern size. - The reason was that the parsing code in once place used - '> 0' to check if a character was 7 bit or not. This - will fail if the char is unsigned. - - This patch fixes the problem by rewriting the check to - check the MSB explicitly. - - No test added as coverage is already included by - existing tests - e.g. main.ctype_ldml. - - This patch is a modified version of the contributed patch. - - (cherry picked from commit d59ac89547a75e1a422ac4e806fe7b853489764d) + Reviewed-by: Marko Mäkelä + RB: 13573 -commit 5a8d80e69383da40bd7fd24d99b1a209df64d0b2 -Author: Aakanksha Verma -Date: Fri Aug 28 16:46:32 2015 +0530 +commit e20773a9cc7f5a0754fd0448836af1f37297cfdb +Merge: 8a9431a b3e3e9c +Author: Neha Kumari +Date: Fri Aug 5 12:34:21 2016 +0530 - Bug#21288106 - MISSING SANITY CHECK FOR STRDUP() IN HTTP.C PLUS POTENTIAL PROBLEM - - Sanity checks were missing in memcached code after memory allocations. - - FIX - - Put proper checks after memory alloction.MEMORY LEAK. * - - Reviewed by :Jimmy - RB :10036 + Merge branch 'mysql-5.5' into mysql-5.6 -commit 0df8371bdd2c3064694aa5b4e2335179e6eafcca -Author: Sujatha Sivakumar -Date: Fri Aug 28 12:05:29 2015 +0530 +commit b3e3e9c7ed5526dff4f0bc222e674239b352ee27 +Author: Neha Kumari +Date: Fri Aug 5 12:17:11 2016 +0530 - Bug#20901025: SLAVE ASSERTION IN UNPACK_ROW WITH ROLLBACK TO - SAVEPOINT IN ERROR HANDLER - - Problem: - ======= - - When issuing a ROLLBACK TO SAVEPOINT within an error - handler, the slave asserts as follows: + Bug#23540182:MYSQLBINLOG DOES NOT FREE THE EXISTING CONNECTION BEFORE OPENING NEW REMOTE ONE - mysqlcom-pro-5.6.24/sql/rpl_record.cc:246: - int unpack_row(const Relay_log_info, TABLE, uint, - const uchar, const MY_BITMAP, const uchar, ulong, const - uchar): Assertion `table_found' failed. + It happens when you are trying to read two or more log files from a + remote server using mysqlbinlog utility. - Analysis: - ======== + The reason for this is no matching mysql_close() that concludes the + life time of 'mysql' struct describing connection to the server. + This happens when mysqlbinlog is invoked with connecting to the server + and requesting more than one binlog file. In such case + dump_remote_log_entries() keeps calling safe_connect() per eachfile, + never caring to invoke mysql_close(). Only the final safe_connect()'s + allocation effect are cleaned by the base code. + That is with 2 files there's one 'mysql' connection descriptor struct + uncleaned/deallocated. - The above assert is caused in two cases. - - CASE 1: - SAVEPOINT and ROLLBACK TO SAVEPOINT are inside a trigger and - followed by other DML statements. - - SAVEPOINT, ROLLBACK TO SAVEPOINT statements are logged into - binary log as Query_log_events. - Query_log_event::do_apply_event() wipes out table map. - Events that follow the above Query_log_event will not find - table map event and it results in the above assertion. - - CASE 2: - - SAVEPOINT and ROLLBACK TO SAVEPOINT are inside a trigger and - and they does not follow with any DML statement. - - In the above scenario On master during execution of - savepoint inside the trigger - "mysql_bin_log.write_event(&qinfo)" is called, which intern - invokes thd->binlog_flush_pending_rows_event() call with - "end_stmt" = false. This causes the peding event to be flushed - to the IO_CACHE without a STMT_END_F flag. Since it does't - follow with any DML stements no proper clean up is done. i.e - table maps are not cleared this causes the next query that - follows to be logged as part of query1 without its own table - map event resulting in same assert as mentioned in the bug. + We are backporting the bug 21255763 (pushed in mysql-trunk) + in the earlier version of MySQL starting from 5.5 to 5.7. + which was pushed in mysql-trunk. Fix: - ==== - - When a SAVEPOINT is executed inside a stored - function/trigger we force the pending event to be flushed - with a STMT_END_F flag and clear the table maps as well to - ensure that following DMLs will have a clean state to start - with. In the same way when we are rolling back to a - SAVEPOINT we should not only set the position back to - SAVEPOINT but also we must ensure that the same clean state - is preserved. In order to do that we clean the table maps - during rolling back to savepoint. + Invoke mysql_close() just before mysql_init() in safe_connect() + defined in mysqlbinlog.cc. That makes possibly previously used 'mysql' be + reclaimed prior a new one is allocated. -commit ec4367058a9ba8e176e864160f729bedff255dba -Author: Gleb Shchepa -Date: Fri Aug 28 02:49:33 2015 +0400 +commit 8a9431a180225f1aeb8238ffcc1a6deebfba1f25 +Merge: c32616e 3cde802 +Author: Kailasnath Nagarkar +Date: Thu Aug 4 12:50:48 2016 +0530 - Bug #17865675: REGRESSION: EXPLAIN: FAILURE BELOW ITEM_FUNC_GROUP_CONCAT::PRINT - - The server failed on EXPLAIN of some GROUP_CONCAT() expressions. - - The fix consists of two parts. - - The 1st one (item_sum.{h,cc}) simplifies the code base by the removal of - superfluous Item_sum::orig_args and Item_sum::tmp_orig_args fields. - - The 2nd one (item.{h,cc}) improves Item_field::print() to output column - names with 3D-qualified identifiers: - .. instead of 1D identifiers - (). - -commit e5f8dfb230f884d75d3f9effe7fa3fc4f7fe02ce -Author: Sujatha Sivakumar -Date: Thu Aug 27 12:22:06 2015 +0530 + Merge branch 'mysql-5.5' into mysql-5.6 - Bug#20805298: BINLOG_ERROR_ACTION DOESN'T HANDLE SOME - FAILURES DURING BINLOG ROTATION - - Analysis: - ======== - In case of hardware errors in binlog partition during binlog - rotate, we can see the following error being reported. - - [ERROR] The server was unable to create a new log file. An - incident event has been written to the binary log which will - stop the slaves. - [ERROR] Can't generate a unique log-filename - master-bin.(1-999) - - All replicas break either due to seeing incident event or - simply because the dump thread cannot access binlog - partition. binlog_error_action was developed for these - purposes (i,e; to avoid server accepting writes even though - binlog writes are failing), but it doesn't handle the above - case. - - Fix: - === - An error handler has been added in such a way that, on - hardware failure during rotate, it will do the specific - action defined as part 'binlog_error_action' variable. - Also incident event will not be written to the binary log - in the above mentioned scenario. - -commit cd965559549f7496dda22295aaf6fcebc16bdf10 -Author: Kevin Lewis -Date: Mon Aug 24 16:09:04 2015 -0500 +commit 3cde80250f0592cf4270986f28946fdb1d440fc4 +Author: Kailasnath Nagarkar +Date: Thu Aug 4 12:49:50 2016 +0530 - Bug#19206671: - TRX_SYS_READ_PERTABLE_FILE_FORMAT_ID() REPORTS INCORRECT FILE FORMAT + Bug #19984392 : MEDIUMINT: STACK BUFFER OVERFLOW IN PROTOCOL_TEXT::STORE_LONG - Approved in rb#10041 by Marko Mäkelä and Sahil Binani + Reverting the patch due to some issues. -commit 51c880be9cff5cf9a272722050dd8ecf1fed537c -Merge: a503c95 d7a8779 -Author: Balasubramanian Kandasamy -Date: Wed Aug 26 19:32:25 2015 +0200 +commit c32616e41ad7b4f5dbe5fbdee44fd8be686f8d04 +Merge: ee675f2 c3743ff +Author: Kailasnath Nagarkar +Date: Wed Aug 3 12:57:38 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit d7a8779d314734ec3d8561444cab51278198c824 -Author: Balasubramanian Kandasamy -Date: Wed Aug 26 19:29:00 2015 +0200 - - Bug#21527467 - RPM SCRIPTS FAIL WITH MULTIPLE DATADIR - -commit a503c9559ce7d002810eefac7a73b6311e687f96 -Author: Venkatesh Duggirala -Date: Wed Aug 26 15:12:56 2015 +0530 +commit c3743ff9b7813e9942d11ae8856a1732f830c941 +Author: Kailasnath Nagarkar +Date: Wed Aug 3 12:54:58 2016 +0530 - BUG#16418100: ERROR "WHEN GTID_NEXT IS SET TO A GTID" ROW BASED REPLICATION + Bug #19984392 : MEDIUMINT: STACK BUFFER OVERFLOW IN PROTOCOL_TEXT::STORE_LONG - Fixing post push pb2 failure (should add have_debug.inc) - -commit 5b8da621311ae019cf3335b7a8af41aa11341bbb -Author: Nisha Gopalakrishnan -Date: Sat Aug 22 18:26:28 2015 +0530 - - BUG#21473602: REDUNDANT CODE IN THD::RESET_FOR_NEXT_COMMAND() + ISSUE: Queries with mediumint as column when operated with + long long type of data results in buffer overflow in + store_long function. - Note - ==== - This a code cleanup to remove the redundant lines of - code to reset the binary log position in the function - 'THD::reset_for_next_command()'. - -commit db632390886e09a62279ec30a8e210ec35eb8efe -Author: Venkatesh Duggirala -Date: Wed Aug 26 12:12:42 2015 +0530 - - Bug#20198490 : LOWER_CASE_TABLE_NAMES=0 ON WINDOWS LEADS TO PROBLEMS + The merging rule specified for (MYSQL_TYPE_LONGLONG + MYSQL_TYPE_INT24) is MYSQL_TYPE_LONG. Due to this store_long + function was getting called which resulted in buffer overflow. + + SOLUTION: + The correct merging rule for (MYSQL_TYPE_LONGLONG, + MYSQL_TYPE_INT24) should be MYSQL_TYPE_LONGLONG. + So, instead of function store_long, function store_longlong + is called which correctly handles the type MYSQL_TYPE_LONGLONG. - Fixing post push pb2 failure + External Bug #23645238 is a duplicate of this issue. -commit f0592dc08e13d31e7f39283e5b67074e23c3b993 -Merge: a16946c d25487e -Author: Nisha Gopalakrishnan -Date: Tue Aug 25 14:26:52 2015 +0530 +commit ee675f2d77915b7ebc55cd7e90365581261f90ff +Merge: 6a9abb6 2a774df +Author: Sreeharsha Ramanavarapu +Date: Wed Aug 3 09:59:37 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit d25487ea422cca759845123282dff3e5f027c656 -Author: Nisha Gopalakrishnan -Date: Tue Aug 25 14:25:46 2015 +0530 - - BUG#20449914: HANDLE_FATAL_SIGNAL (SIG=11) IN - FIELD_ITERATOR_TABLE::END_OF_FIELDS - - Note: This a backport of the patch for bug#19894987 - to MySQL-5.5 - -commit a16946c41d624c66b39028bf9f7336291055404f -Author: Venkatesh Duggirala -Date: Tue Aug 25 09:12:33 2015 +0530 - - BUG#16418100 ERROR "WHEN GTID_NEXT IS SET TO A GTID" ROW BASED REPLICATION - - Problem & Analysis: - =================== - When relay log info repository is configured to be persisted in a - table, it is updated when transaction commits or explicit flush is called, - like on relay log rotate. If a transaction that uses non-transactional - engine is split across multiple relay logs, on relay log flush - it will be partially committed. If GTID_MODE=ON and when partial transaction - in first relay log is committed, it uses the current GTID value and sets - GTID value to UNDEFINED GROUP. Hence it causes 'ER_GTID_NEXT_TYPE_UNDEFINED_GROUP' - error when it is trying to commit the rest of the transaction. - It also causes many other problems if the repository is updated in between - the transaction and it should be avoided. - - Fix: relay log info repository should be updated on relay log - rotate. But when the transaction is split across two relay logs, - update the repository will cause unexpected results and should - be postponed till the 'commit' of the transaction is executed. - - Introduced a flag that set to 'true' when this type of 'forced flush'(at the - time of rotate relay log) is postponed due to transaction split - across the relay logs. And the flag will be checked in flush_info function - to see if there is a flush that got postponed earlier. If so, it will - force the flush now irrespective of sync_relay_log_info value. - -commit b59cf7ee1ad94317b7b2013f541f49c54aebfbd0 +commit 2a774df598b8651897a4394e20ca2bfac6de2512 Author: Sreeharsha Ramanavarapu -Date: Sun Aug 23 08:32:58 2015 +0530 +Date: Wed Aug 3 09:58:36 2016 +0530 - Bug #20229614 : OR CONDITIONS ON MULTI-COLUMN INDEX MAY NOT - USE ALL INDEX COLUMNS TO FILTER ROWS + Bug #24380263: INCORRECT BEHAVIOR WITH PARAMETER AND + DERIVED TABLE IN JOIN ISSUE: ------ - While optimizing a range scan for the OR-operator, key_or - incorrectly assumes an out-of-memory situation. This in turn - results in an incomplete condition being considered for the - query plan and gives an incorrect row estimate. Hence the - over-estimation of the number of qualifying rows. - + This problem occurs under the following conditions: + 1) A parameter is used in the select-list of a derived table. + 2) The derived table is part of a JOIN. SOLUTION: --------- - In key_or(), a key condition is cloned if it's already in - use in some other condition. In this case NULL should be - returned only if allocation fails. - - The check of key_count > 0 was originally added as part of - Bug #4157. This was done to check the key_count after the - swap of keys. Here changing the "||" to "&&" ensures that - when the new key_count is greater than 0, there will be - an attempt to clone the tree. - - This also exposes a different issue. When two SEL_ARG - predicates are "Or-ed" together, i.e. combined into a - common OR expression, the case when either predicate was of - the type ALWAYS, i.e. unable to reject any rows, was not - handled. When key_or tries to clone a SEL_ARG object of the - type ALWAYS, it results in a failed assertion. - - This is fixed by treating ALWAYS SEL_ARG's similar to NULL - SEL_ARG's. If either SEL_ARG type is ALWAYS, return it and - release the reference to other one. The logic is similar to - the inference TRUE or P => P. - -commit d6007d76d0034ef823ed0a5df72f1b92a0fc5766 -Author: Ajo Robert -Date: Fri Aug 21 18:17:06 2015 +0530 - - Bug #20201006 spamming show processlist prevents old - connection threads from cleaning up. - - Post push test fix. - -commit 6fd252159923a896d163c01f8f4dc01d6d7bffaa -Merge: c102e4d ec58c25 -Author: Arun Kuruvila -Date: Fri Aug 21 08:39:13 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit ec58c25e8d29220a05236208d13dc9e2b0b4fc9d -Author: Arun Kuruvila -Date: Fri Aug 21 08:35:42 2015 +0530 - - Bug#20198490 : LOWER_CASE_TABLE_NAMES=0 ON WINDOWS LEADS TO - PROBLEMS - - Description:- Server variable "--lower_case_tables_names" - when set to "0" on windows platform which does not support - case sensitive file operations leads to problems. A warning - message is printed in the error log while starting the - server with "--lower_case_tables_names=0". Also according to - the documentation, seting "lower_case_tables_names" to "0" - on a case-insensitive filesystem might lead to index - corruption. - - Analysis:- The problem reported in the bug is:- - Creating an INNODB table 'a' and executing a query, "INSERT - INTO a SELECT a FROM A;" on a server started with - "--lower_case_tables_names=0" and running on a - case-insensitive filesystem leads innodb to flat spin. - Optimizer thinks that "a" and "A" are two different tables - as the variable "lower_case_table_names" is set to "0". As a - result, optimizer comes up with a plan which does not need a - temporary table. If the same table is used in select and - insert, a temporary table is needed. This incorrect - optimizer plan leads to infinite insertions. - - Fix:- If the server is started with - "--lower_case_tables_names" set to 0 on a case-insensitive - filesystem, an error, "The server option - 'lower_case_table_names'is configured to use case sensitive - table names but the data directory is on a case-insensitive - file system which is an unsupported combination. Please - consider either using a case sensitive file system for your - data directory or switching to a case-insensitive table name - mode.", is printed in the server error log and the server - exits. - -commit c102e4d40769466b7990c08d3ac1bfb9a01fd66e -Merge: 883e25e 60a9535 -Author: Lars Tangvald -Date: Wed Aug 19 14:19:48 2015 +0200 - - Merge branch 'mysql-5.5' into mysql-5.6 - - Change to default Docker config for all versions - -commit 60a95351c75e2df5c5957f3a11bda968283a6aa6 -Author: Lars Tangvald -Date: Wed Aug 19 14:17:50 2015 +0200 - - Small change to default config for Docker-specific rpm package - Syncs "official" and our own Docker images - -commit 883e25e945f304f05130ee541f7962004ed9aa90 -Author: Ajo Robert -Date: Wed Aug 19 16:13:45 2015 +0530 - - Bug #20201006 spamming show processlist prevents old - connection threads from cleaning up. - - Analysis - -------- - Issue here is, delay in connection cleanup for which global - connection counter is already decremented, makes room for new - connections. Hence more than expected connections are observed in - the server. - - Connections running statement "SHOW PROCESSLIST" or "SELECT on - INFORMATION_SCHEMA.PROCESSLIST" acquires mutex LOCK_thd_remove - for reading information of all the connections in server. - Connections in cleanup phase, acquires mutex to remove thread from - global thread list. Many such concurrent connections increases - contention on mutex LOCK_thd_remove. - - In connection cleanup phase, connection count is decreased first - and then the thd is removed from global thd list. This order - makes new connection (above max_connections) possible while - existing connections removal is still pending because of - mutex LOCK_thd_remove. - - Fix: - --- - In connection clean phase, now first thd is removed from the - global thd list and then the global connection count is - decremented. - -commit 1dbe2bcee728a6e4f126d66d5a159fae263007eb -Author: Venkatesh Duggirala -Date: Tue Aug 18 17:29:02 2015 +0530 - - BUG#20928790 SHOW BINLOG EVENTS COMPLETELY LOCKS DOWN WRITES TO BINLOG, HENCE TRANSACTIONS. - Problem: While a `SHOW BINLOG EVENTS` is executing, any parallel transaction - is blocked. - - Analysis: - ======== - - In the good old days, replication was coded such that every access to the - binlog was protected by a mutex. So `Show binlog events` also acquires - LOCK_log mutex and loops through the file to print the events in order not - to get conflicts with any ongoing operations. While this operation is happening, - all binlog write operation which are trying to acquire LOCK_log mutex are blocked. - Hence all the parallel transactions are blocked. - - When 'show binlog events' opens the file to read the events from it, - the file is locked and if there is parallel purge operation to delete - this file that operation will fail with a warning that "file 'xyz' was - not purged because it was being read by another thread". Hence - server does not require to acquire a lock while iterating through - the events in the file. - - Fix: - ==== - Acquire LOCK_log only for the duration to calculate the log's end - position. LOCK_log should be acquired even while we are checking - whether the log is active log or not. Once 'end_pos' is calculated - for the given binary log, the events are displayed till that position. - Since we do not acquire LOCK_log (acquired only for less duration), - parallel transactions will not be blocked for large duration. - -commit 84f92327ffc567b2fcb9fede9cbbb7e6a1c93ea1 -Merge: 1b2f074 8e5de32 -Author: Shishir Jaiswal -Date: Tue Aug 18 12:25:36 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 8e5de3276063c3b8edfa242ee6df49e73bd4cfc4 -Author: Shishir Jaiswal -Date: Tue Aug 18 12:24:27 2015 +0530 - - Bug #16171518 - LOAD XML DOES NOT HANDLE EMPTY ELEMENTS - - DESCRIPTION - =========== - Inability of mysql LOAD XML command to handle empty XML - tags i.e. . Also the behaviour is wrong - and (different than above) when there is a space in empty - tag i.e. - - ANALYSIS - ======== - In read_xml() the case where we encounter a close tag ('/') - we're decreasing the 'level' blindly which is wrong. - Actually when its an without-space-empty-tag (succeeding - char is '>'), we need to skip the decrement. In other words - whenever we hit a close tag ('/'), decrease the 'level' - only when (i) It's not an (without space) empty tag i.e. - or, (ii) It is of format - - FIX - === - The switch case for '/' is modified. We've removed the - blind decrement of 'level'. We do it only when its not an - without-space-empty-tag. Also we are setting 'in_tag' to - false to let program know that we're done reading current - tag (required in the case of format ) - -commit 1b2f074c58299507bc4bbd3bdab5628a6500e9ef -Merge: 65b12a2 447ee4b -Author: Karthik Kamath -Date: Tue Aug 18 10:39:07 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 447ee4b352ab0601f38e9befda3338e1e63ec608 -Author: Karthik Kamath -Date: Tue Aug 18 10:38:06 2015 +0530 - - BUG#11754258: INCORRECT ERROR MESSAGE WHEN CREATING UNSAFE - VIEW - - - It appears that the code refactoring done as part of the - patch for the MySQL BUG#11749859 fixed this issue. This - issue is not reproducible on MySQL 5.5+ versions now. - As part of this patch, the test file "mysqldump.test" has - been updated to remove the comment which was referring to - the bug and also the line which suppresses the warning. - -commit 65b12a2b55ad49a5718c373d515b17024fe96522 -Author: Kristofer Pettersson -Date: Mon Aug 17 12:05:57 2015 +0200 - - Bug#21335271 CANNOT SET MYSQL_FIREWALL_TRACE AT RUNTIME - - (backport from 5.7) - The mysql_firewall_trace variable could be updated at runtime - because the plugin hijacked the update command without setting - the new value. - -commit 581ecda9c8eb039a65699fa43639ea2d6bdaa389 -Merge: e480ac6 43301e4 -Author: Mithun C Y -Date: Mon Aug 17 15:28:18 2015 +0530 - - NULL-Merge branch 'mysql-5.5' into mysql-5.6 - -commit 43301e42ef18b9898f1e8d94e9c9a6ac31f3efd5 -Merge: e242946 9d9a929 -Author: Mithun C Y -Date: Mon Aug 17 15:26:01 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 - -commit 9d9a929f0b016ebab7254f6e47da509e71d509f4 -Author: Mithun C Y -Date: Mon Aug 17 15:23:47 2015 +0530 - - Bug #21350175: SUBQUERIES IN PROCEDURE CLAUSE OF SELECT STATEMENT CAUSES SERVER FAILURES. - - Analysis : - ========== - During JOIN::prepare of sub-query which creates the - derived tables we call setup_procedure. Here we call - fix_fields for parameters of procedure clause. Calling - setup_procedure at this point may cause issue. If - sub-query is one of parameter being fixed it might - lead to complicated dependencies on derived tables - being prepared. - - SOLUTION : - ========== - In 5.6 with WL#6242, we have made procedure clause - parameters can only be NUM, so sub-queries are not - allowed as parameters. So in 5.5 we can block - sub-queries in procedure clause parameters. - This eliminates above conflicting dependencies. - -commit e480ac6c2cd23db1c420e0c6740b493cc2587195 -Author: Sujatha Sivakumar -Date: Mon Aug 17 15:12:17 2015 +0530 - - Bug#21046372: GAPS IN RETRIEVED_GTID_SET WHILE NO GAPS IN - EXECUTED_GTID_SET - - Fixing a post push issue. - -commit d24661b5200f453859517b89802cbd07e2d8de71 -Author: Venkatesh Duggirala -Date: Mon Aug 17 12:25:55 2015 +0530 - - BUG#19286708 REPLICATION BROKEN AFTER CREATION OF SCHEDULED EVENTS - - Problem: In mixed replication, events that has unsafe functions - (sysdate()) cannot be created. - - Analysis: DDL Statements (that change metadata) are always - getting written in the binlog in STATEMENT format irrespective - of binlog_format settings. And the changes to the metadata - should not be replicated as the same statement when it is executed - on Slave will update the metadata on slave side. Event based SQL - commands (CREATE EVENT, ALTER EVENT and DROP EVENT) belong to - the same category. Code was written to take care of changing the - current_statement_binlog_format into 'statement' if it is 'row' - in case of executing/replicating such statements. But in case of - create event and alter event, after we are converting row format - to statement format, while we are opening the tables server decides - the binlogging format (in decide_binlog_format()) and the logic - again changes binlog format to "row" if it sees the statement is - unsafe and we are using mixed format. - - Fix: Forcefully change the binlog format to 'statement' (if it is 'row' - format) for these statements *after* server executing 'decide_binlog_format'. - -commit f2e768e4fe39da8309f9e17d40faa80de6bf2752 -Author: Sujatha Sivakumar -Date: Wed Aug 5 16:09:02 2015 +0530 - - Bug#21046372: GAPS IN RETRIEVED_GTID_SET WHILE NO GAPS IN - EXECUTED_GTID_SET - - Problem: - ======== - Under certain circumstances it is possible that - Retrieved_Gtid_Set on slave will contain gaps while actually - no gaps will be in Executed_Gtid_Set and slave binary logs. - - This happens when slave rotates relay log in such a way that - last event contains record which sets GTID_NEXT, then - following log contains few GTIDs, then slave restarts. After - restart GTIDs for Retrieved_Gtid_Set executed wrongly and - there are phantom gaps. - - Analysis: - ======== - Let us consider a scenario where gtid set 1-3 is written to - relay log and we are about to write the 4th GTID event. - Existing code first writes the events to relay log and then - adds the new GTID to the Retrieved_Gtid_Set. If a rotation - happens at this moment after writing the GTID event the - newly written relay log will have the Previous_Gtid set as - 1-3. If a restart happens at this scenario and few more - gtids are present after this event the Retrieved_Gtid_set - will have gaps like 1-3:5-6 and 4th GTID will be a gap. - - Fix: - === - Add the gtid to the Retrieved_Gtid_Set before writing the - actual event to the relay log. If due to some reason - writing to relay log fails remove the GTID from the - Retrieved_Gtid_Set. - -commit 562bafcaa92f74d6bc0997c7546f47a82b1c6cae -Author: Sujatha Sivakumar -Date: Mon Aug 17 11:00:50 2015 +0530 - - Bug#20909880: BROKEN REPLICATION ON SQL THREAD RESTART IF - GTID_MODE IS ENABLED - - Fix: - === - Back port Bug #20644100 "Event crc check failed" when - master disable binlog_checksum to mysql-5.6. - -commit 9ef7ef98bb7fec19f7f2503529a2cb085170f364 -Author: Sujatha Sivakumar -Date: Wed Aug 12 11:06:19 2015 +0530 - - Bug#20797764: FAILED CREATE VIEW IS BINLOGGED, AND NOT - FILTERED OUT - - Problem: - ======== - Replication slave choke on statement that should be ignored - instead. - - Analysis: - ======== - There are two problems in the above mentioned bug. - 1) Failed CREATE VIEW statement is written to the binary log - 2) When a statement which has failed on master is received - on slave with an expected error and if the statement is - skipped on slave due to replication filter we still try to - compare the expected error with actual error that happened - on slave. Which is incorrect. - - Fix: - === - For the first problem since CREATE VIEW statement cannot - result in partial view creation, it should not be binlogged - if the view creation fails. We check for the return status - of view creation and avoid writing to binlog on error. - - For the second problem if a statement with expected error is - received on slave and only if the statement is not filtered - then only compare it with actual error that happened on - slave. - -commit 67acbc6a2abeb68dc36dc442e8f2c32ab19e0452 -Merge: 6894e50 e242946 -Author: Aditya A -Date: Wed Aug 12 19:20:56 2015 +0530 - - Bug #21025880 DUPLICATE UK VALUES IN READ-COMMITTED (AGAIN) - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit e2429464cde3555962787fae236a296cf3971d07 -Author: Aditya A -Date: Wed Aug 12 19:17:26 2015 +0530 - - Bug #21025880 DUPLICATE UK VALUES IN READ-COMMITTED (AGAIN) - - PROBLEM - - Whenever we insert in unique secondary index we take shared - locks on all possible duplicate record present in the table. - But while during a replace on the unique secondary index , - we take exclusive and locks on the all duplicate record. - When the records are deleted, they are first delete marked - and later purged by the purge thread. While purging the - record we call the lock_update_delete() which in turn calls - lock_rec_inherit_to_gap() to inherit locks of the deleted - records. In repeatable read mode we inherit all the locks - from the record to the next record but in the read commited - mode we skip inherting them as gap type locks. We make a - exception here if the lock on the records is in shared mode - ,we assume that it is set during insert for unique secondary - index and needs to be inherited to stop constraint violation. - We didnt handle the case when exclusive locks are set during - replace, we skip inheriting locks of these records and hence - causing constraint violation. - - FIX - - While inheriting the locks,check whether the transaction is - allowed to do TRX_DUP_REPLACE/TRX_DUP_IGNORE, if true - inherit the locks. - - [ Revewied by Jimmy #rb9709] - -commit 6894e500fa685212022ae442d82b4fe0ac86255c -Merge: 521aea9 7efc9f7 -Author: Shaohua Wang -Date: Mon Aug 10 16:33:32 2015 +0800 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 7efc9f757ec52741cfc4fba9711d16d52642a2c2 -Author: Shaohua Wang -Date: Mon Aug 10 16:31:05 2015 +0800 + When a derived table is materialized, a temporary table is + created. This temporary table creates a field each for the + items in the select-list of the derived table. This set of + fields is later used to setup the join. + + Currently no field is created in the temporary table if a + parameter is used in the select-list. + + Create a field for the parameter. By default Item_param's + result type in a prepared statement is set to + STRING_RESULT. This can change during the execute phase + depending on the user variable. But since the execute phase + creates its own temporary table, it will be handled + separately. + + This is a backport of the fix for BUG#22392374. + +commit 6a9abb618aebb0624eb307a0f9f58604047e01c8 +Author: Srikanth B R +Date: Mon Aug 1 18:53:44 2016 +0530 - BUG#21102971 data corruption on arm64 + Bug#22342399: MTR LIMITS PARALLEL TESTS TO 50 - The root cause is that x86 has a stronger memory model than the ARM - processors. And the GCC builtins didn't issue the correct fences when - setting/unsetting the lock word. In particular during the mutex release. - - The solution is rewriting atomic TAS operations: replace '__sync_' by - '__atomic_' if possible. - - Reviewed-by: Sunny Bains - Reviewed-by: Bin Su - Reviewed-by: Debarun Banerjee - Reviewed-by: Krunal Bauskar - RB: 9782 - RB: 9665 - RB: 9783 - -commit 521aea978966398f73481724be5d44c9fef637af -Merge: 9ef7591 1eaec27 -Author: Ajo Robert -Date: Fri Aug 7 16:34:15 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 1eaec2788e234d8a5d4825ea3c8ffbe8dd2e392b -Merge: 1908406 4052aa6 -Author: Ajo Robert -Date: Fri Aug 7 16:27:48 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 - -commit 4052aa6a3e5d9783dc91fe593172fbc4ea8c7110 -Author: Ajo Robert -Date: Fri Aug 7 16:26:10 2015 +0530 - - Bug #20760261 mysqld crashed in materialized_cursor:: - send_result_set_metadata - - Analysis - -------- - Cursor inside trigger accessing NEW/OLD row leads server exit. - - The reason for the bug was that implementation of function - create_tmp_table() was not considering Item::TRIGGER_FIELD_ITEM - as possible alternative for type of class being instantiated. - This was resulting in a mismatch between a number of columns - in result list and temp table definition. This mismatch leads - to the failure of assertion - DBUG_ASSERT(send_result_set_metadata.elements == item_list.elements) - in the method Materialized_cursor::send_result_set_metadata - in debug mode. + Issue: + ------ + The number of parallel workers in mysql-test-run has an artificial + limit of 50. On some hardware, more CPU's are present and having + --parallel > 50 leads to MTR running out of unique build thread ids + as it has a hard-coded upper limit(50 build thread id's) for them. Fix: - --- - Added code to consider Item::TRIGGER_FIELD_ITEM as valid - type while creating fields. - -commit 9ef759151dc57590b774bf26856bce480ef701c0 -Merge: 5ddc90c 1908406 -Author: Sayantan Dutta -Date: Wed Aug 5 15:30:36 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - - Conflicts: - mysql-test/lib/mtr_cases.pm - -commit 19084061d0c4bb991d3bb85ca371b53de622d5ac -Author: sayantan dutta -Date: Mon Feb 24 18:44:37 2014 +0530 - - Follow-up fix : Bug #18145121 - DEPRECATED PERL SYNTAX IN MTR - (cherry picked from commit 1bfe5f724bc4c24da635f632247e7d263aa53970) - - Conflicts: - mysql-test/lib/mtr_cases.pm - -commit 82c1baac79ef72cf7f2604cf58fdce9339dc8fa4 -Author: sayantan dutta -Date: Tue Feb 18 17:57:54 2014 +0530 - - Follow up Fix: Bug #18145121 - DEPRECATED PERL SYNTAX IN MTR - (cherry picked from commit 3eb933e0eb55f962404a04741767177e12a9885f) - - Conflicts: - mysql-test/mysql-test-run.pl - -commit 5ddc90c5e3267a437fb21c6d9eb01e81e9ea0740 -Merge: c195ac1 cafc94e -Author: Mithun C Y -Date: Tue Aug 4 12:30:10 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 + ---- + The patch attached removes the arbitrary limit and sets the upper + build thread limit based on the value given to --parallel. Two other + small changes relevant for running with high parallel settings have + been included: + 1)The number of parallel workers is now restricted to number of tests + for avoiding idle workers. + 2)The maximum number of parallel workers was restricted to 8 for + --parallel=auto in case the environment variable MTR_MAX_PARALLEL + was not set. This restriction has been removed as it hinders MTR + performance on powerful machines. + + Reviewed-by: Bjorn Munch + RB: 13472 + +commit 33b15f9f52214ad1663345e9f123ad613f6f4a28 +Author: Srikanth B R +Date: Mon Aug 1 18:31:13 2016 +0530 -commit cafc94e644cc41486860a35afa60a58151faa07d -Merge: 49a80c2 83cfb8e -Author: Mithun C Y -Date: Tue Aug 4 12:28:56 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 - -commit 83cfb8e31274cb4d8e05ebb0ab114a46b8944ef0 -Author: Mithun C Y -Date: Tue Aug 4 11:45:02 2015 +0530 - - Bug #21096444: MYSQL IS TRYING TO PERFORM A CONSISTENT READ BUT THE READ VIEW IS NOT ASSIGNED! - - Issue: A select for update subquery in having clause - resulted deadlock and its transaction was rolled back - by innodb. val_XXX interfaces do not handle errors and - it do not propogate errors to its caller. sub_select - did not see this error when it called - evaluate_join_record and later made a call to innodb. - As transaction is rolled back innodb asserted. - - Fix: Now evaluate_join_record checks if there is any - error reported and then return the same to its caller. - -commit c195ac11883b84fc934deb842a38575a99a50631 -Author: Sreeharsha Ramanavarapu -Date: Tue Aug 4 10:25:28 2015 +0530 - - Bug #21039264: HANDLE_FATAL_SIGNAL (SIG=11) IN MI_EXTRA | - STORAGE/MYISAM/MI_EXTRA.C:44 + Bug#23742016: MTR --PARALLEL=AUTO IS ALWAYS 1 ON OSX Issue: - ----- - The updatable property of a view is set during creation of - the view. If the underlying table is dropped and re-created - as a non-updatable one, the original view's updatable - property is not revised accordingly. This will cause a - problem when an attempt to insert or replace into the view - is made. This problem is specific to views with multiple - tables/views. It also does not occur with update statements. - - SOLUTION: - --------- - This problem affects only the insert/replace statements - because only the updatable property of the top view is - tested. The problem does not occur for update statements, - since the updatable property of each underlying table/view - is tested. - - For a view with a single table, the updatable property is - set based on the underlying table's property. The same - should be done for views with multiple tables/views. - - This fix is specific to 5.6. The problem was fixed in 5.7+ - by WL#5275 and Bug#20515155. But this is not a backport - since the code has changed significantly. - -commit 126b53f63bfd4a0e6c13901937db806d439dbbb5 -Author: Aditya A -Date: Mon Aug 3 10:56:24 2015 +0530 - - Bug #21239299 MYSQL CRASHED BECAUSE OF FLUSH_ALL - - Function call to start transaction was called - inside the assert. Assert can be disabled by - setting NDEBUG ,which will cause this function - not to be executed and causes crashes later. + ------ + MTR currently checks for CPU information using '/proc/cpuinfo' on + linux and 'kstat' on solaris. As no information can be obtained + from them on OS-X, a dummy CPU is added and the number of CPU's is + reported as 1 by default. Hence, using --parallel=auto leads to + MTR running tests on a single worker. - FIX - --- + Fix: + ---- + A routine has been added to get CPU information on OS-X using the + 'sysctl' command. The number of parallel MTR workers is set to the + number of processors in the machine. - Call the function outside assert and do assert - on the return value. - -commit 13e09936d7b1c20c7ceb9b9d78402e19d9269509 -Merge: 1d20726 49a80c2 -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 10:11:15 2015 +0530 + Reviewed-by: Sayantan Dutta + RB: 13389 - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 49a80c2e223496ad0d6d753337444d122826c6be -Merge: 190d75e 9ab548f -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 10:10:41 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 - -commit 9ab548fcc4fe8e0fbf4ad63c76aaf365a7940b11 -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 10:08:46 2015 +0530 +commit 6ea08b4fa03d656873b816fca073f00170dfc7a2 +Author: Tor Didriksen +Date: Mon Aug 1 13:23:31 2016 +0200 - Bug #20909518: HANDLE_FATAL_SIGNAL (SIG=11) IN - FIND_USED_PARTITIONS | SQL/OPT_RANGE.CC:3884 + Bug#24303829 ADD SUPPORT FOR SOLARIS STUDIO 12.5 AKA 5.14 TO MYSQL 5.6 - Post-push fix. + Additional patch for cmake version 2.8.12.2 -commit 1d207269a640e03a19052dc0ed61a8a7895d048c -Merge: 5059f10 190d75e -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 08:19:07 2015 +0530 +commit f31d2752f2309fdafe550beb10381065991445ea +Merge: 6a86a16 f84c952 +Author: Prashant Tekriwal +Date: Fri Jul 29 14:23:36 2016 +0200 - Merge branch 'mysql-5.5' into mysql-5.6 + Merge branch 'mysql-5.6.32-release' into mysql-5.6 -commit 190d75e5de8ec78ad2f7e1b31b408451f5e39984 -Merge: 1ed0575 b7043a9 -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 08:17:27 2015 +0530 +commit 6a86a16ee00e275ff1d72472b9c1e61e7c36e9a0 +Merge: e206e0a 3bc2b57 +Author: Nawaz Nazeer Ahamed +Date: Fri Jul 29 16:52:58 2016 +0530 - Merge branch 'mysql-5.1' into mysql-5.5 + Upmerge of the 5.5.51 build -commit b7043a91aad5ee3753a10a46abb295a8bf159e83 -Author: Sreeharsha Ramanavarapu -Date: Mon Aug 3 08:15:59 2015 +0530 +commit 3bc2b572967a4a67a6a3a0b41a0199f81d4339c4 +Merge: a0738f7 0496931 +Author: Nawaz Nazeer Ahamed +Date: Fri Jul 29 16:46:56 2016 +0530 - Bug #20909518: HANDLE_FATAL_SIGNAL (SIG=11) IN - FIND_USED_PARTITIONS | SQL/OPT_RANGE.CC:3884 - - Issue: - ----- - During partition pruning, first we identify the partition - in which row can reside and then identify the subpartition. - If we find a partition but not the subpartion then we hit - a debug assert. While finding the subpartition we check - the current thread's error status in part_val_int() - function after some operation. In this case the thread's - error status is already set to an error (multiple rows - returned) so the function returns no partition found and - results in incorrect behavior. - - SOLUTION: - --------- - Currently any error encountered in part_val_int is - considered a "partition not found" type error. Instead of - an assert, a check needs to be done and a valid error - returned. + Merge branch 'mysql-5.5.51-release' into mysql-5.5 -commit 5059f10cebfe161fafb15f71d298ba8152a45999 -Author: Luis Soares -Date: Fri Jul 31 12:30:49 2015 +0100 +commit e206e0a6e43790084070cf50617505ffbd19ab24 +Author: Tor Didriksen +Date: Fri Jul 15 16:48:33 2016 +0200 - BUG#21349028: BACKPORT PATCH FOR BUG#16621582 TO MYSQL-5.6 - - Backporting BUG#16621582 to mysql-5.6. + Bug#24303829 ADD SUPPORT FOR SOLARIS STUDIO 12.5 AKA 5.14 TO MYSQL 5.6 - Cset description from BUG#16621582: + Parse new output from 'CC -V' - A flag that stated that transactional tables were - involved in the statements was not being set. The - binlogging routing would then assume that it had - to write to the statement cache instead of the - transactional cache. This would split the transaction - in two and the savepoints would be logged without - a GTID. + Remove '-Xa' from COMMON_C_FLAGS (prefer ISO C rather than K&R C semantics) + It is not needed, and it cannot be used together with the -std=xxx flag. - This patch fixes the issue by setting the flag even - if no rows had been changed by the statement. - - Added test case. + This is a partial backport of the fix for: + Bug#23212938 ADD SUPPORT FOR SOLARIS STUDIO 12.5 AKA 5.14 -commit a4a11e47a68ddeffd858e73b9b7cef51a9d67076 -Author: Marc Alff -Date: Thu Jul 30 11:17:50 2015 +0200 +commit 3044190d26089ad5cc54e229a58e41018a4debe0 +Author: Shaohua Wang +Date: Wed Jul 27 10:39:19 2016 +0200 - Bug#21528683 SLOWDOWN CAUSED BY MEMSET IN SQL_DIGEST_STORAGE.RESET() + Followup: BUG#23479595 SEGMENTATION FAULT WHEN SELECT FTS INDEX + TABLES IN INFORMATION SCHEMA - Before this fix, an unnecessary memset was called in - sql_digest_storage.memset(). + BUG#23742339 FAILING ASSERTION: SYM_NODE->TABLE != NULL - This affected: - - the server under normal operations, - when collecting digests for a query, - with typically an extra memset(1024) for each query. + Analysis: When we access fts aux tables in information schema,the + fts aux tables are dropped by DROP DATABASE in another session. - - the performance_schema.events_statements_current, - _history and _history_long tables, during a SELECT, - with typically an extra memset(1024*1024) for each row. + Solution: Drop parent table if it's a fts aux table, and drop + table will drop fts aux tables together. - This memset is un necessary, because the code making - copies of struct sql_digest_storage, or computing md5 of it, - is already only using the first m_byte_counts initialized bytes - and not the full array. - - The fix is to simply remove the memset(). - -commit 18c1f4b1ddb5ed99d7f281087024ea073947ec3a -Merge: 4dffb78 1ed0575 -Author: Thirunarayanan Balathandayuthapani -Date: Wed Jul 29 18:34:44 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 1ed0575ef7d03dcbfea778ed5f21de8730ccce31 -Merge: 2836d92 aa2bf3a -Author: Thirunarayanan Balathandayuthapani -Date: Wed Jul 29 18:27:39 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 + Reviewed-by: Jimmy Yang + RB: 13264 -commit aa2bf3a1f5114a39e2ee58e4454c12f651e6eb2f -Author: Thirunarayanan Balathandayuthapani -Date: Wed Jul 29 18:24:20 2015 +0530 +commit 800b8766bde7353293b8784e604b60af20dacce5 +Author: Shaohua Wang +Date: Wed Jul 27 09:37:20 2016 +0200 - Bug #20796566 ERROR: INSERT BUFFER INSERT FAIL CANNOT - INSERT INDEX RECORD - - Problem: - ======= + BUG#24315031 FAILING ASSERTION: !TABLE->CAN_BE_EVICTED - IBUF_BITMAP_FREE bit in ibuf bitmap array is used to indicate the free - space available in leaf page. IBUF_BITMAP_FREE bit indicates free - space more than actual existing free space for the leaf page. + Analysis: + the old table is dropped, just after it's added into drop list, + and new table with the same name is created, then we try to drop + the new table in background. Solution: - ========= - - Ibuf_bitmap_array is not updated for the secondary index leaf page when - insert operation is done by updating a delete marked existing - record in the index. + Don't drop a table in background if table->to_be_dropped is false. Reviewed-by: Jimmy Yang - RB: 9544 - -commit 4dffb78e407c89e9eaa42a53dee5b600e51d7d60 -Merge: 984a171 1f0fdfb -Author: Balasubramanian Kandasamy -Date: Sat Jul 25 06:47:58 2015 +0200 - - Merge branch 'mysql-5.6.26-release' into mysql-5.6 - -commit 984a171694959d35c37f74faf963c4e82b92e208 -Merge: 2008531 2836d92 -Author: Murthy Narkedimilli -Date: Fri Jul 24 17:03:14 2015 +0200 - - Upmerge of the 5.5.45 build - -commit 2836d925709de97c3f14481c0aae715fc2a3e3a7 -Merge: 16868a0 4c915b6 -Author: Murthy Narkedimilli -Date: Fri Jul 24 16:57:17 2015 +0200 + RB: 13414 - Merge branch 'mysql-5.5.45-release' into mysql-5.5 - -commit 2008531cf43563a934630a1ca82f44fb4817553c +commit c5728a8a29ed496c09c58751a860db9af962ae59 Author: Shaohua Wang -Date: Fri Jul 24 19:52:45 2015 +0800 - - BUG#21454472 AUTO-INCREMENT SEQUENCE GETS RESET - - autoinc is reset to 0 when table is loaded after table is evicted - without any rows. The solution is store autoinc value in a map when - table is evicted, and restore autoinc when table is loaded. - - Reviewed-by: Jimmy Yang - RB: 9694 - -commit 13d05b5e381b81c49011b1646dc512a332f39465 -Merge: 11ca343 16868a0 -Author: Nisha Gopalakrishnan -Date: Thu Jul 23 10:59:54 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 16868a07b723edd2f83c40e8d8414169b5589a93 -Author: Nisha Gopalakrishnan -Date: Thu Jul 23 10:47:58 2015 +0530 +Date: Wed Jul 27 03:43:52 2016 +0200 - BUG#19886430: VIEW CREATION WITH NAMED COLUMNS, OVER UNION, - IS REJECTED. - - Analysis - ======== - - View creation with named columns over UNION is rejected. - Consider the following view definition: - - CREATE VIEW v1 (fld1, fld2) AS SELECT 1 AS a, 2 AS b - UNION ALL SELECT 1 AS a, 1 AS a; - - A 'duplicate column' error was reported due to the duplicate - alias name in the secondary SELECT. The VIEW column names - are either explicitly specified or determined from the - first SELECT (which can be auto generated if not specified). - Since a duplicate column name check was performed even - for the secondary SELECTs, an error was reported. + BUG#24009272 SEGFAULT WITH CREATE+SELECT FROM IS+DROP FTS TABLE + CONCURRENTLY - Fix - ==== - - Check for duplicate column names only for the named - columns if specified or only for the first SELECT. - -commit 11ca34310a8778d8c8d4c1261d7926b69d9454dd -Author: Mattias Jonsson -Date: Mon Jul 20 00:33:02 2015 +0200 - - Bug#20284744: COMMANDS OUT OF SYNC, MALFORMED PACKET, HANG, DISCONNECTIONS - - Bad error handling in mysql_admin_table for partitioned tables. - - Instead of returning error, mysql_admin_table produces a result-set - which includes the error message and returns OK. - - Adjusted error handling for partitioning accordingly. + Analysis: + When we access fts_internal_tbl_name in i_s_fts_config_fill (), + it can be set to NULL by another session. - Reviewed-by: Praveen Hulakund - Reviewed-by: Debarun Banerjee - RB: 8467 - -commit ff07c7d95ceda203ea0e81a41ea05a0737d10834 -Author: Georgi Kodinov -Date: Fri Jul 17 11:15:42 2015 +0200 - - Bug #14700102 AUDIT PLUGIN: HEAP CORRUPTION IN DEBUG BUILD, UNABLE TO - STARTUP ON WINDOWS + Solution: + Define fts_internal_tbl_name2 for global variable innodb_ft_aux_table, + if it's NULL, set fts_internal_tbl_name to "default". - An error message code fix for the audit plugin so it won't report - extra non-relevant errors on startup if there is an invalid audit - log file. + Reviewed-by: Jimmy Yang + RB: 13401 -commit 05367118d26f31b92151a725f5acc8c0c19ef35e -Author: Annamalai Gurusami -Date: Thu Jul 16 12:23:39 2015 +0530 +commit 4d4c42e2ba8a44c9c7160ecf1192de8e635c0312 +Author: Dmitry Lenev +Date: Mon Jul 25 16:06:52 2016 +0300 + + Fix for bug #16672723 "CAN'T FIND TEMPORARY TABLE". + + Attempt to execute prepared CREATE TABLE SELECT statement which used + temporary table in the subquery in FROM clause and stored function + failed with unwarranted ER_NO_SUCH_TABLE error. The same happened + when such statement was used in stored procedure and this procedure + was re-executed. + + The problem occurred because execution of such prepared statement/its + re-execution as part of stored procedure incorrectly set + Query_table_list::query_tables_own_last marker, indicating the last + table which is directly used by statement. As result temporary table + used in the subquery was treated as indirectly used/belonging to + prelocking list and was not pre-opened by open_temporary_tables() + call before statement execution. Thus causing ER_NO_SUCH_TABLE errors + since our code assumes that temporary tables need to be correctly + pre-opened before statement execution. + + This problem became visible only in version 5.6 after patches related to + bug 11746602/27480 "EXTEND CREATE TEMPORARY TABLES PRIVILEGE TO ALLOW + TEMP TABLE OPERATIONS" since they have introduced pre-opening of temporary + tables for statements. + + Incorrect setting of Query_table_list::query_tables_own_last happened + in LEX::first_lists_tables_same() method which is called by CREATE TABLE + SELECT implementation as part of LEX::unlink_first_table(), which temporary + excludes table list element for table being created from the query table + list before handling SELECT part. + + LEX::first_lists_tables_same() tries to ensure that global table list of + the statement starts with the first table list element from the first + statement select. To do this it moves such table list element to the head + of the global table list. If this table happens to be last directly-used + table for the statement, query_tables_own_last marker is pointing to it. + Since this marker was not updated when table list element was moved we + ended up with all tables except the first table separated by it as if + they were not directly used by statement (i.e. belonged to prelocked + tables list). + + This fix changes code of LEX::first_lists_tables_same() to update + query_tables_own_last marker in cases when it points to the table + being moved. It is set to the table which precedes table being moved + in this case. + +commit 27dfa58cb07c6e58c2b58a673e18b7b824516c13 +Merge: f470c10 a0738f7 +Author: Neha Kumari +Date: Mon Jul 25 21:20:52 2016 +0530 + + Merge branch 'mysql-5.5' into mysql-5.6 + And fixed conflicts. + +commit a0738f703e20b5530fe319f47fc1e5c8ad9e9667 +Author: Neha Kumari +Date: Mon Jul 25 20:34:20 2016 +0530 - Bug #21447964 PAGE FRAMES OF INNODB BUFFER POOL NOT USING - MPOL_INTERLEAVE NUMA POLICY + BUG#23509275 :DBUG_PRINT in THD::decide_logging_format prints incorrectly, access out-of-bound Problem: + In debug builds, there is a chance that an out-of-bounds + read is performed when tables are locked in + LTM_PRELOCKED_UNDER_LOCK_TABLES mode. It can happen because + the debug code uses enum values as index for an array of + mode descriptions, but it only takes into consideration 3 + out of 4 of the enum values. - The fix for Bug #18871046 SET NUMA MEMPOLICY FOR OPTIMUM MYSQLD - PERFORMANCE attempts to allocate the innodb buffer pool with - MPOL_INTERLEAVE numa memory policy. But it doesn't do it correctly. - - The scenario: - - 1. Set the memory policy of process to MPOL_INTERLEAVE - 2. Initialize the InnoDB buffer pool. - 3. Set the memory policy of process to MPOL_DEFAULT - - In step 2, there are two parts to the InnoDB buffer pool - initialization. One is the control block (buf_block_t) memory - allocation. And the other is the actual database page frames. - - The control block memory is immediately allocated - and hence the patch works as expected. But in the case - of the database page frames, which is using mmap(), it is not working - as expected. The mmap() call only reserves memory and doesn't do - actual allocation. The actual allocation happens only when it is - first used. The allocation of pages will follow the memory policy - that is in place during allocation. - - Solution: - - While initializing the chunks in buf_chunk_init(), use the mbind() call - to specifically set the memory policy for the reserved memory. This will - ensure that the database page frames use MPOL_INTERLEAVE memory policy. + Fix: + This patch fixes it by implementing a getter for the enum which + returns a string representation of the enum, + effectively removing the out-of-bounds read. - rb#9619 approved by Sunny. + Moreover, it also fixes the lock mode descriptions that + would be print out in debug builds. -commit 8ee4495ddbf0f390134a20ee11ac33e4f203eec0 -Merge: 6bae99e 2aec6eb -Author: Sreeharsha Ramanavarapu -Date: Thu Jul 16 07:57:53 2015 +0530 +commit f470c103b29250cedfd3a124f6f0dedcebab3e57 +Merge: bc715f5 9c7309c +Author: Thayumanavar S +Date: Mon Jul 25 07:50:47 2016 +0200 Merge branch 'mysql-5.5' into mysql-5.6 -commit 2aec6ebda682541b8ad29ea637223f881921bc6a -Author: Sreeharsha Ramanavarapu -Date: Thu Jul 16 07:56:39 2015 +0530 +commit 9c7309c0d5bc1d663df96a730076d88f625a322c +Author: Thayumanavar S +Date: Mon Jul 25 06:43:16 2016 +0100 - Bug #21143080: UPDATE ON VARCHAR AND TEXT COLUMNS PRODUCE - INCORRECT RESULTS - - Issue: - ----- - Updating varchar and text fields in the same update - statement can produce incorrect results. When a varchar - field is assigned to the text field and the varchar field - is then set to a different value, the text field's result - contains the varchar field's new value. + BUG#23703568 - IS CLIENT LIBRARY SUPPOSED TO RETRY EINTR INDEFINITELY OR NOT - SOLUTION: - --------- - Currently the blob type does not allocate space for the - string to be stored. Instead it contains a pointer to the - varchar string. So when the varchar field is changed as - part of the update statement, the value contained in the - blob also changes. - - The fix would be to actually store the value by allocating - space for the blob's string. We can avoid allocating this - space when the varchar field is not being written into. - -commit 6bae99e631d846178c1a0c1d351a71c991d6a9aa -Author: Dyre Tjeldvoll -Date: Tue Jul 14 10:11:09 2015 +0200 - - BUG#21021848: ASSERTION `M_STATUS == DA_ERROR' FAILED. - - Problem: When I_S query which needed to perform full table open - encountered a corrupt table it tried to repair it. To do this I_S - query tried to acquire X metadata lock on the table. When I_S query - was used in the middle of transaction this sometimes led to deadlocks - if there was concurrent DDL. As result transaction was aborted and - rolled back without appropriate error reported. For XA transaction in - debug builds assert fired. - - Solution: Since it is undesirable to have an I_S query attempt repair - (or discovery) the patch modifies the behavior of - Open_table_context::recover_from_failed_open() to skip these - operations if MYSQL_OPEN_FAIL_ON_MDL_CONFLICT set, and instead sets - the error ER_WARN_I_S_SKIPPED_TABLE which will be converted to a - warning. This will avoid deadlocks during I_S query execution. - - This returns the behavior of I_S queries to what they were before - BUG#18075170 was fixed. The assert in conjunction with XA abort, which - was present even before BUG#18075170, is now fixed. - -commit edea685729fbeefca5490e14caa4057ecca3c6f5 -Author: Aditya A -Date: Tue Jul 14 17:31:10 2015 +0530 - - Bug #21040050 PURGE THREAD MUST EXIT SOONER AT SERVER SHUTDOWN - - PROBLEM - - The purge thread takes too much long time during - shutdown. This is because we call trx_purge() - three times during shutdown,each time it is - called 300 undo log pages are being processed. - so even though you set batch size as 300, - 900 undo pages are processed during shutdown, - whereas in 5.5 it is only called once - during shutdown. This is the reason we are - seeing a 10 minute delay in shutdown time. - - FIX - --- - Instead of calling a separate trx_purge() - for truncating the history log, do it - with the trx_purge() in work loop once every - 128 (TRX_SYS_N_RSEGS) times. Also reduce the - batch size to 20 for trx_purge() which is - called after detecting shutdown. - - [#rb 9359 Approved by jimmy] + Commit#ebd24626ca38e7fa1e3da2acdcf88540be70fabe obsoleted the THREAD and + THREAD_SAFE_CLIENT preprocessor symbols. This is not removed in the + sql/net_serv.cc thereby the code that retries on EINTR became dead code. + Remove the THREAD_SAFE_CLIENT preprocessor directive form sql/net_serv.cc. + Also check errno for EINTR only if there is an error in preceding read call. -commit 4ca9dbe2ef159e33d7a788eabe9aa013cf5cdf1e -Merge: 58bc083 30cc4c5 -Author: Sreeharsha Ramanavarapu -Date: Tue Jul 14 07:38:36 2015 +0530 +commit bc715f5e681ebafa2bf468ba030bcf2ee18f54a7 +Merge: ab63d81 39a1f7d +Author: Arun Kuruvila +Date: Fri Jul 22 13:17:41 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit 30cc4c54c65cdc4b096a1a55e591b3796a6de3b9 -Author: Sreeharsha Ramanavarapu -Date: Tue Jul 14 07:37:37 2015 +0530 +commit 39a1f7d8f19300c1e0f49f5db983b94ce3ae1854 +Author: Arun Kuruvila +Date: Fri Jul 22 13:15:32 2016 +0530 - Bug #20777016: DELETE CHECKS PRIVILEGES ON THE WRONG - DATABASE WHEN USING TABLE ALIASES + Bug #23295288: HANDLE_FATAL_SIGNAL (SIG=11) IN + GET_SERVER_FROM_TABLE_TO_CACHE - Post-push fix. - -commit 58bc083d4cada37febf8d4365cc23c896eddef31 -Merge: 716d660 5b69f8d -Author: Tor Didriksen -Date: Mon Jul 13 10:43:53 2015 +0200 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 5b69f8d338daeba50eb623ede7b4b9ea68dbf725 -Author: Tor Didriksen -Date: Mon Jul 13 10:10:12 2015 +0200 - - Bug #20168526 YASSL: CORRUPT SSL-KEY CRASHES CLIENT + Description:- Server received SIG11 in the function, + "get_server_from_table_to_cache()". - Post-push fix: broken build on windows. - The problem is min/max macros from windows.h - which interfere with a template function callex max. + Analysis:- Defining a server with a blank name is not + handled properly. - Solution: ADD_DEFINITIONS(-DNOMINMAX) + Fix:- Modified "get_server_from_table_to_cache()" to + take care of blank server name. -commit 716d66076c55c2e177723f58811923d0dc527c7e -Author: Chaithra Gopalareddy -Date: Mon Jul 13 09:11:09 2015 +0530 +commit ab63d814c81a50d586fff7b57dfe07ac10758333 +Author: Sujatha Sivakumar +Date: Fri Jul 22 10:55:25 2016 +0530 - Bug #20728894: MEMORY LEAK IN ADD_DERIVED_KEY() + Bug#22510353: UNNECESSARY USING TEMPORARY FOR UPDATE Problem: - Possible derived keys are created in stmt_arena's mem_root which - is the permanent memory area for statement. It does not get deleted - after execution of the query. In case of stored procedure, if a query - creating derived table is executed many times, the memory keeps growing. - - Solution: - Allocated derived keys in thd->mem_root which is for runtime objects instead - of thd->stmt_arena->mem_root. - -commit 836c72914fd172fe0e09a909c582a1ebae096146 -Author: Sreeharsha Ramanavarapu -Date: Mon Jul 13 08:03:12 2015 +0530 - - Bug #21056907: CONTENTS OF NOT REQUESTED CHAR/VARCHAR - COLUMN ARE REVEALED - - Issue: - ----- - When a hexadecimal representation of a string literal is - passed as a parameter to the insert function, additional - information is displayed by the SELECT statement. - + ======= + when the binlog_row_image is FULL, we set read_set and + write_set all before update. This leads to setting + used_key_is_modified true, which lead to mysql_update use + temporary at last. Actually there is no need to use + temporary in most cases. The root cause is that we set + read_set and write_set too early. - SOLUTION: - --------- - This happens because while creating the hexadecimal - character, the "Alloced_length" is set to the string - length, but the actual allocation does not happen. This - will result in the same string being used for multiple - rows, and the new string will be appended to the old one. - - The solution is to check whether a string is actually - allocated, if not make sure that this is done. - - Also, when a string is supplied from a variable, - String->realloc will result in truncation if 'to' and - 'from' overlap. This needs to be handled by forcing an - allocation on the heap. - - Functions like lcase/encode/decode may return substrings - that are already allocated on the heap. concat/concat_ws - can have similar problems where temporary results are - over-written. Here uses_buffer_owned_by() can be used - to check if the input string is already allocated on the - heap. If yes, a temporary variable is used to store the - substring. + Analysis: + ========= + As reported in problem description table's read_set and + write_set are set earlier. + 'mark_columns_per_binlog_row_image' is the function call + which sets these read and write sets. But this is called + at an earlier stage during execution and in the case of + binlog_row_image=FULL it will set all the bits of read and + write sets. This will make the update query to think that + a key is being modified by the existing update query. Even + though it is not modifying the key field. This will force + the update query to use a temporary table even though it may + not be required. The same problem exists even in the case of + binlog_row_image=NOBLOB. This problem is specific to single + table updates. + + This issue is not present in the case of multi table update. + As in the multi table update case, the check for 'used key + is modified or not' is done before marking + read_set/write_set as per binlog_row_image. Hence binary log + specific bits are not influencing query to use temporary + table. - This fix is a backport of Bug#11765149, Bug#20315088 and - Bug#20554017. + Fix: + === + Implemented single table update to follow the same mechanism + that multi table update follows. i.e Mark the columns in + table's read_set/write_set as the binlog_row_image after the + 'used key is modified or not' decision is taken. -commit f118b3e99b7680347df2be9a4f9f51a35f444010 -Merge: ced5c92 28c60fa +commit 926ec9c656582bcbc2e69087eeb11a1c197ac717 +Merge: 74cfd7c 8235e91 Author: Sreeharsha Ramanavarapu -Date: Mon Jul 13 07:53:48 2015 +0530 +Date: Fri Jul 22 07:35:57 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit 28c60fafd1e7aec7181c549f2196c976bc6b8a9c +commit 8235e9184c5a0cab08d74dfa4d47ff0faed8c31a Author: Sreeharsha Ramanavarapu -Date: Mon Jul 13 07:51:23 2015 +0530 +Date: Fri Jul 22 07:33:43 2016 +0530 - Bug #20777016: DELETE CHECKS PRIVILEGES ON THE WRONG - DATABASE WHEN USING TABLE ALIASES + Bug #23280699: MYSQLD GOT SIGNAL 11 IN IS_NULL ON SELECT + FROM I_S Issue: - ----- - When using table aliases for deleting, MySQL checks - privileges against the current database and not the - privileges on the actual table or database the table - resides. - - - SOLUTION: - --------- - While checking privileges for multi-deletes, - correspondent_table should be used since it points to the - correct table and database. - -commit ced5c926db09690c815102e181f4ba59da714615 -Author: Marcin Babij -Date: Sun Jul 12 12:38:39 2015 +0200 - - Bug #18636874 PASSWORD VALIDATE PLUGIN: DICTIONARY CHECK MISBEHAVES WITH GOOD HEX INPUT - - Running PASSWORD on non-text can lead to memory access problems. This is due to std::string being constructed on the buffer, but it ignore length of the buffer. - -commit 4c9f4350ae06701e580f33e6f95a923fe1e1d638 -Merge: ed289a2 e8911d2 -Author: Christopher Powers -Date: Fri Jul 10 20:58:36 2015 +0200 - - Merge branch 'mysql-5.5' into mysql-5.6 - - Conflicts: - storage/perfschema/pfs_timer.cc - -commit e8911d26774f2c4e0c5388713f2d3f8125116e2a -Author: Christopher Powers -Date: Fri Jul 10 20:42:33 2015 +0200 - - Bug#21374104 SETUP_TIMERS INITIALIZATION ASSUMES CYCLE TIMER IS ALWAYS AVAILABLE - - For WAIT events, fall back to other timers if CYCLE is not available. - -commit ed289a27a0655115353b6d22c49d6db6311d56d0 -Author: Venkatesh Duggirala -Date: Fri Jul 10 15:37:48 2015 +0530 - - BUG#20074353 HANDLE_FATAL_SIGNAL (SIG=11) IN MY_B_WRITE | MYSYS/MF_IOCACHE.C:1597 + ------ + There is a difference in the field type created when the + following DDLs are used: - Problem: Modifying master_info/relay_log_info repositories - inside a transaction and later rolling back that - transaction is leaving repository in a bad condition - that cannot be used later. + 1) CREATE TABLE t0 AS SELECT NULL; + 2) CREATE TABLE t0 AS SELECT GREATEST(NULL,NULL); - Fix: Disallow modifying these repositories inside a transaction - as there are no real uses cases for the same. - -commit 47b8c72ee93087dc5d550d2ce77fd6c0c98e1bf7 -Author: Annamalai Gurusami -Date: Thu Jul 9 10:29:31 2015 +0530 - - Bug #18871046 SET NUMA MEMPOLICY FOR OPTIMUM MYSQLD PERFORMANCE - - Problem: + The first statement creates field of type Field_string and + the second one creates a field of type Field_null. - This is a contributed patch (bug#72811). The original contributor - states that, "Historically, the suggested way to run MySQL on NUMA - machines has been to run with "numactl --interleave=all" so that - things like the InnoDB buffer pool are spread across all NUMA - nodes." Currently InnoDB buffer pool is allocated without using - NUMA features. + This creates a problem when the query mentioned in this bug + is used. Since the null_ptr is calculated differently for + Field_null. Solution: + --------- + When there is a function returning null in the select list + as mentioned above, the field should be of type + Field_string. - Provide an option (--innodb_numa_interleave) to allocate InnoDB buffer - pool using MPOL_INTERLEAVE memory policy of NUMA. What this patch does - is the following: - - 1. If the option innodb_numa_interleave is enabled, then set the numa - memory policy MPOL_INTERLEAVE for the mysqld process. - 2. Allocate the buffer pool. - 3. If the option innodb_numa_interleave is enabled, then set the numa - memory policy back to MPOL_DEFAULT for the mysqld process. - - So all allocations that happen between 1 and 3 will be using the - MPOL_INTERLEAVE memory policy. This is a basic patch to make InnoDB - numa aware. More fine grained control is possible and will be taken - up later. - - rb#7309 approved by allen. - -commit 44dadb223d829e2e39ac318846e3e6e0013f23ea -Merge: d4676a8 62ae704 -Author: Sreeharsha Ramanavarapu -Date: Fri Jul 10 07:56:33 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 62ae704a2279e6f2f18675d32eb9fd61fec164aa -Merge: 5a955a5 314b436 -Author: Sreeharsha Ramanavarapu -Date: Fri Jul 10 07:54:55 2015 +0530 - - Merge branch 'mysql-5.1' into mysql-5.5 - -commit 314b436982fd1adc5d306874dcc3ac772bf467a0 -Author: Sreeharsha Ramanavarapu -Date: Fri Jul 10 07:52:00 2015 +0530 - - Bug #20238729: ILLEGALLY CRAFTED UTF8 SELECT PROVIDES NO - WARNINGS - - Backporting to 5.1 and 5.5 - -commit d4676a84d83dc55e09ec16e4a400a04ed7765001 -Author: Christopher Powers -Date: Wed Jul 8 19:27:06 2015 +0200 - - Bug#19929832 EVENTS_STATEMENTS_HISTORY HAS ERRORS=0 WHEN THERE ARE ERRORS + This was fixed in 5.6+ as part of Bug#14021323. This is a + backport to mysql-5.5. - Adjust perfschema.mist.test for gcov builds. - -commit 39fb50422c43d670fd530ac42891213a151d3eb8 -Merge: a787a4b 5a955a5 -Author: Robert Golebiowski -Date: Wed Jul 8 13:54:43 2015 +0200 + An incorrect comment in innodb_bug54044.test has been + corrected in all versions. - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 5a955a5499520cf3904d74dae46a02ccb3327cad -Author: Robert Golebiowski -Date: Wed Jul 8 13:51:06 2015 +0200 - - Bug #20774956: THREAD_POOL.THREAD_POOL_CONNECT HANGS WHEN RUN ON A - YASSL-COMPILED SERVER/CLIENT - - Description: thread_pool.thread_pool_connect hangs when the server and - client are compiled with yaSSL. - - Bug-fix: Test thread_pool.thread_pool_connect was temporary disabled for - yaSSL. However, now that yaSSL is fixed it runs OK. The bug was - introduced by one of the yaSSL updates. set_current was not working for - i == 0. Now this is fixed. YASSL is updated to 2.3.7d - -commit a787a4b0ee3932bef42d551c0cc959bd68a5bd87 -Merge: a219d1c d8ca066 -Author: Robert Golebiowski -Date: Wed Jul 8 13:35:37 2015 +0200 +commit 74cfd7cfab19ea0d0bc52c7cab3616ef8165f4bc +Merge: efd84b4 a9911d0 +Author: Chaithra Gopalareddy +Date: Tue Jul 19 08:04:29 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit d8ca0661c34098b798d2ce7ea242f76073cacc03 -Author: Robert Golebiowski -Date: Wed Jul 8 12:21:51 2015 +0200 - - Bug #21025377 CAN'T CONNECT TO SSL ENABLED SERVER FIRST 30 SEC AFTER - INITIAL STARTUP - - Description: By using mysql_ssl_rsa_setup to get SSL enabled server - (after running mysqld --initialize) server don't answer properly - to "mysqladmin ping" first 30 secs after startup. - - Bug-fix: YASSL validated certificate date to the minute but should have - to the second. This is why the ssl on the server side was not up right - away after new certs were created with mysql_ssl_rsa_setup. The fix for - that was submitted by Todd. YASSL was updated to 2.3.7c. - -commit a219d1ce3913657378710c277eaafdb2fa82e825 -Merge: b3279bc 853ae3f -Author: Robert Golebiowski -Date: Wed Jul 8 12:08:28 2015 +0200 - - Null merge branch 'mysql-5.5' into mysql-5.6 - -commit 853ae3fd763cca58c7c3ebee48e7a927ee8a2222 -Author: Robert Golebiowski -Date: Fri Mar 20 15:05:59 2015 +0100 +commit a9911d0b31e874c7ad6d3f088e755e04beb49e38 +Author: Chaithra Gopalareddy +Date: Tue Jul 19 08:03:09 2016 +0530 - Bug #20168526 YASSL: CORRUPT SSL-KEY CRASHES CLIENT + Bug#23280059: ITEM_ROW::ILLEGAL_METHOD_CALL(CONST CHAR*): + ASSERTION `0' FAILED ON SELECT AREA - Affects at least 5.6 and 5.7. In customer case, the "client" happened to - be a replication slave, therefore his server crashed. - - Bug-fix: - The bug was in yassl. Todd Ouska has provided us with the patch. + Problem: + Optimizer tries to get the points to calculate area without + checking the return value of uint4korr for 0 "points". As a + result server exits. - (cherry picked from commit 42ffa91aad898b02f0793b669ffd04f5c178ce39) + Solution: + Check the return value from uint4korr(). -commit b3279bccf109501b9ec9f67ad42bfa916ce3ba2f +commit efd84b4bcba3516e15699be833f1292670144e22 Author: Thirunarayanan Balathandayuthapani -Date: Wed Jul 8 12:40:32 2015 +0530 +Date: Fri Jul 15 14:39:37 2016 +0530 - Bug #19779113 INNODB REFUSES STARTUP WITH INNODB_FORCE_RECOVERY>3 + Bug #23475211 COMBINING ALTER OPERATIONS TRIGGERS TABLE REBUILD Problem: ======= - - Server refuses to startup when innodb_force_recovery > 3 and - InnoDB making the server to read-only mode before applying the redo log. + Inplace alter algorithm determines the table to be rebuild if the table + undergoes row format change, key block size if handler flag contains only + change table create option. If alter with inplace ignore flag operations and change table create options then it leads to table rebuild operation. Solution: ======== - Introduce a new variable called high_level_read_only and - it will be enabled when server is in read-only mode or - innodb_force_recovery > 3. This variable will be - checked during DML and DDL(expect Drop table). In other words, - Drop table is the only operation allowed when innodb_force_recovery > 3. + During the check for rebuild, ignore the inplace ignore flag and check for + table create options. - Reviewed-by: Marko Mäkelä - RB: 9320 - -commit a8838908c9af9ae035ef716118cf0801b7cda9fe -Merge: 13370fe 7fd0325 -Author: Shishir Jaiswal -Date: Wed Jul 8 11:55:46 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 7fd0325f8f5876a1b2ad8824d98ab79ccb4fccca -Author: Shishir Jaiswal -Date: Wed Jul 8 11:53:54 2015 +0530 - - Bug #20802751 - SEGMENTATION FAILURE WHEN RUNNING - MYSQLADMIN -U ROOT -P - - DESCRIPTION - =========== - Crash occurs when no command is given while executing - mysqladmin utility. - - ANALYSIS - ======== - In mask_password() the final write to array 'temp_argv' - is done without checking if corresponding index 'argc' - is valid (non-negative) or not. In case its negative - (would happen when this function is called with 'argc'=0), - it may cause a SEGFAULT. Logically in such a case, - mask_password() should not have been called as it would do - no valid thing. - - FIX - === - mask_password() is now called after checking 'argc'. This - function is now called only when 'argc' is positive - otherwise the process terminates - -commit 13370fec4b7fa0bcc002f73372cd57b4fe185069 -Merge: 6154e63 118774f -Author: Debarun Banerjee -Date: Wed Jul 8 10:04:13 2015 +0530 - - Merge branch 'mysql-5.5' into mysql-5.6 + Reviewed-by: Jimmy Yang + Reviewed-by: Marko Makela + RB: 13172 -commit 118774fd6f73cda46971f1831ea73de6807b2fb5 -Author: Debarun Banerjee -Date: Wed Jul 8 10:00:53 2015 +0530 +commit 47c0fdfced7f5bb5e1ae9af9bdaeb369b5f8583b +Author: Georgi Kodinov +Date: Thu Jul 7 15:37:25 2016 +0300 - BUG#16613004 PARTITIONING DDL, CRASH IN FIELD_VARSTRING::CMP_MAX + Bug #23747899: @@BASEDIR SYSVAR VALUE NOT NORMALIZED IF SET THROUGH + THE COMMAND LINE/INI FILE - Problem : - --------- - The specific issue reported in this bug is with range/list column - value that is allocated and initialized by evaluating partition - expression(item tree) during execution. After evaluation the range - list value is marked fixed [part_column_list_val]. During next - execution, we don't re-evaluate the expression and use the old value - since it is marked fixed. - - Solution : - ---------- - One way to solve the issue is to mark all column values as not fixed - during clone so that the expression is always re-evaluated once we - attempt partition_info::fix_column_value_functions() after cloning - the part_info object during execution of DDL on partitioned table. - - Reviewed-by: Jimmy Yang - Reviewed-by: Mattias Jonsson - - RB: 9424 - -commit 6154e63999a5c717d9a86e2efa056b0b790f0ca4 -Merge: b68249f 993f4ec -Author: Praveenkumar Hulakund -Date: Fri Jul 3 16:56:53 2015 +0530 + The system variable basedir is of type charptr and can take command line + arguments. This means that it operates on a "char *" global and every time + a command line argument is supplied a new string buffer is allocated and + assigned to this variable. + The global char * used for this variable is called base_dir_ptr. + Originally this char * is assigned to a global char array called base_dir. + And the rest of the server code uses the base_dir array directly. + But setting a new value on the command line set the base_dir_ptr to the + something different than the base_dir. + Then, in mysqld_get_one_option(), the contents of that new buffer is copied + to base_dir, but the base_dir_ptr is not reset to point back to base_dir. + Thus it does not reflect the subsequent processing done directly over base_dir + This processing includes (among other things) normalization of the path + separators used. As a result the system variable returns the data exactly as + set on the command line or through the INI file instead of the normalized + value that's stored in base_dir. + + Note that no other code uses base_dir_ptr, thus the problem is constrained + to the value returned for @@basedir. + + Fixed by reseting base_dir_ptr to point to base_dir in mysqld_get_one_option + right after copying the new value back. This makes it similar to the other + path containing system variables. + + Test case added. + +commit ae4d5db19450380f448b0763d97a3a98277704b4 +Author: Srikanth B R +Date: Mon Jul 11 10:14:23 2016 +0530 + + Bug#23060553 MTR SPAWNS ONLY ONE WORKER WHEN USING --PARALLEL=AUTO + ON WINDOWS + + Follow-up fix: Restoring original file permissions of mysql-test-run.pl + + Reviewed by: Erlend Dahl + +commit b587f4a2531b20b4f15792527fa0b46fc5138dde +Author: Srikanth B R +Date: Fri Jul 8 14:33:55 2016 +0530 - Bug#18487951 - QUERY_CACHE_MIN_RES_UNIT SET TO ZERO, CRASHES IN QUERY_CACHE::FIND_BIN - - Follow up patch to fix sys_vars.query_cache_min_res_unit_basic_32 test failure. + Bug#23060553 MTR SPAWNS ONLY ONE WORKER WHEN USING --PARALLEL=AUTO + ON WINDOWS - Merge branch 'mysql-5.5' into mysql-5.6 - -commit 993f4ec0f8f6e915508ecbf87841fa5229257f53 -Author: Praveenkumar Hulakund -Date: Fri Jul 3 16:56:13 2015 +0530 - - Bug#18487951 - QUERY_CACHE_MIN_RES_UNIT SET TO ZERO, CRASHES IN QUERY_CACHE::FIND_BIN + Issue: + ------ + MTR does not compute the number of parallel workers when the option + --parallel=auto is given on Windows and spawns only one worker by + default. An additional check throttles the number of parallel workers + to one in case of virtual machines on Windows. - Follow up patch to fix sys_vars.query_cache_min_res_unit_basic_32 test failure. + Fix: + ---- + Number of parallel MTR workers is now set to the number of processors + using the environment variable 'NUMBER_OF_PROCESSORS' when --parallel + =auto is given on Windows. Also, a line which checks if a Windows machine + is a virtual one and sets the --parallel value to one has been removed + as Windows VM's are stable with huge amount of threads these days. + + Reviewed-by: + Sayantan Dutta + RB #12523 -commit b68249f0c6be85472417b477facafe361d464559 -Author: Luis Soares -Date: Fri Jul 3 11:29:45 2015 +0100 +commit 04969317137464074556c969950d3782f551fbdf +Author: Balasubramanian Kandasamy +Date: Tue Jul 5 17:08:37 2016 +0530 - BUG#21305976: REPORT RELAY_LOG_FILE AND RELAY_LOG_POS ON RELAY-LOG-RECOVERY. - - Extends the error log entry that reports the new recovery - positions when relay-log-recovery is set. Now it also reports - the old relay log positions. + Bug#23736787 - YUM UPDATE FAIL FROM 5.5.51(COMUNITY/COMMERCIAL) TO 5.6.32(COMUNITY/COMMERCIAL) - Added test case. - -commit 3976d4107493202472dae251ea08730d40892ecd -Author: Sreeharsha Ramanavarapu -Date: Fri Jul 3 07:49:45 2015 +0530 - - Bug #20238729: ILLEGALLY CRAFTED UTF8 SELECT PROVIDES NO - WARNINGS + Remove mysql_config from client sub-package - Post-push fix. + (cherry picked from commit 45c4bfa0f3f1c70756591f48710bb3e76ffde9bc) -commit 7da639e75ca7710c3aaf81b5fa47994bab4e62ea -Author: Andrei Elkin -Date: Tue Jun 23 19:30:19 2015 +0300 +commit c45124a0b582d57ac6cf20b786e0c643ec9ce941 +Author: Shaohua Wang +Date: Thu Jul 7 11:41:31 2016 +0800 - Bug#21095969 RPL+LOCK_WAIT_TIMEOUT: BOOL TRANS_CHECK_STATE ASSERTS `THD->GET_TRANSACTION(). + Followup: BUG#23479595 SEGMENTATION FAULT WHEN SELECT FTS INDEX + TABLES IN INFORMATION SCHEMA - The reported assert in the slave temporary failing transaction block happens - *every* time when the replicated transaction faces a temporary error and - the slave's recovery tables (aka info repositories) are of the transactional - type. Indeed, such replicated deadlocked or timed-out transaction is to - be rolled back and re-tried whenever @@global.slave_trans_retries > 0. + BUG#23742339 FAILING ASSERTION: SYM_NODE->TABLE != NULL - Before it is rolled back, the applier calls global_init_info where - thanks to BUG16533802 fixes, global_init_info starts a new (short-lived) transaction - when relay_log_info_repository_type='TABLE'. - And that leads to an assertion about improper transaction state - because the temproary failing one it still active. + Problem: When we access fts aux tables in information schema,the + fts aux tables are dropped by DROP DATABASE in another session. - Fixed with relocating a part of general cleanup of the slave applier - (cleanup_context) to be executed before global_init_info(). - Running the former function prior the latter must be safe and actually - makes much more sense. - -commit b374fd6965bdc93bdfa40bcd8c42813d5835cec4 -Author: Christopher Powers -Date: Wed Jul 1 22:35:03 2015 +0200 - - Bug#19929832 EVENTS_STATEMENTS_HISTORY SHOWS ERRORS=0 WHEN THERE ARE ERRORS + Solution: Block DDL by s-locking dict_operation_lock. - Incremente statement error count in end_statement(). + Reviewed-by: Jimmy Yang + RB: 13264 -commit 4f8cffff5c52679510ce33702fc3341ab12fd5b1 -Merge: 27523c6 bc4d2f9 -Author: Praveenkumar Hulakund -Date: Thu Jul 2 15:32:59 2015 +0530 +commit 308f9b88e75f6179add209a2fe6affdb49b7c2ee +Merge: 140d08c 45c4bfa +Author: Balasubramanian Kandasamy +Date: Tue Jul 5 17:12:56 2016 +0530 - Bug#18487951 - QUERY_CACHE_MIN_RES_UNIT SET TO ZERO, CRASHES IN QUERY_CACHE::FIND_BIN - Merge branch 'mysql-5.5' into mysql-5.6 -commit bc4d2f9efb5fb7d42ec31eefaea985015bb06cca -Author: Praveenkumar Hulakund -Date: Thu Jul 2 15:31:55 2015 +0530 - - Bug#18487951 - QUERY_CACHE_MIN_RES_UNIT SET TO ZERO, CRASHES IN QUERY_CACHE::FIND_BIN - - Valid min value for query_cache_min_res_unit is 512. But attempt - to set value greater than or equal to the ULONG_MAX(max value) is - resulting query_cache_min_res_unit value to 0. This result in - crash while searching for memory block lesser than the valid - min value to store query results. - - Free memory blocks in query cache are stored in bins according - to their size. The bins are stored in size descending order. - For the memory block request the appropriate bin is searched using - binary search algorithm. The minimum free memory block request - expected is 512 bytes. And the appropriate bin is searched for block - greater than or equals to 512 bytes. - - Because of the bug the query_cache_min_res_unit is set to 0. Due - to which there is a chance of request for memory blocks lesser - than the minimum size in free memory block bins. Search for bin - for this invalid input size fails and returns garbage index. - Accessing bins array element with this index is causing the issue - reported. - - The valid value range for the query_cache_min_res_unit is - 512 to ULONG_MAX(when value is greater than the max allowed value, - max allowed value is used i.e ULONG_MAX). While setting result unit - block size (query_cache_min_res_unit), size is memory aligned by - using a macro ALIGN_SIZE. The ALIGN_SIZE logic is as below, - - (input_size + sizeof(double) - 1) & ~(sizeof(double) - 1) - - For unsigned long type variable when input_size is greater than - equal to ULONG_MAX-(sizeof(double)-1), above expression is - resulting in value 0. +commit 45c4bfa0f3f1c70756591f48710bb3e76ffde9bc +Author: Balasubramanian Kandasamy +Date: Tue Jul 5 17:08:37 2016 +0530 + + Bug#23736787 - YUM UPDATE FAIL FROM 5.5.51(COMUNITY/COMMERCIAL) TO 5.6.32(COMUNITY/COMMERCIAL) - Fix: - ----- - Comparing value set for query_cache_min_res_unit with max - aligned value which can be stored in ulong type variable. - If it is greater then setting it to the max aligned value for - ulong type variable. + Remove mysql_config from client sub-package -commit 27523c60a37f521ff429302fbc2afd0e3f90dd05 -Merge: 4df6e51 fd55787 -Author: Arun Kuruvila -Date: Tue Jun 30 10:30:04 2015 +0530 +commit 140d08cf1d8c7dee9cd3531860c0853af372bbca +Merge: f262d5a 43320b7 +Author: Kailasnath Nagarkar +Date: Fri Jul 1 12:05:29 2016 +0530 Merge branch 'mysql-5.5' into mysql-5.6 -commit fd5578749645eb99c7a1565246a22fd432ef9536 -Author: Arun Kuruvila -Date: Tue Jun 30 10:27:12 2015 +0530 +commit 43320b72495cccc24fbe2a83fe4844f93bac6a08 +Author: Kailasnath Nagarkar +Date: Fri Jul 1 12:01:27 2016 +0530 - Bug #20772273 : MYSQLIMPORT --USE-THREADS DOESN'T USE - MULTIPLE THREADS - - Description:- The utility "mysqlimport" does not use - multiple threads for the execution with option - "--use-threads". "mysqlimport" while importing multiple - files and multiple tables, uses a single thread even if the - number of threads are specified with "--use-threads" option. - - Analysis:- This utility uses ifdef HAVE_LIBPTHREAD to check - for libpthread library and if defined uses libpthread - library for mutlithreaing. Since HAVE_LIBPTHREAD is not - defined anywhere in the source, "--use-threads" option is - silently ignored. + Bug #23296299 : HANDLE_FATAL_SIGNAL (SIG=11) IN + MY_TOSORT_UTF32 - Fix:- "-DTHREADS" is set to the COMPILE_FLAGS which will - enable pthreads. HAVE_LIBPTHREAD macro is removed. - -commit 4df6e517ed11a9072346d9a76f11aba327ab8844 -Author: Sreeharsha Ramanavarapu -Date: Mon Jun 29 08:23:39 2015 +0530 - - Bug #20238729: ILLEGALLY CRAFTED UTF8 SELECT PROVIDES NO - WARNINGS + This patch is specific for mysql-5.5 - Issue: - ----- - No warning is delivered when MYSQL is unable to interpret - a character with the given charset. + ISSUE: When a charater that is larger than possible to + handle is passed to function my_tosort_utf32(), it results + in segmentation fault. In the scenario mentioned in the bug + AES_ENCRYPT function is used which returns large value. + This value is further passed to my_tosort_utf32 function. + This causes to cross array bound for array uni_plane, + resulting in segment violation. SOLUTION: - --------- - Check is now performed to test whether each character can - be interpreted with the relevant charset. Failing which, a - warning is raised. - -commit 4c915b63199d592b5406044d09a18016730498b1 -Author: Balasubramanian Kandasamy -Date: Thu Jun 25 15:04:44 2015 +0200 - - Update docker package names - -commit ae915dab38bc7b66e9b3c4fda666e4ccc300c4f6 -Merge: bb2364b 21cbfb1 -Author: Yashwant Sahu -Date: Wed Jun 24 18:18:56 2015 +0530 - - Bug# 20376760: STACK-BUFFER-OVERFLOW WITH LONG PATHS TO CERTAIN VARIABLES - -commit 21cbfb12ef661cc274d19ce542a8507fc779f06d -Author: Yashwant Sahu -Date: Wed Jun 24 17:48:46 2015 +0530 - - Bug# 20376760: STACK-BUFFER-OVERFLOW WITH LONG PATHS TO CERTAIN VARIABLES + This issue has got addressed in 5.6 onward releases + through worklog 2673. + + The fix is similar backport of that. + Check for maximum character before accessing the array + uni_plane. In addition to function my_tosort_utf32, the + same potential problem is also present in functions + my_tolower_utf16, my_toupper_utf16, my_tosort_utf16, + my_tolower_utf32, my_toupper_utf32, my_tosort_unicode, + my_tolower_utf8mb4 and my_toupper_utf8mb4. + Fixed these functions as well. -commit bb2364b5eb0c1010a9a81abc6ff489cb2298e4c8 -Merge: f5b51be 8f5dca5 -Author: Debarun Banerjee -Date: Wed Jun 24 10:31:30 2015 +0530 +commit f262d5acb164853acf3d9f6a1a296b6f6eb00e40 +Merge: 86b2481 09f089b +Author: Christopher Powers +Date: Thu Jun 30 20:57:29 2016 +0200 Merge branch 'mysql-5.5' into mysql-5.6 -commit 8f5dca528e376ca1e01cbb6d615096998884969d -Author: Debarun Banerjee -Date: Wed Jun 24 10:27:12 2015 +0530 +commit 09f089bfb9f1b95a2da6129313b3e03229620810 +Author: Christopher Powers +Date: Thu Jun 30 20:42:29 2016 +0200 - BUG#20310212 PARTITION DDL- CRASH AFTER THD::NOCHECK_REGISTER_ITEM_ - - Problem : - --------- - Issue-1: The root cause for the issues is that (col1 > 1) is not a - valid partition function and we should have thrown error at much early - stage [partition_info::check_partition_info]. We are not checking - sub-partition expression when partition expression is NULL. - - Issue-2: Potential issue for future if any partition function needs to - change item tree during open/fix_fields. We should release changed - items, if any, before doing closefrm when we open the partitioned table - during creation in create_table_impl. - - Solution : - ---------- - 1.check_partition_info() - Check for sub-partition expression even if no - partition expression. - [partition by ... columns(...) subpartition by hash()] - - 2.create_table_impl() - Assert that the change list is empty before doing - closefrm for partitioned table. Currently no supported partition function - seems to be changing item tree during open. + Bug#14111584 PB2: PERFSCHEMA.AGGREGATE FAILS ON PB2 SPORADICALLY - Reviewed-by: Mattias Jonsson + Permanently removed test case perfschema.aggregate. - RB: 9345 + The Performance Schema is generally lock-free, allowing for + race conditions that might arise from multi-threaded operation + which occasionally results in temporary and/or minor variances + when aggregating statistics. This test needs to be redesigned + to accommodate such variances. -commit f5b51be2c1356341dec4c8aa2746f004114b02fc -Merge: 3137808 9e3fee0 +commit 86b24811e1a1f75d6580a2cb2e7aba8499df7b3c +Merge: 32df078 722ab50 Author: Balasubramanian Kandasamy -Date: Tue Jun 23 14:01:34 2015 +0200 - - Empty version change upmerge - -commit 9e3fee076ce8dfafc790d5b1d01b7075b591bd1a -Merge: 9ee79c5 031b2e2 -Author: Balasubramanian Kandasamy -Date: Tue Jun 23 13:59:40 2015 +0200 - - Empty version change upmerge - -commit 031b2e277315c702debc63ecc728aa770b29fdf0 -Author: Balasubramanian Kandasamy -Date: Tue Jun 23 13:56:39 2015 +0200 - - Raise version number after tagging 5.1.76 - -commit 313780897d25cff1251b2696d94317a1d8a6463b -Author: Kristofer Pettersson -Date: Tue Jun 23 11:29:57 2015 +0200 - - BUG#20894024 - FIREWALL STILL DEPENDS ON MAX_DIGEST_SIZE OF THE P_S DIGEST - - Fix for missing symbols compilation error on Windows. - -commit ef825d8b1f732a74db7d5b006d8b1b7e39f7b041 -Merge: a6592d1 9ee79c5 -Author: Murthy Narkedimilli -Date: Tue Jun 23 06:08:47 2015 +0200 - - Empty version change upmerge - -commit 9ee79c5d180dbc7ac1393d5e8d6b7977522e5c42 -Author: Murthy Narkedimilli -Date: Tue Jun 23 06:06:07 2015 +0200 +Date: Mon Jun 27 12:52:39 2016 +0530 - Raise version number after cloning 5.5.45 + Raise version number after cloning 5.6.32 -commit a6592d1087983d16841f07357f46ec2226edf1b6 +commit 722ab50d01a795895a6ca8f13b3409b1919f16c0 Author: Balasubramanian Kandasamy -Date: Tue Jun 23 04:40:22 2015 +0200 +Date: Mon Jun 27 12:48:57 2016 +0530 - Raise version number after cloning 5.6.26 + Raise version number after cloning 5.5.51 diff -Nru mysql-5.6-5.6.27/Docs/INFO_SRC mysql-5.6-5.6.33/Docs/INFO_SRC --- mysql-5.6-5.6.27/Docs/INFO_SRC 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/Docs/INFO_SRC 2016-08-26 11:31:24.000000000 +0000 @@ -1,7 +1,7 @@ -commit: 0f6cfdf6a16c7c5806786a194cd4f40a2eb3a9e1 -date: 2015-09-18 16:15:58 +0200 -build-date: 2015-09-18 16:17:25 +0200 -short: 0f6cfdf -branch: mysql-5.6.27-release +commit: 259f2ca9477c92b6e9a91cb37dac19d24ffcacd9 +date: 2016-08-26 13:01:54 +0200 +build-date: 2016-08-26 13:22:54 +0200 +short: 259f2ca +branch: mysql-5.6.33-release -MySQL source 5.6.27 +MySQL source 5.6.33 diff -Nru mysql-5.6-5.6.27/Docs/INSTALL-BINARY mysql-5.6-5.6.33/Docs/INSTALL-BINARY --- mysql-5.6-5.6.27/Docs/INSTALL-BINARY 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/Docs/INSTALL-BINARY 1970-01-01 00:00:00.000000000 +0000 @@ -1,2594 +0,0 @@ -2.2 Installing MySQL on Unix/Linux Using Generic Binaries - - Oracle provides a set of binary distributions of MySQL. These - include generic binary distributions in the form of - compressed tar files (files with a .tar.gz extension) for a - number of platforms, and binaries in platform-specific - package formats for selected platforms. - - This section covers the installation of MySQL from a - compressed tar file binary distribution. For other - platform-specific package formats, see the other - platform-specific sections. For example, for Windows - distributions, see Section 2.3, "Installing MySQL on - Microsoft Windows." - - To obtain MySQL, see Section 2.1.2, "How to Get MySQL." - - MySQL compressed tar file binary distributions have names of - the form mysql-VERSION-OS.tar.gz, where VERSION is a number - (for example, 5.6.28), and OS indicates the type of operating - system for which the distribution is intended (for example, - pc-linux-i686 or winx64). - Warning - - If you have previously installed MySQL using your operating - system native package management system, such as yum or - apt-get, you may experience problems installing using a - native binary. Make sure your previous MySQL installation has - been removed entirely (using your package management system), - and that any additional files, such as old versions of your - data files, have also been removed. You should also check for - configuration files such as /etc/my.cnf or the /etc/mysql - directory and delete them. - - For information about replacing third-party packages with - official MySQL packages, see the related Apt guide - (http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/) or - Yum guide. - Warning - - MySQL has a dependency on the libaio library. Data directory - initialization and subsequent server startup steps will fail - if this library is not installed locally. If necessary, - install it using the appropriate package manager. For - example, on Yum-based systems: -shell> yum search libaio # search for info -shell> yum install libaio # install library - - Or, on APT-based systems: -shell> apt-cache search libaio # search for info -shell> apt-get install libaio1 # install library - - If you run into problems and need to file a bug report, - please use the instructions in Section 1.6, "How to Report - Bugs or Problems." - - On Unix, to install a compressed tar file binary - distribution, unpack it at the installation location you - choose (typically /usr/local/mysql). This creates the - directories shown in the following table. - - Table 2.3 MySQL Installation Layout for Generic Unix/Linux - Binary Package - Directory Contents of Directory - bin, scripts mysqld server, client and utility programs - data Log files, databases - docs MySQL manual in Info format - man Unix manual pages - include Include (header) files - lib Libraries - share Miscellaneous support files, including error messages, - sample configuration files, SQL for database installation - sql-bench Benchmarks - - Debug versions of the mysqld binary are available as - mysqld-debug. To compile your own debug version of MySQL from - a source distribution, use the appropriate configuration - options to enable debugging support. See Section 2.9, - "Installing MySQL from Source." - - To install and use a MySQL binary distribution, the command - sequence looks like this: -shell> groupadd mysql -shell> useradd -r -g mysql mysql -shell> cd /usr/local -shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz -shell> ln -s full-path-to-mysql-VERSION-OS mysql -shell> cd mysql -shell> chown -R mysql . -shell> chgrp -R mysql . -shell> scripts/mysql_install_db --user=mysql -shell> chown -R root . -shell> chown -R mysql data -shell> bin/mysqld_safe --user=mysql & -# Next command is optional -shell> cp support-files/mysql.server /etc/init.d/mysql.server - - Note - - This procedure assumes that you have root (administrator) - access to your system. Alternatively, you can prefix each - command using the sudo (Linux) or pfexec (OpenSolaris) - command. - Note - - The procedure does not assign passwords to MySQL accounts. To - do so, use the instructions in Section 2.10.4, "Securing the - Initial MySQL Accounts." - - As of MySQL 5.6.8, mysql_install_db creates a default option - file named my.cnf in the base installation directory. This - file is created from a template included in the distribution - package named my-default.cnf. For more information, see - Section 5.1.2.2, "Using a Sample Default Server Configuration - File." - - A more detailed version of the preceding description for - installing a binary distribution follows. - -Create a mysql User and Group - - If your system does not already have a user and group to use - for running mysqld, you may need to create one. The following - commands add the mysql group and the mysql user. You might - want to call the user and group something else instead of - mysql. If so, substitute the appropriate name in the - following instructions. The syntax for useradd and groupadd - may differ slightly on different versions of Unix, or they - may have different names such as adduser and addgroup. -shell> groupadd mysql -shell> useradd -r -g mysql mysql - - Note - - Because the user is required only for ownership purposes, not - login purposes, the useradd command uses the -r option to - create a user that does not have login permissions to your - server host. Omit this option to permit logins for the user, - or if your useradd does not support the option. - -Obtain and Unpack the Distribution - - Pick the directory under which you want to unpack the - distribution and change location into it. The example here - unpacks the distribution under /usr/local. The instructions, - therefore, assume that you have permission to create files - and directories in /usr/local. If that directory is - protected, you must perform the installation as root. -shell> cd /usr/local - - Obtain a distribution file using the instructions in Section - 2.1.2, "How to Get MySQL." For a given release, binary - distributions for all platforms are built from the same MySQL - source distribution. - - Unpack the distribution, which creates the installation - directory. Then create a symbolic link to that directory. tar - can uncompress and unpack the distribution if it has z option - support: -shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz -shell> ln -s full-path-to-mysql-VERSION-OS mysql - - The tar command creates a directory named mysql-VERSION-OS. - The ln command makes a symbolic link to that directory. This - enables you to refer more easily to the installation - directory as /usr/local/mysql. - - To install MySQL from a compressed tar file binary - distribution, your system must have GNU gunzip to uncompress - the distribution and a reasonable tar to unpack it. If your - tar program supports the z option, it can both uncompress and - unpack the file. - - GNU tar is known to work. The standard tar provided with some - operating systems is not able to unpack the long file names - in the MySQL distribution. You should download and install - GNU tar, or if available, use a preinstalled version of GNU - tar. Usually this is available as gnutar, gtar, or as tar - within a GNU or Free Software directory, such as /usr/sfw/bin - or /usr/local/bin. GNU tar is available from - http://www.gnu.org/software/tar/. - - If your tar does not have z option support, use gunzip to - unpack the distribution and tar to unpack it. Replace the - preceding tar command with the following alternative command - to uncompress and extract the distribution: -shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - - -Perform Postinstallation Setup - - The remainder of the installation process involves setting - distribution ownership and access permissions, initializing - the data directory, starting the MySQL server, and setting up - the configuration file. For instructions, see Section 2.10, - "Postinstallation Setup and Testing." -2.3 Installing MySQL on Microsoft Windows - - There are several different methods to install MySQL on - Microsoft Windows. - -Simple Installation Method - - The simplest and recommended method is to download MySQL - Installer (for Windows) and let it install and configure all - of the MySQL products on your system. Here is how: - - * Download MySQL Installer from - http://dev.mysql.com/downloads/installer/ and execute it. - Note - Unlike the standard MySQL Installer, the smaller - "web-community" version does not bundle any MySQL - applications but it will download the MySQL products you - choose to install. - - * Choose the appropriate Setup Type for your system. - Typically you will choose Developer Default to install - MySQL server and other MySQL tools related to MySQL - development, helpful tools like MySQL Workbench. Or, - choose the Custom setup type to manually select your - desired MySQL products. - Note - Multiple versions of MySQL server can exist on a single - system. You can choose one or multiple versions. - - * Complete the installation process by following the MySQL - Installation wizard's instructions. This will install - several MySQL products and start the MySQL server. - - * MySQL is now installed. You probably configured MySQL as - a service that will automatically start MySQL server - every time you restart your system. - - Note - - You probably also installed other helpful MySQL products like - MySQL Workbench and MySQL Notifier on your system. Consider - loading Chapter 26, "MySQL Workbench" to check your new MySQL - server connection, and Section 2.3.4, "MySQL Notifier" to - view the connection's status. By default, these two programs - automatically start after installing MySQL. - - This process also installs the MySQL Installer application on - your system, and later you can use MySQL Installer to upgrade - or reconfigure your MySQL products. - -Additional Installation Information - - MySQL is available for Microsoft Windows, for both 32-bit and - 64-bit versions. For supported Windows platform information, - see - http://www.mysql.com/support/supportedplatforms/database.html - . - - It is possible to run MySQL as a standard application or as a - Windows service. By using a service, you can monitor and - control the operation of the server through the standard - Windows service management tools. For more information, see - Section 2.3.5.7, "Starting MySQL as a Windows Service." - - Generally, you should install MySQL on Windows using an - account that has administrator rights. Otherwise, you may - encounter problems with certain operations such as editing - the PATH environment variable or accessing the Service - Control Manager. Once installed, MySQL does not need to be - executed using a user with Administrator privileges. - - For a list of limitations on the use of MySQL on the Windows - platform, see Section D.10.6, "Windows Platform Limitations." - - In addition to the MySQL Server package, you may need or want - additional components to use MySQL with your application or - development environment. These include, but are not limited - to: - - * To connect to the MySQL server using ODBC, you must have - a Connector/ODBC driver. For more information, including - installation and configuration instructions, see MySQL - Connector/ODBC Developer Guide - (http://dev.mysql.com/doc/connector-odbc/en/index.html). - Note - MySQL Installer will install and configure Connector/ODBC - for you. - - * To use MySQL server with .NET applications, you must have - the Connector/Net driver. For more information, including - installation and configuration instructions, see MySQL - Connector/Net Developer Guide - (http://dev.mysql.com/doc/connector-net/en/index.html). - Note - MySQL Installer will install and configure Connector/NET - for you. - - MySQL distributions for Windows can be downloaded from - http://dev.mysql.com/downloads/. See Section 2.1.2, "How to - Get MySQL." - - MySQL for Windows is available in several distribution - formats, detailed here. Generally speaking, you should use - MySQL Installer. It contains more features and MySQL products - than the older MSI, is simpler to use than the Zip file, and - you need no additional tools to get MySQL up and running. - MySQL Installer automatically installs MySQL Server and - additional MySQL products, creates an options file, starts - the server, and enables you to create default user accounts. - For more information on choosing a package, see Section - 2.3.2, "Choosing An Installation Package." - - * A MySQL Installer distribution includes MySQL Server and - additional MySQL products including MySQL Workbench, - MySQL Notifier, and MySQL for Excel. MySQL Installer can - also be used to upgrade these products in the future. - For instructions on installing MySQL using MySQL - Installer, see Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - * The standard binary distribution (packaged as a Zip file) - contains all of the necessary files that you unpack into - your chosen location. This package contains all of the - files in the full Windows MSI Installer package, but does - not include an installation program. - For instructions on installing MySQL using the Zip file, - see Section 2.3.5, "Installing MySQL on Microsoft Windows - Using a noinstall Zip Archive." - - * The source distribution format contains all the code and - support files for building the executables using the - Visual Studio compiler system. - For instructions on building MySQL from source on - Windows, see Section 2.9, "Installing MySQL from Source." - - MySQL on Windows considerations: - - * Large Table Support - If you need tables with a size larger than 4GB, install - MySQL on an NTFS or newer file system. Do not forget to - use MAX_ROWS and AVG_ROW_LENGTH when you create tables. - See Section 13.1.17, "CREATE TABLE Syntax." - - * MySQL and Virus Checking Software - Virus-scanning software such as Norton/Symantec - Anti-Virus on directories containing MySQL data and - temporary tables can cause issues, both in terms of the - performance of MySQL and the virus-scanning software - misidentifying the contents of the files as containing - spam. This is due to the fingerprinting mechanism used by - the virus-scanning software, and the way in which MySQL - rapidly updates different files, which may be identified - as a potential security risk. - After installing MySQL Server, it is recommended that you - disable virus scanning on the main directory (datadir) - used to store your MySQL table data. There is usually a - system built into the virus-scanning software to enable - specific directories to be ignored. - In addition, by default, MySQL creates temporary files in - the standard Windows temporary directory. To prevent the - temporary files also being scanned, configure a separate - temporary directory for MySQL temporary files and add - this directory to the virus scanning exclusion list. To - do this, add a configuration option for the tmpdir - parameter to your my.ini configuration file. For more - information, see Section 2.3.5.2, "Creating an Option - File." - -2.3.1 MySQL Installation Layout on Microsoft Windows - - For MySQL 5.6 on Windows, the default installation directory - is C:\Program Files\MySQL\MySQL Server 5.6. Some Windows - users prefer to install in C:\mysql, the directory that - formerly was used as the default. However, the layout of the - subdirectories remains the same. - - All of the files are located within this parent directory, - using the structure shown in the following table. - - Table 2.4 Default MySQL Installation Layout for Microsoft - Windows - Directory Contents of Directory Notes - bin, scripts mysqld server, client and utility programs - %ALLUSERSPROFILE%\MySQL\MySQL Server 5.6\ Log files, - databases (Windows XP, Windows Server 2003) The Windows - system variable %ALLUSERSPROFILE% defaults to C:\Documents - and Settings\All Users\Application Data - %PROGRAMDATA%\MySQL\MySQL Server 5.6\ Log files, databases - (Vista, Windows 7, Windows Server 2008, and newer) The - Windows system variable %PROGRAMDATA% defaults to - C:\ProgramData - examples Example programs and scripts - include Include (header) files - lib Libraries - share Miscellaneous support files, including error messages, - character set files, sample configuration files, SQL for - database installation - - If you install MySQL using the MySQL Installer, this package - creates and sets up the data directory that the installed - server will use, and also creates a pristine "template" data - directory named data under the installation directory. After - an installation has been performed using this package, the - template data directory can be copied to set up additional - MySQL instances. See Section 5.3, "Running Multiple MySQL - Instances on One Machine." - -2.3.2 Choosing An Installation Package - - For MySQL 5.6, there are multiple installation package - formats to choose from when installing MySQL on Windows. - Note - - Program Database (PDB) files (with file name extension pdb) - provide information for debugging your MySQL installation in - the event of a problem. These files are included in ZIP - Archive distributions (but not MSI distributions) of MySQL. - - * MySQL Installer: This package has a file name similar to - mysql-installer-community-5.6.28.0.msi or - mysql-installer-commercial-5.6.28.0.msi, and utilizes - MSIs to automatically install MySQL server and other - products. It will download and apply updates to itself, - and for each of the installed products. It also - configures the additional non-server products. - The installed products are configurable, and this - includes: documentation with samples and examples, - connectors (such as C, C++, J, NET, and ODBC), MySQL - Workbench, MySQL Notifier, MySQL for Excel, and the MySQL - Server with its components. - MySQL Installer will run on all Windows platforms that - are supported by MySQL (see - http://www.mysql.com/support/supportedplatforms/database. - html). - Note - Because MySQL Installer is not a native component of - Microsoft Windows and depends on .NET, it will not work - on minimal installation options like the "Server Core" - version of Windows Server 2008. - For instructions on installing MySQL using MySQL - Installer, see Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - * The Noinstall Archive: This package has a file name - similar to mysql-5.6.28-win32.zip or - mysql-5.6.28-winx64.zip, and contains all the files found - in the Complete install package, with the exception of - the GUI. It also contains PDB files. This package does - not include an automated installer, and must be manually - installed and configured. - - MySQL Installer is recommended for most users. - - Your choice of install package affects the installation - process you must follow. If you choose to use MySQL - Installer, see Section 2.3.3, "Installing MySQL on Microsoft - Windows Using MySQL Installer." If you choose to install a - Noinstall archive, see Section 2.3.5, "Installing MySQL on - Microsoft Windows Using a noinstall Zip Archive." - -2.3.3 Installing MySQL on Microsoft Windows Using MySQL Installer - - MySQL Installer is an application that manages MySQL products - on Microsoft Windows. It installs, updates, removes, and - configures MySQL products, and remains on the system as its - own application. MySQL Installer is only available for - Microsoft Windows, and includes both GUI and command-line - interfaces. - - The supported MySQL products include: - - * MySQL server (http://dev.mysql.com/doc/) (one or multiple - versions on the same system) - - * MySQL Workbench - - * MySQL Connectors - (http://dev.mysql.com/doc/index-connectors.html) (.Net / - Python / ODBC / Java / C / C++) - - * MySQL Notifier - - * MySQL for Excel - (http://dev.mysql.com/doc/mysql-for-excel/en/index.html) - - * MySQL for Visual Studio - (http://dev.mysql.com/doc/connector-net/en/connector-net- - visual-studio.html) - - * MySQL Utilities and MySQL Fabric - (http://dev.mysql.com/doc/index-utils-fabric.html) - - * MySQL Samples and Examples - - * MySQL Documentation - - * MySQL Installer is also installed and remains on the - system as its own application - - * The Enterprise edition installs the Enterprise versions - of the above products, and also includes MySQL Enterprise - Backup and MySQL Enterprise Firewall - -Installer package types - - - * Full: Bundles all of the MySQL products (including the - MySQL server). The file size is over 300MB, and its name - has the form mysql-installer-community-VERSION.N.msi - where VERSION is the MySQL Server version number such as - 5.6 and N is the package number, which begins at 0. - - * Web: Only contains the Installer and configuration files, - and it downloads the MySQL products you choose to - install. The size of this file is about 2MB; the name of - the file has the form - mysql-installer-community-web-VERSION.N.msi where VERSION - is the MySQL Server version number such as 5.6 and N is - the package number, which begins at 0. - - * Updates: MySQL Installer can upgrade itself, so an - additional download is not requires to update MySQL - Installer. - -Installer editions - - - * Community edition: Downloadable at - http://dev.mysql.com/downloads/installer/. It installs - the community edition of all MySQL products. - - * Commercial edition: Downloadable at either My Oracle - Support (https://support.oracle.com/) (MOS) or - https://edelivery.oracle.com/. It installs the commercial - version of all MySQL products, including Workbench SE/EE, - MySQL Enterprise Backup, and MySQL Enterprise Firewall. - It also integrates with your MOS account. - Note - Entering your MOS credentials is optional when installing - bundled MySQL products, but your credentials are required - when choosing non-bundled MySQL products that MySQL - Installer must download. - - For notes detailing the changes in each release of MySQL - Installer, see MySQL Installer Release Notes - (http://dev.mysql.com/doc/relnotes/mysql-installer/en/). - - MySQL Installer is compatible with pre-existing - installations, and adds them to its list of installed - components. While the standard MySQL Installer is bundled - with a specific version of MySQL server, a single MySQL - Installer instance can install and manage multiple MySQL - server versions. For example, a single MySQL Installer - instance can install (and update) versions 5.5, 5.6, and 5.7 - on the same host. - Note - - A single host can not have both community and commercial - editions of MySQL server installed. For example, if you want - both MySQL Server 5.6 and 5.7 installed on a single host, - both must be the same edition. - - MySQL Installer handles the initial configuration and set up - of the applications. For example: - - 1. It creates the configuration file (my.ini) that is used - to configure the MySQL Server. The values written to this - file are influenced by choices you make during the - installation process. - Note - Some definitions are host dependent. For example, - query_cache is enabled if the host has fewer than three - cores. - - 2. It can optionally import example databases. - - 3. By default, a Windows service for the MySQL server is - added. - - 4. It can optionally create MySQL Server user accounts with - configurable permissions based on general roles, such as - DB Administrator, DB Designer, and Backup Admin. It - optionally creates a Windows user named MysqlSys with - limited privileges, which would then run the MySQL - Server. - User accounts may also be added and configured in MySQL - Workbench. - - 5. Checking Show Advanced Options allows additional Logging - Options to be set. This includes defining custom file - paths for the error log, general log, slow query log - (including the configuration of seconds it requires to - execute a query), and the binary log. - - MySQL Installer can optionally check for updated components - and download them for you. - -2.3.3.1 MySQL Installer GUI - - Installing MySQL Installer adds a link to the Start menu - under the MySQL group. Click Start, All Programs MySQL, MySQL - Installer to reload the MySQL Installer GUI. - Note - - Full permissions are granted to the user executing MySQL - Installer to all generated files, such as my.ini. This does - not apply to files and directories for specific products, - such as the MySQL server data directory in %ProgramData% that - is owned by SYSTEM. - - MySQL Installer requires you to accept the license agreement - before it will install MySQL products. - - Figure 2.7 MySQL Installer - License Agreement - MySQL Installer - License Agreement - -Installing New Packages - - Choose the appropriate Setup Type for your system. This type - determines which MySQL products are initially installed on - your system, or select Custom to manually choose the - products. - - * Developer: Install all products needed to develop - applications with MySQL. This is the default option. - - * Server only: Only install the MySQL server. - - * Client only: Only install the MySQL client products, such - as MySQL Workbench. This does not include the MySQL - server. - - * Full: Install all available MySQL products. - - * Custom: Manually select the MySQL products to install, - and optionally configure custom MySQL data and - installation paths. - Note - After the initial installation, you may use MySQL - Installer to manually select MySQL products to install or - remove. In other words, MySQL Installer becomes a MySQL - product management system. - - Figure 2.8 MySQL Installer - Choosing a Setup Type - MySQL Installer - Choosing a Setup Type - - MySQL Installer checks your system for the external - requirements (pre-requisites) required to install the - selected MySQL products. MySQL Installer can download and - install some prerequisites, but others require manual - intervention. Download and install all prerequisites that - have Status set to "Manual". Click Check to recheck if a - manual prerequisite was installed. After manually installing - those requirements, click Execute to download and install the - other prerequisites. Once finished, click Next to continue. - - Figure 2.9 MySQL Installer - Check Requirements - MySQL Installer - Check Requirements - - The next window lists the MySQL products that are scheduled - for installation: - - Figure 2.10 MySQL Installer - Installation Progress - MySQL Installer - Installation Progress - - As components are installed, their Status changes from a - progress percentage to "Complete". - - After all components are installed, the next step configures - some of the recently installed MySQL products. The - Configuration Overview window displays the progress and then - loads a configuration window, if required. Our example - configures MySQL Server 5.6.x. - -Configuring MySQL Server - - Configuring the MySQL server begins with defining several - Type and Networking options. - - Figure 2.11 MySQL Installer - Configuration Overview - MySQL Installer - Configuration Overview - - Server Configuration Type - - Choose the MySQL server configuration type that describes - your setup. This setting defines the amount of system - resources (memory) that will be assigned to your MySQL server - instance. - - * Developer: A machine that will host many other - applications, and typically this is your personal - workstation. This option configures MySQL to use the - least amount of memory. - - * Server: Several other applications will be running on - this machine, such as a web server. This option - configures MySQL to use a medium amount of memory. - - * Dedicated: A machine that is dedicated to running the - MySQL server. Because no other major applications will - run on this server, such as a web server, this option - configures MySQL to use the majority of available memory. - - Connectivity - - Connectivity options control how the connection to MySQL is - made. Options include: - - * TCP/IP: You may enable TCP/IP Networking here as - otherwise only localhost connections are allowed. Also - define the Port Number and whether to open the firewall - port for network access. - - * Named Pipe: Enable and define the pipe name, similar to - using the --enable-named-pipe option. - - * Shared Memory: Enable and then define the memory name, - similar to using the --shared-memory option. - - Advanced Configuration - - Check Show Advanced Options to set additional Logging - Options. This includes defining custom file paths for the - error log, general log, slow query log (including the - configuration of seconds it requires to execute a query), and - the binary log. - - Figure 2.12 MySQL Installer - MySQL Server Configuration: - Type and Networking - MySQL Installer- MySQL Server Configuration: Type and - Networking - -Accounts and Roles - - Next, define your MySQL account information. Assigning a root - password is required. - - Optionally, you can add additional MySQL user accounts with - predefined user roles. Each predefined role, such as "DB - Admin", are configured with their own set of privileges. For - example, the "DB Admin" role has more privileges than the "DB - Designer" role. Click the Role dropdown for a list of role - descriptions. - Note - - If the MySQL Server is already installed, then you must also - enter the Current Root Password. - - Figure 2.13 MySQL Installer - MySQL Server Configuration: - User Accounts and Roles - MySQL Installer - MySQL Server Configuration: User Accounts - and Roles - - Figure 2.14 MySQL Installer - MySQL Server Configuration: - User Accounts and Roles: Adding a User - MySQL Installer - MySQL Server Configuration: User Accounts - and Roles: Adding a User - -Windows Service - - Next, configure the Windows Service details. This includes - the service name, whether the MySQL server should be loaded - at startup, and how the MySQL server Windows service is - executed. - - Figure 2.15 MySQL Installer - MySQL Server Configuration: - Windows Service - MySQL Installer - MySQL Server Configuration: Windows Service - Note - - When configuring Run Windows Services as ... using a Custom - User, the custom user must have privileges to log on to - Microsoft Windows as a service. The Next button will be - disabled until this user is configured with the required - privileges. - - On Microsoft Windows 7, this is configured by loading the - Start Menu, Control Panel, Administrative Tools, Local - Security Policy, Local Policies, User Rights Assignment, then - Log On As A Service. Choose Add User or Group here to add the - custom user, and then OK, OK to save. - -Advanced Options - - The next configuration step is available if the Advanced - Configuration option was checked. This section includes - options that are related to the MySQL log files: - - Figure 2.16 MySQL Installer - MySQL Server Configuration: - Logging Options - MySQL Installer - MySQL Server Configuration: Logging Options - - Click Next to continue on to the final page before all of the - requested changes are applied. This Apply Server - Configuration page details the configuration steps that will - be performed. - - Figure 2.17 MySQL Installer - MySQL Server Configuration: - Apply Server Configuration - MySQL Installer - MySQL Server Configuration: Apply Server - Configuration - - Click Execute to execute the configuration steps. The icon - for each step toggles from white to green on success, or the - process stops on failure. Click the Log tab to view the log. - - After the MySQL Installer configuration process is finished, - MySQL Installer reloads the opening page where you can - execute other installation and configuration related actions. - - MySQL Installer is added to the Microsoft Windows Start menu - under the MySQL group. Opening MySQL Installer loads its - dashboard where installed MySQL products are listed, and - other MySQL Installer actions are available: - - Figure 2.18 MySQL Installer - Main Dashboard - MySQL Installer - Main Dashboard - -Adding MySQL Products - - Click Add to add new products. This loads the Select Products - and Features page: - - Figure 2.19 MySQL Installer - Select Products and Features - MySQL Installer - Select Products and Features - - From here, choose the MySQL products you want to install from - the left Available Products pane, and then click the green - right arrow to queue products for installation. - - Optionally, click Edit to open the product and features - search filter: - - Figure 2.20 MySQL Installer - Select Products and Features - Filter - MySQL Installer - Select Products and Features Filter - - For example, you might choose to include Pre-Release products - in your selections, such as a Beta product that has not yet - reached General Availability (GA) status. - - Select all of the MySQL products you want to install, then - click Next to continue using the defaults, or highlight a - selected product and click Advanced Options to optionally - alter options such as the MySQL server data and installation - paths. Click Execute to execute the installation process to - install all of the selected products. - -2.3.3.1.1 MySQL Product Catalog - - MySQL Installer stores a MySQL product catalog. The catalog - can be updated either manually or automatically, and the - catalog change history is also available. - - Manual updates - - You can update the MySQL product catalog at any time by - clicking Catalog on the Installer dashboard. - Note - - This also checks for a newer MySQL Installer version, and - prompts for an update if one is present. - - Figure 2.21 MySQL Installer - Open the MySQL Product Catalog - MySQL Installer - Open the MySQL Product Catalog - - From there, click Execute to update the product catalog. - - Automatic updates - - You can configure MySQL Installer to automatically update the - MySQL product catalog once per day. To enable this feature - and set the update time, click the wrench icon on the - Installer dashboard. - - The next window configures the Automatic Catalog Update. - Enable or disable this feature, and also set the hour. - - Figure 2.22 MySQL Installer - Configure the Catalog Scheduler - MySQL Installer - Configure the Catalog Scheduler - - This option uses the Windows Task Scheduler to schedule a - task named "ManifestUpdate". - - Change History - - MySQL Installer tracks the change history for all of the - MySQL products. Click Catalog from the dashboard, optionally - update the catalog (or, toggle the Do not update at this time - checkbox), click Next/Execute, and then view the change - history. - - Figure 2.23 MySQL Installer - Catalog Change History - MySQL Installer - Catalog Change History - -2.3.3.1.2 Remove MySQL Products - - MySQL Installer can also remove MySQL products from your - system. To remove a MySQL product, click Remove from the - Installer dashboard. This opens a window with a list of - installed MySQL products. Select the MySQL products you want - to remove (uninstall), and then click Execute to begin the - removal process. - Note - - To select all MySQL products, click the [ ] checkbox to the - left of the Product label. - - Figure 2.24 MySQL Installer - Removing Products: Select - MySQL Installer - Removing Products: Select - - Figure 2.25 MySQL Installer - Removing Products: Executed - MySQL Installer - Removing Products: Executed - -2.3.3.1.3 Alter MySQL Products - - Use MySQL Installer to modify, configure, or upgrade your - MySQL product installations. - -Upgrade - - Upgradable MySQL products are listed on the main dashboard - with an arrow icon ( [wb-icon-upgrade-arrow.png] ) next to - their version number. - - Figure 2.26 MySQL Installer - Upgrade a MySQL Product - MySQL Installer - Upgrade a MySQL Product - Note - - The "upgrade" functionality requires a current product - catalog. This catalog is updated either manually or - automatically (daily) by enabling the Automatic Catalog - Update feature. For additional information, see Section - 2.3.3.1.1, "MySQL Product Catalog." - - Click Upgrade to upgrade the available products. Our example - indicates that MySQL Workbench 6.2.4 can be upgraded version - 6.3.1 or 6.2.5, and MySQL server from 5.5.41 to 5.5.42. - - Figure 2.27 MySQL Installer - Select Products To Upgrade - MySQL Installer - Select Products To Upgrade - - If multiple upgrade versions are available (such as our MySQL - Workbench example above), select the desired version for the - upgrade in the Available Upgrades area. - Note - - Optionally, click the Changes link to view the version's - release notes. - - After selecting (checking) the products and versions to - upgrade, click Next to begin the upgrade process. - - Figure 2.28 MySQL Installer - Apply Updates - MySQL Installer - Apply Updates - - A MySQL server upgrade will also check and upgrade the - server's database. Although optional, this step is - recommended. - - Figure 2.29 MySQL Installer - Check and Upgrade Database - MySQL Installer - Check and Upgrade Database - - Upon completion, your upgraded products will be upgraded and - available to use. A MySQL server upgrade also restarts the - MySQL server. - -Reconfigure - - Some MySQL products, such as the MySQL server, include a - Reconfigure option. It opens the same configuration options - that were set when the MySQL product was installed, and is - pre-populated with the current values. - - To execute, click the Reconfigure link under the Quick Action - column on the main dashboard for the MySQL product that you - want to reconfigure. - - Figure 2.30 MySQL Installer - Reconfigure a MySQL Product - MySQL Installer - Reconfigure a MySQL Product - - In the case of the MySQL server, this opens the familiar - configuration wizard. - - Figure 2.31 MySQL Installer - Reconfiguration Wizard - MySQL Installer - Reconfiguration Wizard - -Modify - - Many MySQL products contain feature components that can be - added or removed. For example, Debug binaries and Client - Programs are subcomponents of the MySQL server. - - The modify the features of a product, click Modify on the - main dashboard. - - Figure 2.32 MySQL Installer - Modify Product Features - MySQL Installer - Modify Product Features - - Click Execute to execute the modification request. - -2.3.3.2 MySQL Installer Console - - MySQLInstallerConsole provides functionality similar to the - GUI version of MySQL Installer, but from the command-line. It - is installed when MySQL Installer is initially executed, and - then available within the MySQL Installer directory. - Typically that is in C:\Program Files (x86)\MySQL\MySQL - Installer\, and the console must be executed with - administrative privileges. - - To use, invoke the Command Prompt with administrative - privileges by choosing Start, Accessories, then right-click - on Command Prompt and choose Run as administrator. And from - the command-line, optionally change the directory to where - MySQLInstallerConsole is located: -C:\> cd "C:\Program Files (x86)\MySQL\MySQL Installer for Windows" -C:\> MySQLInstallerConsole.exe help - -C:\Program Files (x86)\MySQL\MySQL Installer for Windows>MySQLInstalle -rConsole.exe help - -The following commands are available: - -Configure - Configures one or more of your installed programs. -Help - Provides list of available commands. -Install - Install and configure one or more available MySQL programs -. -List - Provides an interactive way to list all products available -. -Modify - Modifies the features of installed products. -Remove - Removes one or more products from your system. -Status - Shows the status of all installed products. -Update - Update the current product catalog. -Upgrade - Upgrades one or more of your installed programs. - - MySQLInstallerConsole supports the following options, which - are specified on the command line: - Note - - Configuration block values that contain a colon (":") must be - wrapped in double quotes. For example, - installdir="C:\MySQL\MySQL Server 5.6". - - * configure [product1]:[setting]=[value]; - [product2]:[setting]=[value]; [...] - Configure one or more MySQL products on your system. - Multiple setting=value pairs can be configured for each - product. - Switches include: - - + -showsettings : Displays the available options for - the selected product, by passing in the product name - after -showsettings. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole configure -showsettings server -C:\> MySQLInstallerConsole configure server:port=3307 - - - * help [command] - Displays a help message with usage examples, and then - exits. Pass in an additional command to receive help - specific to that command. -C:\> MySQLInstallerConsole help -C:\> MySQLInstallerConsole help install - - - * install [product]:[features]:[config block]:[config - block]:[config block]; [...] - Install one or more MySQL products on your system. - Switches and syntax options include: - - + -type=[SetupType] : Installs a predefined set of - software. The "SetupType" can be one of the - following: - Note - Non-custom setup types can only be chosen if no - other MySQL products are installed. - o Developer: Installs a complete development - environment. - o Server: Installs a single MySQL server - o Client: Installs client programs and libraries - o Full: Installs everything - o Custom: Installs user selected products. This - is the default option. - - + -showsettings : Displays the available options for - the selected product, by passing in the product name - after -showsettings. - - + -silent : Disable confirmation prompts. - - + [config block]: One or more configuration blocks can - be specified. Each configuration block is a - semicolon separated list of key value pairs. A block - can include either a "config" or "user" type key, - where "config" is the default type if one is not - defined. - Configuration block values that contain a colon - (":") must be wrapped in double quotes. For example, - installdir="C:\MySQL\MySQL Server 5.6". - Only one "config" type block can be defined per - product. A "user" block should be defined for each - user that should be created during the product's - installation. - Note - Adding users is not supported when a product is - being reconfigured. - - + [feature]: The feature block is a semicolon - separated list of features, or '*' to select all - features. -C:\> MySQLInstallerConsole install server;5.6.25:*:port=3307;serverid= -2:type=user;username=foo;password=bar;role=DBManager -C:\> MySQLInstallerConsole install server;5.6.25;x64 -silent - - An example that passes in additional configuration - blocks, broken up by ^ to fit this screen: -C:\> MySQLInstallerConsole install server;5.6.25;x64:*:type=config;ope -nfirewall=true; ^ - generallog=true;binlog=true;serverid=3306;enable_tcpip=true; -port=3306;rootpasswd=pass; ^ - installdir="C:\MySQL\MySQL Server 5.6":type=user;datadir="C: -\MySQL\data";username=foo;password=bar;role=DBManager - - - * list - Lists an interactive console where all of the available - MySQL products can be searched. Execute - MySQLInstallerConsole list to launch the console, and - enter in a substring to search. -C:\> MySQLInstallerConsole list - - - * modify [product1:-removelist|+addlist] - [product2:-removelist|+addlist] [...] - Modifies or displays features of a previously installed - MySQL product. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole modify server -C:\> MySQLInstallerConsole modify server:+documentation -C:\> MySQLInstallerConsole modify server:-debug - - - * remove [product1] [product2] [...] - Removes one ore more products from your system. - - + * : Pass in * to remove all of the MySQL products. - - + -continue : Continue the operation even if an error - occurs. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole remove * -C:\> MySQLInstallerConsole remove server - - - * status - Provides a quick overview of the MySQL products that are - installed on the system. Information includes product - name and version, architecture, date installed, and - install location. -C:\> MySQLInstallerConsole status - - - * upgrade [product1:version] [product2:version], [...] - Upgrades one or more products on your system. Syntax - options include: - - + * : Pass in * to upgrade all products to the latest - version, or pass in specific products. - - + ! : Pass in ! as a version number to upgrade the - MySQL product to its latest version. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole upgrade * -C:\> MySQLInstallerConsole upgrade workbench:6.3.5 -C:\> MySQLInstallerConsole upgrade workbench:! -C:\> MySQLInstallerConsole upgrade workbench:6.3.5 excel:1.3.2 - - - * update - Downloads the latest MySQL product catalog to your - system. On success, the download catalog will be applied - the next time either MySQLInstaller or - MySQLInstallerConsole is executed. -C:\> MySQLInstallerConsole update - - Note - The Automatic Catalog Update GUI option executes this - command from the Windows Task Scheduler. - -2.3.4 MySQL Notifier - - The MySQL Notifier is a tool that enables you to monitor and - adjust the status of your local and remote MySQL Server - instances through an indicator that resides in the system - tray. The MySQL Notifier also gives quick access to several - MySQL GUI tools (such as MySQL Workbench) through its context - menu. - - The MySQL Notifier is installed by MySQL Installer, and (by - default) will start-up when Microsoft Windows is started. - Note - - To install, download and execute the MySQL Installer - (http://dev.mysql.com/downloads/installer/), be sure the - MySQL Notifier product is selected, then proceed with the - installation. See the MySQL Installer manual for additional - details. - - For notes detailing the changes in each release of MySQL - Notifier, see the MySQL Notifier Release Notes - (http://dev.mysql.com/doc/relnotes/mysql-notifier/en/). - - Visit the MySQL Notifier forum - (http://forums.mysql.com/list.php?173) for additional MySQL - Notifier help and support. - - Features include: - - * Start, Stop, and Restart instances of the MySQL Server. - - * Automatically detects (and adds) new MySQL Server - services. These are listed under Manage Monitored Items, - and may also be configured. - - * The Tray icon changes, depending on the status. It's - green if all monitored MySQL Server instances are - running, or red if at least one service is stopped. The - Update MySQL Notifier tray icon based on service status - option, which dictates this behavior, is enabled by - default for each service. - - * Links to other applications like MySQL Workbench, MySQL - Installer, and the MySQL Utilities. For example, choosing - Configure Instance will load the MySQL Workbench Server - Administration window for that particular instance. - - * If MySQL Workbench is also installed, then the Configure - Instance and SQL Editor options are available for local - (but not remote) MySQL instances. - - * Monitoring of both local and remote MySQL instances. - - Note - - Remote monitoring is available since MySQL Notifier 1.1.0. - - The MySQL Notifier resides in the system tray and provides - visual status information for your MySQL Server instances. A - green icon is displayed at the top left corner of the tray - icon if the current MySQL Server is running, or a red icon if - the service is stopped. - - The MySQL Notifier automatically adds discovered MySQL - Services on the local machine, and each service is saved and - configurable. By default, the Automatically add new services - whose name contains option is enabled and set to mysql. - Related Notifications Options include being notified when new - services are either discovered or experience status changes, - and are also enabled by default. And uninstalling a service - will also remove the service from the MySQL Notifier. - Note - - The Automatically add new services whose name contains option - default changed from ".*mysqld.*" to "mysql" in Notifier - 1.1.0. - - Clicking the system tray icon will reveal several options, as - seen in the screenshots below: - - The Service Instance menu is the main MySQL Notifier window, - and enables you to Stop, Start, and Restart the MySQL Server. - - Figure 2.33 MySQL Notifier Service Instance menu - MySQL Notifier Service Instance menu - - The Actions menu includes several links to external - applications (if they are installed), and a Refresh Status - option to manually refresh the status of all monitored - services (in both local and remote computers) and MySQL - instances. - Note - - The main menu will not show the Actions menu when there are - no services being monitored by MySQL Notifier. - Note - - The Refresh Status feature is available since MySQL Notifier - 1.1.0. - - Figure 2.34 MySQL Notifier Actions menu - MySQL Notifier Actions menu - - The Actions, Options menu configures MySQL Notifier and - includes options to: - - * Use colorful status icons: Enables a colorful style of - icons for the tray of the MySQL Notifier. - - * Run at Windows Startup: Allows the application to be - loaded when Microsoft Windows starts. - - * Automatically Check For Updates Every # Weeks: Checks for - a new version of MySQL Notifier, and runs this check - every # weeks. - - * Automatically add new services whose name contains: The - text used to filter services and add them automatically - to the monitored list of the local computer running MySQL - Notifier, and on remote computers already monitoring - Windows services. monitored services, and also filters - the list of the Microsoft Windows services for the Add - New Service dialog. - Prior to version 1.1.0, this option was named - "Automatically add new services that match this pattern." - - * Notify me when a service is automatically added: Will - display a balloon notification from the taskbar when a - newly discovered service is added to the monitored - services list. - - * Notify me when a service changes status: Will display a - balloon notification from the taskbar when a monitored - service changes its status. - - Figure 2.35 MySQL Notifier Options menu - MySQL Notifier Options menu - - The Actions, Manage Monitored Items menu enables you to - configure the monitored services and MySQL instances. First, - with the Services tab open: - - Figure 2.36 MySQL Notifier Manage Services menu - MySQL Notifier Manage Services menu - - The Instances tab is similar: - - Figure 2.37 MySQL Notifier Manage Instances menu - MySQL Notifier Manage Instances menu - - Adding a service or instance (after clicking Add in the - Manage Monitored Items window) enables you to select a - running Microsoft Windows service or instance connection, and - configure MySQL Notifier to monitor it. Add a new service or - instance by clicking service name from the list, then OK to - accept. Multiple services and instances may be selected. - - Figure 2.38 MySQL Notifier Adding new services - MySQL Notifier Adding new services - - And instances: - - Figure 2.39 MySQL Notifier Adding new instances - MySQL Notifier Adding new instances - Note - - The Instances tab available since MySQL Notifier 1.1.0. - -2.3.4.1 Remote monitoring set up and installation instructions - - The MySQL Notifier uses Windows Management Instrumentation - (WMI) to manage and monitor services in remote computers - running Windows XP or later. This guide explains how it - works, and how to set up your system to monitor remote MySQL - instances. - Note - - Remote monitoring is available since MySQL Notifier 1.1.0. - - In order to configure WMI, it is important to understand that - the underlying Distributed Component Object Model (DCOM) - architecture is doing the WMI work. Specifically, MySQL - Notifier is using asynchronous notification queries on remote - Microsoft Windows hosts as .NET events. These events send an - asynchronous callback to the computer running the MySQL - Notifier so it knows when a service status has changed on the - remote computer. Asynchronous notifications offer the best - performance compared to semisynchronous notifications or - synchronous notifications that use timers. - - Asynchronous notifications requires the remote computer to - send a callback to the client computer (thus opening a - reverse connection), so the Windows Firewall and DCOM - settings must be properly configured for the communication to - function properly. - - Figure 2.40 MySQL Notifier Distributed Component Object Model - (DCOM) - MySQL Notifier Distributed Component Object Model (DCOM) - - Most of the common errors thrown by asynchronous WMI - notifications are related to Windows Firewall blocking the - communication, or to DCOM / WMI settings not being set up - properly. For a list of common errors with solutions, see - Section 2.3.4.1, "." - - The following steps are required to make WMI function. These - steps are divided between two machines. A single host - computer that runs MySQL Notifier (Computer A), and multiple - remote machines that are being monitored (Computer B). - -Computer running MySQL Notifier (Computer A) - - - 1. Allow for remote administration by either editing the - Group Policy Editor, or using NETSH: - Using the Group Policy Editor: - a. Click Start, click Run, type GPEDIT.MSC, and then - click OK. - b. Under the Local Computer Policy heading, - double-click Computer Configuration. - c. Double-click Administrative Templates, then Network, - Network Connections, and then Windows Firewall. - d. If the computer is in the domain, then double-click - Domain Profile; otherwise, double-click Standard - Profile. - e. Click Windows Firewall: Allow inbound remote - administration exception. - f. On the Action menu either select Edit, or - double-click the selection from the previous step. - g. Check the Enabled radio button, and then click OK. - Using the NETSH command: - Note - The "netsh firewall" command is deprecated as of - Microsoft Server 2008 and Vista, and replaced with "netsh - advfirewall firewall". - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command: -NETSH advfirewall firewall set service RemoteAdmin enable - - - 2. Open the DCOM port TCP 135: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator) . - b. Execute the following command: -NETSH advfirewall firewall add portopening protocol=tcp port=135 name= -DCOM_TCP135 - - - 3. Add the client application which contains the sink for - the callback (MySqlNotifier.exe) to the Windows Firewall - Exceptions List (use either the Windows Firewall - configuration or NETSH): - Using the Windows Firewall configuration: - a. In the Control Panel, double-click Windows Firewall. - b. In the Windows Firewall window's left panel, click - Allow a program or feature through Windows Firewall. - c. In the Allowed Programs window, click Change - Settings. - d. If MySqlNotifier.exe is in the Allowed programs and - features list, make sure it is checked for the type - of networks the computer connects to (Private, - Public or both). - e. If MySqlNotifier.exe is not in the list, click Allow - another program.... - f. In the Add a Program window, select the - MySqlNotifier.exe if it exists in the Programs list, - otherwise click Browse... and go to the directory - where MySqlNotifier.exe was installed to select it, - then click Add. - g. Make sure MySqlNotifier.exe is checked for the type - of networks the computer connects to (Private, - Public or both). - Using the NETSH command: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command, where you change - "[YOUR_INSTALL_DIRECTORY]": -NETSH advfirewall firewall add allowedprogram program=[YOUR_INSTALL_DI -RECTORY]\MySqlNotifier.exe name=MySqlNotifier - - - 4. If Computer B is either a member of WORKGROUP or is in a - different domain that is untrusted by Computer A, then - the callback connection (Connection 2) is created as an - Anonymous connection. To grant Anonymous connections DCOM - Remote Access permissions: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Access Permission dialog box, select - ANONYMOUS LOGON name in the Group or user names box. - In the Allow column under Permissions for User, - select Remote Access, and then click OK. - -Monitored Remote Computer (Computer B) - - If the user account that is logged into the computer running - the MySQL Notifier (Computer A) is a local administrator on - the remote computer (Computer B), such that the same account - is an administrator on Computer B, you can skip to the "Allow - for remote administration" step. - - Setting DCOM security to allow a non-administrator user to - access a computer remotely: - - 1. Grant "DCOM remote launch" and activation permissions for - a user or group: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Launch Permission dialog box, follow these - steps if your name or your group does not appear in - the Groups or user names list: - i. In the Launch Permission dialog box, click Add. - ii. In the Select Users, Computers, or Groups - dialog box, add your name and the group in the - "Enter the object names to select" box, and - then click OK. - f. In the Launch Permission dialog box, select your - user and group in the Group or user names box. In - the Allow column under Permissions for User, select - Remote Launch, select Remote Activation, and then - click OK. - Grant DCOM remote access permissions: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Access Permission dialog box, select - ANONYMOUS LOGON name in the Group or user names box. - In the Allow column under Permissions for User, - select Remote Access, and then click OK. - - 2. Allowing non-administrator users access to a specific WMI - namespace: - a. In the Control Panel, double-click Administrative - Tools. - b. In the Administrative Tools window, double-click - Computer Management. - c. In the Computer Management window, expand the - Services and Applications tree and double-click the - WMI Control. - d. Right-click the WMI Control icon and select - Properties. - e. In the WMI Control Properties window, click the - Security tab. - f. In the Security tab, select the namespace and click - Security. - g. Locate the appropriate account and check Remote - Enable in the Permissions list. - - 3. Allow for remote administration by either editing the - Group Policy Editor or using NETSH: - Using the Group Policy Editor: - a. Click Start, click Run, type GPEDIT.MSC, and then - click OK. - b. Under the Local Computer Policy heading, - double-click Computer Configuration. - c. Double-click Administrative Templates, then Network, - Network Connections, and then Windows Firewall. - d. If the computer is in the domain, then double-click - Domain Profile; otherwise, double-click Standard - Profile. - e. Click Windows Firewall: Allow inbound remote - administration exception. - f. On the Action menu either select Edit, or - double-click the selection from the previous step. - g. Check the Enabled radio button, and then click OK. - Using the NETSH command: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command: -NETSH advfirewall firewall set service RemoteAdmin enable - - - 4. Now, be sure the user you are logging in with uses the - Name value and not the Full Name value: - a. In the Control Panel, double-click Administrative - Tools. - b. In the Administrative Tools window, double-click - Computer Management. - c. In the Computer Management window, expand the System - Tools then Local Users and Groups. - d. Click the Users node, and on the right side panel - locate your user and make sure it uses the Name - value to connect, and not the Full Name value. - - 5. If the remote computer is running on Windows XP - Professional, make sure that remote logins are not being - forcefully changed to the guest account user (also known - as ForceGuest), which is enabled by default on computers - that are not attached to a domain. - a. Click Start, click Run, type SECPOL.MSC, and then - click OK. - b. Under the Local Policies node, double-click Security - Options. - c. Select Network Access: Sharing and security model - for local accounts and save. - -Common Errors - - - * 0x80070005 - - + DCOM Security was not configured properly (see - Computer B, the Setting DCOM security... step). - - + The remote computer (Computer B) is a member of - WORKGROUP or is in a domain that is untrusted by the - client computer (Computer A) (see Computer A, the - Grant Anonymous connections DCOM Remote Access - permissions step). - - * 0x8007000E - - + The remote computer (Computer B) is a member of - WORKGROUP or is in a domain that is untrusted by the - client computer (Computer A) (see Computer A, the - Grant Anonymous connections DCOM Remote Access - permissions step). - - * 0x80041003 - - + Access to the remote WMI namespace was not - configured properly (see Computer B, the Allowing - non-administrator users access to a specific WMI - namespace step). - - * 0x800706BA - - + The DCOM port is not open on the client computers - (Computer A) firewall. See the Open the DCOM port - TCP 135 step for Computer A. - - + The remote computer (Computer B) is inaccessible - because its network location is set to Public. Make - sure you can access it through the Windows Explorer. - -2.3.5 Installing MySQL on Microsoft Windows Using a noinstall Zip -Archive - - Users who are installing from the noinstall package can use - the instructions in this section to manually install MySQL. - The process for installing MySQL from a Zip archive is as - follows: - - 1. Extract the archive to the desired install directory - - 2. Create an option file - - 3. Choose a MySQL server type - - 4. Start the MySQL server - - 5. Secure the default user accounts - - This process is described in the sections that follow. - -2.3.5.1 Extracting the Install Archive - - To install MySQL manually, do the following: - - 1. If you are upgrading from a previous version please refer - to Section 2.3.8, "Upgrading MySQL on Windows," before - beginning the upgrade process. - - 2. Make sure that you are logged in as a user with - administrator privileges. - - 3. Choose an installation location. Traditionally, the MySQL - server is installed in C:\mysql. The MySQL Installation - Wizard installs MySQL under C:\Program Files\MySQL. If - you do not install MySQL at C:\mysql, you must specify - the path to the install directory during startup or in an - option file. See Section 2.3.5.2, "Creating an Option - File." - Note - The MySQL Installer installs MySQL under C:\Program - Files\MySQL. - - 4. Extract the install archive to the chosen installation - location using your preferred Zip archive tool. Some - tools may extract the archive to a folder within your - chosen installation location. If this occurs, you can - move the contents of the subfolder into the chosen - installation location. - -2.3.5.2 Creating an Option File - - If you need to specify startup options when you run the - server, you can indicate them on the command line or place - them in an option file. For options that are used every time - the server starts, you may find it most convenient to use an - option file to specify your MySQL configuration. This is - particularly true under the following circumstances: - - * The installation or data directory locations are - different from the default locations (C:\Program - Files\MySQL\MySQL Server 5.6 and C:\Program - Files\MySQL\MySQL Server 5.6\data). - - * You need to tune the server settings, such as memory, - cache, or InnoDB configuration information. - - When the MySQL server starts on Windows, it looks for option - files in several locations, such as the Windows directory, - C:\, and the MySQL installation directory (for the full list - of locations, see Section 4.2.6, "Using Option Files"). The - Windows directory typically is named something like - C:\WINDOWS. You can determine its exact location from the - value of the WINDIR environment variable using the following - command: -C:\> echo %WINDIR% - - MySQL looks for options in each location first in the my.ini - file, and then in the my.cnf file. However, to avoid - confusion, it is best if you use only one file. If your PC - uses a boot loader where C: is not the boot drive, your only - option is to use the my.ini file. Whichever option file you - use, it must be a plain text file. - Note - - When using the MySQL Installer to install MySQL Server, it - will create the my.ini at the default location. And as of - MySQL Server 5.5.27, the user running MySQL Installer is - granted full permissions to this new my.ini. - - In other words, be sure that the MySQL Server user has - permission to read the my.ini file. - - You can also make use of the example option files included - with your MySQL distribution; see Section 5.1.2, "Server - Configuration Defaults." - - An option file can be created and modified with any text - editor, such as Notepad. For example, if MySQL is installed - in E:\mysql and the data directory is in E:\mydata\data, you - can create an option file containing a [mysqld] section to - specify values for the basedir and datadir options: -[mysqld] -# set basedir to your installation path -basedir=E:/mysql -# set datadir to the location of your data directory -datadir=E:/mydata/data - - Microsoft Windows path names are specified in option files - using (forward) slashes rather than backslashes. If you do - use backslashes, double them: -[mysqld] -# set basedir to your installation path -basedir=E:\\mysql -# set datadir to the location of your data directory -datadir=E:\\mydata\\data - - The rules for use of backslash in option file values are - given in Section 4.2.6, "Using Option Files." - - The data directory is located within the AppData directory - for the user running MySQL. - - If you would like to use a data directory in a different - location, you should copy the entire contents of the data - directory to the new location. For example, if you want to - use E:\mydata as the data directory instead, you must do two - things: - - 1. Move the entire data directory and all of its contents - from the default location (for example C:\Program - Files\MySQL\MySQL Server 5.6\data) to E:\mydata. - - 2. Use a --datadir option to specify the new data directory - location each time you start the server. - -2.3.5.3 Selecting a MySQL Server Type - - The following table shows the available servers for Windows - in MySQL 5.6. - Binary Description - mysqld Optimized binary with named-pipe support - mysqld-debug Like mysqld, but compiled with full debugging - and automatic memory allocation checking - - All of the preceding binaries are optimized for modern Intel - processors, but should work on any Intel i386-class or higher - processor. - - Each of the servers in a distribution support the same set of - storage engines. The SHOW ENGINES statement displays which - engines a given server supports. - - All Windows MySQL 5.6 servers have support for symbolic - linking of database directories. - - MySQL supports TCP/IP on all Windows platforms. MySQL servers - on Windows also support named pipes, if you start the server - with the --enable-named-pipe option. It is necessary to use - this option explicitly because some users have experienced - problems with shutting down the MySQL server when named pipes - were used. The default is to use TCP/IP regardless of - platform because named pipes are slower than TCP/IP in many - Windows configurations. - -2.3.5.4 Starting the Server for the First Time - - This section gives a general overview of starting the MySQL - server. The following sections provide more specific - information for starting the MySQL server from the command - line or as a Windows service. - - The information here applies primarily if you installed MySQL - using the Noinstall version, or if you wish to configure and - test MySQL manually rather than with the GUI tools. - Note - - The MySQL server will automatically start after using the - MySQL Installer, and the MySQL Notifier GUI can be used to - start/stop/restart at any time. - - The examples in these sections assume that MySQL is installed - under the default location of C:\Program Files\MySQL\MySQL - Server 5.6. Adjust the path names shown in the examples if - you have MySQL installed in a different location. - - Clients have two options. They can use TCP/IP, or they can - use a named pipe if the server supports named-pipe - connections. - - MySQL for Windows also supports shared-memory connections if - the server is started with the --shared-memory option. - Clients can connect through shared memory by using the - --protocol=MEMORY option. - - For information about which server binary to run, see Section - 2.3.5.3, "Selecting a MySQL Server Type." - - Testing is best done from a command prompt in a console - window (or "DOS window"). In this way you can have the server - display status messages in the window where they are easy to - see. If something is wrong with your configuration, these - messages make it easier for you to identify and fix any - problems. - - To start the server, enter this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --console - - For a server that includes InnoDB support, you should see the - messages similar to those following as it starts (the path - names and sizes may differ): -InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist: -InnoDB: a new database to be created! -InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200 -InnoDB: Database physically writes the file full: wait... -InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280 -InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280 -InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280 -InnoDB: Doublewrite buffer not found: creating new -InnoDB: Doublewrite buffer created -InnoDB: creating foreign key constraint system tables -InnoDB: foreign key constraint system tables created -011024 10:58:25 InnoDB: Started - - When the server finishes its startup sequence, you should see - something like this, which indicates that the server is ready - to service client connections: -mysqld: ready for connections -Version: '5.6.28' socket: '' port: 3306 - - The server continues to write to the console any further - diagnostic output it produces. You can open a new console - window in which to run client programs. - - If you omit the --console option, the server writes - diagnostic output to the error log in the data directory - (C:\Program Files\MySQL\MySQL Server 5.6\data by default). - The error log is the file with the .err extension, and may be - set using the --log-error option. - Note - - The accounts that are listed in the MySQL grant tables - initially have no passwords. After starting the server, you - should set up passwords for them using the instructions in - Section 2.10.4, "Securing the Initial MySQL Accounts." - -2.3.5.5 Starting MySQL from the Windows Command Line - - The MySQL server can be started manually from the command - line. This can be done on any version of Windows. - Note - - The MySQL Notifier GUI can also be used to start/stop/restart - the MySQL server. - - To start the mysqld server from the command line, you should - start a console window (or "DOS window") and enter this - command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" - - The path to mysqld may vary depending on the install location - of MySQL on your system. - - You can stop the MySQL server by executing this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" -u root -shutdown - - Note - - If the MySQL root user account has a password, you need to - invoke mysqladmin with the -p option and supply the password - when prompted. - - This command invokes the MySQL administrative utility - mysqladmin to connect to the server and tell it to shut down. - The command connects as the MySQL root user, which is the - default administrative account in the MySQL grant system. - Note - - Users in the MySQL grant system are wholly independent from - any login users under Microsoft Windows. - - If mysqld doesn't start, check the error log to see whether - the server wrote any messages there to indicate the cause of - the problem. By default, the error log is located in the - C:\Program Files\MySQL\MySQL Server 5.6\data directory. It is - the file with a suffix of .err, or may be specified by - passing in the --log-error option. Alternatively, you can try - to start the server with the --console option; in this case, - the server may display some useful information on the screen - that will help solve the problem. - - The last option is to start mysqld with the --standalone and - --debug options. In this case, mysqld writes a log file - C:\mysqld.trace that should contain the reason why mysqld - doesn't start. See Section 24.5.3, "The DBUG Package." - - Use mysqld --verbose --help to display all the options that - mysqld supports. - -2.3.5.6 Customizing the PATH for MySQL Tools - - To make it easier to invoke MySQL programs, you can add the - path name of the MySQL bin directory to your Windows system - PATH environment variable: - - * On the Windows desktop, right-click the My Computer icon, - and select Properties. - - * Next select the Advanced tab from the System Properties - menu that appears, and click the Environment Variables - button. - - * Under System Variables, select Path, and then click the - Edit button. The Edit System Variable dialogue should - appear. - - * Place your cursor at the end of the text appearing in the - space marked Variable Value. (Use the End key to ensure - that your cursor is positioned at the very end of the - text in this space.) Then enter the complete path name of - your MySQL bin directory (for example, C:\Program - Files\MySQL\MySQL Server 5.6\bin) - Note - There must be a semicolon separating this path from any - values present in this field. - Dismiss this dialogue, and each dialogue in turn, by - clicking OK until all of the dialogues that were opened - have been dismissed. You should now be able to invoke any - MySQL executable program by typing its name at the DOS - prompt from any directory on the system, without having - to supply the path. This includes the servers, the mysql - client, and all MySQL command-line utilities such as - mysqladmin and mysqldump. - You should not add the MySQL bin directory to your - Windows PATH if you are running multiple MySQL servers on - the same machine. - - Warning - - You must exercise great care when editing your system PATH by - hand; accidental deletion or modification of any portion of - the existing PATH value can leave you with a malfunctioning - or even unusable system. - -2.3.5.7 Starting MySQL as a Windows Service - - On Windows, the recommended way to run MySQL is to install it - as a Windows service, so that MySQL starts and stops - automatically when Windows starts and stops. A MySQL server - installed as a service can also be controlled from the - command line using NET commands, or with the graphical - Services utility. Generally, to install MySQL as a Windows - service you should be logged in using an account that has - administrator rights. - Note - - The MySQL Notifier GUI can also be used to monitor the status - of the MySQL service. - - The Services utility (the Windows Service Control Manager) - can be found in the Windows Control Panel (under - Administrative Tools on Windows 2000, XP, Vista, and Server - 2003). To avoid conflicts, it is advisable to close the - Services utility while performing server installation or - removal operations from the command line. - -Installing the service - - Before installing MySQL as a Windows service, you should - first stop the current server if it is running by using the - following command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" - -u root shutdown - - Note - - If the MySQL root user account has a password, you need to - invoke mysqladmin with the -p option and supply the password - when prompted. - - This command invokes the MySQL administrative utility - mysqladmin to connect to the server and tell it to shut down. - The command connects as the MySQL root user, which is the - default administrative account in the MySQL grant system. - Note - - Users in the MySQL grant system are wholly independent from - any login users under Windows. - - Install the server as a service using this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --install - - The service-installation command does not start the server. - Instructions for that are given later in this section. - - To make it easier to invoke MySQL programs, you can add the - path name of the MySQL bin directory to your Windows system - PATH environment variable: - - * On the Windows desktop, right-click the My Computer icon, - and select Properties. - - * Next select the Advanced tab from the System Properties - menu that appears, and click the Environment Variables - button. - - * Under System Variables, select Path, and then click the - Edit button. The Edit System Variable dialogue should - appear. - - * Place your cursor at the end of the text appearing in the - space marked Variable Value. (Use the End key to ensure - that your cursor is positioned at the very end of the - text in this space.) Then enter the complete path name of - your MySQL bin directory (for example, C:\Program - Files\MySQL\MySQL Server 5.6\bin), and there should be a - semicolon separating this path from any values present in - this field. Dismiss this dialogue, and each dialogue in - turn, by clicking OK until all of the dialogues that were - opened have been dismissed. You should now be able to - invoke any MySQL executable program by typing its name at - the DOS prompt from any directory on the system, without - having to supply the path. This includes the servers, the - mysql client, and all MySQL command-line utilities such - as mysqladmin and mysqldump. - You should not add the MySQL bin directory to your - Windows PATH if you are running multiple MySQL servers on - the same machine. - - Warning - - You must exercise great care when editing your system PATH by - hand; accidental deletion or modification of any portion of - the existing PATH value can leave you with a malfunctioning - or even unusable system. - - The following additional arguments can be used when - installing the service: - - * You can specify a service name immediately following the - --install option. The default service name is MySQL. - - * If a service name is given, it can be followed by a - single option. By convention, this should be - --defaults-file=file_name to specify the name of an - option file from which the server should read options - when it starts. - The use of a single option other than --defaults-file is - possible but discouraged. --defaults-file is more - flexible because it enables you to specify multiple - startup options for the server by placing them in the - named option file. - - * You can also specify a --local-service option following - the service name. This causes the server to run using the - LocalService Windows account that has limited system - privileges. This account is available only for Windows XP - or newer. If both --defaults-file and --local-service are - given following the service name, they can be in any - order. - - For a MySQL server that is installed as a Windows service, - the following rules determine the service name and option - files that the server uses: - - * If the service-installation command specifies no service - name or the default service name (MySQL) following the - --install option, the server uses the a service name of - MySQL and reads options from the [mysqld] group in the - standard option files. - - * If the service-installation command specifies a service - name other than MySQL following the --install option, the - server uses that service name. It reads options from the - [mysqld] group and the group that has the same name as - the service in the standard option files. This enables - you to use the [mysqld] group for options that should be - used by all MySQL services, and an option group with the - service name for use by the server installed with that - service name. - - * If the service-installation command specifies a - --defaults-file option after the service name, the server - reads options the same way as described in the previous - item, except that it reads options only from the named - file and ignores the standard option files. - - As a more complex example, consider the following command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" - --install MySQL --defaults-file=C:\my-opts.cnf - - Here, the default service name (MySQL) is given after the - --install option. If no --defaults-file option had been - given, this command would have the effect of causing the - server to read the [mysqld] group from the standard option - files. However, because the --defaults-file option is - present, the server reads options from the [mysqld] option - group, and only from the named file. - Note - - On Windows, if the server is started with the --defaults-file - and --install options, --install must be first. Otherwise, - mysqld.exe will attempt to start the MySQL server. - - You can also specify options as Start parameters in the - Windows Services utility before you start the MySQL service. - -Starting the service - - Once a MySQL server has been installed as a service, Windows - starts the service automatically whenever Windows starts. The - service also can be started immediately from the Services - utility, or by using a NET START MySQL command. The NET - command is not case sensitive. - - When run as a service, mysqld has no access to a console - window, so no messages can be seen there. If mysqld does not - start, check the error log to see whether the server wrote - any messages there to indicate the cause of the problem. The - error log is located in the MySQL data directory (for - example, C:\Program Files\MySQL\MySQL Server 5.6\data). It is - the file with a suffix of .err. - - When a MySQL server has been installed as a service, and the - service is running, Windows stops the service automatically - when Windows shuts down. The server also can be stopped - manually by using the Services utility, the NET STOP MySQL - command, or the mysqladmin shutdown command. - - You also have the choice of installing the server as a manual - service if you do not wish for the service to be started - automatically during the boot process. To do this, use the - --install-manual option rather than the --install option: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --install-ma -nual - -Removing the service - - To remove a server that is installed as a service, first stop - it if it is running by executing NET STOP MySQL. Then use the - --remove option to remove it: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --remove - - If mysqld is not running as a service, you can start it from - the command line. For instructions, see Section 2.3.5.5, - "Starting MySQL from the Windows Command Line." - - If you encounter difficulties during installation. see - Section 2.3.6, "Troubleshooting a Microsoft Windows MySQL - Server Installation." - -2.3.5.8 Testing The MySQL Installation - - You can test whether the MySQL server is working by executing - any of the following commands: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqlshow" -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqlshow" -u root m -ysql -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" version -status proc -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" test - - If mysqld is slow to respond to TCP/IP connections from - client programs, there is probably a problem with your DNS. - In this case, start mysqld with the --skip-name-resolve - option and use only localhost and IP addresses in the Host - column of the MySQL grant tables. (Be sure that an account - exists that specifies an IP address or you may not be able to - connect.) - - You can force a MySQL client to use a named-pipe connection - rather than TCP/IP by specifying the --pipe or - --protocol=PIPE option, or by specifying . (period) as the - host name. Use the --socket option to specify the name of the - pipe if you do not want to use the default pipe name. - - If you have set a password for the root account, deleted the - anonymous account, or created a new user account, then to - connect to the MySQL server you must use the appropriate -u - and -p options with the commands shown previously. See - Section 4.2.2, "Connecting to the MySQL Server." - - For more information about mysqlshow, see Section 4.5.6, - "mysqlshow --- Display Database, Table, and Column - Information." - -2.3.6 Troubleshooting a Microsoft Windows MySQL Server Installation - - When installing and running MySQL for the first time, you may - encounter certain errors that prevent the MySQL server from - starting. This section helps you diagnose and correct some of - these errors. - - Your first resource when troubleshooting server issues is the - error log. The MySQL server uses the error log to record - information relevant to the error that prevents the server - from starting. The error log is located in the data directory - specified in your my.ini file. The default data directory - location is C:\Program Files\MySQL\MySQL Server 5.6\data, or - C:\ProgramData\Mysql on Windows 7 and Windows Server 2008. - The C:\ProgramData directory is hidden by default. You need - to change your folder options to see the directory and - contents. For more information on the error log and - understanding the content, see Section 5.2.2, "The Error - Log." - - For information regarding possible errors, also consult the - console messages displayed when the MySQL service is - starting. Use the NET START MySQL command from the command - line after installing mysqld as a service to see any error - messages regarding the starting of the MySQL server as a - service. See Section 2.3.5.7, "Starting MySQL as a Windows - Service." - - The following examples show other common error messages you - might encounter when installing MySQL and starting the server - for the first time: - - * If the MySQL server cannot find the mysql privileges - database or other critical files, it displays these - messages: -System error 1067 has occurred. -Fatal error: Can't open and lock privilege tables: -Table 'mysql.user' doesn't exist - - These messages often occur when the MySQL base or data - directories are installed in different locations than the - default locations (C:\Program Files\MySQL\MySQL Server - 5.6 and C:\Program Files\MySQL\MySQL Server 5.6\data, - respectively). - This situation can occur when MySQL is upgraded and - installed to a new location, but the configuration file - is not updated to reflect the new location. In addition, - old and new configuration files might conflict. Be sure - to delete or rename any old configuration files when - upgrading MySQL. - If you have installed MySQL to a directory other than - C:\Program Files\MySQL\MySQL Server 5.6, ensure that the - MySQL server is aware of this through the use of a - configuration (my.ini) file. Put the my.ini file in your - Windows directory, typically C:\WINDOWS. To determine its - exact location from the value of the WINDIR environment - variable, issue the following command from the command - prompt: -C:\> echo %WINDIR% - - You can create or modify an option file with any text - editor, such as Notepad. For example, if MySQL is - installed in E:\mysql and the data directory is - D:\MySQLdata, you can create the option file and set up a - [mysqld] section to specify values for the basedir and - datadir options: -[mysqld] -# set basedir to your installation path -basedir=E:/mysql -# set datadir to the location of your data directory -datadir=D:/MySQLdata - - Microsoft Windows path names are specified in option - files using (forward) slashes rather than backslashes. If - you do use backslashes, double them: -[mysqld] -# set basedir to your installation path -basedir=C:\\Program Files\\MySQL\\MySQL Server 5.6 -# set datadir to the location of your data directory -datadir=D:\\MySQLdata - - The rules for use of backslash in option file values are - given in Section 4.2.6, "Using Option Files." - If you change the datadir value in your MySQL - configuration file, you must move the contents of the - existing MySQL data directory before restarting the MySQL - server. - See Section 2.3.5.2, "Creating an Option File." - - * If you reinstall or upgrade MySQL without first stopping - and removing the existing MySQL service and install MySQL - using the MySQL Installer, you might see this error: -Error: Cannot create Windows service for MySql. Error: 0 - - This occurs when the Configuration Wizard tries to - install the service and finds an existing service with - the same name. - One solution to this problem is to choose a service name - other than mysql when using the configuration wizard. - This enables the new service to be installed correctly, - but leaves the outdated service in place. Although this - is harmless, it is best to remove old services that are - no longer in use. - To permanently remove the old mysql service, execute the - following command as a user with administrative - privileges, on the command line: -C:\> sc delete mysql -[SC] DeleteService SUCCESS - - If the sc utility is not available for your version of - Windows, download the delsrv utility from - http://www.microsoft.com/windows2000/techinfo/reskit/tool - s/existing/delsrv-o.asp and use the delsrv mysql syntax. - -2.3.7 Windows Postinstallation Procedures - - GUI tools exist that perform most of the tasks described in - this section, including: - - * MySQL Installer: Used to install and upgrade MySQL - products. - - * MySQL Workbench: Manages the MySQL server and edits SQL - statements. - - * MySQL Notifier: Starts, stops, or restarts the MySQL - server, and monitors its status. - - * MySQL for Excel - (http://dev.mysql.com/doc/mysql-for-excel/en/index.html): - Edits MySQL data with Microsoft Excel. - - On Windows, you need not create the data directory and the - grant tables. MySQL Windows distributions include the grant - tables with a set of preinitialized accounts in the mysql - database under the data directory. - - Regarding passwords, if you installed MySQL using the MySQL - Installer, you may have already assigned passwords to the - accounts. (See Section 2.3.3, "Installing MySQL on Microsoft - Windows Using MySQL Installer.") Otherwise, use the - password-assignment procedure given in Section 2.10.4, - "Securing the Initial MySQL Accounts." - - Before assigning passwords, you might want to try running - some client programs to make sure that you can connect to the - server and that it is operating properly. Make sure that the - server is running (see Section 2.3.5.4, "Starting the Server - for the First Time"). You can also set up a MySQL service - that runs automatically when Windows starts (see Section - 2.3.5.7, "Starting MySQL as a Windows Service"). - - These instructions assume that your current location is the - MySQL installation directory and that it has a bin - subdirectory containing the MySQL programs used here. If that - is not true, adjust the command path names accordingly. - - If you installed MySQL using MySQL Installer (see Section - 2.3.3, "Installing MySQL on Microsoft Windows Using MySQL - Installer"), the default installation directory is C:\Program - Files\MySQL\MySQL Server 5.6: -C:\> cd "C:\Program Files\MySQL\MySQL Server 5.6" - - A common installation location for installation from a Zip - package is C:\mysql: -C:\> cd C:\mysql - - Alternatively, add the bin directory to your PATH environment - variable setting. That enables your command interpreter to - find MySQL programs properly, so that you can run a program - by typing only its name, not its path name. See Section - 2.3.5.6, "Customizing the PATH for MySQL Tools." - - With the server running, issue the following commands to - verify that you can retrieve information from the server. The - output should be similar to that shown here. - - Use mysqlshow to see what databases exist: -C:\> bin\mysqlshow -+--------------------+ -| Databases | -+--------------------+ -| information_schema | -| mysql | -| performance_schema | -| test | -+--------------------+ - - The list of installed databases may vary, but will always - include the minimum of mysql and information_schema. - - The preceding command (and commands for other MySQL programs - such as mysql) may not work if the correct MySQL account does - not exist. For example, the program may fail with an error, - or you may not be able to view all databases. If you - installed MySQL using MySQL Installer, the root user will - have been created automatically with the password you - supplied. In this case, you should use the -u root and -p - options. (You must use those options if you have already - secured the initial MySQL accounts.) With -p, the client - program prompts for the root password. For example: -C:\> bin\mysqlshow -u root -p -Enter password: (enter root password here) -+--------------------+ -| Databases | -+--------------------+ -| information_schema | -| mysql | -| performance_schema | -| test | -+--------------------+ - - If you specify a database name, mysqlshow displays a list of - the tables within the database: -C:\> bin\mysqlshow mysql -Database: mysql -+---------------------------+ -| Tables | -+---------------------------+ -| columns_priv | -| db | -| event | -| func | -| general_log | -| help_category | -| help_keyword | -| help_relation | -| help_topic | -| innodb_index_stats | -| innodb_table_stats | -| ndb_binlog_index | -| plugin | -| proc | -| procs_priv | -| proxies_priv | -| servers | -| slave_master_info | -| slave_relay_log_info | -| slave_worker_info | -| slow_log | -| tables_priv | -| time_zone | -| time_zone_leap_second | -| time_zone_name | -| time_zone_transition | -| time_zone_transition_type | -| user | -+---------------------------+ - - Use the mysql program to select information from a table in - the mysql database: -C:\> bin\mysql -e "SELECT User, Host, plugin FROM mysql.user" mysql -+------+-----------+-----------------------+ -| User | Host | plugin | -+------+-----------+-----------------------+ -| root | localhost | mysql_native_password | -+------+-----------+-----------------------+ - - For more information about mysql and mysqlshow, see Section - 4.5.1, "mysql --- The MySQL Command-Line Tool," and Section - 4.5.6, "mysqlshow --- Display Database, Table, and Column - Information." - -2.3.8 Upgrading MySQL on Windows - - To upgrade MySQL on Windows, follow these steps: - - 1. Review Section 2.11.1, "Upgrading MySQL," for additional - information on upgrading MySQL that is not specific to - Windows. - - 2. Always back up your current MySQL installation before - performing an upgrade. See Section 7.2, "Database Backup - Methods." - - 3. Download the latest Windows distribution of MySQL from - http://dev.mysql.com/downloads/. - - 4. Before upgrading MySQL, stop the server. If the server is - installed as a service, stop the service with the - following command from the command prompt: -C:\> NET STOP MySQL - - If you are not running the MySQL server as a service, use - mysqladmin to stop it. For example, before upgrading from - MySQL 5.5 to 5.6, use mysqladmin from MySQL 5.5 as - follows: -C:\> "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin" -u root -shutdown - - Note - If the MySQL root user account has a password, invoke - mysqladmin with the -p option and enter the password when - prompted. - - 5. Before upgrading to MySQL 5.6 from a version previous to - 4.1.5, or from a version of MySQL installed from a Zip - archive to a version of MySQL installed with the MySQL - Installation Wizard, you must first manually remove the - previous installation and MySQL service (if the server is - installed as a service). - To remove the MySQL service, use the following command: -C:\> C:\mysql\bin\mysqld --remove - - If you do not remove the existing service, the MySQL - Installation Wizard may fail to properly install the new - MySQL service. - - 6. If you are using the MySQL Installer, start it as - described in Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - 7. If you are upgrading MySQL from a Zip archive, extract - the archive. You may either overwrite your existing MySQL - installation (usually located at C:\mysql), or install it - into a different directory, such as C:\mysql5. - Overwriting the existing installation is recommended. - However, for upgrades (as opposed to installing for the - first time), you must remove the data directory from your - existing MySQL installation to avoid replacing your - current data files. To do so, follow these steps: - a. Unzip the Zip archive in some location other than - your current MySQL installation - b. Remove the data directory - c. Rezip the Zip archive - d. Unzip the modified Zip archive on top of your - existing installation - Alternatively: - a. Unzip the Zip archive in some location other than - your current MySQL installation - b. Remove the data directory - c. Move the data directory from the current MySQL - installation to the location of the just-removed - data directory - d. Remove the current MySQL installation - e. Move the unzipped installation to the location of - the just-removed installation - - 8. If you were running MySQL as a Windows service and you - had to remove the service earlier in this procedure, - reinstall the service. (See Section 2.3.5.7, "Starting - MySQL as a Windows Service.") - - 9. Restart the server. For example, use NET START MySQL if - you run MySQL as a service, or invoke mysqld directly - otherwise. - 10. As Administrator, run mysql_upgrade to check your tables, - attempt to repair them if necessary, and update your - grant tables if they have changed so that you can take - advantage of any new capabilities. See Section 4.4.7, - "mysql_upgrade --- Check and Upgrade MySQL Tables." - 11. If you encounter errors, see Section 2.3.6, - "Troubleshooting a Microsoft Windows MySQL Server - Installation." diff -Nru mysql-5.6-5.6.27/extra/CMakeLists.txt mysql-5.6-5.6.33/extra/CMakeLists.txt --- mysql-5.6-5.6.27/extra/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -98,9 +98,8 @@ ENDIF() IF(UNIX) - MYSQL_ADD_EXECUTABLE(resolve_stack_dump resolve_stack_dump.c) + MYSQL_ADD_EXECUTABLE(resolve_stack_dump resolve_stack_dump.cc) TARGET_LINK_LIBRARIES(resolve_stack_dump mysys mysys_ssl) - SET_TARGET_PROPERTIES(resolve_stack_dump PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(mysql_waitpid mysql_waitpid.c) TARGET_LINK_LIBRARIES(mysql_waitpid mysys mysys_ssl) diff -Nru mysql-5.6-5.6.27/extra/comp_err.c mysql-5.6-5.6.33/extra/comp_err.c --- mysql-5.6-5.6.27/extra/comp_err.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/comp_err.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1023,8 +1023,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__ ((unused)), - char *argument __attribute__ ((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE ((unused)), + char *argument MY_ATTRIBUTE ((unused))) { DBUG_ENTER("get_one_option"); switch (optid) { diff -Nru mysql-5.6-5.6.27/extra/innochecksum.cc mysql-5.6-5.6.33/extra/innochecksum.cc --- mysql-5.6-5.6.27/extra/innochecksum.cc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/innochecksum.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -235,8 +235,8 @@ innochecksum_get_one_option( /*========================*/ int optid, - const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) + const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch (optid) { case 'd': diff -Nru mysql-5.6-5.6.27/extra/my_print_defaults.c mysql-5.6-5.6.33/extra/my_print_defaults.c --- mysql-5.6-5.6.27/extra/my_print_defaults.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/my_print_defaults.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -118,8 +118,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch (optid) { case 'c': @@ -172,7 +172,7 @@ org_argv= argv; args_used= get_defaults_options(argc, argv, &defaults, &extra_defaults, - &group_suffix, &login_path); + &group_suffix, &login_path, FALSE); /* Copy defaults-xxx arguments & program name */ count=args_used+1; diff -Nru mysql-5.6-5.6.27/extra/mysql_waitpid.c mysql-5.6-5.6.33/extra/mysql_waitpid.c --- mysql-5.6-5.6.27/extra/mysql_waitpid.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/mysql_waitpid.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,8 +43,8 @@ }; static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch(optid) { case 'V': diff -Nru mysql-5.6-5.6.27/extra/perror.c mysql-5.6-5.6.33/extra/perror.c --- mysql-5.6-5.6.27/extra/perror.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/perror.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -94,8 +94,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch (optid) { case 's': diff -Nru mysql-5.6-5.6.27/extra/resolveip.c mysql-5.6-5.6.33/extra/resolveip.c --- mysql-5.6-5.6.27/extra/resolveip.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/resolveip.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -72,8 +72,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch (optid) { case 'V': print_version(); exit(0); diff -Nru mysql-5.6-5.6.27/extra/resolve_stack_dump.c mysql-5.6-5.6.33/extra/resolve_stack_dump.c --- mysql-5.6-5.6.27/extra/resolve_stack_dump.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/resolve_stack_dump.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,323 +0,0 @@ -/* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -/* Resolve numeric stack dump produced by mysqld 3.23.30 and later - versions into symbolic names. By Sasha Pachev - */ - -#include -#include -#include -#include -#include -#include -#include - -#define INIT_SYM_TABLE 4096 -#define INC_SYM_TABLE 4096 -#define MAX_SYM_SIZE 128 -#define DUMP_VERSION "1.4" -#define HEX_INVALID (uchar)255 - -typedef ulong my_long_addr_t ; /* at some point, we need to fix configure - * to define this for us - */ - -typedef struct sym_entry -{ - char symbol[MAX_SYM_SIZE]; - uchar* addr; -} SYM_ENTRY; - - -static char* dump_fname = 0, *sym_fname = 0; -static DYNAMIC_ARRAY sym_table; /* how do you like this , static DYNAMIC ? */ -static FILE* fp_dump, *fp_sym = 0, *fp_out; - -static struct my_option my_long_options[] = -{ - {"help", 'h', "Display this help and exit.", - 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"version", 'V', "Output version information and exit.", - 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"symbols-file", 's', "Use specified symbols file.", &sym_fname, - &sym_fname, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"numeric-dump-file", 'n', "Read the dump from specified file.", - &dump_fname, &dump_fname, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} -}; - - -static void verify_sort(); - - -static void print_version(void) -{ - printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname,DUMP_VERSION, - MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE); -} - - -static void usage() -{ - print_version(); - printf("MySQL AB, by Sasha Pachev\n"); - printf("This software comes with ABSOLUTELY NO WARRANTY\n\n"); - printf("Resolve numeric stack strace dump into symbols.\n\n"); - printf("Usage: %s [OPTIONS] symbols-file [numeric-dump-file]\n", - my_progname); - my_print_help(my_long_options); - my_print_variables(my_long_options); - printf("\n\ -The symbols-file should include the output from: 'nm --numeric-sort mysqld'.\n\ -The numeric-dump-file should contain a numeric stack trace from mysqld.\n\ -If the numeric-dump-file is not given, the stack trace is read from stdin.\n"); -} - - -static void die(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stderr, "%s: ", my_progname); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - va_end(args); - exit(1); -} - - -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) -{ - switch(optid) { - case 'V': - print_version(); - exit(0); - case '?': - usage(); - exit(0); - } - return 0; -} - - -static int parse_args(int argc, char **argv) -{ - int ho_error; - - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) - exit(ho_error); - - /* - The following code is to make the command compatible with the old - version that required one to use the -n and -s options - */ - - if (argc == 2) - { - sym_fname= argv[0]; - dump_fname= argv[1]; - } - else if (argc == 1) - { - if (!sym_fname) - sym_fname = argv[0]; - else if (!dump_fname) - dump_fname = argv[0]; - else - { - usage(); - exit(1); - } - } - else if (argc != 0 || !sym_fname) - { - usage(); - exit(1); - } - return 0; -} - - -static void open_files() -{ - fp_out = stdout; - fp_dump = stdin; - - if (dump_fname && !(fp_dump = my_fopen(dump_fname, O_RDONLY, MYF(MY_WME)))) - die("Could not open %s", dump_fname); - /* if name not given, assume stdin*/ - - if (!sym_fname) - die("Please run nm --numeric-sort on mysqld binary that produced stack \ -trace dump and specify the path to it with -s or --symbols-file"); - if (!(fp_sym = my_fopen(sym_fname, O_RDONLY, MYF(MY_WME)))) - die("Could not open %s", sym_fname); - -} - -static uchar hex_val(char c) -{ - uchar l; - if (my_isdigit(&my_charset_latin1,c)) - return c - '0'; - l = my_tolower(&my_charset_latin1,c); - if (l < 'a' || l > 'f') - return HEX_INVALID; - return (uchar)10 + ((uchar)c - (uchar)'a'); -} - -static my_long_addr_t read_addr(char** buf) -{ - uchar c; - char* p = *buf; - my_long_addr_t addr = 0; - - while((c = hex_val(*p++)) != HEX_INVALID) - addr = (addr << 4) + c; - - *buf = p; - return addr; -} - -static int init_sym_entry(SYM_ENTRY* se, char* buf) -{ - char* p, *p_end; - se->addr = (uchar*)read_addr(&buf); - - if (!se->addr) - return -1; - while (my_isspace(&my_charset_latin1,*buf++)) - /* empty */; - - while (my_isspace(&my_charset_latin1,*buf++)) - /* empty - skip more space */; - --buf; - /* now we are on the symbol */ - for (p = se->symbol, p_end = se->symbol + sizeof(se->symbol) - 1; - *buf != '\n' && *buf && p < p_end; ++buf,++p) - *p = *buf; - *p = 0; - if (!strcmp(se->symbol, "gcc2_compiled.")) - return -1; - return 0; -} - -static void init_sym_table() -{ - char buf[512]; - if (my_init_dynamic_array(&sym_table, sizeof(SYM_ENTRY), INIT_SYM_TABLE, - INC_SYM_TABLE)) - die("Failed in my_init_dynamic_array() -- looks like out of memory problem"); - - while (fgets(buf, sizeof(buf), fp_sym)) - { - SYM_ENTRY se; - if (init_sym_entry(&se, buf)) - continue; - if (insert_dynamic(&sym_table, &se)) - die("insert_dynamic() failed - looks like we are out of memory"); - } - - verify_sort(); -} - -static void clean_up() -{ - delete_dynamic(&sym_table); -} - -static void verify_sort() -{ - uint i; - uchar* last = 0; - - for (i = 0; i < sym_table.elements; i++) - { - SYM_ENTRY se; - get_dynamic(&sym_table, (uchar*)&se, i); - if (se.addr < last) - die("sym table does not appear to be sorted, did you forget \ ---numeric-sort arg to nm? trouble addr = %p, last = %p", se.addr, last); - last = se.addr; - } -} - - -static SYM_ENTRY* resolve_addr(uchar* addr, SYM_ENTRY* se) -{ - uint i; - get_dynamic(&sym_table, (uchar*)se, 0); - if (addr < se->addr) - return 0; - - for (i = 1; i < sym_table.elements; i++) - { - get_dynamic(&sym_table, (uchar*)se, i); - if (addr < se->addr) - { - get_dynamic(&sym_table, (uchar*)se, i - 1); - return se; - } - } - - return se; -} - - -static void do_resolve() -{ - char buf[1024], *p; - while (fgets(buf, sizeof(buf), fp_dump)) - { - /* skip bracket */ - p= (p= strchr(buf, '[')) ? p+1 : buf; - /* skip space */ - while (my_isspace(&my_charset_latin1,*p)) - ++p; - - if (*p++ == '0' && *p++ == 'x') - { - SYM_ENTRY se ; - uchar* addr = (uchar*)read_addr(&p); - if (resolve_addr(addr, &se)) - fprintf(fp_out, "%p %s + %d\n", addr, se.symbol, - (int) (addr - se.addr)); - else - fprintf(fp_out, "%p (?)\n", addr); - - } - else - { - fputs(buf, fp_out); - continue; - } - } -} - - -int main(int argc, char** argv) -{ - MY_INIT(argv[0]); - parse_args(argc, argv); - open_files(); - init_sym_table(); - do_resolve(); - clean_up(); - return 0; -} diff -Nru mysql-5.6-5.6.27/extra/resolve_stack_dump.cc mysql-5.6-5.6.33/extra/resolve_stack_dump.cc --- mysql-5.6-5.6.27/extra/resolve_stack_dump.cc 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/extra/resolve_stack_dump.cc 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,344 @@ +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Resolve numeric stack dump produced by mysqld 3.23.30 and later + versions into symbolic names. By Sasha Pachev + */ + +#include +#include // Needed on SunOS 5.10 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ + +const int initial_symbol_table_size= 4096; + +#define DUMP_VERSION "1.5" +#define HEX_INVALID (uchar)255 + +typedef ulong my_long_addr_t ; /* at some point, we need to fix configure + * to define this for us + */ + +typedef struct sym_entry +{ + std::string symbol; + uchar* addr; +} SYM_ENTRY; + + +static char* dump_fname = 0, *sym_fname = 0; +static std::vector sym_table; +static FILE* fp_dump, *fp_sym = 0, *fp_out; +static void die(const char* fmt, ...) + MY_ATTRIBUTE((noreturn)) MY_ATTRIBUTE((format(printf, 1, 2))); + +static struct my_option my_long_options[] = +{ + {"help", 'h', "Display this help and exit.", + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"version", 'V', "Output version information and exit.", + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"symbols-file", 's', "Use specified symbols file.", &sym_fname, + &sym_fname, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"numeric-dump-file", 'n', "Read the dump from specified file.", + &dump_fname, &dump_fname, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} +}; + + +static void verify_sort(); + + +static void print_version(void) +{ + printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname,DUMP_VERSION, + MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE); +} + + +static void usage() +{ + print_version(); + puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2001")); + printf("Resolve numeric stack strace dump into symbols.\n\n"); + printf("Usage: %s [OPTIONS] symbols-file [numeric-dump-file]\n", + my_progname); + my_print_help(my_long_options); + my_print_variables(my_long_options); + printf("\n\ +The symbols-file should include the output from: 'nm --numeric-sort mysqld'.\n\ +The numeric-dump-file should contain a numeric stack trace from mysqld.\n\ +If the numeric-dump-file is not given, the stack trace is read from stdin.\n"); +} + + +static void die(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stderr, "%s: ", my_progname); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); + exit(1); +} + + +static my_bool +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) +{ + switch(optid) { + case 'V': + print_version(); + exit(0); + case '?': + usage(); + exit(0); + } + return 0; +} + + +static int parse_args(int argc, char **argv) +{ + int ho_error; + + if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) + exit(ho_error); + + /* + The following code is to make the command compatible with the old + version that required one to use the -n and -s options + */ + + if (argc == 2) + { + sym_fname= argv[0]; + dump_fname= argv[1]; + } + else if (argc == 1) + { + if (!sym_fname) + sym_fname = argv[0]; + else if (!dump_fname) + dump_fname = argv[0]; + else + { + usage(); + exit(1); + } + } + else if (argc != 0 || !sym_fname) + { + usage(); + exit(1); + } + return 0; +} + + +static void open_files() +{ + fp_out = stdout; + fp_dump = stdin; + + if (dump_fname && !(fp_dump = my_fopen(dump_fname, O_RDONLY, MYF(MY_WME)))) + die("Could not open %s", dump_fname); + /* if name not given, assume stdin*/ + + if (!sym_fname) + die("Please run nm --numeric-sort on mysqld binary that produced stack \ +trace dump and specify the path to it with -s or --symbols-file"); + if (!(fp_sym = my_fopen(sym_fname, O_RDONLY, MYF(MY_WME)))) + die("Could not open %s", sym_fname); + +} + +static uchar hex_val(char c) +{ + uchar l; + if (my_isdigit(&my_charset_latin1,c)) + return c - '0'; + l = my_tolower(&my_charset_latin1,c); + if (l < 'a' || l > 'f') + return HEX_INVALID; + return (uchar)10 + ((uchar)c - (uchar)'a'); +} + +static my_long_addr_t read_addr(char** buf) +{ + uchar c; + char* p = *buf; + my_long_addr_t addr = 0; + + while((c = hex_val(*p++)) != HEX_INVALID) + addr = (addr << 4) + c; + + *buf = p; + return addr; +} + +static int init_sym_entry(SYM_ENTRY* se, char* buf) +{ + char* p; + se->addr = (uchar*)read_addr(&buf); + + if (!se->addr) + return -1; + while (my_isspace(&my_charset_latin1,*buf++)) + /* empty */; + + while (my_isspace(&my_charset_latin1,*buf++)) + /* empty - skip more space */; + --buf; + /* now we are on the symbol */ + for (p =buf; *buf != '\n' && *buf; ++buf) + ; + try { + se->symbol.assign(p, buf - p); + } + catch (...) + { + die("failed to allocate space for symbol %.*s", (int) (buf - p), p); + } + + return 0; +} + +static void init_sym_table() +{ + /* + A buffer of 100Kb should be big enough to hold any single line output from + 'nm --demangle' + */ + static char buf[1024 * 100]; + try { + sym_table.reserve(initial_symbol_table_size); + } + catch (...) + { + die("Failed in std::vector.reserve() -- looks like out of memory problem"); + } + while (fgets(buf, sizeof(buf), fp_sym)) + { + SYM_ENTRY se; + if (init_sym_entry(&se, buf)) + continue; + try { + sym_table.push_back(se); + } + catch (...) + { + die("std::vector.push_back() failed - looks like we are out of memory"); + } + } + + verify_sort(); +} + +static void clean_up() +{ +} + +static void verify_sort() +{ + uint i; + uchar* last = 0; + + for (i = 0; i < sym_table.size(); i++) + { + SYM_ENTRY se= sym_table[i]; + if (se.addr < last) + die("sym table does not appear to be sorted, did you forget " + "--numeric-sort arg to nm? trouble addr = %p, last = %p", + se.addr, last); + last = se.addr; + } +} + + +static SYM_ENTRY* resolve_addr(uchar* addr, SYM_ENTRY* se) +{ + uint i; + *se= sym_table[0]; + if (addr < se->addr) + return 0; + + for (i = 1; i < sym_table.size(); i++) + { + *se= sym_table[i]; + if (addr < se->addr) + { + *se= sym_table[i - 1]; + return se; + } + } + + return se; +} + + +static void do_resolve() +{ + char buf[1024 * 8], *p; + while (fgets(buf, sizeof(buf), fp_dump)) + { + /* skip bracket */ + p= (p= strchr(buf, '[')) ? p+1 : buf; + /* skip space */ + while (my_isspace(&my_charset_latin1,*p)) + ++p; + + if (*p++ == '0' && *p++ == 'x') + { + SYM_ENTRY se ; + uchar* addr = (uchar*)read_addr(&p); + if (resolve_addr(addr, &se)) + fprintf(fp_out, "%p %s + %d\n", addr, se.symbol.c_str(), + (int) (addr - se.addr)); + else + fprintf(fp_out, "%p (?)\n", addr); + + } + else + { + fputs(buf, fp_out); + continue; + } + } +} + + +int main(int argc, char** argv) +{ + MY_INIT(argv[0]); + parse_args(argc, argv); + open_files(); + init_sym_table(); + do_resolve(); + clean_up(); + return 0; +} diff -Nru mysql-5.6-5.6.27/extra/yassl/include/crypto_wrapper.hpp mysql-5.6-5.6.33/extra/yassl/include/crypto_wrapper.hpp --- mysql-5.6-5.6.27/extra/yassl/include/crypto_wrapper.hpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/include/crypto_wrapper.hpp 2016-08-26 11:22:35.000000000 +0000 @@ -377,6 +377,7 @@ uint get_agreedKeyLength() const; const byte* get_agreedKey() const; + uint get_publicKeyLength() const; const byte* get_publicKey() const; void makeAgreement(const byte*, unsigned int); diff -Nru mysql-5.6-5.6.27/extra/yassl/include/openssl/ssl.h mysql-5.6-5.6.33/extra/yassl/include/openssl/ssl.h --- mysql-5.6-5.6.27/extra/yassl/include/openssl/ssl.h 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/include/openssl/ssl.h 2016-08-26 11:22:35.000000000 +0000 @@ -34,7 +34,7 @@ #include "rsa.h" -#define YASSL_VERSION "2.3.8" +#define YASSL_VERSION "2.3.9b" #if defined(__cplusplus) diff -Nru mysql-5.6-5.6.27/extra/yassl/include/yassl_int.hpp mysql-5.6-5.6.33/extra/yassl/include/yassl_int.hpp --- mysql-5.6-5.6.27/extra/yassl/include/yassl_int.hpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/include/yassl_int.hpp 2016-08-26 11:22:35.000000000 +0000 @@ -191,14 +191,19 @@ class X509_NAME { char* name_; size_t sz_; + int cnPosition_; // start of common name, -1 is none + int cnLen_; // length of above ASN1_STRING entry_; public: - X509_NAME(const char*, size_t sz); + X509_NAME(const char*, size_t sz, int pos, int len); ~X509_NAME(); const char* GetName() const; ASN1_STRING* GetEntry(int i); size_t GetLength() const; + int GetCnPosition() const { return cnPosition_; } + int GetCnLength() const { return cnLen_; } + private: X509_NAME(const X509_NAME&); // hide copy X509_NAME& operator=(const X509_NAME&); // and assign @@ -226,7 +231,7 @@ StringHolder afterDate_; // not valid after public: X509(const char* i, size_t, const char* s, size_t, - ASN1_STRING *b, ASN1_STRING *a); + ASN1_STRING *b, ASN1_STRING *a, int, int, int, int); ~X509() {} X509_NAME* GetIssuer(); diff -Nru mysql-5.6-5.6.27/extra/yassl/README mysql-5.6-5.6.33/extra/yassl/README --- mysql-5.6-5.6.27/extra/yassl/README 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/README 2016-08-26 11:22:35.000000000 +0000 @@ -12,6 +12,23 @@ *** end Note *** +yaSSL Release notes, version 2.3.9b (2/03/2016) + This release of yaSSL fixes the OpenSSL compatibility function + X509_NAME_get_index_by_NID() to use the actual index of the common name + instead of searching on the format prefix. Thanks for the report from + yashwant.sahu@oracle.com . Anyone using this function should update. + +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 diff -Nru mysql-5.6-5.6.27/extra/yassl/src/cert_wrapper.cpp mysql-5.6-5.6.33/extra/yassl/src/cert_wrapper.cpp --- mysql-5.6-5.6.27/extra/yassl/src/cert_wrapper.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/cert_wrapper.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -304,7 +304,10 @@ afterDate.type= cert.GetAfterDateType(); afterDate.length= strlen((char *) afterDate.data) + 1; peerX509_ = NEW_YS X509(cert.GetIssuer(), iSz, cert.GetCommonName(), - sSz, &beforeDate, &afterDate); + sSz, &beforeDate, &afterDate, + cert.GetIssuerCnStart(), cert.GetIssuerCnLength(), + cert.GetSubjectCnStart(), cert.GetSubjectCnLength() + ); if (err == TaoCrypt::SIG_OTHER_E && verifyCallback_) { X509_STORE_CTX store; @@ -350,7 +353,9 @@ afterDate.type= cd.GetAfterDateType(); afterDate.length= strlen((char *) afterDate.data) + 1; selfX509_ = NEW_YS X509(cd.GetIssuer(), iSz, cd.GetCommonName(), - sSz, &beforeDate, &afterDate); + sSz, &beforeDate, &afterDate, + cd.GetIssuerCnStart(), cd.GetIssuerCnLength(), + cd.GetSubjectCnStart(), cd.GetSubjectCnLength()); } return 0; } @@ -367,7 +372,9 @@ ASN1_STRING* after = x->GetAfter(); peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(), - subject->GetName(), subject->GetLength(), before, after); + subject->GetName(), subject->GetLength(), before, after, + issuer->GetCnPosition(), issuer->GetCnLength(), + subject->GetCnPosition(), subject->GetCnLength()); } diff -Nru mysql-5.6-5.6.27/extra/yassl/src/crypto_wrapper.cpp mysql-5.6-5.6.33/extra/yassl/src/crypto_wrapper.cpp --- mysql-5.6-5.6.27/extra/yassl/src/crypto_wrapper.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/crypto_wrapper.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -748,9 +748,10 @@ 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_); @@ -759,7 +760,7 @@ } 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); @@ -807,7 +808,7 @@ 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); } @@ -866,6 +867,10 @@ return pimpl_->agreedKey_; } +uint DiffieHellman::get_publicKeyLength() const +{ + return pimpl_->pubKeyLength_; +} const byte* DiffieHellman::get_publicKey() const { diff -Nru mysql-5.6-5.6.27/extra/yassl/src/log.cpp mysql-5.6-5.6.33/extra/yassl/src/log.cpp --- mysql-5.6-5.6.27/extra/yassl/src/log.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/log.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -60,6 +60,7 @@ time_t clicks = time(0); char timeStr[32]; + memset(timeStr, 0, sizeof(timeStr)); // get rid of newline strncpy(timeStr, ctime(&clicks), sizeof(timeStr)); unsigned int len = strlen(timeStr); diff -Nru mysql-5.6-5.6.27/extra/yassl/src/ssl.cpp mysql-5.6-5.6.33/extra/yassl/src/ssl.cpp --- mysql-5.6-5.6.27/extra/yassl/src/ssl.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/ssl.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -1350,16 +1350,14 @@ int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos) { int idx = -1; // not found - const char* start = &name->GetName()[lastpos + 1]; + int cnPos = -1; switch (nid) { case NID_commonName: - const char* found = strstr(start, "/CN="); - if (found) { - found += 4; // advance to str - idx = found - start + lastpos + 1; - } - break; + cnPos = name->GetCnPosition(); + if (lastpos < cnPos) + idx = cnPos; + break; } return idx; diff -Nru mysql-5.6-5.6.27/extra/yassl/src/yassl_imp.cpp mysql-5.6-5.6.33/extra/yassl/src/yassl_imp.cpp --- mysql-5.6-5.6.27/extra/yassl/src/yassl_imp.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/yassl_imp.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -109,15 +109,12 @@ 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); + ssl.set_preMaster(dhClient.get_agreedKey(), keyLength); } @@ -321,11 +318,7 @@ } 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.set_preMaster(dh.get_agreedKey(), dh.get_agreedKeyLength()); ssl.makeMasterSecret(); } diff -Nru mysql-5.6-5.6.27/extra/yassl/src/yassl_int.cpp mysql-5.6-5.6.33/extra/yassl/src/yassl_int.cpp --- mysql-5.6-5.6.27/extra/yassl/src/yassl_int.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/src/yassl_int.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -859,6 +859,19 @@ // 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); } @@ -976,6 +989,8 @@ // Create and store the master secret see page 32, 6.1 void SSL::makeMasterSecret() { + if (GetError()) return; + if (isTLS()) makeTLSMasterSecret(); else { @@ -1592,7 +1607,9 @@ peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(), subject->GetName(), subject->GetLength(), - before, after); + before, after, + issuer->GetCnPosition(), issuer->GetCnLength(), + subject->GetCnPosition(), subject->GetCnLength()); } @@ -2560,8 +2577,8 @@ } -X509_NAME::X509_NAME(const char* n, size_t sz) - : name_(0), sz_(sz) +X509_NAME::X509_NAME(const char* n, size_t sz, int pos, int len) + : name_(0), sz_(sz), cnPosition_(pos), cnLen_(len) { if (sz) { name_ = NEW_YS char[sz]; @@ -2591,8 +2608,10 @@ X509::X509(const char* i, size_t iSz, const char* s, size_t sSz, - ASN1_STRING *b, ASN1_STRING *a) - : issuer_(i, iSz), subject_(s, sSz), + ASN1_STRING *b, ASN1_STRING *a, + int issPos, int issLen, + int subPos, int subLen) + : issuer_(i, iSz, issPos, issLen), subject_(s, sSz, subPos, subLen), beforeDate_((char *) b->data, b->length, b->type), afterDate_((char *) a->data, a->length, a->type) {} @@ -2627,19 +2646,20 @@ if (i < 0 || i >= int(sz_)) return 0; + if (i != cnPosition_ || cnLen_ <= 0) // only entry currently supported + return 0; + + if (cnLen_ > int(sz_-i)) // make sure there's room in read buffer + return 0; + if (entry_.data) ysArrayDelete(entry_.data); - entry_.data = NEW_YS byte[sz_]; // max size; + entry_.data = NEW_YS byte[cnLen_+1]; // max size; - memcpy(entry_.data, &name_[i], sz_ - i); - if (entry_.data[sz_ -i - 1]) { - entry_.data[sz_ - i] = 0; - entry_.length = int(sz_) - i; - } - else - entry_.length = int(sz_) - i - 1; + memcpy(entry_.data, &name_[i], cnLen_); + entry_.data[cnLen_] = 0; + entry_.length = cnLen_; entry_.type = 0; - return &entry_; } diff -Nru mysql-5.6-5.6.27/extra/yassl/taocrypt/CMakeLists.txt mysql-5.6-5.6.33/extra/yassl/taocrypt/CMakeLists.txt --- mysql-5.6-5.6.27/extra/yassl/taocrypt/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/taocrypt/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,6 +13,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include) @@ -29,6 +31,14 @@ include/random.hpp include/ripemd.hpp include/rsa.hpp include/sha.hpp include/rabbit.hpp include/hc128.hpp) +# Segfaults with SIGILL at high optimization levels in: +# ModularArithmetic::SimultaneousExponentiate +IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") + IF(CMAKE_CXX_FLAGS MATCHES "-std=") + ADD_COMPILE_FLAGS(src/integer.cpp COMPILE_FLAGS "-xO1") + ENDIF() +ENDIF() + IF(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION) SET(TAOCRYPT_SOURCES ${TAOCRYPT_SOURCES} src/template_instnt.cpp) ENDIF() diff -Nru mysql-5.6-5.6.27/extra/yassl/taocrypt/include/asn.hpp mysql-5.6-5.6.33/extra/yassl/taocrypt/include/asn.hpp --- mysql-5.6-5.6.27/extra/yassl/taocrypt/include/asn.hpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/taocrypt/include/asn.hpp 2016-08-26 11:22:35.000000000 +0000 @@ -286,7 +286,10 @@ byte GetBeforeDateType() const { return beforeDateType_; } const char* GetAfterDate() const { return afterDate_; } byte GetAfterDateType() const { return afterDateType_; } - + int GetSubjectCnStart() const { return subCnPos_; } + int GetIssuerCnStart() const { return issCnPos_; } + int GetSubjectCnLength() const { return subCnLen_; } + int GetIssuerCnLength() const { return issCnLen_; } void DecodeToKey(); private: PublicKey key_; @@ -295,6 +298,10 @@ word32 sigLength_; // length of signature word32 signatureOID_; // sum of algorithm object id word32 keyOID_; // sum of key algo object id + int subCnPos_; // subject common name start, -1 is none + int subCnLen_; // length of above + int issCnPos_; // issuer common name start, -1 is none + int issCnLen_; // length of above byte subjectHash_[SHA_SIZE]; // hash of all Names byte issuerHash_[SHA_SIZE]; // hash of all Names byte* signature_; diff -Nru mysql-5.6-5.6.27/extra/yassl/taocrypt/src/asn.cpp mysql-5.6-5.6.33/extra/yassl/taocrypt/src/asn.cpp --- mysql-5.6-5.6.27/extra/yassl/taocrypt/src/asn.cpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/taocrypt/src/asn.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -487,8 +487,9 @@ CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers, bool noVerify, CertType ct) - : BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0), - signature_(0), verify_(!noVerify) + : BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0), subCnPos_(-1), + subCnLen_(0), issCnPos_(-1), issCnLen_(0), signature_(0), + verify_(!noVerify) { issuer_[0] = 0; subject_[0] = 0; @@ -809,6 +810,13 @@ case COMMON_NAME: if (!(ptr = AddTag(ptr, buf_end, "/CN=", 4, strLen))) return; + if (nt == ISSUER) { + issCnPos_ = (int)(ptr - strLen - issuer_); + issCnLen_ = (int)strLen; + } else { + subCnPos_ = (int)(ptr - strLen - subject_); + subCnLen_ = (int)strLen; + } break; case SUR_NAME: if (!(ptr = AddTag(ptr, buf_end, "/SN=", 4, strLen))) diff -Nru mysql-5.6-5.6.27/extra/yassl/testsuite/test.hpp mysql-5.6-5.6.33/extra/yassl/testsuite/test.hpp --- mysql-5.6-5.6.27/extra/yassl/testsuite/test.hpp 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/extra/yassl/testsuite/test.hpp 2016-08-26 11:22:35.000000000 +0000 @@ -469,9 +469,24 @@ if (peer) { char* issuer = X509_NAME_oneline(X509_get_issuer_name(peer), 0, 0); char* subject = X509_NAME_oneline(X509_get_subject_name(peer), 0, 0); + X509_NAME_ENTRY* se = NULL; + ASN1_STRING* sd = NULL; + char* subCN = NULL; + X509_NAME* sub = X509_get_subject_name(peer); + int lastpos = -1; + if (sub) + lastpos = X509_NAME_get_index_by_NID(sub, NID_commonName, lastpos); + if (lastpos >= 0) { + se = X509_NAME_get_entry(sub, lastpos); + if (se) + sd = X509_NAME_ENTRY_get_data(se); + if (sd) + subCN = (char*)ASN1_STRING_data(sd); + } + + printf("peer's cert info:\n issuer : %s\n subject: %s\n" + " subject cn: %s\n", issuer, subject, subCN); - printf("peer's cert info:\n issuer : %s\n subject: %s\n", issuer, - subject); free(subject); free(issuer); } diff -Nru mysql-5.6-5.6.27/.gitignore mysql-5.6-5.6.33/.gitignore --- mysql-5.6-5.6.27/.gitignore 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/.gitignore 2016-08-26 11:22:35.000000000 +0000 @@ -2871,7 +2871,6 @@ support-files/*.ini support-files/MacOSX/Description.plist support-files/MacOSX/Info.plist -support-files/MacOSX/ReadMe.txt support-files/MacOSX/StartupParameters.plist support-files/MacOSX/postflight support-files/MacOSX/postinstall diff -Nru mysql-5.6-5.6.27/include/atomic/nolock.h mysql-5.6-5.6.33/include/atomic/nolock.h --- mysql-5.6-5.6.27/include/atomic/nolock.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/atomic/nolock.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ATOMIC_NOLOCK_INCLUDED #define ATOMIC_NOLOCK_INCLUDED -/* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. reserved. reserved. This program is free software; you can redistribute it and/or modify @@ -44,7 +44,7 @@ Type not used so minimal size (emptry struct has different size between C and C++, zero-length array is gcc-specific). */ -typedef char my_atomic_rwlock_t __attribute__ ((unused)); +typedef char my_atomic_rwlock_t MY_ATTRIBUTE ((unused)); #define my_atomic_rwlock_destroy(name) #define my_atomic_rwlock_init(name) #define my_atomic_rwlock_rdlock(name) diff -Nru mysql-5.6-5.6.27/include/ft_global.h mysql-5.6-5.6.33/include/ft_global.h --- mysql-5.6-5.6.27/include/ft_global.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/ft_global.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ extern "C" { #endif -#define HA_FT_MAXBYTELEN 254 -#define HA_FT_MAXCHARLEN (HA_FT_MAXBYTELEN/3) +#define HA_FT_MAXBYTELEN 336 +#define HA_FT_MAXCHARLEN (HA_FT_MAXBYTELEN/4) #define DEFAULT_FTB_SYNTAX "+ -><()~*:\"\"&|" diff -Nru mysql-5.6-5.6.27/include/lf.h mysql-5.6-5.6.33/include/lf.h --- mysql-5.6-5.6.27/include/lf.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/lf.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -138,7 +138,7 @@ #if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG) #define LF_REQUIRE_PINS(N) \ static const char require_pins[LF_PINBOX_PINS-N] \ - __attribute__ ((unused)); \ + MY_ATTRIBUTE ((unused)); \ static const int LF_NUM_PINS_IN_THIS_FILE= N; #define _lf_pin(PINS, PIN, ADDR) \ ( \ diff -Nru mysql-5.6-5.6.27/include/m_ctype.h mysql-5.6-5.6.33/include/m_ctype.h --- mysql-5.6-5.6.27/include/m_ctype.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/m_ctype.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -658,10 +658,10 @@ const char *wildstr,const char *wildend, int escape, int w_one, int w_many); -int my_strcasecmp_mb_bin(const CHARSET_INFO * cs __attribute__((unused)), +int my_strcasecmp_mb_bin(const CHARSET_INFO * cs MY_ATTRIBUTE((unused)), const char *s, const char *t); -void my_hash_sort_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +void my_hash_sort_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len,ulong *nr1, ulong *nr2); size_t my_strnxfrm_mb(const CHARSET_INFO *, diff -Nru mysql-5.6-5.6.27/include/my_atomic.h mysql-5.6-5.6.33/include/my_atomic.h --- mysql-5.6-5.6.27/include/my_atomic.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_atomic.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef MY_ATOMIC_INCLUDED #define MY_ATOMIC_INCLUDED -/* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -121,11 +121,11 @@ typedef union { \ int ## S i; \ uint ## S u; \ - } U_ ## S __attribute__ ((transparent_union)); \ + } U_ ## S MY_ATTRIBUTE ((transparent_union)); \ typedef union { \ int ## S volatile *i; \ uint ## S volatile *u; \ - } Uv_ ## S __attribute__ ((transparent_union)); + } Uv_ ## S MY_ATTRIBUTE ((transparent_union)); #define uintptr intptr make_transparent_unions(8) make_transparent_unions(16) diff -Nru mysql-5.6-5.6.27/include/my_attribute.h mysql-5.6-5.6.33/include/my_attribute.h --- mysql-5.6-5.6.27/include/my_attribute.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_attribute.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,41 +28,30 @@ #endif /* - Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. + Disable MY_ATTRIBUTE() on g++ < 3.4, and non-gcc compilers. Some forms of __attribute__ are actually supported in earlier versions of g++, but we just disable them all because we only use them to generate compilation warnings. */ -#ifndef __attribute__ -# if !defined(__GNUC__) -# define __attribute__(A) -# elif GCC_VERSION < 2008 -# define __attribute__(A) -# elif defined(__cplusplus) && GCC_VERSION < 3004 -# define __attribute__(A) -# endif +#ifndef MY_ATTRIBUTE +#if defined(__GNUC__) && GCC_VERSION > 3003 +# define MY_ATTRIBUTE(A) __attribute__(A) +#else +# define MY_ATTRIBUTE(A) +#endif #endif /* - __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 - But that's already covered by the __attribute__ tests above, so this is + __attribute__((format(...))) is only supported in g++ >= 3.4 + But that's already covered by the MY_ATTRIBUTE tests above, so this is just a convenience macro. */ #ifndef ATTRIBUTE_FORMAT -# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) +# define ATTRIBUTE_FORMAT(style, m, n) MY_ATTRIBUTE((format(style, m, n))) #endif -/* - - __attribute__((format(...))) on a function pointer is not supported - until gcc 3.1 -*/ #ifndef ATTRIBUTE_FORMAT_FPTR -# if (GCC_VERSION >= 3001) # define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) -# else -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) -# endif /* GNUC >= 3.1 */ #endif diff -Nru mysql-5.6-5.6.27/include/my_default.h mysql-5.6-5.6.33/include/my_default.h --- mysql-5.6-5.6.27/include/my_default.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_default.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,16 +33,18 @@ my_bool my_getopt_is_args_separator(const char* arg); int get_defaults_options(int argc, char **argv, char **defaults, char **extra_defaults, - char **group_suffix, char **login_path); + char **group_suffix, char **login_path, + my_bool found_no_defaults); int my_load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv, const char ***); -int check_file_permissions(const char *file_name); +int check_file_permissions(const char *file_name, my_bool is_login_file); int load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv); int my_search_option_files(const char *conf_file, int *argc, char ***argv, uint *args_used, Process_option_func func, void *func_ctx, - const char **default_directories); + const char **default_directories, + my_bool is_login_file, my_bool found_no_defaults); void free_defaults(char **argv); void my_print_default_files(const char *conf_file); void print_defaults(const char *conf_file, const char **groups); diff -Nru mysql-5.6-5.6.27/include/my_global.h mysql-5.6-5.6.33/include/my_global.h --- mysql-5.6-5.6.27/include/my_global.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_global.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -184,7 +184,7 @@ other reason to use them is for documentation */ -#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +#if !defined(__builtin_expect) #define __builtin_expect(x, expected_value) (x) #endif @@ -374,7 +374,7 @@ #define compile_time_assert(X) \ do \ { \ - typedef char compile_time_assert[(X) ? 1 : -1] __attribute__((unused)); \ + typedef char compile_time_assert[(X) ? 1 : -1] MY_ATTRIBUTE((unused)); \ } while(0) #endif diff -Nru mysql-5.6-5.6.27/include/myisam.h mysql-5.6-5.6.33/include/myisam.h --- mysql-5.6-5.6.27/include/myisam.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/myisam.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -426,12 +426,13 @@ int chk_key(MI_CHECK *param, MI_INFO *info); int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend); int mi_repair(MI_CHECK *param, register MI_INFO *info, - char * name, int rep_quick); -int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name); + char * name, int rep_quick, my_bool no_copy_stat); +int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name, + my_bool no_copy_stat); int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, - const char * name, int rep_quick); + const char * name, int rep_quick, my_bool no_copy_stat); int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, - const char * name, int rep_quick); + const char * name, int rep_quick, my_bool no_copy_stat); int change_to_newfile(const char * filename, const char * old_ext, const char * new_ext, myf myflags); int lock_file(MI_CHECK *param, File file, my_off_t start, int lock_type, diff -Nru mysql-5.6-5.6.27/include/my_pthread.h mysql-5.6-5.6.33/include/my_pthread.h --- mysql-5.6-5.6.27/include/my_pthread.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_pthread.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -90,6 +90,7 @@ windows implementation of pthread_cond_timedwait */ +#ifndef HAVE_STRUCT_TIMESPEC /* Declare a union to make sure FILETIME is properly aligned so it can be used directly as a 64 bit value. The value @@ -131,6 +132,8 @@ #define diff_timespec(TS1, TS2) \ ((TS1.tv.i64 - TS2.tv.i64) * 100) +#endif + int win_pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *); int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); @@ -857,7 +860,7 @@ #endif }; -extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); +extern struct st_my_thread_var *_my_thread_var(void) MY_ATTRIBUTE ((const)); extern int set_mysys_var(struct st_my_thread_var *mysys_var); extern void **my_thread_var_dbug(); extern uint my_thread_end_wait_time; diff -Nru mysql-5.6-5.6.27/include/mysql/psi/mysql_file.h mysql-5.6-5.6.33/include/mysql/psi/mysql_file.h --- mysql-5.6-5.6.27/include/mysql/psi/mysql_file.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/mysql/psi/mysql_file.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -511,9 +511,9 @@ PSI_file_info *info, int count #else - const char *category __attribute__ ((unused)), - void *info __attribute__ ((unused)), - int count __attribute__ ((unused)) + const char *category MY_ATTRIBUTE ((unused)), + void *info MY_ATTRIBUTE ((unused)), + int count MY_ATTRIBUTE ((unused)) #endif ) { diff -Nru mysql-5.6-5.6.27/include/mysql/psi/mysql_socket.h mysql-5.6-5.6.33/include/mysql/psi/mysql_socket.h --- mysql-5.6-5.6.27/include/mysql/psi/mysql_socket.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/mysql/psi/mysql_socket.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -114,9 +114,9 @@ const struct sockaddr *addr, socklen_t addr_len #else - MYSQL_SOCKET socket __attribute__ ((unused)), - const struct sockaddr *addr __attribute__ ((unused)), - socklen_t addr_len __attribute__ ((unused)) + MYSQL_SOCKET socket MY_ATTRIBUTE ((unused)), + const struct sockaddr *addr MY_ATTRIBUTE ((unused)), + socklen_t addr_len MY_ATTRIBUTE ((unused)) #endif ) { @@ -136,7 +136,7 @@ #ifdef HAVE_PSI_SOCKET_INTERFACE MYSQL_SOCKET socket #else -MYSQL_SOCKET socket __attribute__ ((unused)) +MYSQL_SOCKET socket MY_ATTRIBUTE ((unused)) #endif ) { diff -Nru mysql-5.6-5.6.27/include/mysql/psi/mysql_thread.h mysql-5.6-5.6.33/include/mysql/psi/mysql_thread.h --- mysql-5.6-5.6.27/include/mysql/psi/mysql_thread.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/mysql/psi/mysql_thread.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -587,9 +587,9 @@ PSI_mutex_info *info, int count #else - const char *category __attribute__ ((unused)), - void *info __attribute__ ((unused)), - int count __attribute__ ((unused)) + const char *category MY_ATTRIBUTE ((unused)), + void *info MY_ATTRIBUTE ((unused)), + int count MY_ATTRIBUTE ((unused)) #endif ) { @@ -771,9 +771,9 @@ PSI_rwlock_info *info, int count #else - const char *category __attribute__ ((unused)), - void *info __attribute__ ((unused)), - int count __attribute__ ((unused)) + const char *category MY_ATTRIBUTE ((unused)), + void *info MY_ATTRIBUTE ((unused)), + int count MY_ATTRIBUTE ((unused)) #endif ) { @@ -1089,9 +1089,9 @@ PSI_cond_info *info, int count #else - const char *category __attribute__ ((unused)), - void *info __attribute__ ((unused)), - int count __attribute__ ((unused)) + const char *category MY_ATTRIBUTE ((unused)), + void *info MY_ATTRIBUTE ((unused)), + int count MY_ATTRIBUTE ((unused)) #endif ) { @@ -1231,9 +1231,9 @@ PSI_thread_info *info, int count #else - const char *category __attribute__ ((unused)), - void *info __attribute__ ((unused)), - int count __attribute__ ((unused)) + const char *category MY_ATTRIBUTE ((unused)), + void *info MY_ATTRIBUTE ((unused)), + int count MY_ATTRIBUTE ((unused)) #endif ) { diff -Nru mysql-5.6-5.6.27/include/mysql/psi/psi_abi_v1.h.pp mysql-5.6-5.6.33/include/mysql/psi/psi_abi_v1.h.pp --- mysql-5.6-5.6.27/include/mysql/psi/psi_abi_v1.h.pp 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/mysql/psi/psi_abi_v1.h.pp 2016-08-26 11:22:35.000000000 +0000 @@ -269,6 +269,7 @@ const struct sql_digest_storage *m_digest; char m_schema_name[(64 * 3)]; uint m_schema_name_length; + uint m_cs_number; }; struct PSI_socket_locker_state_v1 { diff -Nru mysql-5.6-5.6.27/include/mysql/psi/psi.h mysql-5.6-5.6.33/include/mysql/psi/psi.h --- mysql-5.6-5.6.27/include/mysql/psi/psi.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/mysql/psi/psi.h 2016-08-26 11:22:35.000000000 +0000 @@ -1009,6 +1009,8 @@ char m_schema_name[PSI_SCHEMA_NAME_LEN]; /** Length in bytes of @c m_schema_name. */ uint m_schema_name_length; + /** Statement character set number. */ + uint m_cs_number; }; /** diff -Nru mysql-5.6-5.6.27/include/my_sys.h mysql-5.6-5.6.33/include/my_sys.h --- mysql-5.6-5.6.27/include/my_sys.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_sys.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -84,6 +84,7 @@ #define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ #define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ #define MY_REDEL_MAKE_BACKUP 256 +#define MY_REDEL_NO_COPY_STAT 512 /* my_redel() doesn't call my_copystat() */ #define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ #define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */ #define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ diff -Nru mysql-5.6-5.6.27/include/my_tree.h mysql-5.6-5.6.33/include/my_tree.h --- mysql-5.6-5.6.27/include/my_tree.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/my_tree.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,7 +62,7 @@ } TREE; /* Functions on whole tree */ -void init_tree(TREE *tree, ulong default_alloc_size, ulong memory_limit, +void init_tree(TREE *tree, size_t default_alloc_size, ulong memory_limit, int size, qsort_cmp2 compare, my_bool with_delete, tree_element_free free_element, const void *custom_arg); void delete_tree(TREE*); diff -Nru mysql-5.6-5.6.27/include/sslopt-case.h mysql-5.6-5.6.33/include/sslopt-case.h --- mysql-5.6-5.6.27/include/sslopt-case.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/sslopt-case.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef SSLOPT_CASE_INCLUDED #define SSLOPT_CASE_INCLUDED -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,5 +35,18 @@ opt_ssl_crlpath= NULL; #endif break; +#ifdef MYSQL_CLIENT + case OPT_SSL_MODE: + if (my_strcasecmp(&my_charset_latin1, argument, "required")) + { + fprintf(stderr, + "Unknown value to --ssl-mode: '%s'. Use --ssl-mode=REQUIRED\n", + argument); + exit(1); + } + else + opt_ssl_required= 1; + break; +#endif /* MYSQL_CLIENT */ #endif #endif /* SSLOPT_CASE_INCLUDED */ diff -Nru mysql-5.6-5.6.27/include/sslopt-longopts.h mysql-5.6-5.6.33/include/sslopt-longopts.h --- mysql-5.6-5.6.27/include/sslopt-longopts.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/sslopt-longopts.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef SSLOPT_LONGOPTS_INCLUDED #define SSLOPT_LONGOPTS_INCLUDED -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,6 +51,9 @@ "when connecting. This option is disabled by default.", &opt_ssl_verify_server_cert, &opt_ssl_verify_server_cert, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, + {"ssl-mode", OPT_SSL_MODE, + "SSL connection mode.", + 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #endif #endif /* HAVE_OPENSSL */ #endif /* SSLOPT_LONGOPTS_INCLUDED */ diff -Nru mysql-5.6-5.6.27/include/sslopt-vars.h mysql-5.6-5.6.33/include/sslopt-vars.h --- mysql-5.6-5.6.27/include/sslopt-vars.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/sslopt-vars.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef SSLOPT_VARS_INCLUDED #define SSLOPT_VARS_INCLUDED -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,8 +30,13 @@ SSL_STATIC char *opt_ssl_key = 0; SSL_STATIC char *opt_ssl_crl = 0; SSL_STATIC char *opt_ssl_crlpath = 0; + #ifdef MYSQL_CLIENT SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; -#endif -#endif +SSL_STATIC my_bool opt_ssl_required= 0; +#endif /* MYSQL_CLIENT */ +#else /* HAVE_OPENSSL */ +#define opt_ssl_required 0 +#endif /* HAVE_OPENSSL */ + #endif /* SSLOPT_VARS_INCLUDED */ diff -Nru mysql-5.6-5.6.27/include/welcome_copyright_notice.h mysql-5.6-5.6.33/include/welcome_copyright_notice.h --- mysql-5.6-5.6.27/include/welcome_copyright_notice.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/include/welcome_copyright_notice.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,7 +16,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 diff -Nru mysql-5.6-5.6.27/INSTALL mysql-5.6-5.6.33/INSTALL --- mysql-5.6-5.6.27/INSTALL 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/INSTALL 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,11 @@ +Pre-built binaries in different package formats can be found on + + http://www.mysql.com/downloads + +You can find information about how to install from a source distribution at + + http://dev.mysql.com/doc/refman/5.6/en/source-installation.html + +The MySQL 5.6 Reference Manual is available on + + http://dev.mysql.com/doc/refman/5.6/en/ diff -Nru mysql-5.6-5.6.27/INSTALL-SOURCE mysql-5.6-5.6.33/INSTALL-SOURCE --- mysql-5.6-5.6.27/INSTALL-SOURCE 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/INSTALL-SOURCE 1970-01-01 00:00:00.000000000 +0000 @@ -1,9443 +0,0 @@ -Chapter 2 Installing and Upgrading MySQL - - This chapter describes how to obtain and install MySQL. A - summary of the procedure follows and later sections provide - the details. If you plan to upgrade an existing version of - MySQL to a newer version rather than install MySQL for the - first time, see Section 2.11.1, "Upgrading MySQL," for - information about upgrade procedures and about issues that - you should consider before upgrading. - - If you are interested in migrating to MySQL from another - database system, you may wish to read Section A.8, "MySQL 5.6 - FAQ: Migration," which contains answers to some common - questions concerning migration issues. - - Installation of MySQL generally follows the steps outlined - here: - - 1. Determine whether MySQL runs and is supported on your - platform. - Please note that not all platforms are equally suitable - for running MySQL, and that not all platforms on which - MySQL is known to run are officially supported by Oracle - Corporation: - - 2. Choose which distribution to install. - Several versions of MySQL are available, and most are - available in several distribution formats. You can choose - from pre-packaged distributions containing binary - (precompiled) programs or source code. When in doubt, use - a binary distribution. We also provide public access to - our current source tree for those who want to see our - most recent developments and help us test new code. To - determine which version and type of distribution you - should use, see Section 2.1.1, "Which MySQL Version and - Distribution to Install." - - 3. Download the distribution that you want to install. - For instructions, see Section 2.1.2, "How to Get MySQL." - To verify the integrity of the distribution, use the - instructions in Section 2.1.3, "Verifying Package - Integrity Using MD5 Checksums or GnuPG." - - 4. Install the distribution. - To install MySQL from a binary distribution, use the - instructions in Section 2.2, "Installing MySQL on - Unix/Linux Using Generic Binaries." - To install MySQL from a source distribution or from the - current development source tree, use the instructions in - Section 2.9, "Installing MySQL from Source." - - 5. Perform any necessary postinstallation setup. - After installing MySQL, see Section 2.10, - "Postinstallation Setup and Testing" for information - about making sure the MySQL server is working properly. - Also refer to the information provided in Section 2.10.4, - "Securing the Initial MySQL Accounts." This section - describes how to secure the initial MySQL user accounts, - which have no passwords until you assign passwords. The - section applies whether you install MySQL using a binary - or source distribution. - - 6. If you want to run the MySQL benchmark scripts, Perl - support for MySQL must be available. See Section 2.13, - "Perl Installation Notes." - - Instructions for installing MySQL on different platforms and - environments is available on a platform by platform basis: - - * Unix, Linux, FreeBSD - For instructions on installing MySQL on most Linux and - Unix platforms using a generic binary (for example, a - .tar.gz package), see Section 2.2, "Installing MySQL on - Unix/Linux Using Generic Binaries." - For information on building MySQL entirely from the - source code distributions or the source code - repositories, see Section 2.9, "Installing MySQL from - Source" - For specific platform help on installation, - configuration, and building from source see the - corresponding platform section: - - + Linux, including notes on distribution specific - methods, see Section 2.5, "Installing MySQL on - Linux." - - + Solaris and OpenSolaris, including PKG and IPS - formats, see Section 2.7, "Installing MySQL on - Solaris and OpenSolaris." - - + IBM AIX, see Section 2.7, "Installing MySQL on - Solaris and OpenSolaris." - - + FreeBSD, see Section 2.8, "Installing MySQL on - FreeBSD." - - * Microsoft Windows - For instructions on installing MySQL on Microsoft - Windows, using either the MySQL Installer or Zipped - binary, see Section 2.3, "Installing MySQL on Microsoft - Windows." - For information about managing MySQL instances, see - Section 2.3.4, "MySQL Notifier." - For details and instructions on building MySQL from - source code using Microsoft Visual Studio, see Section - 2.9, "Installing MySQL from Source." - - * OS X - For installation on OS X, including using both the binary - package and native PKG formats, see Section 2.4, - "Installing MySQL on OS X." - For information on making use of an OS X Launch Daemon to - automatically start and stop MySQL, see Section 2.4.3, - "Installing a MySQL Launch Daemon." - For information on the MySQL Preference Pane, see Section - 2.4.4, "Installing and Using the MySQL Preference Pane." - -2.1 General Installation Guidance - - The immediately following sections contain the information - necessary to choose, download, and verify your distribution. - The instructions in later sections of the chapter describe - how to install the distribution that you choose. For binary - distributions, see the instructions at Section 2.2, - "Installing MySQL on Unix/Linux Using Generic Binaries" or - the corresponding section for your platform if available. To - build MySQL from source, use the instructions in Section 2.9, - "Installing MySQL from Source." - -2.1.1 Which MySQL Version and Distribution to Install - - MySQL is available on a number of operating systems and - platforms. For information about those platforms that are - officially supported, see - http://www.mysql.com/support/supportedplatforms/database.html - on the MySQL Web site. - - When preparing to install MySQL, you should decide which - version to use, and which distribution format (binary or - source) to use for the installation. - - First, decide if you want to install a development release or - a GA release. Development releases have the newest features, - but are not recommended for production use. GA (General - Availability) releases, also called production or stable - releases, are meant for production use. We recommend to use - the most recent GA release. - - The naming scheme in MySQL 5.6 uses release names that - consist of three numbers and a suffix; for example, - mysql-5.6.1-m1. The numbers within the release name are - interpreted as follows: - - * The first number (5) is the major version and describes - the file format. All MySQL 5 releases have the same file - format. - - * The second number (6) is the release level. Taken - together, the major version and release level constitute - the release series number. - - * The third number (1) is the version number within the - release series. This is incremented for each new release. - Usually you want the latest version for the series you - have chosen. - - For each minor update, the last number in the version string - is incremented. When there are major new features or minor - incompatibilities with previous versions, the second number - in the version string is incremented. When the file format - changes, the first number is increased. - - Release names can also include a suffix that indicates the - stability level of the release. Releases within a series - progress through a set of suffixes to indicate how the - stability level improves. The possible suffixes are: - - * If there is no suffix, it indicates that the release is a - General Availability (GA) or Production release. GA - releases are stable, having successfully passed through - all earlier release stages and are believed to be - reliable, free of serious bugs, and suitable for use in - production systems. Only critical bugfixes are applied to - the release. - - * mN (for example, m1, m2, m3, ...) indicate a milestone - number. MySQL development uses a milestone model, in - which each milestone proceeds through a small number of - versions with a tight focus on a small subset of - thoroughly tested features. Following the releases for - one milestone, development proceeds with another small - number of releases that focuses on the next small set of - features, also thoroughly tested. Features within - milestone releases may be considered to be of - pre-production quality. - - * rc indicates a Release Candidate. Release candidates are - believed to be stable, having passed all of MySQL's - internal testing, and with all known fatal runtime bugs - fixed. However, the release has not been in widespread - use long enough to know for sure that all bugs have been - identified. Only minor fixes are added. - - Once you've chosen which MySQL version to install, you need - to decide which distribution to install for your operating - system. For most use cases, a binary distribution is the - right choice. Binary distributions are available in native - format for many platforms, such as RPM packages for Linux, or - DMG packages for OS X. Distributions are also available in - more generic formats such as Zip archives or compressed tar - files. On Windows, you can use the MySQL Installer to install - a binary distribution. - - Under some circumstances, you may be better off installing - MySQL from a source distribution: - - * You want to install MySQL at some explicit location. The - standard binary distributions are ready to run at any - installation location, but you might require even more - flexibility to place MySQL components where you want. - - * You want to configure mysqld to ensure that features are - available that might not be included in the standard - binary distributions. Here is a list of the most common - extra options that you may want to use to ensure feature - availability: - - + -DWITH_LIBWRAP=1 for TCP wrappers support. - - + -DWITH_ZLIB={system|bundled} for features that - depend on compression - - + -DWITH_DEBUG=1 for debugging support - For additional information, see Section 2.9.4, "MySQL - Source-Configuration Options." - - * You want to configure mysqld without some features that - are included in the standard binary distributions. For - example, distributions normally are compiled with support - for all character sets. If you want a smaller MySQL - server, you can recompile it with support for only the - character sets you need. - - * You want to use the latest sources from one of the Git - repositories to have access to all current bugfixes. For - example, if you have found a bug and reported it to the - MySQL development team, the bugfix is committed to the - source repository and you can access it there. The bugfix - does not appear in a release until a release actually is - issued. - - * You want to read (or modify) the C and C++ code that - makes up MySQL. For this purpose, you should get a source - distribution. - - * Source distributions contain more tests and examples than - binary distributions. - -2.1.2 How to Get MySQL - - Check our downloads page at http://dev.mysql.com/downloads/ - for information about the current version of MySQL and for - downloading instructions. For a complete up-to-date list of - MySQL download mirror sites, see - http://dev.mysql.com/downloads/mirrors.html. You can also - find information there about becoming a MySQL mirror site and - how to report a bad or out-of-date mirror. - - For RPM-based Linux platforms that use Yum as their package - management system, MySQL can be installed using the MySQL Yum - Repository (http://dev.mysql.com/downloads/repo/yum/). See - Section 2.5.1, "Installing MySQL on Linux Using the MySQL Yum - Repository" for details. - - For a number of Debian-based Linux platforms, such as Ubuntu, - MySQL can be installed using the MySQL APT Repository - (http://dev.mysql.com/downloads/repo/apt/). See Section - 2.5.3, "Installing MySQL on Linux Using the MySQL APT - Repository" for details. - - For SUSE Linux Enterprise Server (SLES) platforms, MySQL can - be installed using the MySQL SLES Repository - (http://dev.mysql.com/downloads/repo/suse/). See Section - 2.5.4, "Installing MySQL on Linux Using the MySQL SLES - Repository" for details. - - To obtain the latest development source, see Section 2.9.3, - "Installing MySQL Using a Development Source Tree." - -2.1.3 Verifying Package Integrity Using MD5 Checksums or GnuPG - - After you have downloaded the MySQL package that suits your - needs and before you attempt to install it, you should make - sure that it is intact and has not been tampered with. There - are three means of integrity checking: - - * MD5 checksums - - * Cryptographic signatures using GnuPG, the GNU Privacy - Guard - - * For RPM packages, the built-in RPM integrity verification - mechanism - - The following sections describe how to use these methods. - - If you notice that the MD5 checksum or GPG signatures do not - match, first try to download the respective package one more - time, perhaps from another mirror site. - -2.1.3.1 Verifying the MD5 Checksum - - After you have downloaded a MySQL package, you should make - sure that its MD5 checksum matches the one provided on the - MySQL download pages. Each package has an individual checksum - that you can verify against the package that you downloaded. - The correct MD5 checksum is listed on the downloads page for - each MySQL product, and you will compare it against the MD5 - checksum of the file (product) that you download. - - Each operating system and setup offers its own version of - tools for checking the MD5 checksum. Typically the command is - named md5sum, or it may be named md5, and some operating - systems do not ship it at all. On Linux, it is part of the - GNU Text Utilities package, which is available for a wide - range of platforms. You can also download the source code - from http://www.gnu.org/software/textutils/. If you have - OpenSSL installed, you can use the command openssl md5 - package_name instead. A Windows implementation of the md5 - command line utility is available from - http://www.fourmilab.ch/md5/. winMd5Sum is a graphical MD5 - checking tool that can be obtained from - http://www.nullriver.com/index/products/winmd5sum. Our - Microsoft Windows examples will assume the name md5.exe. - - Linux and Microsoft Windows examples: -shell> md5sum mysql-standard-5.6.28-linux-i686.tar.gz -aaab65abbec64d5e907dcd41b8699945 mysql-standard-5.6.28-linux-i686.tar -.gz - -shell> md5.exe mysql-installer-community-5.6.28.msi -aaab65abbec64d5e907dcd41b8699945 mysql-installer-community-5.6.28.msi - - You should verify that the resulting checksum (the string of - hexadecimal digits) matches the one displayed on the download - page immediately below the respective package. - Note - - Make sure to verify the checksum of the archive file (for - example, the .zip, .tar.gz, or .msi file) and not of the - files that are contained inside of the archive. In other - words, verify the file before extracting its contents. - -2.1.3.2 Signature Checking Using GnuPG - - Another method of verifying the integrity and authenticity of - a package is to use cryptographic signatures. This is more - reliable than using MD5 checksums, but requires more work. - - We sign MySQL downloadable packages with GnuPG (GNU Privacy - Guard). GnuPG is an Open Source alternative to the well-known - Pretty Good Privacy (PGP) by Phil Zimmermann. See - http://www.gnupg.org/ for more information about GnuPG and - how to obtain and install it on your system. Most Linux - distributions ship with GnuPG installed by default. For more - information about GnuPG, see http://www.openpgp.org/. - - To verify the signature for a specific package, you first - need to obtain a copy of our public GPG build key, which you - can download from http://pgp.mit.edu/. The key that you want - to obtain is named mysql-build@oss.oracle.com. Alternatively, - you can cut and paste the key directly from the following - text: ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.9 (SunOS) - -mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3 -RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ -fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3 -BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW -hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV -K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE -kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI -QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep -rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q2TXlTUUwgUmVs -ZWFzZSBFbmdpbmVlcmluZyA8bXlzcWwtYnVpbGRAb3NzLm9yYWNsZS5jb20+iGkE -ExECACkCGyMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAIZAQUCUwHUZgUJGmbLywAK -CRCMcY07UHLh9V+DAKCjS1gGwgVI/eut+5L+l2v3ybl+ZgCcD7ZoA341HtoroV3U -6xRD09fUgeq0O015U1FMIFBhY2thZ2Ugc2lnbmluZyBrZXkgKHd3dy5teXNxbC5j -b20pIDxidWlsZEBteXNxbC5jb20+iG8EMBECAC8FAk53Pa0oHSBidWlsZEBteXNx -bC5jb20gd2lsbCBzdG9wIHdvcmtpbmcgc29vbgAKCRCMcY07UHLh9bU9AJ9xDK0o -xJFL9vTl9OSZC4lX0K9AzwCcCrS9cnJyz79eaRjL0s2r/CcljdyIZQQTEQIAHQUC -R6yUtAUJDTBYqAULBwoDBAMVAwIDFgIBAheAABIJEIxxjTtQcuH1B2VHUEcAAQGu -kgCffz4GUEjzXkOi71VcwgCxASTgbe0An34LPr1j9fCbrXWXO14msIADfb5piEwE -ExECAAwFAj4+o9EFgwlmALsACgkQSVDhKrJykfIk4QCfWbEeKN+3TRspe+5xKj+k -QJSammIAnjUz0xFWPlVx0f8o38qNG1bq0cU9iEwEExECAAwFAj5CggMFgwliIokA -CgkQtvXNTca6JD+WkQCgiGmnoGjMojynp5ppvMXkyUkfnykAoK79E6h8rwkSDZou -iz7nMRisH8uyiEYEEBECAAYFAj+s468ACgkQr8UjSHiDdA/2lgCg21IhIMMABTYd -p/IBiUsP/JQLiEoAnRzMywEtujQz/E9ono7H1DkebDa4iEYEEBECAAYFAj+0Q3cA -CgkQhZavqzBzTmbGwwCdFqD1frViC7WRt8GKoOS7hzNN32kAnirlbwpnT7a6NOsQ -83nk11a2dePhiEYEEBECAAYFAkNbs+oACgkQi9gubzC5S1x/dACdELKoXQKkwJN0 -gZztsM7kjsIgyFMAnRRMbHQ7V39XC90OIpaPjk3a01tgiEYEExECAAYFAkTxMyYA -CgkQ9knE9GCTUwwKcQCgibak/SwhxWH1ijRhgYCo5GtM4vcAnAhtzL57wcw1Kg1X -m7nVGetUqJ7fiEwEEBECAAwFAkGBywEFgwYi2YsACgkQGFnQH2d7oexCjQCcD8sJ -NDc/mS8m8OGDUOx9VMWcnGkAnj1YWOD+Qhxo3mI/Ul9oEAhNkjcfiEwEEBECAAwF -AkGByzQFgwYi2VgACgkQgcL36+ITtpIiIwCdFVNVUB8xe8mFXoPm4d9Z54PTjpMA -niSPA/ZsfJ3oOMLKar4F0QPPrdrGiEwEEBECAAwFAkGBy2IFgwYi2SoACgkQa3Ds -2V3D9HMJqgCbBYzr5GPXOXgP88jKzmdbjweqXeEAnRss4G2G/3qD7uhTL1SPT1SH -jWUXiEwEEBECAAwFAkHQkyQFgwXUEWgACgkQfSXKCsEpp8JiVQCghvWvkPqowsw8 -w7WSseTcw1tflvkAni+vLHl/DqIly0LkZYn5jzK1dpvfiEwEEBECAAwFAkIrW7oF -gwV5SNIACgkQ5hukiRXruavzEwCgkzL5QkLSypcw9LGHcFSx1ya0VL4An35nXkum -g6cCJ1NP8r2I4NcZWIrqiEwEEhECAAwFAkAqWToFgwd6S1IACgkQPKEfNJT6+GEm -XACcD+A53A5OGM7w750W11ukq4iZ9ckAnRMvndAqn3YTOxxlLPj2UPZiSgSqiEwE -EhECAAwFAkA9+roFgwdmqdIACgkQ8tdcY+OcZZyy3wCgtDcwlaq20w0cNuXFLLNe -EUaFFTwAni6RHN80moSVAdDTRkzZacJU3M5QiEwEEhECAAwFAkEOCoQFgwaWmggA -CgkQOcor9D1qil/83QCeITZ9wIo7XAMjC6y4ZWUL4m+edZsAoMOhRIRi42fmrNFu -vNZbnMGej81viEwEEhECAAwFAkKApTQFgwUj/1gACgkQBA3AhXyDn6jjJACcD1A4 -UtXk84J13JQyoH9+dy24714Aniwlsso/9ndICJOkqs2j5dlHFq6oiEwEExECAAwF -Aj5NTYQFgwlXVwgACgkQLbt2v63UyTMFDACglT5G5NVKf5Mj65bFSlPzb92zk2QA -n1uc2h19/IwwrsbIyK/9POJ+JMP7iEwEExECAAwFAkHXgHYFgwXNJBYACgkQZu/b -yM2C/T4/vACfXe67xiSHB80wkmFZ2krb+oz/gBAAnjR2ucpbaonkQQgnC3GnBqmC -vNaJiEwEExECAAwFAkIYgQ4FgwWMI34ACgkQdsEDHKIxbqGg7gCfQi2HcrHn+yLF -uNlH1oSOh48ZM0oAn3hKV0uIRJphonHaUYiUP1ttWgdBiGUEExECAB0FCwcKAwQD -FQMCAxYCAQIXgAUCS3AvygUJEPPzpwASB2VHUEcAAQEJEIxxjTtQcuH1sNsAniYp -YBGqy/HhMnw3WE8kXahOOR5KAJ4xUmWPGYP4l3hKxyNK9OAUbpDVYIh7BDARAgA7 -BQJCdzX1NB0AT29wcy4uLiBzaG91bGQgaGF2ZSBiZWVuIGxvY2FsISBJJ20gKnNv -KiBzdHVwaWQuLi4ACgkQOcor9D1qil/vRwCdFo08f66oKLiuEAqzlf9iDlPozEEA -n2EgvCYLCCHjfGosrkrU3WK5NFVgiI8EMBECAE8FAkVvAL9IHQBTaG91bGQgaGF2 -ZSBiZWVuIGEgbG9jYWwgc2lnbmF0dXJlLCBvciBzb21ldGhpbmcgLSBXVEYgd2Fz -IEkgdGhpbmtpbmc/AAoJEDnKK/Q9aopfoPsAn3BVqKOalJeF0xPSvLR90PsRlnmG -AJ44oisY7Tl3NJbPgZal8W32fbqgbIkCIgQQAQIADAUCQYHLhQWDBiLZBwAKCRCq -4+bOZqFEaKgvEACCErnaHGyUYa0wETjj6DLEXsqeOiXad4i9aBQxnD35GUgcFofC -/nCY4XcnCMMEnmdQ9ofUuU3OBJ6BNJIbEusAabgLooebP/3KEaiCIiyhHYU5jarp -ZAh+Zopgs3Oc11mQ1tIaS69iJxrGTLodkAsAJAeEUwTPq9fHFFzC1eGBysoyFWg4 -bIjz/zClI+qyTbFA5g6tRoiXTo8ko7QhY2AA5UGEg+83Hdb6akC04Z2QRErxKAqr -phHzj8XpjVOsQAdAi/qVKQeNKROlJ+iq6+YesmcWGfzeb87dGNweVFDJIGA0qY27 -pTb2lExYjsRFN4Cb13NfodAbMTOxcAWZ7jAPCxAPlHUG++mHMrhQXEToZnBFE4nb -nC7vOBNgWdjUgXcpkUCkop4b17BFpR+k8ZtYLSS8p2LLz4uAeCcSm2/msJxT7rC/ -FvoH8428oHincqs2ICo9zO/Ud4HmmO0O+SsZdVKIIjinGyOVWb4OOzkAlnnhEZ3o -6hAHcREIsBgPwEYVTj/9ZdC0AO44Nj9cU7awaqgtrnwwfr/o4V2gl8bLSkltZU27 -/29HeuOeFGjlFe0YrDd/aRNsxbyb2O28H4sG1CVZmC5uK1iQBDiSyA7Q0bbdofCW -oQzm5twlpKWnY8Oe0ub9XP5p/sVfck4FceWFHwv+/PC9RzSl33lQ6vM2wIkCIgQT -AQIADAUCQp8KHAWDBQWacAAKCRDYwgoJWiRXzyE+D/9uc7z6fIsalfOYoLN60ajA -bQbI/uRKBFugyZ5RoaItusn9Z2rAtn61WrFhu4uCSJtFN1ny2RERg40f56pTghKr -D+YEt+Nze6+FKQ5AbGIdFsR/2bUk+ZZRSt83e14Lcb6ii/fJfzkoIox9ltkifQxq -Y7Tvk4noKu4oLSc8O1Wsfc/y0B9sYUUCmUfcnq58DEmGie9ovUslmyt5NPnveXxp -5UeaRc5Rqt9tK2B4A+7/cqENrdZJbAMSunt2+2fkYiRunAFPKPBdJBsY1sxeL/A9 -aKe0viKEXQdAWqdNZKNCi8rd/oOP99/9lMbFudAbX6nL2DSb1OG2Z7NWEqgIAzjm -pwYYPCKeVz5Q8R+if9/fe5+STY/55OaI33fJ2H3v+U435VjYqbrerWe36xJItcJe -qUzW71fQtXi1CTEl3w2ch7VF5oj/QyjabLnAlHgSlkSi6p7By5C2MnbCHlCfPnIi -nPhFoRcRGPjJe9nFwGs+QblvS/Chzc2WX3s/2SWm4gEUKRX4zsAJ5ocyfa/vkxCk -SxK/erWlCPf/J1T70+i5waXDN/E3enSet/WL7h94pQKpjz8OdGL4JSBHuAVGA+a+ -dknqnPF0KMKLhjrgV+L7O84FhbmAP7PXm3xmiMPriXf+el5fZZequQoIagf8rdRH -HhRJxQgI0HNknkaOqs8dtrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWs -EN/lxaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLm -RDRiRjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hk -AWzE7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkb -f4fmLe11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHb -uE5p/1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+ -Lwqqa8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1Z -aSafanFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGo -TbOWI39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev4 -2LmuQT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkK -Ht926s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUO -etdZWhe70YGNPw1yjWJT1IhUBBgRAgAMBQJOdz3tBQkT+wG4ABIHZUdQRwABAQkQ -jHGNO1By4fUUmwCbBYr2+bBEn/L2BOcnw9Z/QFWuhRMAoKVgCFm5fadQ3Afi+UQl -AcOphrnJ -=443I ------END PGP PUBLIC KEY BLOCK----- - - To import the build key into your personal public GPG - keyring, use gpg --import. For example, if you have saved the - key in a file named mysql_pubkey.asc, the import command - looks like this: -shell> gpg --import mysql_pubkey.asc -gpg: key 5072E1F5: public key "MySQL Release Engineering -" imported -gpg: Total number processed: 1 -gpg: imported: 1 -gpg: no ultimately trusted keys found - - You can also download the key from the public keyserver using - the public key id, 5072E1F5: -shell> gpg --recv-keys 5072E1F5 -gpg: requesting key 5072E1F5 from hkp server keys.gnupg.net -gpg: key 5072E1F5: "MySQL Release Engineering " -1 new user ID -gpg: key 5072E1F5: "MySQL Release Engineering " -53 new signatures -gpg: no ultimately trusted keys found -gpg: Total number processed: 1 -gpg: new user IDs: 1 -gpg: new signatures: 53 - - If you want to import the key into your RPM configuration to - validate RPM install packages, you should be able to import - the key directly: -shell> rpm --import mysql_pubkey.asc - - If you experience problems or require RPM specific - information, see Section 2.1.3.4, "Signature Checking Using - RPM." - - After you have downloaded and imported the public build key, - download your desired MySQL package and the corresponding - signature, which also is available from the download page. - The signature file has the same name as the distribution file - with an .asc extension, as shown by the examples in the - following table. - - Table 2.1 MySQL Package and Signature Files for Source files - File Type File Name - Distribution file mysql-standard-5.6.28-linux-i686.tar.gz - Signature file mysql-standard-5.6.28-linux-i686.tar.gz.asc - - Make sure that both files are stored in the same directory - and then run the following command to verify the signature - for the distribution file: -shell> gpg --verify package_name.asc - - If the downloaded package is valid, you will see a "Good - signature" similar to: -shell> gpg --verify mysql-standard-5.6.28-linux-i686.tar.gz.asc -gpg: Signature made Tue 01 Feb 2011 02:38:30 AM CST using DSA key ID 5 -072E1F5 -gpg: Good signature from "MySQL Release Engineering " - - The Good signature message indicates that the file signature - is valid, when compared to the signature listed on our site. - But you might also see warnings, like so: -shell> gpg --verify mysql-standard-5.6.28-linux-i686.tar.gz.asc -gpg: Signature made Wed 23 Jan 2013 02:25:45 AM PST using DSA key ID 5 -072E1F5 -gpg: checking the trustdb -gpg: no ultimately trusted keys found -gpg: Good signature from "MySQL Release Engineering " -gpg: WARNING: This key is not certified with a trusted signature! -gpg: There is no indication that the signature belongs to the - owner. -Primary key fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 - E1F5 - - That is normal, as they depend on your setup and - configuration. Here are explanations for these warnings: - - * gpg: no ultimately trusted keys found: This means that - the specific key is not "ultimately trusted" by you or - your web of trust, which is okay for the purposes of - verifying file signatures. - - * This key is not certified with a trusted signature! There - is no indication that the signature belongs to the - owner.: This refers to your level of trust in your belief - that you possess our real public key. This is a personal - decision. Ideally, a MySQL developer would hand you the - key in person, but more commonly, you downloaded it. Was - the download tampered with? Probably not, but this - decision is up to you. Setting up a web of trust is one - method for trusting them. - - See the GPG documentation for more information on how to work - with public keys. - -2.1.3.3 Signature Checking Using Gpg4win for Windows - - The Section 2.1.3.2, "Signature Checking Using GnuPG" section - describes how to verify MySQL downloads using GPG. That guide - also applies to Microsoft Windows, but another option is to - use a GUI tool like Gpg4win (http://www.gpg4win.org/). You - may use a different tool but our examples are based on - Gpg4win, and utilize its bundled Kleopatra GUI. - - Download and install Gpg4win, and then load Kleopatra. The - dialog should look similar to: - - Figure 2.1 Initial screen after loading Kleopatra - Initial screen after loading Kleopatra - - Next, add the MySQL Release Engineering certificate. Do this - by clicking File, Lookup Certificates on Server. Type "Mysql - Release Engineering" into the search box and press Search. - - Figure 2.2 Finding the MySQL Release Engineering certificate - Finding the MySQL Release Engineering certificate - - Select the "MySQL Release Engineering" certificate. The - Fingerprint and Key-ID must be "5072E1F5", or choose - Details... to confirm the certificate is valid. Now, import - it by clicking Import. An import dialog will be displayed, - choose Okay, and this certificate will now be listed under - the Imported Certificates tab. - - Next, configure the trust level for our certificate. Select - our certificate, then from the main menu select Certificates, - Change Owner Trust.... We suggest choosing I believe checks - are very accurate for our certificate, as otherwise you might - not be able to verify our signature. Select I believe checks - are very accurate and then press OK. - - Figure 2.3 Changing the Trust level - Changing the Trust level - - Next, verify the downloaded MySQL package file. This requires - files for both the packaged file, and the signature. The - signature file must have the same name as the packaged file - but with an appended .asc extension, as shown by the example - in the following table. The signature is linked to on the - downloads page for each MySQL product. You must create the - .asc file with this signature. - - Table 2.2 MySQL Package and Signature Files for MySQL - Installer for Microsoft Windows - File Type File Name - Distribution file mysql-installer-community-5.6.28.msi - Signature file mysql-installer-community-5.6.28.msi.asc - - Make sure that both files are stored in the same directory - and then run the following command to verify the signature - for the distribution file. Either drag and drop the signature - (.asc) file into Kleopatra, or load the dialog from File, - Decrypt/Verify Files..., and then choose either the .msi or - .asc file. - - Figure 2.4 The Decrypt/Verify Files dialog - The Decrypt/Verify Files dialog - - Click Decrypt/Verify to check the file. The two most common - results will look like the following, and although the yellow - warning looks problematic, the following means that the file - check passed with success. You may now run this installer. - - Figure 2.5 The Decrypt/Verify Results: Good - The Decrypt/Verify Results: Good - - Seeing a red "The signature is bad" error means the file is - invalid. Do not execute the MSI file if you see this error. - - Figure 2.6 The Decrypt/Verify Results: Bad - The Decrypt/Verify Results: Bad - - The Section 2.1.3.2, "Signature Checking Using GnuPG" section - explains why you probably don't see a green Good signature - result. - -2.1.3.4 Signature Checking Using RPM - - For RPM packages, there is no separate signature. RPM - packages have a built-in GPG signature and MD5 checksum. You - can verify a package by running the following command: -shell> rpm --checksig package_name.rpm - - Example: -shell> rpm --checksig MySQL-server-5.6.28-0.linux_glibc2.5.i386.rpm -MySQL-server-5.6.28-0.linux_glibc2.5.i386.rpm: md5 gpg OK - - Note - - If you are using RPM 4.1 and it complains about (GPG) NOT OK - (MISSING KEYS: GPG#5072e1f5), even though you have imported - the MySQL public build key into your own GPG keyring, you - need to import the key into the RPM keyring first. RPM 4.1 no - longer uses your personal GPG keyring (or GPG itself). - Rather, RPM maintains a separate keyring because it is a - system-wide application and a user's GPG public keyring is a - user-specific file. To import the MySQL public key into the - RPM keyring, first obtain the key, then use rpm --import to - import the key. For example: -shell> gpg --export -a 5072e1f5 > 5072e1f5.asc -shell> rpm --import 5072e1f5.asc - - Alternatively, rpm also supports loading the key directly - from a URL, and you can use this manual page: -shell> rpm --import http://dev.mysql.com/doc/refman/5.6/en/checking-gp -g-signature.html - - If you need to obtain the MySQL public key, see Section - 2.1.3.2, "Signature Checking Using GnuPG." - -2.1.4 Installation Layouts - - The installation layout differs for different installation - types (for example, native packages, binary tarballs, and - source tarballs), which can lead to confusion when managing - different systems or using different installation sources. - The individual layouts are given in the corresponding - installation type or platform chapter, as described - following. Note that the layout of installations from vendors - other than Oracle may differ from these layouts. - - * Section 2.3.1, "MySQL Installation Layout on Microsoft - Windows" - - * Section 2.9.1, "MySQL Layout for Source Installation" - - * Section 2.2, "MySQL Installation Layout for Generic - Unix/Linux Binary Package" - - * Section 2.5.5, "MySQL Installation Layout for Linux RPM - Packages from the MySQL Developer Zone" - - * Section 2.4.2, "MySQL Installation Layout on OS X" - -2.1.5 Compiler-Specific Build Characteristics - - In some cases, the compiler used to build MySQL affects the - features available for use. The notes in this section apply - for binary distributions provided by Oracle Corporation or - that you compile yourself from source. - - icc (Intel C++ Compiler) Builds - - A server built with icc has these characteristics: - - * SSL support is not included. - -2.2 Installing MySQL on Unix/Linux Using Generic Binaries - - Oracle provides a set of binary distributions of MySQL. These - include generic binary distributions in the form of - compressed tar files (files with a .tar.gz extension) for a - number of platforms, and binaries in platform-specific - package formats for selected platforms. - - This section covers the installation of MySQL from a - compressed tar file binary distribution. For other - platform-specific package formats, see the other - platform-specific sections. For example, for Windows - distributions, see Section 2.3, "Installing MySQL on - Microsoft Windows." - - To obtain MySQL, see Section 2.1.2, "How to Get MySQL." - - MySQL compressed tar file binary distributions have names of - the form mysql-VERSION-OS.tar.gz, where VERSION is a number - (for example, 5.6.28), and OS indicates the type of operating - system for which the distribution is intended (for example, - pc-linux-i686 or winx64). - Warning - - If you have previously installed MySQL using your operating - system native package management system, such as yum or - apt-get, you may experience problems installing using a - native binary. Make sure your previous MySQL installation has - been removed entirely (using your package management system), - and that any additional files, such as old versions of your - data files, have also been removed. You should also check for - configuration files such as /etc/my.cnf or the /etc/mysql - directory and delete them. - - For information about replacing third-party packages with - official MySQL packages, see the related Apt guide - (http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/) or - Yum guide. - Warning - - MySQL has a dependency on the libaio library. Data directory - initialization and subsequent server startup steps will fail - if this library is not installed locally. If necessary, - install it using the appropriate package manager. For - example, on Yum-based systems: -shell> yum search libaio # search for info -shell> yum install libaio # install library - - Or, on APT-based systems: -shell> apt-cache search libaio # search for info -shell> apt-get install libaio1 # install library - - If you run into problems and need to file a bug report, - please use the instructions in Section 1.6, "How to Report - Bugs or Problems." - - On Unix, to install a compressed tar file binary - distribution, unpack it at the installation location you - choose (typically /usr/local/mysql). This creates the - directories shown in the following table. - - Table 2.3 MySQL Installation Layout for Generic Unix/Linux - Binary Package - Directory Contents of Directory - bin, scripts mysqld server, client and utility programs - data Log files, databases - docs MySQL manual in Info format - man Unix manual pages - include Include (header) files - lib Libraries - share Miscellaneous support files, including error messages, - sample configuration files, SQL for database installation - sql-bench Benchmarks - - Debug versions of the mysqld binary are available as - mysqld-debug. To compile your own debug version of MySQL from - a source distribution, use the appropriate configuration - options to enable debugging support. See Section 2.9, - "Installing MySQL from Source." - - To install and use a MySQL binary distribution, the command - sequence looks like this: -shell> groupadd mysql -shell> useradd -r -g mysql mysql -shell> cd /usr/local -shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz -shell> ln -s full-path-to-mysql-VERSION-OS mysql -shell> cd mysql -shell> chown -R mysql . -shell> chgrp -R mysql . -shell> scripts/mysql_install_db --user=mysql -shell> chown -R root . -shell> chown -R mysql data -shell> bin/mysqld_safe --user=mysql & -# Next command is optional -shell> cp support-files/mysql.server /etc/init.d/mysql.server - - Note - - This procedure assumes that you have root (administrator) - access to your system. Alternatively, you can prefix each - command using the sudo (Linux) or pfexec (OpenSolaris) - command. - Note - - The procedure does not assign passwords to MySQL accounts. To - do so, use the instructions in Section 2.10.4, "Securing the - Initial MySQL Accounts." - - As of MySQL 5.6.8, mysql_install_db creates a default option - file named my.cnf in the base installation directory. This - file is created from a template included in the distribution - package named my-default.cnf. For more information, see - Section 5.1.2.2, "Using a Sample Default Server Configuration - File." - - A more detailed version of the preceding description for - installing a binary distribution follows. - -Create a mysql User and Group - - If your system does not already have a user and group to use - for running mysqld, you may need to create one. The following - commands add the mysql group and the mysql user. You might - want to call the user and group something else instead of - mysql. If so, substitute the appropriate name in the - following instructions. The syntax for useradd and groupadd - may differ slightly on different versions of Unix, or they - may have different names such as adduser and addgroup. -shell> groupadd mysql -shell> useradd -r -g mysql mysql - - Note - - Because the user is required only for ownership purposes, not - login purposes, the useradd command uses the -r option to - create a user that does not have login permissions to your - server host. Omit this option to permit logins for the user, - or if your useradd does not support the option. - -Obtain and Unpack the Distribution - - Pick the directory under which you want to unpack the - distribution and change location into it. The example here - unpacks the distribution under /usr/local. The instructions, - therefore, assume that you have permission to create files - and directories in /usr/local. If that directory is - protected, you must perform the installation as root. -shell> cd /usr/local - - Obtain a distribution file using the instructions in Section - 2.1.2, "How to Get MySQL." For a given release, binary - distributions for all platforms are built from the same MySQL - source distribution. - - Unpack the distribution, which creates the installation - directory. Then create a symbolic link to that directory. tar - can uncompress and unpack the distribution if it has z option - support: -shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz -shell> ln -s full-path-to-mysql-VERSION-OS mysql - - The tar command creates a directory named mysql-VERSION-OS. - The ln command makes a symbolic link to that directory. This - enables you to refer more easily to the installation - directory as /usr/local/mysql. - - To install MySQL from a compressed tar file binary - distribution, your system must have GNU gunzip to uncompress - the distribution and a reasonable tar to unpack it. If your - tar program supports the z option, it can both uncompress and - unpack the file. - - GNU tar is known to work. The standard tar provided with some - operating systems is not able to unpack the long file names - in the MySQL distribution. You should download and install - GNU tar, or if available, use a preinstalled version of GNU - tar. Usually this is available as gnutar, gtar, or as tar - within a GNU or Free Software directory, such as /usr/sfw/bin - or /usr/local/bin. GNU tar is available from - http://www.gnu.org/software/tar/. - - If your tar does not have z option support, use gunzip to - unpack the distribution and tar to unpack it. Replace the - preceding tar command with the following alternative command - to uncompress and extract the distribution: -shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - - -Perform Postinstallation Setup - - The remainder of the installation process involves setting - distribution ownership and access permissions, initializing - the data directory, starting the MySQL server, and setting up - the configuration file. For instructions, see Section 2.10, - "Postinstallation Setup and Testing." - -2.3 Installing MySQL on Microsoft Windows - - There are several different methods to install MySQL on - Microsoft Windows. - -Simple Installation Method - - The simplest and recommended method is to download MySQL - Installer (for Windows) and let it install and configure all - of the MySQL products on your system. Here is how: - - * Download MySQL Installer from - http://dev.mysql.com/downloads/installer/ and execute it. - Note - Unlike the standard MySQL Installer, the smaller - "web-community" version does not bundle any MySQL - applications but it will download the MySQL products you - choose to install. - - * Choose the appropriate Setup Type for your system. - Typically you will choose Developer Default to install - MySQL server and other MySQL tools related to MySQL - development, helpful tools like MySQL Workbench. Or, - choose the Custom setup type to manually select your - desired MySQL products. - Note - Multiple versions of MySQL server can exist on a single - system. You can choose one or multiple versions. - - * Complete the installation process by following the MySQL - Installation wizard's instructions. This will install - several MySQL products and start the MySQL server. - - * MySQL is now installed. You probably configured MySQL as - a service that will automatically start MySQL server - every time you restart your system. - - Note - - You probably also installed other helpful MySQL products like - MySQL Workbench and MySQL Notifier on your system. Consider - loading Chapter 26, "MySQL Workbench" to check your new MySQL - server connection, and Section 2.3.4, "MySQL Notifier" to - view the connection's status. By default, these two programs - automatically start after installing MySQL. - - This process also installs the MySQL Installer application on - your system, and later you can use MySQL Installer to upgrade - or reconfigure your MySQL products. - -Additional Installation Information - - MySQL is available for Microsoft Windows, for both 32-bit and - 64-bit versions. For supported Windows platform information, - see - http://www.mysql.com/support/supportedplatforms/database.html - . - - It is possible to run MySQL as a standard application or as a - Windows service. By using a service, you can monitor and - control the operation of the server through the standard - Windows service management tools. For more information, see - Section 2.3.5.7, "Starting MySQL as a Windows Service." - - Generally, you should install MySQL on Windows using an - account that has administrator rights. Otherwise, you may - encounter problems with certain operations such as editing - the PATH environment variable or accessing the Service - Control Manager. Once installed, MySQL does not need to be - executed using a user with Administrator privileges. - - For a list of limitations on the use of MySQL on the Windows - platform, see Section D.10.6, "Windows Platform Limitations." - - In addition to the MySQL Server package, you may need or want - additional components to use MySQL with your application or - development environment. These include, but are not limited - to: - - * To connect to the MySQL server using ODBC, you must have - a Connector/ODBC driver. For more information, including - installation and configuration instructions, see MySQL - Connector/ODBC Developer Guide - (http://dev.mysql.com/doc/connector-odbc/en/index.html). - Note - MySQL Installer will install and configure Connector/ODBC - for you. - - * To use MySQL server with .NET applications, you must have - the Connector/Net driver. For more information, including - installation and configuration instructions, see MySQL - Connector/Net Developer Guide - (http://dev.mysql.com/doc/connector-net/en/index.html). - Note - MySQL Installer will install and configure Connector/NET - for you. - - MySQL distributions for Windows can be downloaded from - http://dev.mysql.com/downloads/. See Section 2.1.2, "How to - Get MySQL." - - MySQL for Windows is available in several distribution - formats, detailed here. Generally speaking, you should use - MySQL Installer. It contains more features and MySQL products - than the older MSI, is simpler to use than the Zip file, and - you need no additional tools to get MySQL up and running. - MySQL Installer automatically installs MySQL Server and - additional MySQL products, creates an options file, starts - the server, and enables you to create default user accounts. - For more information on choosing a package, see Section - 2.3.2, "Choosing An Installation Package." - - * A MySQL Installer distribution includes MySQL Server and - additional MySQL products including MySQL Workbench, - MySQL Notifier, and MySQL for Excel. MySQL Installer can - also be used to upgrade these products in the future. - For instructions on installing MySQL using MySQL - Installer, see Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - * The standard binary distribution (packaged as a Zip file) - contains all of the necessary files that you unpack into - your chosen location. This package contains all of the - files in the full Windows MSI Installer package, but does - not include an installation program. - For instructions on installing MySQL using the Zip file, - see Section 2.3.5, "Installing MySQL on Microsoft Windows - Using a noinstall Zip Archive." - - * The source distribution format contains all the code and - support files for building the executables using the - Visual Studio compiler system. - For instructions on building MySQL from source on - Windows, see Section 2.9, "Installing MySQL from Source." - - MySQL on Windows considerations: - - * Large Table Support - If you need tables with a size larger than 4GB, install - MySQL on an NTFS or newer file system. Do not forget to - use MAX_ROWS and AVG_ROW_LENGTH when you create tables. - See Section 13.1.17, "CREATE TABLE Syntax." - - * MySQL and Virus Checking Software - Virus-scanning software such as Norton/Symantec - Anti-Virus on directories containing MySQL data and - temporary tables can cause issues, both in terms of the - performance of MySQL and the virus-scanning software - misidentifying the contents of the files as containing - spam. This is due to the fingerprinting mechanism used by - the virus-scanning software, and the way in which MySQL - rapidly updates different files, which may be identified - as a potential security risk. - After installing MySQL Server, it is recommended that you - disable virus scanning on the main directory (datadir) - used to store your MySQL table data. There is usually a - system built into the virus-scanning software to enable - specific directories to be ignored. - In addition, by default, MySQL creates temporary files in - the standard Windows temporary directory. To prevent the - temporary files also being scanned, configure a separate - temporary directory for MySQL temporary files and add - this directory to the virus scanning exclusion list. To - do this, add a configuration option for the tmpdir - parameter to your my.ini configuration file. For more - information, see Section 2.3.5.2, "Creating an Option - File." - -2.3.1 MySQL Installation Layout on Microsoft Windows - - For MySQL 5.6 on Windows, the default installation directory - is C:\Program Files\MySQL\MySQL Server 5.6. Some Windows - users prefer to install in C:\mysql, the directory that - formerly was used as the default. However, the layout of the - subdirectories remains the same. - - All of the files are located within this parent directory, - using the structure shown in the following table. - - Table 2.4 Default MySQL Installation Layout for Microsoft - Windows - Directory Contents of Directory Notes - bin, scripts mysqld server, client and utility programs - %ALLUSERSPROFILE%\MySQL\MySQL Server 5.6\ Log files, - databases (Windows XP, Windows Server 2003) The Windows - system variable %ALLUSERSPROFILE% defaults to C:\Documents - and Settings\All Users\Application Data - %PROGRAMDATA%\MySQL\MySQL Server 5.6\ Log files, databases - (Vista, Windows 7, Windows Server 2008, and newer) The - Windows system variable %PROGRAMDATA% defaults to - C:\ProgramData - examples Example programs and scripts - include Include (header) files - lib Libraries - share Miscellaneous support files, including error messages, - character set files, sample configuration files, SQL for - database installation - - If you install MySQL using the MySQL Installer, this package - creates and sets up the data directory that the installed - server will use, and also creates a pristine "template" data - directory named data under the installation directory. After - an installation has been performed using this package, the - template data directory can be copied to set up additional - MySQL instances. See Section 5.3, "Running Multiple MySQL - Instances on One Machine." - -2.3.2 Choosing An Installation Package - - For MySQL 5.6, there are multiple installation package - formats to choose from when installing MySQL on Windows. - Note - - Program Database (PDB) files (with file name extension pdb) - provide information for debugging your MySQL installation in - the event of a problem. These files are included in ZIP - Archive distributions (but not MSI distributions) of MySQL. - - * MySQL Installer: This package has a file name similar to - mysql-installer-community-5.6.28.0.msi or - mysql-installer-commercial-5.6.28.0.msi, and utilizes - MSIs to automatically install MySQL server and other - products. It will download and apply updates to itself, - and for each of the installed products. It also - configures the additional non-server products. - The installed products are configurable, and this - includes: documentation with samples and examples, - connectors (such as C, C++, J, NET, and ODBC), MySQL - Workbench, MySQL Notifier, MySQL for Excel, and the MySQL - Server with its components. - MySQL Installer will run on all Windows platforms that - are supported by MySQL (see - http://www.mysql.com/support/supportedplatforms/database. - html). - Note - Because MySQL Installer is not a native component of - Microsoft Windows and depends on .NET, it will not work - on minimal installation options like the "Server Core" - version of Windows Server 2008. - For instructions on installing MySQL using MySQL - Installer, see Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - * The Noinstall Archive: This package has a file name - similar to mysql-5.6.28-win32.zip or - mysql-5.6.28-winx64.zip, and contains all the files found - in the Complete install package, with the exception of - the GUI. It also contains PDB files. This package does - not include an automated installer, and must be manually - installed and configured. - - MySQL Installer is recommended for most users. - - Your choice of install package affects the installation - process you must follow. If you choose to use MySQL - Installer, see Section 2.3.3, "Installing MySQL on Microsoft - Windows Using MySQL Installer." If you choose to install a - Noinstall archive, see Section 2.3.5, "Installing MySQL on - Microsoft Windows Using a noinstall Zip Archive." - -2.3.3 Installing MySQL on Microsoft Windows Using MySQL Installer - - MySQL Installer is an application that manages MySQL products - on Microsoft Windows. It installs, updates, removes, and - configures MySQL products, and remains on the system as its - own application. MySQL Installer is only available for - Microsoft Windows, and includes both GUI and command-line - interfaces. - - The supported MySQL products include: - - * MySQL server (http://dev.mysql.com/doc/) (one or multiple - versions on the same system) - - * MySQL Workbench - - * MySQL Connectors - (http://dev.mysql.com/doc/index-connectors.html) (.Net / - Python / ODBC / Java / C / C++) - - * MySQL Notifier - - * MySQL for Excel - (http://dev.mysql.com/doc/mysql-for-excel/en/index.html) - - * MySQL for Visual Studio - (http://dev.mysql.com/doc/connector-net/en/connector-net- - visual-studio.html) - - * MySQL Utilities and MySQL Fabric - (http://dev.mysql.com/doc/index-utils-fabric.html) - - * MySQL Samples and Examples - - * MySQL Documentation - - * MySQL Installer is also installed and remains on the - system as its own application - - * The Enterprise edition installs the Enterprise versions - of the above products, and also includes MySQL Enterprise - Backup and MySQL Enterprise Firewall - -Installer package types - - - * Full: Bundles all of the MySQL products (including the - MySQL server). The file size is over 300MB, and its name - has the form mysql-installer-community-VERSION.N.msi - where VERSION is the MySQL Server version number such as - 5.6 and N is the package number, which begins at 0. - - * Web: Only contains the Installer and configuration files, - and it downloads the MySQL products you choose to - install. The size of this file is about 2MB; the name of - the file has the form - mysql-installer-community-web-VERSION.N.msi where VERSION - is the MySQL Server version number such as 5.6 and N is - the package number, which begins at 0. - - * Updates: MySQL Installer can upgrade itself, so an - additional download is not requires to update MySQL - Installer. - -Installer editions - - - * Community edition: Downloadable at - http://dev.mysql.com/downloads/installer/. It installs - the community edition of all MySQL products. - - * Commercial edition: Downloadable at either My Oracle - Support (https://support.oracle.com/) (MOS) or - https://edelivery.oracle.com/. It installs the commercial - version of all MySQL products, including Workbench SE/EE, - MySQL Enterprise Backup, and MySQL Enterprise Firewall. - It also integrates with your MOS account. - Note - Entering your MOS credentials is optional when installing - bundled MySQL products, but your credentials are required - when choosing non-bundled MySQL products that MySQL - Installer must download. - - For notes detailing the changes in each release of MySQL - Installer, see MySQL Installer Release Notes - (http://dev.mysql.com/doc/relnotes/mysql-installer/en/). - - MySQL Installer is compatible with pre-existing - installations, and adds them to its list of installed - components. While the standard MySQL Installer is bundled - with a specific version of MySQL server, a single MySQL - Installer instance can install and manage multiple MySQL - server versions. For example, a single MySQL Installer - instance can install (and update) versions 5.5, 5.6, and 5.7 - on the same host. - Note - - A single host can not have both community and commercial - editions of MySQL server installed. For example, if you want - both MySQL Server 5.6 and 5.7 installed on a single host, - both must be the same edition. - - MySQL Installer handles the initial configuration and set up - of the applications. For example: - - 1. It creates the configuration file (my.ini) that is used - to configure the MySQL Server. The values written to this - file are influenced by choices you make during the - installation process. - Note - Some definitions are host dependent. For example, - query_cache is enabled if the host has fewer than three - cores. - - 2. It can optionally import example databases. - - 3. By default, a Windows service for the MySQL server is - added. - - 4. It can optionally create MySQL Server user accounts with - configurable permissions based on general roles, such as - DB Administrator, DB Designer, and Backup Admin. It - optionally creates a Windows user named MysqlSys with - limited privileges, which would then run the MySQL - Server. - User accounts may also be added and configured in MySQL - Workbench. - - 5. Checking Show Advanced Options allows additional Logging - Options to be set. This includes defining custom file - paths for the error log, general log, slow query log - (including the configuration of seconds it requires to - execute a query), and the binary log. - - MySQL Installer can optionally check for updated components - and download them for you. - -2.3.3.1 MySQL Installer GUI - - Installing MySQL Installer adds a link to the Start menu - under the MySQL group. Click Start, All Programs MySQL, MySQL - Installer to reload the MySQL Installer GUI. - Note - - Full permissions are granted to the user executing MySQL - Installer to all generated files, such as my.ini. This does - not apply to files and directories for specific products, - such as the MySQL server data directory in %ProgramData% that - is owned by SYSTEM. - - MySQL Installer requires you to accept the license agreement - before it will install MySQL products. - - Figure 2.7 MySQL Installer - License Agreement - MySQL Installer - License Agreement - -Installing New Packages - - Choose the appropriate Setup Type for your system. This type - determines which MySQL products are initially installed on - your system, or select Custom to manually choose the - products. - - * Developer: Install all products needed to develop - applications with MySQL. This is the default option. - - * Server only: Only install the MySQL server. - - * Client only: Only install the MySQL client products, such - as MySQL Workbench. This does not include the MySQL - server. - - * Full: Install all available MySQL products. - - * Custom: Manually select the MySQL products to install, - and optionally configure custom MySQL data and - installation paths. - Note - After the initial installation, you may use MySQL - Installer to manually select MySQL products to install or - remove. In other words, MySQL Installer becomes a MySQL - product management system. - - Figure 2.8 MySQL Installer - Choosing a Setup Type - MySQL Installer - Choosing a Setup Type - - MySQL Installer checks your system for the external - requirements (pre-requisites) required to install the - selected MySQL products. MySQL Installer can download and - install some prerequisites, but others require manual - intervention. Download and install all prerequisites that - have Status set to "Manual". Click Check to recheck if a - manual prerequisite was installed. After manually installing - those requirements, click Execute to download and install the - other prerequisites. Once finished, click Next to continue. - - Figure 2.9 MySQL Installer - Check Requirements - MySQL Installer - Check Requirements - - The next window lists the MySQL products that are scheduled - for installation: - - Figure 2.10 MySQL Installer - Installation Progress - MySQL Installer - Installation Progress - - As components are installed, their Status changes from a - progress percentage to "Complete". - - After all components are installed, the next step configures - some of the recently installed MySQL products. The - Configuration Overview window displays the progress and then - loads a configuration window, if required. Our example - configures MySQL Server 5.6.x. - -Configuring MySQL Server - - Configuring the MySQL server begins with defining several - Type and Networking options. - - Figure 2.11 MySQL Installer - Configuration Overview - MySQL Installer - Configuration Overview - - Server Configuration Type - - Choose the MySQL server configuration type that describes - your setup. This setting defines the amount of system - resources (memory) that will be assigned to your MySQL server - instance. - - * Developer: A machine that will host many other - applications, and typically this is your personal - workstation. This option configures MySQL to use the - least amount of memory. - - * Server: Several other applications will be running on - this machine, such as a web server. This option - configures MySQL to use a medium amount of memory. - - * Dedicated: A machine that is dedicated to running the - MySQL server. Because no other major applications will - run on this server, such as a web server, this option - configures MySQL to use the majority of available memory. - - Connectivity - - Connectivity options control how the connection to MySQL is - made. Options include: - - * TCP/IP: You may enable TCP/IP Networking here as - otherwise only localhost connections are allowed. Also - define the Port Number and whether to open the firewall - port for network access. - - * Named Pipe: Enable and define the pipe name, similar to - using the --enable-named-pipe option. - - * Shared Memory: Enable and then define the memory name, - similar to using the --shared-memory option. - - Advanced Configuration - - Check Show Advanced Options to set additional Logging - Options. This includes defining custom file paths for the - error log, general log, slow query log (including the - configuration of seconds it requires to execute a query), and - the binary log. - - Figure 2.12 MySQL Installer - MySQL Server Configuration: - Type and Networking - MySQL Installer- MySQL Server Configuration: Type and - Networking - -Accounts and Roles - - Next, define your MySQL account information. Assigning a root - password is required. - - Optionally, you can add additional MySQL user accounts with - predefined user roles. Each predefined role, such as "DB - Admin", are configured with their own set of privileges. For - example, the "DB Admin" role has more privileges than the "DB - Designer" role. Click the Role dropdown for a list of role - descriptions. - Note - - If the MySQL Server is already installed, then you must also - enter the Current Root Password. - - Figure 2.13 MySQL Installer - MySQL Server Configuration: - User Accounts and Roles - MySQL Installer - MySQL Server Configuration: User Accounts - and Roles - - Figure 2.14 MySQL Installer - MySQL Server Configuration: - User Accounts and Roles: Adding a User - MySQL Installer - MySQL Server Configuration: User Accounts - and Roles: Adding a User - -Windows Service - - Next, configure the Windows Service details. This includes - the service name, whether the MySQL server should be loaded - at startup, and how the MySQL server Windows service is - executed. - - Figure 2.15 MySQL Installer - MySQL Server Configuration: - Windows Service - MySQL Installer - MySQL Server Configuration: Windows Service - Note - - When configuring Run Windows Services as ... using a Custom - User, the custom user must have privileges to log on to - Microsoft Windows as a service. The Next button will be - disabled until this user is configured with the required - privileges. - - On Microsoft Windows 7, this is configured by loading the - Start Menu, Control Panel, Administrative Tools, Local - Security Policy, Local Policies, User Rights Assignment, then - Log On As A Service. Choose Add User or Group here to add the - custom user, and then OK, OK to save. - -Advanced Options - - The next configuration step is available if the Advanced - Configuration option was checked. This section includes - options that are related to the MySQL log files: - - Figure 2.16 MySQL Installer - MySQL Server Configuration: - Logging Options - MySQL Installer - MySQL Server Configuration: Logging Options - - Click Next to continue on to the final page before all of the - requested changes are applied. This Apply Server - Configuration page details the configuration steps that will - be performed. - - Figure 2.17 MySQL Installer - MySQL Server Configuration: - Apply Server Configuration - MySQL Installer - MySQL Server Configuration: Apply Server - Configuration - - Click Execute to execute the configuration steps. The icon - for each step toggles from white to green on success, or the - process stops on failure. Click the Log tab to view the log. - - After the MySQL Installer configuration process is finished, - MySQL Installer reloads the opening page where you can - execute other installation and configuration related actions. - - MySQL Installer is added to the Microsoft Windows Start menu - under the MySQL group. Opening MySQL Installer loads its - dashboard where installed MySQL products are listed, and - other MySQL Installer actions are available: - - Figure 2.18 MySQL Installer - Main Dashboard - MySQL Installer - Main Dashboard - -Adding MySQL Products - - Click Add to add new products. This loads the Select Products - and Features page: - - Figure 2.19 MySQL Installer - Select Products and Features - MySQL Installer - Select Products and Features - - From here, choose the MySQL products you want to install from - the left Available Products pane, and then click the green - right arrow to queue products for installation. - - Optionally, click Edit to open the product and features - search filter: - - Figure 2.20 MySQL Installer - Select Products and Features - Filter - MySQL Installer - Select Products and Features Filter - - For example, you might choose to include Pre-Release products - in your selections, such as a Beta product that has not yet - reached General Availability (GA) status. - - Select all of the MySQL products you want to install, then - click Next to continue using the defaults, or highlight a - selected product and click Advanced Options to optionally - alter options such as the MySQL server data and installation - paths. Click Execute to execute the installation process to - install all of the selected products. - -2.3.3.1.1 MySQL Product Catalog - - MySQL Installer stores a MySQL product catalog. The catalog - can be updated either manually or automatically, and the - catalog change history is also available. - - Manual updates - - You can update the MySQL product catalog at any time by - clicking Catalog on the Installer dashboard. - Note - - This also checks for a newer MySQL Installer version, and - prompts for an update if one is present. - - Figure 2.21 MySQL Installer - Open the MySQL Product Catalog - MySQL Installer - Open the MySQL Product Catalog - - From there, click Execute to update the product catalog. - - Automatic updates - - You can configure MySQL Installer to automatically update the - MySQL product catalog once per day. To enable this feature - and set the update time, click the wrench icon on the - Installer dashboard. - - The next window configures the Automatic Catalog Update. - Enable or disable this feature, and also set the hour. - - Figure 2.22 MySQL Installer - Configure the Catalog Scheduler - MySQL Installer - Configure the Catalog Scheduler - - This option uses the Windows Task Scheduler to schedule a - task named "ManifestUpdate". - - Change History - - MySQL Installer tracks the change history for all of the - MySQL products. Click Catalog from the dashboard, optionally - update the catalog (or, toggle the Do not update at this time - checkbox), click Next/Execute, and then view the change - history. - - Figure 2.23 MySQL Installer - Catalog Change History - MySQL Installer - Catalog Change History - -2.3.3.1.2 Remove MySQL Products - - MySQL Installer can also remove MySQL products from your - system. To remove a MySQL product, click Remove from the - Installer dashboard. This opens a window with a list of - installed MySQL products. Select the MySQL products you want - to remove (uninstall), and then click Execute to begin the - removal process. - Note - - To select all MySQL products, click the [ ] checkbox to the - left of the Product label. - - Figure 2.24 MySQL Installer - Removing Products: Select - MySQL Installer - Removing Products: Select - - Figure 2.25 MySQL Installer - Removing Products: Executed - MySQL Installer - Removing Products: Executed - -2.3.3.1.3 Alter MySQL Products - - Use MySQL Installer to modify, configure, or upgrade your - MySQL product installations. - -Upgrade - - Upgradable MySQL products are listed on the main dashboard - with an arrow icon ( [wb-icon-upgrade-arrow.png] ) next to - their version number. - - Figure 2.26 MySQL Installer - Upgrade a MySQL Product - MySQL Installer - Upgrade a MySQL Product - Note - - The "upgrade" functionality requires a current product - catalog. This catalog is updated either manually or - automatically (daily) by enabling the Automatic Catalog - Update feature. For additional information, see Section - 2.3.3.1.1, "MySQL Product Catalog." - - Click Upgrade to upgrade the available products. Our example - indicates that MySQL Workbench 6.2.4 can be upgraded version - 6.3.1 or 6.2.5, and MySQL server from 5.5.41 to 5.5.42. - - Figure 2.27 MySQL Installer - Select Products To Upgrade - MySQL Installer - Select Products To Upgrade - - If multiple upgrade versions are available (such as our MySQL - Workbench example above), select the desired version for the - upgrade in the Available Upgrades area. - Note - - Optionally, click the Changes link to view the version's - release notes. - - After selecting (checking) the products and versions to - upgrade, click Next to begin the upgrade process. - - Figure 2.28 MySQL Installer - Apply Updates - MySQL Installer - Apply Updates - - A MySQL server upgrade will also check and upgrade the - server's database. Although optional, this step is - recommended. - - Figure 2.29 MySQL Installer - Check and Upgrade Database - MySQL Installer - Check and Upgrade Database - - Upon completion, your upgraded products will be upgraded and - available to use. A MySQL server upgrade also restarts the - MySQL server. - -Reconfigure - - Some MySQL products, such as the MySQL server, include a - Reconfigure option. It opens the same configuration options - that were set when the MySQL product was installed, and is - pre-populated with the current values. - - To execute, click the Reconfigure link under the Quick Action - column on the main dashboard for the MySQL product that you - want to reconfigure. - - Figure 2.30 MySQL Installer - Reconfigure a MySQL Product - MySQL Installer - Reconfigure a MySQL Product - - In the case of the MySQL server, this opens the familiar - configuration wizard. - - Figure 2.31 MySQL Installer - Reconfiguration Wizard - MySQL Installer - Reconfiguration Wizard - -Modify - - Many MySQL products contain feature components that can be - added or removed. For example, Debug binaries and Client - Programs are subcomponents of the MySQL server. - - The modify the features of a product, click Modify on the - main dashboard. - - Figure 2.32 MySQL Installer - Modify Product Features - MySQL Installer - Modify Product Features - - Click Execute to execute the modification request. - -2.3.3.2 MySQL Installer Console - - MySQLInstallerConsole provides functionality similar to the - GUI version of MySQL Installer, but from the command-line. It - is installed when MySQL Installer is initially executed, and - then available within the MySQL Installer directory. - Typically that is in C:\Program Files (x86)\MySQL\MySQL - Installer\, and the console must be executed with - administrative privileges. - - To use, invoke the Command Prompt with administrative - privileges by choosing Start, Accessories, then right-click - on Command Prompt and choose Run as administrator. And from - the command-line, optionally change the directory to where - MySQLInstallerConsole is located: -C:\> cd "C:\Program Files (x86)\MySQL\MySQL Installer for Windows" -C:\> MySQLInstallerConsole.exe help - -C:\Program Files (x86)\MySQL\MySQL Installer for Windows>MySQLInstalle -rConsole.exe help - -The following commands are available: - -Configure - Configures one or more of your installed programs. -Help - Provides list of available commands. -Install - Install and configure one or more available MySQL programs -. -List - Provides an interactive way to list all products available -. -Modify - Modifies the features of installed products. -Remove - Removes one or more products from your system. -Status - Shows the status of all installed products. -Update - Update the current product catalog. -Upgrade - Upgrades one or more of your installed programs. - - MySQLInstallerConsole supports the following options, which - are specified on the command line: - Note - - Configuration block values that contain a colon (":") must be - wrapped in double quotes. For example, - installdir="C:\MySQL\MySQL Server 5.6". - - * configure [product1]:[setting]=[value]; - [product2]:[setting]=[value]; [...] - Configure one or more MySQL products on your system. - Multiple setting=value pairs can be configured for each - product. - Switches include: - - + -showsettings : Displays the available options for - the selected product, by passing in the product name - after -showsettings. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole configure -showsettings server -C:\> MySQLInstallerConsole configure server:port=3307 - - - * help [command] - Displays a help message with usage examples, and then - exits. Pass in an additional command to receive help - specific to that command. -C:\> MySQLInstallerConsole help -C:\> MySQLInstallerConsole help install - - - * install [product]:[features]:[config block]:[config - block]:[config block]; [...] - Install one or more MySQL products on your system. - Switches and syntax options include: - - + -type=[SetupType] : Installs a predefined set of - software. The "SetupType" can be one of the - following: - Note - Non-custom setup types can only be chosen if no - other MySQL products are installed. - o Developer: Installs a complete development - environment. - o Server: Installs a single MySQL server - o Client: Installs client programs and libraries - o Full: Installs everything - o Custom: Installs user selected products. This - is the default option. - - + -showsettings : Displays the available options for - the selected product, by passing in the product name - after -showsettings. - - + -silent : Disable confirmation prompts. - - + [config block]: One or more configuration blocks can - be specified. Each configuration block is a - semicolon separated list of key value pairs. A block - can include either a "config" or "user" type key, - where "config" is the default type if one is not - defined. - Configuration block values that contain a colon - (":") must be wrapped in double quotes. For example, - installdir="C:\MySQL\MySQL Server 5.6". - Only one "config" type block can be defined per - product. A "user" block should be defined for each - user that should be created during the product's - installation. - Note - Adding users is not supported when a product is - being reconfigured. - - + [feature]: The feature block is a semicolon - separated list of features, or '*' to select all - features. -C:\> MySQLInstallerConsole install server;5.6.25:*:port=3307;serverid= -2:type=user;username=foo;password=bar;role=DBManager -C:\> MySQLInstallerConsole install server;5.6.25;x64 -silent - - An example that passes in additional configuration - blocks, broken up by ^ to fit this screen: -C:\> MySQLInstallerConsole install server;5.6.25;x64:*:type=config;ope -nfirewall=true; ^ - generallog=true;binlog=true;serverid=3306;enable_tcpip=true; -port=3306;rootpasswd=pass; ^ - installdir="C:\MySQL\MySQL Server 5.6":type=user;datadir="C: -\MySQL\data";username=foo;password=bar;role=DBManager - - - * list - Lists an interactive console where all of the available - MySQL products can be searched. Execute - MySQLInstallerConsole list to launch the console, and - enter in a substring to search. -C:\> MySQLInstallerConsole list - - - * modify [product1:-removelist|+addlist] - [product2:-removelist|+addlist] [...] - Modifies or displays features of a previously installed - MySQL product. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole modify server -C:\> MySQLInstallerConsole modify server:+documentation -C:\> MySQLInstallerConsole modify server:-debug - - - * remove [product1] [product2] [...] - Removes one ore more products from your system. - - + * : Pass in * to remove all of the MySQL products. - - + -continue : Continue the operation even if an error - occurs. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole remove * -C:\> MySQLInstallerConsole remove server - - - * status - Provides a quick overview of the MySQL products that are - installed on the system. Information includes product - name and version, architecture, date installed, and - install location. -C:\> MySQLInstallerConsole status - - - * upgrade [product1:version] [product2:version], [...] - Upgrades one or more products on your system. Syntax - options include: - - + * : Pass in * to upgrade all products to the latest - version, or pass in specific products. - - + ! : Pass in ! as a version number to upgrade the - MySQL product to its latest version. - - + -silent : Disable confirmation prompts. -C:\> MySQLInstallerConsole upgrade * -C:\> MySQLInstallerConsole upgrade workbench:6.3.5 -C:\> MySQLInstallerConsole upgrade workbench:! -C:\> MySQLInstallerConsole upgrade workbench:6.3.5 excel:1.3.2 - - - * update - Downloads the latest MySQL product catalog to your - system. On success, the download catalog will be applied - the next time either MySQLInstaller or - MySQLInstallerConsole is executed. -C:\> MySQLInstallerConsole update - - Note - The Automatic Catalog Update GUI option executes this - command from the Windows Task Scheduler. - -2.3.4 MySQL Notifier - - The MySQL Notifier is a tool that enables you to monitor and - adjust the status of your local and remote MySQL Server - instances through an indicator that resides in the system - tray. The MySQL Notifier also gives quick access to several - MySQL GUI tools (such as MySQL Workbench) through its context - menu. - - The MySQL Notifier is installed by MySQL Installer, and (by - default) will start-up when Microsoft Windows is started. - Note - - To install, download and execute the MySQL Installer - (http://dev.mysql.com/downloads/installer/), be sure the - MySQL Notifier product is selected, then proceed with the - installation. See the MySQL Installer manual for additional - details. - - For notes detailing the changes in each release of MySQL - Notifier, see the MySQL Notifier Release Notes - (http://dev.mysql.com/doc/relnotes/mysql-notifier/en/). - - Visit the MySQL Notifier forum - (http://forums.mysql.com/list.php?173) for additional MySQL - Notifier help and support. - - Features include: - - * Start, Stop, and Restart instances of the MySQL Server. - - * Automatically detects (and adds) new MySQL Server - services. These are listed under Manage Monitored Items, - and may also be configured. - - * The Tray icon changes, depending on the status. It's - green if all monitored MySQL Server instances are - running, or red if at least one service is stopped. The - Update MySQL Notifier tray icon based on service status - option, which dictates this behavior, is enabled by - default for each service. - - * Links to other applications like MySQL Workbench, MySQL - Installer, and the MySQL Utilities. For example, choosing - Configure Instance will load the MySQL Workbench Server - Administration window for that particular instance. - - * If MySQL Workbench is also installed, then the Configure - Instance and SQL Editor options are available for local - (but not remote) MySQL instances. - - * Monitoring of both local and remote MySQL instances. - - Note - - Remote monitoring is available since MySQL Notifier 1.1.0. - - The MySQL Notifier resides in the system tray and provides - visual status information for your MySQL Server instances. A - green icon is displayed at the top left corner of the tray - icon if the current MySQL Server is running, or a red icon if - the service is stopped. - - The MySQL Notifier automatically adds discovered MySQL - Services on the local machine, and each service is saved and - configurable. By default, the Automatically add new services - whose name contains option is enabled and set to mysql. - Related Notifications Options include being notified when new - services are either discovered or experience status changes, - and are also enabled by default. And uninstalling a service - will also remove the service from the MySQL Notifier. - Note - - The Automatically add new services whose name contains option - default changed from ".*mysqld.*" to "mysql" in Notifier - 1.1.0. - - Clicking the system tray icon will reveal several options, as - seen in the screenshots below: - - The Service Instance menu is the main MySQL Notifier window, - and enables you to Stop, Start, and Restart the MySQL Server. - - Figure 2.33 MySQL Notifier Service Instance menu - MySQL Notifier Service Instance menu - - The Actions menu includes several links to external - applications (if they are installed), and a Refresh Status - option to manually refresh the status of all monitored - services (in both local and remote computers) and MySQL - instances. - Note - - The main menu will not show the Actions menu when there are - no services being monitored by MySQL Notifier. - Note - - The Refresh Status feature is available since MySQL Notifier - 1.1.0. - - Figure 2.34 MySQL Notifier Actions menu - MySQL Notifier Actions menu - - The Actions, Options menu configures MySQL Notifier and - includes options to: - - * Use colorful status icons: Enables a colorful style of - icons for the tray of the MySQL Notifier. - - * Run at Windows Startup: Allows the application to be - loaded when Microsoft Windows starts. - - * Automatically Check For Updates Every # Weeks: Checks for - a new version of MySQL Notifier, and runs this check - every # weeks. - - * Automatically add new services whose name contains: The - text used to filter services and add them automatically - to the monitored list of the local computer running MySQL - Notifier, and on remote computers already monitoring - Windows services. monitored services, and also filters - the list of the Microsoft Windows services for the Add - New Service dialog. - Prior to version 1.1.0, this option was named - "Automatically add new services that match this pattern." - - * Notify me when a service is automatically added: Will - display a balloon notification from the taskbar when a - newly discovered service is added to the monitored - services list. - - * Notify me when a service changes status: Will display a - balloon notification from the taskbar when a monitored - service changes its status. - - Figure 2.35 MySQL Notifier Options menu - MySQL Notifier Options menu - - The Actions, Manage Monitored Items menu enables you to - configure the monitored services and MySQL instances. First, - with the Services tab open: - - Figure 2.36 MySQL Notifier Manage Services menu - MySQL Notifier Manage Services menu - - The Instances tab is similar: - - Figure 2.37 MySQL Notifier Manage Instances menu - MySQL Notifier Manage Instances menu - - Adding a service or instance (after clicking Add in the - Manage Monitored Items window) enables you to select a - running Microsoft Windows service or instance connection, and - configure MySQL Notifier to monitor it. Add a new service or - instance by clicking service name from the list, then OK to - accept. Multiple services and instances may be selected. - - Figure 2.38 MySQL Notifier Adding new services - MySQL Notifier Adding new services - - And instances: - - Figure 2.39 MySQL Notifier Adding new instances - MySQL Notifier Adding new instances - Note - - The Instances tab available since MySQL Notifier 1.1.0. - -2.3.4.1 Remote monitoring set up and installation instructions - - The MySQL Notifier uses Windows Management Instrumentation - (WMI) to manage and monitor services in remote computers - running Windows XP or later. This guide explains how it - works, and how to set up your system to monitor remote MySQL - instances. - Note - - Remote monitoring is available since MySQL Notifier 1.1.0. - - In order to configure WMI, it is important to understand that - the underlying Distributed Component Object Model (DCOM) - architecture is doing the WMI work. Specifically, MySQL - Notifier is using asynchronous notification queries on remote - Microsoft Windows hosts as .NET events. These events send an - asynchronous callback to the computer running the MySQL - Notifier so it knows when a service status has changed on the - remote computer. Asynchronous notifications offer the best - performance compared to semisynchronous notifications or - synchronous notifications that use timers. - - Asynchronous notifications requires the remote computer to - send a callback to the client computer (thus opening a - reverse connection), so the Windows Firewall and DCOM - settings must be properly configured for the communication to - function properly. - - Figure 2.40 MySQL Notifier Distributed Component Object Model - (DCOM) - MySQL Notifier Distributed Component Object Model (DCOM) - - Most of the common errors thrown by asynchronous WMI - notifications are related to Windows Firewall blocking the - communication, or to DCOM / WMI settings not being set up - properly. For a list of common errors with solutions, see - Section 2.3.4.1, "." - - The following steps are required to make WMI function. These - steps are divided between two machines. A single host - computer that runs MySQL Notifier (Computer A), and multiple - remote machines that are being monitored (Computer B). - -Computer running MySQL Notifier (Computer A) - - - 1. Allow for remote administration by either editing the - Group Policy Editor, or using NETSH: - Using the Group Policy Editor: - a. Click Start, click Run, type GPEDIT.MSC, and then - click OK. - b. Under the Local Computer Policy heading, - double-click Computer Configuration. - c. Double-click Administrative Templates, then Network, - Network Connections, and then Windows Firewall. - d. If the computer is in the domain, then double-click - Domain Profile; otherwise, double-click Standard - Profile. - e. Click Windows Firewall: Allow inbound remote - administration exception. - f. On the Action menu either select Edit, or - double-click the selection from the previous step. - g. Check the Enabled radio button, and then click OK. - Using the NETSH command: - Note - The "netsh firewall" command is deprecated as of - Microsoft Server 2008 and Vista, and replaced with "netsh - advfirewall firewall". - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command: -NETSH advfirewall firewall set service RemoteAdmin enable - - - 2. Open the DCOM port TCP 135: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator) . - b. Execute the following command: -NETSH advfirewall firewall add portopening protocol=tcp port=135 name= -DCOM_TCP135 - - - 3. Add the client application which contains the sink for - the callback (MySqlNotifier.exe) to the Windows Firewall - Exceptions List (use either the Windows Firewall - configuration or NETSH): - Using the Windows Firewall configuration: - a. In the Control Panel, double-click Windows Firewall. - b. In the Windows Firewall window's left panel, click - Allow a program or feature through Windows Firewall. - c. In the Allowed Programs window, click Change - Settings. - d. If MySqlNotifier.exe is in the Allowed programs and - features list, make sure it is checked for the type - of networks the computer connects to (Private, - Public or both). - e. If MySqlNotifier.exe is not in the list, click Allow - another program.... - f. In the Add a Program window, select the - MySqlNotifier.exe if it exists in the Programs list, - otherwise click Browse... and go to the directory - where MySqlNotifier.exe was installed to select it, - then click Add. - g. Make sure MySqlNotifier.exe is checked for the type - of networks the computer connects to (Private, - Public or both). - Using the NETSH command: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command, where you change - "[YOUR_INSTALL_DIRECTORY]": -NETSH advfirewall firewall add allowedprogram program=[YOUR_INSTALL_DI -RECTORY]\MySqlNotifier.exe name=MySqlNotifier - - - 4. If Computer B is either a member of WORKGROUP or is in a - different domain that is untrusted by Computer A, then - the callback connection (Connection 2) is created as an - Anonymous connection. To grant Anonymous connections DCOM - Remote Access permissions: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Access Permission dialog box, select - ANONYMOUS LOGON name in the Group or user names box. - In the Allow column under Permissions for User, - select Remote Access, and then click OK. - -Monitored Remote Computer (Computer B) - - If the user account that is logged into the computer running - the MySQL Notifier (Computer A) is a local administrator on - the remote computer (Computer B), such that the same account - is an administrator on Computer B, you can skip to the "Allow - for remote administration" step. - - Setting DCOM security to allow a non-administrator user to - access a computer remotely: - - 1. Grant "DCOM remote launch" and activation permissions for - a user or group: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Launch Permission dialog box, follow these - steps if your name or your group does not appear in - the Groups or user names list: - i. In the Launch Permission dialog box, click Add. - ii. In the Select Users, Computers, or Groups - dialog box, add your name and the group in the - "Enter the object names to select" box, and - then click OK. - f. In the Launch Permission dialog box, select your - user and group in the Group or user names box. In - the Allow column under Permissions for User, select - Remote Launch, select Remote Activation, and then - click OK. - Grant DCOM remote access permissions: - a. Click Start, click Run, type DCOMCNFG, and then - click OK. - b. In the Component Services dialog box, expand - Component Services, expand Computers, and then - right-click My Computer and click Properties. - c. In the My Computer Properties dialog box, click the - COM Security tab. - d. Under Access Permissions, click Edit Limits. - e. In the Access Permission dialog box, select - ANONYMOUS LOGON name in the Group or user names box. - In the Allow column under Permissions for User, - select Remote Access, and then click OK. - - 2. Allowing non-administrator users access to a specific WMI - namespace: - a. In the Control Panel, double-click Administrative - Tools. - b. In the Administrative Tools window, double-click - Computer Management. - c. In the Computer Management window, expand the - Services and Applications tree and double-click the - WMI Control. - d. Right-click the WMI Control icon and select - Properties. - e. In the WMI Control Properties window, click the - Security tab. - f. In the Security tab, select the namespace and click - Security. - g. Locate the appropriate account and check Remote - Enable in the Permissions list. - - 3. Allow for remote administration by either editing the - Group Policy Editor or using NETSH: - Using the Group Policy Editor: - a. Click Start, click Run, type GPEDIT.MSC, and then - click OK. - b. Under the Local Computer Policy heading, - double-click Computer Configuration. - c. Double-click Administrative Templates, then Network, - Network Connections, and then Windows Firewall. - d. If the computer is in the domain, then double-click - Domain Profile; otherwise, double-click Standard - Profile. - e. Click Windows Firewall: Allow inbound remote - administration exception. - f. On the Action menu either select Edit, or - double-click the selection from the previous step. - g. Check the Enabled radio button, and then click OK. - Using the NETSH command: - a. Open a command prompt window with Administrative - rights (you can right-click the Command Prompt icon - and click Run as Administrator). - b. Execute the following command: -NETSH advfirewall firewall set service RemoteAdmin enable - - - 4. Now, be sure the user you are logging in with uses the - Name value and not the Full Name value: - a. In the Control Panel, double-click Administrative - Tools. - b. In the Administrative Tools window, double-click - Computer Management. - c. In the Computer Management window, expand the System - Tools then Local Users and Groups. - d. Click the Users node, and on the right side panel - locate your user and make sure it uses the Name - value to connect, and not the Full Name value. - - 5. If the remote computer is running on Windows XP - Professional, make sure that remote logins are not being - forcefully changed to the guest account user (also known - as ForceGuest), which is enabled by default on computers - that are not attached to a domain. - a. Click Start, click Run, type SECPOL.MSC, and then - click OK. - b. Under the Local Policies node, double-click Security - Options. - c. Select Network Access: Sharing and security model - for local accounts and save. - -Common Errors - - - * 0x80070005 - - + DCOM Security was not configured properly (see - Computer B, the Setting DCOM security... step). - - + The remote computer (Computer B) is a member of - WORKGROUP or is in a domain that is untrusted by the - client computer (Computer A) (see Computer A, the - Grant Anonymous connections DCOM Remote Access - permissions step). - - * 0x8007000E - - + The remote computer (Computer B) is a member of - WORKGROUP or is in a domain that is untrusted by the - client computer (Computer A) (see Computer A, the - Grant Anonymous connections DCOM Remote Access - permissions step). - - * 0x80041003 - - + Access to the remote WMI namespace was not - configured properly (see Computer B, the Allowing - non-administrator users access to a specific WMI - namespace step). - - * 0x800706BA - - + The DCOM port is not open on the client computers - (Computer A) firewall. See the Open the DCOM port - TCP 135 step for Computer A. - - + The remote computer (Computer B) is inaccessible - because its network location is set to Public. Make - sure you can access it through the Windows Explorer. - -2.3.5 Installing MySQL on Microsoft Windows Using a noinstall Zip -Archive - - Users who are installing from the noinstall package can use - the instructions in this section to manually install MySQL. - The process for installing MySQL from a Zip archive is as - follows: - - 1. Extract the archive to the desired install directory - - 2. Create an option file - - 3. Choose a MySQL server type - - 4. Start the MySQL server - - 5. Secure the default user accounts - - This process is described in the sections that follow. - -2.3.5.1 Extracting the Install Archive - - To install MySQL manually, do the following: - - 1. If you are upgrading from a previous version please refer - to Section 2.3.8, "Upgrading MySQL on Windows," before - beginning the upgrade process. - - 2. Make sure that you are logged in as a user with - administrator privileges. - - 3. Choose an installation location. Traditionally, the MySQL - server is installed in C:\mysql. The MySQL Installation - Wizard installs MySQL under C:\Program Files\MySQL. If - you do not install MySQL at C:\mysql, you must specify - the path to the install directory during startup or in an - option file. See Section 2.3.5.2, "Creating an Option - File." - Note - The MySQL Installer installs MySQL under C:\Program - Files\MySQL. - - 4. Extract the install archive to the chosen installation - location using your preferred Zip archive tool. Some - tools may extract the archive to a folder within your - chosen installation location. If this occurs, you can - move the contents of the subfolder into the chosen - installation location. - -2.3.5.2 Creating an Option File - - If you need to specify startup options when you run the - server, you can indicate them on the command line or place - them in an option file. For options that are used every time - the server starts, you may find it most convenient to use an - option file to specify your MySQL configuration. This is - particularly true under the following circumstances: - - * The installation or data directory locations are - different from the default locations (C:\Program - Files\MySQL\MySQL Server 5.6 and C:\Program - Files\MySQL\MySQL Server 5.6\data). - - * You need to tune the server settings, such as memory, - cache, or InnoDB configuration information. - - When the MySQL server starts on Windows, it looks for option - files in several locations, such as the Windows directory, - C:\, and the MySQL installation directory (for the full list - of locations, see Section 4.2.6, "Using Option Files"). The - Windows directory typically is named something like - C:\WINDOWS. You can determine its exact location from the - value of the WINDIR environment variable using the following - command: -C:\> echo %WINDIR% - - MySQL looks for options in each location first in the my.ini - file, and then in the my.cnf file. However, to avoid - confusion, it is best if you use only one file. If your PC - uses a boot loader where C: is not the boot drive, your only - option is to use the my.ini file. Whichever option file you - use, it must be a plain text file. - Note - - When using the MySQL Installer to install MySQL Server, it - will create the my.ini at the default location. And as of - MySQL Server 5.5.27, the user running MySQL Installer is - granted full permissions to this new my.ini. - - In other words, be sure that the MySQL Server user has - permission to read the my.ini file. - - You can also make use of the example option files included - with your MySQL distribution; see Section 5.1.2, "Server - Configuration Defaults." - - An option file can be created and modified with any text - editor, such as Notepad. For example, if MySQL is installed - in E:\mysql and the data directory is in E:\mydata\data, you - can create an option file containing a [mysqld] section to - specify values for the basedir and datadir options: -[mysqld] -# set basedir to your installation path -basedir=E:/mysql -# set datadir to the location of your data directory -datadir=E:/mydata/data - - Microsoft Windows path names are specified in option files - using (forward) slashes rather than backslashes. If you do - use backslashes, double them: -[mysqld] -# set basedir to your installation path -basedir=E:\\mysql -# set datadir to the location of your data directory -datadir=E:\\mydata\\data - - The rules for use of backslash in option file values are - given in Section 4.2.6, "Using Option Files." - - The data directory is located within the AppData directory - for the user running MySQL. - - If you would like to use a data directory in a different - location, you should copy the entire contents of the data - directory to the new location. For example, if you want to - use E:\mydata as the data directory instead, you must do two - things: - - 1. Move the entire data directory and all of its contents - from the default location (for example C:\Program - Files\MySQL\MySQL Server 5.6\data) to E:\mydata. - - 2. Use a --datadir option to specify the new data directory - location each time you start the server. - -2.3.5.3 Selecting a MySQL Server Type - - The following table shows the available servers for Windows - in MySQL 5.6. - Binary Description - mysqld Optimized binary with named-pipe support - mysqld-debug Like mysqld, but compiled with full debugging - and automatic memory allocation checking - - All of the preceding binaries are optimized for modern Intel - processors, but should work on any Intel i386-class or higher - processor. - - Each of the servers in a distribution support the same set of - storage engines. The SHOW ENGINES statement displays which - engines a given server supports. - - All Windows MySQL 5.6 servers have support for symbolic - linking of database directories. - - MySQL supports TCP/IP on all Windows platforms. MySQL servers - on Windows also support named pipes, if you start the server - with the --enable-named-pipe option. It is necessary to use - this option explicitly because some users have experienced - problems with shutting down the MySQL server when named pipes - were used. The default is to use TCP/IP regardless of - platform because named pipes are slower than TCP/IP in many - Windows configurations. - -2.3.5.4 Starting the Server for the First Time - - This section gives a general overview of starting the MySQL - server. The following sections provide more specific - information for starting the MySQL server from the command - line or as a Windows service. - - The information here applies primarily if you installed MySQL - using the Noinstall version, or if you wish to configure and - test MySQL manually rather than with the GUI tools. - Note - - The MySQL server will automatically start after using the - MySQL Installer, and the MySQL Notifier GUI can be used to - start/stop/restart at any time. - - The examples in these sections assume that MySQL is installed - under the default location of C:\Program Files\MySQL\MySQL - Server 5.6. Adjust the path names shown in the examples if - you have MySQL installed in a different location. - - Clients have two options. They can use TCP/IP, or they can - use a named pipe if the server supports named-pipe - connections. - - MySQL for Windows also supports shared-memory connections if - the server is started with the --shared-memory option. - Clients can connect through shared memory by using the - --protocol=MEMORY option. - - For information about which server binary to run, see Section - 2.3.5.3, "Selecting a MySQL Server Type." - - Testing is best done from a command prompt in a console - window (or "DOS window"). In this way you can have the server - display status messages in the window where they are easy to - see. If something is wrong with your configuration, these - messages make it easier for you to identify and fix any - problems. - - To start the server, enter this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --console - - For a server that includes InnoDB support, you should see the - messages similar to those following as it starts (the path - names and sizes may differ): -InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist: -InnoDB: a new database to be created! -InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200 -InnoDB: Database physically writes the file full: wait... -InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280 -InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280 -InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be create -d -InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280 -InnoDB: Doublewrite buffer not found: creating new -InnoDB: Doublewrite buffer created -InnoDB: creating foreign key constraint system tables -InnoDB: foreign key constraint system tables created -011024 10:58:25 InnoDB: Started - - When the server finishes its startup sequence, you should see - something like this, which indicates that the server is ready - to service client connections: -mysqld: ready for connections -Version: '5.6.28' socket: '' port: 3306 - - The server continues to write to the console any further - diagnostic output it produces. You can open a new console - window in which to run client programs. - - If you omit the --console option, the server writes - diagnostic output to the error log in the data directory - (C:\Program Files\MySQL\MySQL Server 5.6\data by default). - The error log is the file with the .err extension, and may be - set using the --log-error option. - Note - - The accounts that are listed in the MySQL grant tables - initially have no passwords. After starting the server, you - should set up passwords for them using the instructions in - Section 2.10.4, "Securing the Initial MySQL Accounts." - -2.3.5.5 Starting MySQL from the Windows Command Line - - The MySQL server can be started manually from the command - line. This can be done on any version of Windows. - Note - - The MySQL Notifier GUI can also be used to start/stop/restart - the MySQL server. - - To start the mysqld server from the command line, you should - start a console window (or "DOS window") and enter this - command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" - - The path to mysqld may vary depending on the install location - of MySQL on your system. - - You can stop the MySQL server by executing this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" -u root -shutdown - - Note - - If the MySQL root user account has a password, you need to - invoke mysqladmin with the -p option and supply the password - when prompted. - - This command invokes the MySQL administrative utility - mysqladmin to connect to the server and tell it to shut down. - The command connects as the MySQL root user, which is the - default administrative account in the MySQL grant system. - Note - - Users in the MySQL grant system are wholly independent from - any login users under Microsoft Windows. - - If mysqld doesn't start, check the error log to see whether - the server wrote any messages there to indicate the cause of - the problem. By default, the error log is located in the - C:\Program Files\MySQL\MySQL Server 5.6\data directory. It is - the file with a suffix of .err, or may be specified by - passing in the --log-error option. Alternatively, you can try - to start the server with the --console option; in this case, - the server may display some useful information on the screen - that will help solve the problem. - - The last option is to start mysqld with the --standalone and - --debug options. In this case, mysqld writes a log file - C:\mysqld.trace that should contain the reason why mysqld - doesn't start. See Section 24.5.3, "The DBUG Package." - - Use mysqld --verbose --help to display all the options that - mysqld supports. - -2.3.5.6 Customizing the PATH for MySQL Tools - - To make it easier to invoke MySQL programs, you can add the - path name of the MySQL bin directory to your Windows system - PATH environment variable: - - * On the Windows desktop, right-click the My Computer icon, - and select Properties. - - * Next select the Advanced tab from the System Properties - menu that appears, and click the Environment Variables - button. - - * Under System Variables, select Path, and then click the - Edit button. The Edit System Variable dialogue should - appear. - - * Place your cursor at the end of the text appearing in the - space marked Variable Value. (Use the End key to ensure - that your cursor is positioned at the very end of the - text in this space.) Then enter the complete path name of - your MySQL bin directory (for example, C:\Program - Files\MySQL\MySQL Server 5.6\bin) - Note - There must be a semicolon separating this path from any - values present in this field. - Dismiss this dialogue, and each dialogue in turn, by - clicking OK until all of the dialogues that were opened - have been dismissed. You should now be able to invoke any - MySQL executable program by typing its name at the DOS - prompt from any directory on the system, without having - to supply the path. This includes the servers, the mysql - client, and all MySQL command-line utilities such as - mysqladmin and mysqldump. - You should not add the MySQL bin directory to your - Windows PATH if you are running multiple MySQL servers on - the same machine. - - Warning - - You must exercise great care when editing your system PATH by - hand; accidental deletion or modification of any portion of - the existing PATH value can leave you with a malfunctioning - or even unusable system. - -2.3.5.7 Starting MySQL as a Windows Service - - On Windows, the recommended way to run MySQL is to install it - as a Windows service, so that MySQL starts and stops - automatically when Windows starts and stops. A MySQL server - installed as a service can also be controlled from the - command line using NET commands, or with the graphical - Services utility. Generally, to install MySQL as a Windows - service you should be logged in using an account that has - administrator rights. - Note - - The MySQL Notifier GUI can also be used to monitor the status - of the MySQL service. - - The Services utility (the Windows Service Control Manager) - can be found in the Windows Control Panel (under - Administrative Tools on Windows 2000, XP, Vista, and Server - 2003). To avoid conflicts, it is advisable to close the - Services utility while performing server installation or - removal operations from the command line. - -Installing the service - - Before installing MySQL as a Windows service, you should - first stop the current server if it is running by using the - following command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" - -u root shutdown - - Note - - If the MySQL root user account has a password, you need to - invoke mysqladmin with the -p option and supply the password - when prompted. - - This command invokes the MySQL administrative utility - mysqladmin to connect to the server and tell it to shut down. - The command connects as the MySQL root user, which is the - default administrative account in the MySQL grant system. - Note - - Users in the MySQL grant system are wholly independent from - any login users under Windows. - - Install the server as a service using this command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --install - - The service-installation command does not start the server. - Instructions for that are given later in this section. - - To make it easier to invoke MySQL programs, you can add the - path name of the MySQL bin directory to your Windows system - PATH environment variable: - - * On the Windows desktop, right-click the My Computer icon, - and select Properties. - - * Next select the Advanced tab from the System Properties - menu that appears, and click the Environment Variables - button. - - * Under System Variables, select Path, and then click the - Edit button. The Edit System Variable dialogue should - appear. - - * Place your cursor at the end of the text appearing in the - space marked Variable Value. (Use the End key to ensure - that your cursor is positioned at the very end of the - text in this space.) Then enter the complete path name of - your MySQL bin directory (for example, C:\Program - Files\MySQL\MySQL Server 5.6\bin), and there should be a - semicolon separating this path from any values present in - this field. Dismiss this dialogue, and each dialogue in - turn, by clicking OK until all of the dialogues that were - opened have been dismissed. You should now be able to - invoke any MySQL executable program by typing its name at - the DOS prompt from any directory on the system, without - having to supply the path. This includes the servers, the - mysql client, and all MySQL command-line utilities such - as mysqladmin and mysqldump. - You should not add the MySQL bin directory to your - Windows PATH if you are running multiple MySQL servers on - the same machine. - - Warning - - You must exercise great care when editing your system PATH by - hand; accidental deletion or modification of any portion of - the existing PATH value can leave you with a malfunctioning - or even unusable system. - - The following additional arguments can be used when - installing the service: - - * You can specify a service name immediately following the - --install option. The default service name is MySQL. - - * If a service name is given, it can be followed by a - single option. By convention, this should be - --defaults-file=file_name to specify the name of an - option file from which the server should read options - when it starts. - The use of a single option other than --defaults-file is - possible but discouraged. --defaults-file is more - flexible because it enables you to specify multiple - startup options for the server by placing them in the - named option file. - - * You can also specify a --local-service option following - the service name. This causes the server to run using the - LocalService Windows account that has limited system - privileges. This account is available only for Windows XP - or newer. If both --defaults-file and --local-service are - given following the service name, they can be in any - order. - - For a MySQL server that is installed as a Windows service, - the following rules determine the service name and option - files that the server uses: - - * If the service-installation command specifies no service - name or the default service name (MySQL) following the - --install option, the server uses the a service name of - MySQL and reads options from the [mysqld] group in the - standard option files. - - * If the service-installation command specifies a service - name other than MySQL following the --install option, the - server uses that service name. It reads options from the - [mysqld] group and the group that has the same name as - the service in the standard option files. This enables - you to use the [mysqld] group for options that should be - used by all MySQL services, and an option group with the - service name for use by the server installed with that - service name. - - * If the service-installation command specifies a - --defaults-file option after the service name, the server - reads options the same way as described in the previous - item, except that it reads options only from the named - file and ignores the standard option files. - - As a more complex example, consider the following command: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" - --install MySQL --defaults-file=C:\my-opts.cnf - - Here, the default service name (MySQL) is given after the - --install option. If no --defaults-file option had been - given, this command would have the effect of causing the - server to read the [mysqld] group from the standard option - files. However, because the --defaults-file option is - present, the server reads options from the [mysqld] option - group, and only from the named file. - Note - - On Windows, if the server is started with the --defaults-file - and --install options, --install must be first. Otherwise, - mysqld.exe will attempt to start the MySQL server. - - You can also specify options as Start parameters in the - Windows Services utility before you start the MySQL service. - -Starting the service - - Once a MySQL server has been installed as a service, Windows - starts the service automatically whenever Windows starts. The - service also can be started immediately from the Services - utility, or by using a NET START MySQL command. The NET - command is not case sensitive. - - When run as a service, mysqld has no access to a console - window, so no messages can be seen there. If mysqld does not - start, check the error log to see whether the server wrote - any messages there to indicate the cause of the problem. The - error log is located in the MySQL data directory (for - example, C:\Program Files\MySQL\MySQL Server 5.6\data). It is - the file with a suffix of .err. - - When a MySQL server has been installed as a service, and the - service is running, Windows stops the service automatically - when Windows shuts down. The server also can be stopped - manually by using the Services utility, the NET STOP MySQL - command, or the mysqladmin shutdown command. - - You also have the choice of installing the server as a manual - service if you do not wish for the service to be started - automatically during the boot process. To do this, use the - --install-manual option rather than the --install option: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --install-ma -nual - -Removing the service - - To remove a server that is installed as a service, first stop - it if it is running by executing NET STOP MySQL. Then use the - --remove option to remove it: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --remove - - If mysqld is not running as a service, you can start it from - the command line. For instructions, see Section 2.3.5.5, - "Starting MySQL from the Windows Command Line." - - If you encounter difficulties during installation. see - Section 2.3.6, "Troubleshooting a Microsoft Windows MySQL - Server Installation." - -2.3.5.8 Testing The MySQL Installation - - You can test whether the MySQL server is working by executing - any of the following commands: -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqlshow" -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqlshow" -u root m -ysql -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin" version -status proc -C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" test - - If mysqld is slow to respond to TCP/IP connections from - client programs, there is probably a problem with your DNS. - In this case, start mysqld with the --skip-name-resolve - option and use only localhost and IP addresses in the Host - column of the MySQL grant tables. (Be sure that an account - exists that specifies an IP address or you may not be able to - connect.) - - You can force a MySQL client to use a named-pipe connection - rather than TCP/IP by specifying the --pipe or - --protocol=PIPE option, or by specifying . (period) as the - host name. Use the --socket option to specify the name of the - pipe if you do not want to use the default pipe name. - - If you have set a password for the root account, deleted the - anonymous account, or created a new user account, then to - connect to the MySQL server you must use the appropriate -u - and -p options with the commands shown previously. See - Section 4.2.2, "Connecting to the MySQL Server." - - For more information about mysqlshow, see Section 4.5.6, - "mysqlshow --- Display Database, Table, and Column - Information." - -2.3.6 Troubleshooting a Microsoft Windows MySQL Server Installation - - When installing and running MySQL for the first time, you may - encounter certain errors that prevent the MySQL server from - starting. This section helps you diagnose and correct some of - these errors. - - Your first resource when troubleshooting server issues is the - error log. The MySQL server uses the error log to record - information relevant to the error that prevents the server - from starting. The error log is located in the data directory - specified in your my.ini file. The default data directory - location is C:\Program Files\MySQL\MySQL Server 5.6\data, or - C:\ProgramData\Mysql on Windows 7 and Windows Server 2008. - The C:\ProgramData directory is hidden by default. You need - to change your folder options to see the directory and - contents. For more information on the error log and - understanding the content, see Section 5.2.2, "The Error - Log." - - For information regarding possible errors, also consult the - console messages displayed when the MySQL service is - starting. Use the NET START MySQL command from the command - line after installing mysqld as a service to see any error - messages regarding the starting of the MySQL server as a - service. See Section 2.3.5.7, "Starting MySQL as a Windows - Service." - - The following examples show other common error messages you - might encounter when installing MySQL and starting the server - for the first time: - - * If the MySQL server cannot find the mysql privileges - database or other critical files, it displays these - messages: -System error 1067 has occurred. -Fatal error: Can't open and lock privilege tables: -Table 'mysql.user' doesn't exist - - These messages often occur when the MySQL base or data - directories are installed in different locations than the - default locations (C:\Program Files\MySQL\MySQL Server - 5.6 and C:\Program Files\MySQL\MySQL Server 5.6\data, - respectively). - This situation can occur when MySQL is upgraded and - installed to a new location, but the configuration file - is not updated to reflect the new location. In addition, - old and new configuration files might conflict. Be sure - to delete or rename any old configuration files when - upgrading MySQL. - If you have installed MySQL to a directory other than - C:\Program Files\MySQL\MySQL Server 5.6, ensure that the - MySQL server is aware of this through the use of a - configuration (my.ini) file. Put the my.ini file in your - Windows directory, typically C:\WINDOWS. To determine its - exact location from the value of the WINDIR environment - variable, issue the following command from the command - prompt: -C:\> echo %WINDIR% - - You can create or modify an option file with any text - editor, such as Notepad. For example, if MySQL is - installed in E:\mysql and the data directory is - D:\MySQLdata, you can create the option file and set up a - [mysqld] section to specify values for the basedir and - datadir options: -[mysqld] -# set basedir to your installation path -basedir=E:/mysql -# set datadir to the location of your data directory -datadir=D:/MySQLdata - - Microsoft Windows path names are specified in option - files using (forward) slashes rather than backslashes. If - you do use backslashes, double them: -[mysqld] -# set basedir to your installation path -basedir=C:\\Program Files\\MySQL\\MySQL Server 5.6 -# set datadir to the location of your data directory -datadir=D:\\MySQLdata - - The rules for use of backslash in option file values are - given in Section 4.2.6, "Using Option Files." - If you change the datadir value in your MySQL - configuration file, you must move the contents of the - existing MySQL data directory before restarting the MySQL - server. - See Section 2.3.5.2, "Creating an Option File." - - * If you reinstall or upgrade MySQL without first stopping - and removing the existing MySQL service and install MySQL - using the MySQL Installer, you might see this error: -Error: Cannot create Windows service for MySql. Error: 0 - - This occurs when the Configuration Wizard tries to - install the service and finds an existing service with - the same name. - One solution to this problem is to choose a service name - other than mysql when using the configuration wizard. - This enables the new service to be installed correctly, - but leaves the outdated service in place. Although this - is harmless, it is best to remove old services that are - no longer in use. - To permanently remove the old mysql service, execute the - following command as a user with administrative - privileges, on the command line: -C:\> sc delete mysql -[SC] DeleteService SUCCESS - - If the sc utility is not available for your version of - Windows, download the delsrv utility from - http://www.microsoft.com/windows2000/techinfo/reskit/tool - s/existing/delsrv-o.asp and use the delsrv mysql syntax. - -2.3.7 Windows Postinstallation Procedures - - GUI tools exist that perform most of the tasks described in - this section, including: - - * MySQL Installer: Used to install and upgrade MySQL - products. - - * MySQL Workbench: Manages the MySQL server and edits SQL - statements. - - * MySQL Notifier: Starts, stops, or restarts the MySQL - server, and monitors its status. - - * MySQL for Excel - (http://dev.mysql.com/doc/mysql-for-excel/en/index.html): - Edits MySQL data with Microsoft Excel. - - On Windows, you need not create the data directory and the - grant tables. MySQL Windows distributions include the grant - tables with a set of preinitialized accounts in the mysql - database under the data directory. - - Regarding passwords, if you installed MySQL using the MySQL - Installer, you may have already assigned passwords to the - accounts. (See Section 2.3.3, "Installing MySQL on Microsoft - Windows Using MySQL Installer.") Otherwise, use the - password-assignment procedure given in Section 2.10.4, - "Securing the Initial MySQL Accounts." - - Before assigning passwords, you might want to try running - some client programs to make sure that you can connect to the - server and that it is operating properly. Make sure that the - server is running (see Section 2.3.5.4, "Starting the Server - for the First Time"). You can also set up a MySQL service - that runs automatically when Windows starts (see Section - 2.3.5.7, "Starting MySQL as a Windows Service"). - - These instructions assume that your current location is the - MySQL installation directory and that it has a bin - subdirectory containing the MySQL programs used here. If that - is not true, adjust the command path names accordingly. - - If you installed MySQL using MySQL Installer (see Section - 2.3.3, "Installing MySQL on Microsoft Windows Using MySQL - Installer"), the default installation directory is C:\Program - Files\MySQL\MySQL Server 5.6: -C:\> cd "C:\Program Files\MySQL\MySQL Server 5.6" - - A common installation location for installation from a Zip - package is C:\mysql: -C:\> cd C:\mysql - - Alternatively, add the bin directory to your PATH environment - variable setting. That enables your command interpreter to - find MySQL programs properly, so that you can run a program - by typing only its name, not its path name. See Section - 2.3.5.6, "Customizing the PATH for MySQL Tools." - - With the server running, issue the following commands to - verify that you can retrieve information from the server. The - output should be similar to that shown here. - - Use mysqlshow to see what databases exist: -C:\> bin\mysqlshow -+--------------------+ -| Databases | -+--------------------+ -| information_schema | -| mysql | -| performance_schema | -| test | -+--------------------+ - - The list of installed databases may vary, but will always - include the minimum of mysql and information_schema. - - The preceding command (and commands for other MySQL programs - such as mysql) may not work if the correct MySQL account does - not exist. For example, the program may fail with an error, - or you may not be able to view all databases. If you - installed MySQL using MySQL Installer, the root user will - have been created automatically with the password you - supplied. In this case, you should use the -u root and -p - options. (You must use those options if you have already - secured the initial MySQL accounts.) With -p, the client - program prompts for the root password. For example: -C:\> bin\mysqlshow -u root -p -Enter password: (enter root password here) -+--------------------+ -| Databases | -+--------------------+ -| information_schema | -| mysql | -| performance_schema | -| test | -+--------------------+ - - If you specify a database name, mysqlshow displays a list of - the tables within the database: -C:\> bin\mysqlshow mysql -Database: mysql -+---------------------------+ -| Tables | -+---------------------------+ -| columns_priv | -| db | -| event | -| func | -| general_log | -| help_category | -| help_keyword | -| help_relation | -| help_topic | -| innodb_index_stats | -| innodb_table_stats | -| ndb_binlog_index | -| plugin | -| proc | -| procs_priv | -| proxies_priv | -| servers | -| slave_master_info | -| slave_relay_log_info | -| slave_worker_info | -| slow_log | -| tables_priv | -| time_zone | -| time_zone_leap_second | -| time_zone_name | -| time_zone_transition | -| time_zone_transition_type | -| user | -+---------------------------+ - - Use the mysql program to select information from a table in - the mysql database: -C:\> bin\mysql -e "SELECT User, Host, plugin FROM mysql.user" mysql -+------+-----------+-----------------------+ -| User | Host | plugin | -+------+-----------+-----------------------+ -| root | localhost | mysql_native_password | -+------+-----------+-----------------------+ - - For more information about mysql and mysqlshow, see Section - 4.5.1, "mysql --- The MySQL Command-Line Tool," and Section - 4.5.6, "mysqlshow --- Display Database, Table, and Column - Information." - -2.3.8 Upgrading MySQL on Windows - - To upgrade MySQL on Windows, follow these steps: - - 1. Review Section 2.11.1, "Upgrading MySQL," for additional - information on upgrading MySQL that is not specific to - Windows. - - 2. Always back up your current MySQL installation before - performing an upgrade. See Section 7.2, "Database Backup - Methods." - - 3. Download the latest Windows distribution of MySQL from - http://dev.mysql.com/downloads/. - - 4. Before upgrading MySQL, stop the server. If the server is - installed as a service, stop the service with the - following command from the command prompt: -C:\> NET STOP MySQL - - If you are not running the MySQL server as a service, use - mysqladmin to stop it. For example, before upgrading from - MySQL 5.5 to 5.6, use mysqladmin from MySQL 5.5 as - follows: -C:\> "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin" -u root -shutdown - - Note - If the MySQL root user account has a password, invoke - mysqladmin with the -p option and enter the password when - prompted. - - 5. Before upgrading to MySQL 5.6 from a version previous to - 4.1.5, or from a version of MySQL installed from a Zip - archive to a version of MySQL installed with the MySQL - Installation Wizard, you must first manually remove the - previous installation and MySQL service (if the server is - installed as a service). - To remove the MySQL service, use the following command: -C:\> C:\mysql\bin\mysqld --remove - - If you do not remove the existing service, the MySQL - Installation Wizard may fail to properly install the new - MySQL service. - - 6. If you are using the MySQL Installer, start it as - described in Section 2.3.3, "Installing MySQL on - Microsoft Windows Using MySQL Installer." - - 7. If you are upgrading MySQL from a Zip archive, extract - the archive. You may either overwrite your existing MySQL - installation (usually located at C:\mysql), or install it - into a different directory, such as C:\mysql5. - Overwriting the existing installation is recommended. - However, for upgrades (as opposed to installing for the - first time), you must remove the data directory from your - existing MySQL installation to avoid replacing your - current data files. To do so, follow these steps: - a. Unzip the Zip archive in some location other than - your current MySQL installation - b. Remove the data directory - c. Rezip the Zip archive - d. Unzip the modified Zip archive on top of your - existing installation - Alternatively: - a. Unzip the Zip archive in some location other than - your current MySQL installation - b. Remove the data directory - c. Move the data directory from the current MySQL - installation to the location of the just-removed - data directory - d. Remove the current MySQL installation - e. Move the unzipped installation to the location of - the just-removed installation - - 8. If you were running MySQL as a Windows service and you - had to remove the service earlier in this procedure, - reinstall the service. (See Section 2.3.5.7, "Starting - MySQL as a Windows Service.") - - 9. Restart the server. For example, use NET START MySQL if - you run MySQL as a service, or invoke mysqld directly - otherwise. - 10. As Administrator, run mysql_upgrade to check your tables, - attempt to repair them if necessary, and update your - grant tables if they have changed so that you can take - advantage of any new capabilities. See Section 4.4.7, - "mysql_upgrade --- Check and Upgrade MySQL Tables." - 11. If you encounter errors, see Section 2.3.6, - "Troubleshooting a Microsoft Windows MySQL Server - Installation." - -2.4 Installing MySQL on OS X - - For a list of OS X versions that the MySQL server supports, - see - http://www.mysql.com/support/supportedplatforms/database.html - . - - MySQL for OS X is available in a number of different forms: - - * Native Package Installer, which uses the native OS X - installer (DMG) to walk you through the installation of - MySQL. For more information, see Section 2.4.2, - "Installing MySQL on OS X Using Native Packages." You can - use the package installer with OS X. The user you use to - perform the installation must have administrator - privileges. - - * Compressed TAR archive, which uses a file packaged using - the Unix tar and gzip commands. To use this method, you - will need to open a Terminal window. You do not need - administrator privileges using this method, as you can - install the MySQL server anywhere using this method. For - more information on using this method, you can use the - generic instructions for using a tarball, Section 2.2, - "Installing MySQL on Unix/Linux Using Generic Binaries." - In addition to the core installation, the Package - Installer also includes Section 2.4.3, "Installing a - MySQL Launch Daemon" and Section 2.4.4, "Installing and - Using the MySQL Preference Pane," both of which simplify - the management of your installation. - - For additional information on using MySQL on OS X, see - Section 2.4.1, "General Notes on Installing MySQL on OS X." - -2.4.1 General Notes on Installing MySQL on OS X - - You should keep the following issues and notes in mind: - - * As of MySQL server 5.6.26, the DMG bundles a launchd - daemon instead of the deprecated startup item. Startup - items do not function as of OS X 10.10 (Yosemite), so - using launchd is preferred. The available MySQL - preference pane under OS X System Preferences was also - updated to use launchd. - - * You may need (or want) to create a specific mysql user to - own the MySQL directory and data. You can do this through - the Directory Utility, and the mysql user should already - exist. For use in single user mode, an entry for _mysql - (note the underscore prefix) should already exist within - the system /etc/passwd file. - - * Because the MySQL package installer installs the MySQL - contents into a version and platform specific directory, - you can use this to upgrade and migrate your database - between versions. You will need to either copy the data - directory from the old version to the new version, or - alternatively specify an alternative datadir value to set - location of the data directory. By default, the MySQL - directories are installed under /usr/local/. - - * You might want to add aliases to your shell's resource - file to make it easier to access commonly used programs - such as mysql and mysqladmin from the command line. The - syntax for bash is: -alias mysql=/usr/local/mysql/bin/mysql -alias mysqladmin=/usr/local/mysql/bin/mysqladmin - - For tcsh, use: -alias mysql /usr/local/mysql/bin/mysql -alias mysqladmin /usr/local/mysql/bin/mysqladmin - - Even better, add /usr/local/mysql/bin to your PATH - environment variable. You can do this by modifying the - appropriate startup file for your shell. For more - information, see Section 4.2.1, "Invoking MySQL - Programs." - - * After you have copied over the MySQL database files from - the previous installation and have successfully started - the new server, you should consider removing the old - installation files to save disk space. Additionally, you - should also remove older versions of the Package Receipt - directories located in - /Library/Receipts/mysql-VERSION.pkg. - - * Prior to OS X 10.7, MySQL server was bundled with OS X - Server. - -2.4.2 Installing MySQL on OS X Using Native Packages - - The package is located inside a disk image (.dmg) file that - you first need to mount by double-clicking its icon in the - Finder. It should then mount the image and display its - contents. - Note - - Before proceeding with the installation, be sure to stop all - running MySQL server instances by using either the MySQL - Manager Application (on OS X Server), the preference pane, or - mysqladmin shutdown on the command line. - - When installing from the package version, you can also - install the MySQL preference pane, which will enable you to - control the startup and execution of your MySQL server from - System Preferences. For more information, see Section 2.4.4, - "Installing and Using the MySQL Preference Pane." - - When installing using the package installer, the files are - installed into a directory within /usr/local matching the - name of the installation version and platform. For example, - the installer file mysql-5.6.28-osx10.9-x86_64.dmg installs - MySQL into /usr/local/mysql-5.6.28-osx10.9-x86_64/ . The - following table shows the layout of the installation - directory. - - Table 2.5 MySQL Installation Layout on OS X - Directory Contents of Directory - bin, scripts mysqld server, client and utility programs - data Log files, databases - docs Helper documents, like the Release Notes and build - information - include Include (header) files - lib Libraries - man Unix manual pages - mysql-test MySQL test suite - share Miscellaneous support files, including error messages, - sample configuration files, SQL for database installation - sql-bench Benchmarks - support-files Scripts and sample configuration files - /tmp/mysql.sock Location of the MySQL Unix socket - - During the package installer process, a symbolic link from - /usr/local/mysql to the version/platform specific directory - created during installation will be created automatically. - - 1. Download and open the MySQL package installer, which is - provided on a disk image (.dmg) that includes the main - MySQL installation package file. Double-click the disk - image to open it. - Figure 2.41 MySQL Package Installer: DMG Contents - MySQL Package Installer: DMG Contents - - 2. Double-click the MySQL installer package. It will be - named according to the version of MySQL you have - downloaded. For example, if you have downloaded MySQL - server 5.6.28, double-click - mysql-5.6.28-osx-10.9-x86_64.pkg. - - 3. You will be presented with the opening installer dialog. - Click Continue to begin installation. - Figure 2.42 MySQL Package Installer: Introduction - MySQL Package Installer: Introduction - - 4. If you have downloaded the community version of MySQL, - you will be shown a copy of the relevant GNU General - Public License. Click Continue and then Agree to - continue. - - 5. From the Installation Type page you can either click - Install to execute the installation wizard using all - defaults, click Customize to alter which components to - install (MySQL server, Preference Pane, Launchd Support - -- all enabled by default), or click Change Installation - Location to change the type of installation for either - all users, only the user executing the Installer, or - define a custom location. - Figure 2.43 MySQL Package Installer: Installation Type - MySQL Package Installer: Installation Type - Figure 2.44 MySQL Package Installer: Destination Select - (Change Installation Location) - MySQL Package Installer: Destination Select (Change - Installation Location) - Figure 2.45 MySQL Package Installer: Customize - MySQL Package Installer: Customize - - 6. Click Install to begin the installation process. - - 7. Once the installation has been completed successfully, - you will be shown an Install Succeeded message with a - short summary. Now, Close the wizard and begin using the - MySQL server. - Figure 2.46 MySQL Package Installer: Summary - MySQL Package Installer: Summary - - MySQL server is now installed, but it is not loaded (started) - by default. Use either launchctl from the command dline, or - start MySQL by clicking "Start" using the MySQL preference - pane. For additional information, see Section 2.4.3, - "Installing a MySQL Launch Daemon," and Section 2.4.4, - "Installing and Using the MySQL Preference Pane." - -2.4.3 Installing a MySQL Launch Daemon - - OS X uses launch daemons to automatically start, stop, and - manage processes and applications such as MySQL. - Note - - Before MySQL 5.6.26, the OS X builds installed startup items - instead of launchd daemons. However, startup items do not - function as of OS X 10.10 (Yosemite). The OS X builds now - install launchd daemons. - - By default, the installation package (DMG) on OS X installs a - launchd file named - /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist that - contains a plist definition similar to: - - - - - - Label com.oracle.oss.mysql.mysqld - ProcessType Interactive - Disabled - RunAtLoad - KeepAlive - SessionCreate - LaunchOnlyOnce - UserName _mysql - GroupName _mysql - ExitTimeOut 600 - Program /usr/local/mysql/bin/mysqld - ProgramArguments - - /usr/local/mysql/bin/mysqld - --user=_mysql - --basedir=/usr/local/mysql - --datadir=/usr/local/mysql/data - --plugin-dir=/usr/local/mysql/lib/plugin - --log-error=/usr/local/mysql/data/mysqld.local.err - - --pid-file=/usr/local/mysql/data/mysqld.local.pid< -/string> - --port=3306 - - WorkingDirectory /usr/local/mysql - - - - - Note - - Some users report that adding a plist DOCTYPE declaration - causes the launchd operation to fail, despite it passing the - lint check. We suspect it's a copy-n-paste error. The md5 - checksum of a file containing the above snippet is - 60d7963a0bb2994b69b8b9c123db09df. - - To enable the launchd service, you can either: - - * Click Start MySQL Server from the MySQL preference pane. - Figure 2.47 MySQL Preference Pane: Location - MySQL Preference Pane: Location - Figure 2.48 MySQL Preference Pane: Usage - MySQL Preference Pane: Usage - - * Or, manually load the launchd file. -shell> cd /Library/LaunchDaemons -shell> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist - - Note - - When upgrading MySQL server, the launchd installation process - will remove the old startup items that were installed with - MySQL server 5.6.25 and below. - -2.4.4 Installing and Using the MySQL Preference Pane - - The MySQL Installation Package includes a MySQL preference - pane that enables you to start, stop, and control automated - startup during boot of your MySQL installation. - - This preference pane is installed by default, and is listed - under your system's System Preferences window. - - Figure 2.49 MySQL Preference Pane: Location - MySQL Preference Pane: Location - - To install the MySQL Preference Pane: - - 1. Download and open the MySQL package installer, which is - provided on a disk image (.dmg) that includes the main - MySQL installation package. - Note - Before MySQL 5.6.26, OS X packages included the - deprecated startup items instead of launchd daemons, and - the preference pane managed that intstead of launchd. - Figure 2.50 MySQL Package Installer: DMG Contents - MySQL Package Installer: DMG Contents - - 2. Go through the process of installing the MySQL server, as - described in the documentation at Section 2.4.2, - "Installing MySQL on OS X Using Native Packages." - - 3. Click Customize at the Installation Type step. The - "Preference Pane" option is listed there and enabled by - default. - Figure 2.51 MySQL Installer on OS X: Customize - MySQL Installer on OS X: Customize - - 4. Complete the MySQL server installation process. - - Note - - The MySQL preference pane only starts and stops MySQL - installation installed from the MySQL package installation - that have been installed in the default location. - - Once the MySQL preference pane has been installed, you can - control your MySQL server instance using the preference pane. - To use the preference pane, open the System Preferences... - from the Apple menu. Select the MySQL preference pane by - clicking the MySQL logo within the bottom section of the - preference panes list. - - Figure 2.52 MySQL Preference Pane: Location - MySQL Preference Pane: Location - - Figure 2.53 MySQL Preference Pane: Usage - MySQL Preference Pane: Usage - - The MySQL Preference Pane shows the current status of the - MySQL server, showing stopped (in red) if the server is not - running and running (in green) if the server has already been - started. The preference pane also shows the current setting - for whether the MySQL server has been set to start - automatically. - - * To start the MySQL server using the preference pane: - Click Start MySQL Server. You may be prompted for the - username and password of a user with administrator - privileges to start the MySQL server. - - * To stop the MySQL server using the preference pane: - Click Stop MySQL Server. You may be prompted for the - username and password of a user with administrator - privileges to stop the MySQL server. - - * To automatically start the MySQL server when the system - boots: - Check the check box next to Automatically Start MySQL - Server on Startup. - - * To disable automatic MySQL server startup when the system - boots: - Uncheck the check box next to Automatically Start MySQL - Server on Startup. - - You can close the System Preferences... window once you have - completed your settings. - -2.5 Installing MySQL on Linux - - Linux supports a number of different solutions for installing - MySQL. We recommend that you use one of the distributions - from Oracle, for which several methods for installation are - available: - - * Installing with Yum using the MySQL Yum repository - (http://dev.mysql.com/downloads/repo/yum/). For details, - see Section 2.5.1, "Installing MySQL on Linux Using the - MySQL Yum Repository." - - * Installing with APT using the MySQL APT Repository - (http://dev.mysql.com/downloads/repo/apt/). For details, - see Section 2.5.3, "Installing MySQL on Linux Using the - MySQL APT Repository." - - * Installing with Zypper using the MySQL SLES Repository - (http://dev.mysql.com/downloads/repo/suse/). For details, - see Section 2.5.4, "Installing MySQL on Linux Using the - MySQL SLES Repository." - - * Installing using a precompiled RPM package. For more - information, see Section 2.5.5, "Installing MySQL on - Linux Using RPM Packages." - - * Installing using a precompiled Debian package. For more - information, see Section 2.5.6, "Installing MySQL on - Linux Using Debian Packages from Oracle." - - * Installing from a generic binary package in .tar.gz - format. See Section 2.2, "Installing MySQL on Unix/Linux - Using Generic Binaries" for more information. - - * Installing using Oracle's Unbreakable Linux Network - (ULN). For more information, see Section 2.6, "Installing - MySQL Using Unbreakable Linux Network (ULN)." - - * Extracting and compiling MySQL from a source - distribution. For detailed instructions, see Section 2.9, - "Installing MySQL from Source." - - As an alternative, you can use the package manager on your - system to automatically download and install MySQL with - packages from the native software repositories of your Linux - distribution. These native packages are often several - versions behind the currently available release. You will - also normally be unable to install development milestone - releases (DMRs), as these are not usually made available in - the native repositories. For more information on using the - native package installers, see Section 2.5.7, "Installing - MySQL on Linux from the Native Software Repositories." - Note - - For many Linux installations, you will want to set up MySQL - to be started automatically when your machine starts. Many of - the native package installations perform this operation for - you, but for source, binary and RPM solutions you may need to - set this up separately. The required script, mysql.server, - can be found in the support-files directory under the MySQL - installation directory or in a MySQL source tree. You can - install it as /etc/init.d/mysql for automatic MySQL startup - and shutdown. See Section 4.3.3, "mysql.server --- MySQL - Server Startup Script." - -2.5.1 Installing MySQL on Linux Using the MySQL Yum Repository - - MySQL provides a Yum-style software repository for the - following Linux platforms: - - * EL5, EL6, and EL7-based platforms (for example, the - corresponding versions of Red Hat Enterprise Linux, - Oracle Linux, and CentOS) - - * Fedora 21 and 22 - - Currently, the MySQL Yum repository - (http://dev.mysql.com/downloads/repo/yum/) for the - above-mentioned platforms provides RPM packages for - installing the MySQL server, client, MySQL Workbench, MySQL - Utilities, Connector/ODBC, and Connector/Python (not all - packages are available for all the platforms; see Section - 2.5.1, "" for details). - -Before You Start - - As a popular, open-source software, MySQL, in its original or - re-packaged form, is widely installed on many systems from - various sources, including different software download sites, - software repositories, and so on. The following instructions - assume that no versions of MySQL (whether distributed by - Oracle or other parties) have already been installed on your - system; if that is not the case, see Section 2.11.1.1, - "Upgrading MySQL with the MySQL Yum Repository" or Section - 2.5.2, "Replacing a Third-Party Distribution of MySQL Using - the MySQL Yum Repository." - -Steps for a Fresh Installation of MySQL - - Follow the steps below to install the latest GA version of - MySQL with the MySQL Yum repository: - - 1. Adding the MySQL Yum Repository - First, add the MySQL Yum repository to your system's - repository list. This is a one-time operation, which can - be performed by installing an RPM provided by MySQL. - Follow these steps: - a. Go to the Download MySQL Yum Repository page - (http://dev.mysql.com/downloads/repo/yum/) in the - MySQL Developer Zone. - b. Select and download the release package for your - platform. - c. Install the downloaded release package with the - following command (except for EL5-based systems), - replacing platform-and-version-specific-package-name - with the name of the downloaded RPM package: -shell> sudo yum localinstall platform-and-version-specific-package-nam -e.rpm - - For an EL6-based system, the command is in the form - of: -shell> sudo yum localinstall mysql-community-release-el6-{version-numb -er}.noarch.rpm - - For an EL7-based system: -shell> sudo yum localinstall mysql-community-release-el7-{version-numb -er}.noarch.rpm - - For Fedora 21: -shell> sudo yum localinstall mysql-community-release-fc21-{version-num -ber}.noarch.rpm - - For Fedora 22: -shell> sudo dnf localinstall mysql-community-release-fc22-{version-num -ber}.noarch.rpm - - For an EL5-based system, use the following command - instead: -shell> sudo rpm -Uvh mysql-community-release-el5-{version-number}.noar -ch.rpm - - The installation command adds the MySQL Yum - repository to your system's repository list and - downloads the GnuPG key to check the integrity of - the software packages. See Section 2.1.3.2, - "Signature Checking Using GnuPG" for details on - GnuPG key checking. - For platforms other than Fedora 22, you can check - that the MySQL Yum repository has been successfully - added by the following command: -shell> yum repolist enabled | grep "mysql.*-community.*" - - Use this command for Fedora 22: -shell> dnf repolist enabled | grep "mysql.*-community.*" - - Note - Once the MySQL Yum repository is enabled on your system, - any system-wide update by the yum update command (or dnf - upgrade for Fedora 22) will upgrade MySQL packages on - your system and also replace any native third-party - packages, if Yum finds replacements for them in the MySQL - Yum repository; see Section 2.11.1.1, "Upgrading MySQL - with the MySQL Yum Repository" and, for a discussion on - some possible effects of that on your system, see Section - 2.11.1.1, "." - - 2. Selecting a Release Series - Note - When using the MySQL Yum repository, the latest GA - release of MySQL is selected for installation by default. - If this is what you want, you can skip to the next step, - Section 2.5.1, "." - Within the MySQL Yum repository, different release series - of the MySQL Community Server are hosted in different - subrepositories. The subrepository for the latest GA - series (currently 5.6) is enabled by default, and the - subrepositories for all other series (for example, the - 5.7 series, currently still in developer milestone - release (DMR) status) are disabled by default. For - platforms other than Fedora 22, use this command to see - all the subrepositories in the MySQL Yum repository, and - see which of them are enabled or disabled: -shell> yum repolist all | grep mysql - - Use this command for Fedora 22: -shell> dnf repolist all | grep mysql - - To install the latest release from the latest GA series, - no configuration is needed. To install the latest release - from a specific series other than the latest GA series, - disable the subrepository for the latest GA series and - enable the subrepository for the specific series before - running the installation command. If your platform - supports yum-config-manager, you can do that by issuing - these commands, which disable the subrepository for the - 5.6 series and enable the one for the 5.7 series: -shell> sudo yum-config-manager --disable mysql56-community -shell> sudo yum-config-manager --enable mysql57-community-dmr - - Besides using yum-config-manager, you can also select a - release series by editing manually the - /etc/yum.repos.d/mysql-community.repo file. This is a - typical entry for a release series' subrepository in the - file: -# Enable to use MySQL 5.6 -[mysql56-community] -name=MySQL 5.6 Community Server -baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/5/$basearch/ -enabled=1 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql - Find the entry for the subrepository you want to - configure, and edit the enabled option. Specify enabled=0 - to disable a subrepository, or enabled=1 to enable a - subrepository. For example, to install the latest 5.7 - DMR, make sure you have enabled=0 for the above - subrepository entry for MySQL 5.6, and have enabled=1 for - the entry for the 5.7 series: -# Note: MySQL 5.7 is currently in development. For use at your own ris -k. -# Please read with sub pages: https://dev.mysql.com/doc/relnotes/mysql -/5.7/en/ -[mysql57-community-dmr] -name=MySQL 5.7 Community Server Development Milestone Release -baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/ -enabled=1 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql - - You should only enable subrepository for one release - series at any time. When subrepositories for more than - one release series are enabled, the latest series will be - used by Yum. - Verify that the correct subrepositories have been enabled - and disabled by running the following command and - checking its output (for Fedora 22, replace yum in the - command with dnf): -shell> yum repolist enabled | grep mysql - - - 3. Installing MySQL - Install MySQL by the following command (for Fedora 22, - replace yum in the command with dnf): -shell> sudo yum install mysql-community-server - - This installs the package for MySQL server - (mysql-community-server) and also packages for the - components required to run the server, including packages - for the client (mysql-community-client), the common error - messages and character sets for client and server - (mysql-community-common), and the shared client libraries - (mysql-community-libs). - - 4. Starting the MySQL Server - Start the MySQL server with the following command: -shell> sudo service mysqld start - This is a sample output of the above command: -Starting mysqld:[ OK ] - You can check the status of the MySQL server with the - following command: -shell> sudo service mysqld status - This is a sample output of the above command: -mysqld (pid 3066) is running. - - 5. Securing the MySQL Installation - The program mysql_secure_installation allows you to - perform important operations like setting the root - password, removing anonymous users, and so on. Always run - it to secure your MySQL installation: -shell> mysql_secure_installation - It is important to remember the root password you set. - See Section 4.4.5, "mysql_secure_installation --- Improve - MySQL Installation Security" for details. - - For more information on the postinstallation procedures, see - Section 2.10, "Postinstallation Setup and Testing." - Note - - Compatibility Information for EL7-based platforms: The - following RPM packages from the native software repositories - of the platforms are incompatible with the package from the - MySQL Yum repository that installs the MySQL server. Once you - have installed MySQL using the MySQL Yum repository, you will - not be able to install these packages (and vice versa). - - * akonadi-mysql - - * ocsinventory - -Installing Additional MySQL Products and Components with Yum - - You can use Yum to install and manage individual components - of MySQL. Some of these components are hosted in - sub-repositories of the MySQL Yum repository: for example, - the MySQL Connectors are to be found in the MySQL Connectors - Community sub-repository, and the MySQL Workbench in MySQL - Tools Community. You can use the following command to list - the packages for all the MySQL components available for your - platform from the MySQL Yum repository (for Fedora 22, - replace yum in the command with dnf): -shell> sudo yum --disablerepo=\* --enablerepo='mysql*-community*' list - available - - Install any packages of your choice with the following - command, replacing package-name with name of the package (for - Fedora 22, replace yum in the command with dnf): -shell> sudo yum install package-name - - For example, to install MySQL Workbench on Fedora 21: -shell> sudo yum install mysql-workbench-community - - To install the shared client libraries (for Fedora 22, - replace yum in the command with dnf): -shell> sudo yum install mysql-community-libs - -Updating MySQL with Yum - - Besides installation, you can also perform updates for MySQL - products and components using the MySQL Yum repository. See - Section 2.11.1.1, "Upgrading MySQL with the MySQL Yum - Repository" for details. - -2.5.2 Replacing a Third-Party Distribution of MySQL Using the MySQL -Yum Repository - - For supported Yum-based platforms (see Section 2.5.1, - "Installing MySQL on Linux Using the MySQL Yum Repository," - for a list), you can replace a third-party distribution of - MySQL with the latest GA release from MySQL using the MySQL - Yum repository. According to how your third-party - distribution of MySQL was installed, there are different - steps to follow: - -Replacing a Native Third-Party Distribution of MySQL - - If you have installed a third-party distribution of MySQL - from a native software repository (that is, a software - repository provided by your own Linux distribution), follow - these steps: - - 1. Backing Up Your Database - To avoid loss of data, always back up your database - before trying to replace your MySQL installation using - the MySQL Yum repository. See Chapter 7, "Backup and - Recovery," on how to back up your database. - - 2. Adding the MySQL Yum Repository - Add the MySQL Yum repository to your system's repository - list by following the instructions given in Section - 2.5.1, "." - - 3. Replacing the Native Third-Party Distribution by a Yum - Update of a DNF Upgrade - By design, the MySQL Yum repository will replace your - native, third-party MySQL when you perform a yum update - command (or dnf upgrade for Fedora 22) on the system, or - a yum update mysql-server (or dnf upgrade mysql-server - for Fedora 22). - - After updating MySQL using the Yum repository, applications - compiled with older versions of the shared client libraries - should continue to work. However, if you want to recompile - applications and dynamically link them with the updated - libraries, see Section 2.11.1.1, "," for some special - considerations. - -Replacing a Nonnative Third-Party Distribution of MySQL - - If you have installed a third-party distribution of MySQL - from a nonnative software repository (that is, a software - repository not provided by your own Linux distribution), - follow these steps: - - 1. Backing Up Your Database - To avoid loss of data, always back up your database - before trying to replace your MySQL installation using - the MySQL Yum repository. See Chapter 7, "Backup and - Recovery," on how to back up your database. - - 2. Stopping Yum from Receiving MySQL Packages from - Third-Party, Nonnative Repositories - Before you can use the MySQL Yum repository for - installing MySQL, you must stop your system from - receiving MySQL packages from any third-party, nonnative - Yum repositories. - For example, if you have installed MariaDB using their - own software repository, get a list of the installed - MariaDB packages using the following command (for Fedora - 22, replace yum in the command with dnf): -shell> yum list installed mariadb\* - This is a sample output for the command: -MariaDB-common.i686 10.0.4-1 - @mariadb -MariaDB-compat.i686 10.0.4-1 - @mariadb -MariaDB-server.i686 10.0.4-1 - @mariadb - - From the command output, we can identify the installed - packages (MariaDB-common, MariaDB-compat, and - MariaDB-server) and the source of them (a nonnative - software repository named mariadb). - As another example, if you have installed Percona using - their own software repository, get a list of the - installed Percona packages using the following command - (for Fedora 22, replace yum in the command with dnf): -shell> yum list installed Percona\* - This is a sample output for the command: -Percona-Server-client-55.i686 5.5.39-rel36.0.el6 @percona --release-i386 -Percona-Server-server-55.i686 5.5.39-rel36.0.el6 @percona --release-i386 -Percona-Server-shared-55.i686 5.5.39-rel36.0.el6 @percona --release-i386 -percona-release.noarch 0.1-3 @/percon -a-release-0.1-3.noarch - - From the command output, we can identify the installed - packages (Percona-Server-client, Percona-Server-server, - Percona-Server-shared, and percona-release.noarch) and - the source of them (a nonnative software repository named - percona-release). - If you are not sure which third-party MySQL fork you have - installed, this command should reveal it and list the RPM - packages installed for it, as well as the third-party - repository that supplies the packages (for Fedora 22, - replace yum in the command with dnf): -shell> yum --disablerepo=\* provides mysql\* - The next step is to stop Yum from receiving packages from - the nonnative repository. If the yum-config-manager - utility is supported on your platform, you can, for - example, use this command for MariaDB: -shell> sudo yum-config-manager --disable mariadb - And use this command for Percona: -shell> sudo yum-config-manager --disable percona-release - You can perform the same task by removing the entry for - the software repository existing in one of the repository - files under the /etc/yum.repos.d/ directory. This is how - the entry typically looks like for MariaDB: -[mariadb] name = MariaDB - baseurl = [base URL for repository] - gpgkey = [URL for GPG key] - gpgcheck =1 - The entry is usually found in the file - /etc/yum.repos.d/MariaDB.repo for MariaDB---delete the - file, or remove entry from it (or from the file in which - you find the entry). - Note - This step is not necessary for an installation that was - configured with a Yum repository release package (like - Percona) if you are going to remove the release package - (percona-release.noarch for Percona), as shown in the - uninstall command for Percona in Step 3 below. - - 3. Uninstalling the Nonnative Third-Party MySQL Distribution - of MySQL - The nonnative third-party MySQL distribution must first - be uninstalled before you can use the MySQL Yum - repository to install MySQL. For the MariaDB packages - found in Step 2 above, uninstall them with the following - command (for Fedora 22, replace yum in the command with - dnf): -shell> sudo yum remove MariaDB-common MariaDB-compat MariaDB-server - For the Percona packages we found in Step 2 above (for a - similar command on Fedora 22, replace yum in the command - with dnf): -shell> sudo yum remove Percona-Server-client-55 Percona-Server-server- -55 \ - Percona-Server-shared-55.i686 percona-release - - 4. Installing MySQL with the MySQL Yum Repository - Then, install MySQL with the MySQL Yum repository by - following the instructions given in Section 2.5.1, - "Installing MySQL on Linux Using the MySQL Yum - Repository:" . - Important - - + If you have chosen to replace your third-party MySQL - distribution with a newer version of MySQL from the - MySQL Yum repository, remember to run mysql_upgrade - after the server starts, to check and possibly - resolve any incompatibilities between the old data - and the upgraded software. mysql_upgrade also - performs other functions; see Section 4.4.7, - "mysql_upgrade --- Check and Upgrade MySQL Tables" - for details. - - + For EL7-based platforms: See Section 2.5.1, "." - -2.5.3 Installing MySQL on Linux Using the MySQL APT Repository - - The MySQL APT repository provides deb packages for installing - and managing the MySQL server, client, and other components - on the following Linux platforms: : - - * Debian 7.x ("wheezy") - - * Debian 8.x ("jessie") - - * Ubuntu 12.04 LTS ("Precise Pangolin") - - * Ubuntu 14.04 LTS ("Trusty Tahr") - - * Ubuntu 14.10 ("Utopic Unicorn") - - * Ubuntu 15.04 ("Vivid Vervet") - - Instructions for using the MySQL APT Repository are available - in A Quick Guide to Using the MySQL APT Repository - (http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/). - -2.5.4 Installing MySQL on Linux Using the MySQL SLES Repository - - The MySQL SLES repository provides RPM packages for - installing and managing the MySQL server, client, and other - components on SUSE Enterprise Linux Server. - - Instructions for using the MySQL SLES repository are - available in A Quick Guide to Using the MySQL SLES Repository - (http://dev.mysql.com/doc/mysql-sles-repo-quick-guide/en/). - Note - - The MySQL SLES repository is now in development release. We - encourage you to try it and provide us with feedback. Please - report any bugs or inconsistencies you observe to our Bugs - Database (http://bugs.mysql.com). - -2.5.5 Installing MySQL on Linux Using RPM Packages - - Note - - To install or upgrade to MySQL 5.6.11 or later, be sure to - read the special instructions at the end of this section. - - The recommended way to install MySQL on RPM-based Linux - distributions that use glibc is by using the RPM packages - provided by Oracle. There are two sources for obtaining the - Community versions of the RPM packages: - - * From the MySQL software repositories, for the following - platforms: - - + For EL5, EL6, or EL7-based platforms and Fedora 21 - or 22, use the MySQL Yum repository (see Section - 2.5.1, "Installing MySQL on Linux Using the MySQL - Yum Repository" for details). - - + For SUSE Enterprise Linux Server, use the MySQL SLES - repository (see Section 2.5.4, "Installing MySQL on - Linux Using the MySQL SLES Repository" for details). - - * From the MySQL Downloads page - (http://dev.mysql.com/downloads/) in the MySQL Developer - Zone (http://dev.mysql.com/), which provides RPM packages - that work for different platforms. - - The discussion in this section applies only to the RPM - packages downloaded from the MySQL Developer Zone. - Installations created with these packages result in files - under the system directories shown in the following table. - - Table 2.6 MySQL Installation Layout for Linux RPM Packages - from the MySQL Developer Zone - Directory Contents of Directory - /usr/bin Client programs and scripts - /usr/sbin The mysqld server - /var/lib/mysql Log files, databases - /usr/share/info MySQL manual in Info format - /usr/share/man Unix manual pages - /usr/include/mysql Include (header) files - /usr/lib/mysql Libraries - /usr/share/mysql Miscellaneous support files, including error - messages, character set files, sample configuration files, - SQL for database installation - /usr/share/sql-bench Benchmarks - Note - - RPM distributions of MySQL are also provided by other - vendors. Be aware that they may differ from those built by - Oracle in features, capabilities, and conventions (including - communication setup), and that the instructions in this - manual do not necessarily apply to installing them. The - vendor's instructions should be consulted instead. Because of - these differences, RPM packages built by Oracle check whether - such RPMs built by other vendors are installed. If so, the - RPM does not install and produces a message explaining this. - - Conflicts can arise when an RPM from another vendor is - already installed, such as when a vendor's conventions about - which files belong with the server and which belong with the - client library differ from the breakdown used for Oracle - packages. In such cases, attempts to install an Oracle RPM - with rpm -i may result in messages that files in the RPM to - be installed conflict with files from an installed package - (denoted mysql-libs in the following paragraphs). - - Each MySQL release provides a MySQL-shared-compat package - that is meant to replace mysql-libs and provides a - replacement-compatible client library for older MySQL series. - MySQL-shared-compat is set up to make mysql-libs obsolete, - but rpm explicitly refuses to replace obsoleted packages when - invoked with -i (unlike -U), which is why installation with - rpm -i produces a conflict. - - MySQL-shared-compat can safely be installed alongside - mysql-libs because libraries are installed to different - locations. Therefore, it is possible to install - MySQL-shared-compat first, then manually remove mysql-libs - before continuing with the installation. After mysql-libs is - removed, the dynamic linker stops looking for the client - library in the location where mysql-libs puts it, and the - library provided by the MySQL-shared-compat package takes - over. - - Another alternative is to install packages using yum. In a - directory containing all RPM packages for a MySQL release, - yum install MySQL*rpm installs them in the correct order and - removes mysql-libs in one step without conflicts. - - In most cases, you need install only the MySQL-server and - MySQL-client packages to get a functional standard MySQL - installation. The other packages are not required for a - standard installation. - - As of MySQL 5.6.8, new RPM install operations (not upgrades) - invoke mysql_install_db with the --random-passwords option - that provides for more secure MySQL installation. Invoking - mysql_install_db with --random-passwords causes it to assign - a random password to the MySQL root accounts, set the - "password expired" flag for those accounts, and not create - anonymous-user MySQL accounts. It will be necessary after - installation to start the server, connect as root using the - initial random password, and assign a new root password. - Until this is done, root cannot do anything else. This must - be done for each root account you intend to use. To change - the password, you can use the SET PASSWORD statement (for - example, with the mysql client). You can also use mysqladmin - or mysql_secure_installation. For additional details, see - Section 4.4.3, "mysql_install_db --- Initialize MySQL Data - Directory." (Install operations using RPMs for Unbreakable - Linux Network are unaffected because they do not use - mysql_install_db.) - Important - - RPMs for MySQL Cluster. Standard MySQL server RPMs built by - MySQL do not provide support for the NDBCLUSTER storage - engine. For more information about installing MySQL Cluster - from RPMs, see Section 18.2, "MySQL Cluster Installation." - - When upgrading a MySQL Cluster RPM installation, you must - upgrade all installed RPMs, including the Server and Client - RPMs. - - For upgrades, if your installation was originally produced by - installing multiple RPM packages, it is best to upgrade all - the installed packages, not just some. For example, if you - previously installed the server and client RPMs, do not - upgrade just the server RPM. - - If the data directory exists at RPM installation time, the - installation process does not modify existing data. This has - the effect, for example, that accounts in the grant tables - are not initialized to the default set of accounts. - - If you get a dependency failure when trying to install MySQL - packages (for example, error: removing these packages would - break dependencies: libmysqlclient.so.10 is needed by ...), - you should also install the MySQL-shared-compat package, - which includes the shared libraries for older releases for - backward compatibility. - - The following list shows the available RPM packages. The - names shown here use a suffix of .linux_glibc2.5.i386.rpm, - but particular packages can have different suffixes, - described later. If you plan to install multiple RPM - packages, you may wish to download the RPM Bundle tar file - instead, which contains multiple RPM packages so that you - need not download them separately. - - * MySQL-server-VERSION.linux_glibc2.5.i386.rpm - The MySQL server. You need this unless you only want to - connect to a MySQL server running on another machine. - - * MySQL-client-VERSION.linux_glibc2.5.i386.rpm - The standard MySQL client programs. You probably always - want to install this package. - - * MySQL-devel-VERSION.linux_glibc2.5.i386.rpm - The libraries and include files needed to compile other - MySQL clients, such as the Perl MySQL module. Install - this RPM if you intend to compile C API applications. - - * MySQL-shared-VERSION.linux_glibc2.5.i386.rpm - This package contains the shared libraries - (libmysqlclient.so*) that certain languages and - applications need to dynamically load and use MySQL. It - contains single-threaded and thread-safe libraries. - Install this RPM if you intend to compile or run C API - applications that depend on the shared client library. - - * MySQL-shared-compat-VERSION.linux_glibc2.5.i386.rpm - This package includes the shared libraries for older - releases, but not the libraries for the current release. - It contains single-threaded and thread-safe libraries. - Install this package if you have applications installed - that are dynamically linked against older versions of - MySQL but you want to upgrade to the current version - without breaking the library dependencies. - As of MySQL 5.6.5, the MySQL-shared-compat RPM package - enables users of Red Hat-provided mysql-*-5.1 RPM - packages to migrate to Oracle-provided MySQL-*-5.5 - packages. MySQL-shared-compat replaces the Red Hat - mysql-libs package by replacing libmysqlclient.so files - of the latter package, thus satisfying dependencies of - other packages on mysql-libs. This change affects only - users of Red Hat (or Red Hat-compatible) RPM packages. - Nothing is different for users of Oracle RPM packages. - - * MySQL-embedded-VERSION.linux_glibc2.5.i386.rpm - The embedded MySQL server library. - - * MySQL-test-VERSION.linux_glibc2.5.i386.rpm - This package includes the MySQL test suite. - - * MySQL-VERSION.src.rpm - This contains the source code for all of the previous - packages. It can also be used to rebuild the RPMs on - other architectures (for example, Alpha or SPARC). - - In RPM package names, the suffix (following the VERSION - value) has the following syntax: -.PLATFORM.CPU.rpm - - The PLATFORM and CPU values indicate the type of system for - which the package is built. PLATFORM indicates the platform - and CPU indicates the processor type or family. - - All packages are dynamically linked against glibc 2.5. The - PLATFORM value indicates whether the package is platform - independent or intended for a specific platform, as shown in - the following table. - - Table 2.7 MySQL Linux RPM Package Platforms - PLATFORM Value Intended Use - linux_glibc25 Platform independent, should run on any Linux - distribution that supports glibc 2.5 - rhel5, rhel6 Red Hat Enterprise Linux 5 or 6 - el6, el7 Enterprise Linux 6 or 7 - sles10, sles11 SUSE Linux Enterprise Server 10 or 11 - - In MySQL 5.6, only linux_glibc2.5 packages are available - currently. - - The CPU value indicates the processor type or family for - which the package is built, as shown in the following table. - - Table 2.8 MySQL Linux RPM Package CPU Identifiers - CPU Value Intended Processor Type or Family - i386, i586, i686 Pentium processor or better, 32 bit - x86_64 64-bit x86 processor - ia64 Itanium (IA-64) processor - - To see all files in an RPM package (for example, a - MySQL-server RPM), run a command like this (modify the - platform and CPU identifiers appropriately for your system): -shell> rpm -qpl MySQL-server-VERSION.linux_glibc2.5.i386.rpm - - To perform a standard minimal installation, install the - server and client RPMs: -shell> rpm -i MySQL-server-VERSION.linux_glibc2.5.i386.rpm -shell> rpm -i MySQL-client-VERSION.linux_glibc2.5.i386.rpm - - To install only the client programs, install just the client - RPM: -shell> rpm -i MySQL-client-VERSION.linux_glibc2.5.i386.rpm - - RPM provides a feature to verify the integrity and - authenticity of packages before installing them. To learn - more about this feature, see Section 2.1.3, "Verifying - Package Integrity Using MD5 Checksums or GnuPG." - - The server RPM places data under the /var/lib/mysql - directory. The RPM also creates a login account for a user - named mysql (if one does not exist) to use for running the - MySQL server, and creates the appropriate entries in - /etc/init.d/ to start the server automatically at boot time. - (This means that if you have performed a previous - installation and have made changes to its startup script, you - may want to make a copy of the script so that you can - reinstall it after you install a newer RPM.) See Section - 2.10.5, "Starting and Stopping MySQL Automatically," for more - information on how MySQL can be started automatically on - system startup. - - In MySQL 5.6, for a new installation using RPM packages, the - server boot scripts are installed, but the MySQL server is - not started at the end of the installation, since the status - of the server during an unattended installation is not known. - - In MySQL 5.6, for an upgrade installation using RPM packages, - if the MySQL server is running when the upgrade occurs, the - MySQL server is stopped, the upgrade occurs, and the MySQL - server is restarted. If the MySQL server is not already - running when the RPM upgrade occurs, the MySQL server is not - started at the end of the installation. - Note - - Upgrading from a community version to a commercial version of - MySQL requires that you first uninstall the community version - and then install the commercial version. In this case, you - must restart the server manually after the upgrade. - - If something goes wrong, you can find more information in the - binary installation section. See Section 2.2, "Installing - MySQL on Unix/Linux Using Generic Binaries." - Note - - The accounts created in the MySQL grant tables for an RPM - installation initially have no passwords. After starting the - server, you should assign passwords to them using the - instructions in Section 2.10, "Postinstallation Setup and - Testing." - - An RPM installation creates a user named mysql and a group - named mysql on the system using the useradd, groupadd, and - usermod commands. Those commands require appropriate - administrative privileges, which is required for locally - managed users and groups (as listed in the /etc/passwd and - /etc/group files) by the RPM installation process being run - by root. - - If you log in as the mysql user, you may find that MySQL - displays "Invalid (old?) table or database name" errors that - mention .mysqlgui, lost+found, .mysqlgui, .bash_history, - .fonts.cache-1, .lesshst, .mysql_history, .profile, .viminfo, - and similar files created by MySQL or operating system - utilities. You can safely ignore these error messages or - remove the files or directories that cause them if you do not - need them. - - For nonlocal user management (LDAP, NIS, and so forth), the - administrative tools may require additional authentication - (such as a password), and will fail if the installing user - does not provide this authentication. Even if they fail, the - RPM installation will not abort but succeed, and this is - intentional. If they failed, some of the intended transfer of - ownership may be missing, and it is recommended that the - system administrator then manually ensures some appropriate - user and group exists and manually transfers ownership - following the actions in the RPM spec file. - - In MySQL 5.6.11, the RPM spec file has been updated, which - has the following consequences: - - * For a non-upgrade installation (no existing MySQL version - installed), it possible to install MySQL using yum. - - * For upgrades, it is necessary to clean up any earlier - MySQL installations. In effect, the update is performed - by removing the old installations and installing the new - one. - - Additional details follow. - - For a non-upgrade installation of MySQL 5.6.11 or later, it - is possible to install using yum: -shell> yum install MySQL-server-NEWVERSION.linux_glibc2.5.i386.rpm - - For upgrades to MySQL 5.6.11 or later, perform the upgrade by - removing the old installation and installing the new one: - - 1. Remove the existing 5.6.X installation. OLDVERSION is the - version to remove. -shell> rpm -e MySQL-server-OLDVERSION.linux_glibc2.5.i386.rpm - - Repeat this step for all installed MySQL RPMs. - - 2. Install the new version. NEWVERSION is the version to - install. -shell> rpm -ivh MySQL-server-NEWVERSION.linux_glibc2.5.i386.rpm - - Alternatively, the removal and installation can be done using - yum: -shell> yum remove MySQL-server-OLDVERSION.linux_glibc2.5.i386.rpm -shell> yum install MySQL-server-NEWVERSION.linux_glibc2.5.i386.rpm - -2.5.6 Installing MySQL on Linux Using Debian Packages from Oracle - - Oracle provides Debian packages for installing MySQL on - Debian or Debian-like Linux systems. The packages are - available through two different channels: - - * The MySQL APT Repository - (http://dev.mysql.com/downloads/repo/apt/), supporting - the Debian 7 and 8, and Ubuntu 12, 14, and 15 platforms. - For details, see Section 2.5.3, "Installing MySQL on - Linux Using the MySQL APT Repository." - - * The MySQL Developer Zone's Download Area - (http://dev.mysql.com/downloads/). For details, see - Section 2.1.2, "How to Get MySQL." The following are some - information on the Debian packages available there and - the instructions for installing them: - - + You may also need to install the libaio library if - it is not already present on your system: -shell> sudo apt-get install libaio1 - - - + For Debian 7 and 8, and Ubuntu 12, 14, and 15: - o Various Debian packages are provided in the - MySQL Developer Zone for installing different - components of MySQL. The preferred method is to - use the tarball bundle, which contains the - packages needed for a basic setup of MySQL. The - tarball bundles have names in the format of - mysql-server_MVER-DVER_CPU.deb-bundle.tar. MVER - is the MySQL version and DVER is the Linux - distribution version. The CPU value indicates - the processor type or family for which the - package is built, as shown in the following - table: - Table 2.9 MySQL Debian 7 and 8, and Ubuntu 12, - 14, and 15 Installation Packages CPU - Identifiers - - CPU Value Intended Processor Type or Family - i386 Pentium processor or better, 32 bit - amd64 64-bit x86 processor - o After downloading the tarball, unpack it with - the following command: -shell> tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tar - - o In general, install the deb packages unpacked - from the tarball with the command (see - explanations below for the extra steps required - for installing the server package): -shell> sudo dpkg -i package-name.deb - There are four packages to install: - # The database common files (install this - package before the other ones): -shell> sudo dpkg -i mysql-common_MVER-DVER_CPU.deb - # The MySQL server: - Install first the package for the database - common files (see the last bullet), and - then pre-configure your server - installation by the following command: -shell> dpkg-preconfigure mysql-community-server_MVER-DVER_CPU.deb - There are then two requests for you: - @ Supply a password for the root user - for your MySQL installation. - Important - Make sure you remember the root - password you set. Users who want to - set a password later can leave the - password field blank in the dialogue - box and just press OK. However, it is - very important that you set the - password soon using the program - mysql_secure_installation, as people - can gain anonymous access to your - MySQL server until you have secured - the database's root account with a - password. - @ Indicate if you want to install the - test database with "Yes" or "No". - Installation of the test database is - not recommended for production - environments. - Next, install the server package with the - following command: -shell> sudo dpkg -i mysql-community-server_MVER-DVER_CPU.deb - # The MySQL client: -shell> sudo dpkg -i mysql-community-client_MVER-DVER_CPU.deb - # The MySQL shared client library: -shell> sudo dpkg -i libmysqlclient18_MVER-DVER_CPU.deb - Here are where the files are installed on the - system: - # All configuration files (like my.cnf) are - under /etc - # All binaries, libraries, headers, etc., - are under /usr - # The data directory is under /var - - + For Debian 6: - o Debian package files directly downloaded from - the MySQL Developer Zone have names in the - mysql-MVER-DVER-CPU.deb format. MVER is the - MySQL version and DVER is the Debian version. - The CPU value indicates the processor type or - family for which the package is built, as shown - in the following table: - Table 2.10 MySQL Debian 6 Installation Package - CPU Identifiers - - CPU Value Intended Processor Type or Family - i686 Pentium processor or better, 32 bit - x86_64 64-bit x86 processor - o After downloading a Debian package, use the - following command to install it; -shell> dpkg -i mysql-MVER-DVER-CPU.deb - - The Debian package installs files under the - /opt/mysql/server-5.6 directory. - - Note - - Debian distributions of MySQL are also provided by other - vendors. Be aware that they may differ from those built by - Oracle in features, capabilities, and conventions (including - communication setup), and that the instructions in this - manual do not necessarily apply to installing them. The - vendor's instructions should be consulted instead. - -2.5.7 Installing MySQL on Linux from the Native Software -Repositories - - Many Linux distributions include a version of the MySQL - server, client tools, and development components in their - native software repositories and can be installed with the - platforms' standard package management systems. This section - provides basic instructions for installing MySQL using those - package management systems. - Important - - Native packages are often several versions behind the - currently available release. You will also normally be unable - to install development milestone releases (DMRs), as these - are not usually made available in the native repositories. - Before proceeding, we recommend that you check out the other - installation options described in Section 2.5, "Installing - MySQL on Linux." - - Distribution specific instructions are shown below: - - * Red Hat Linux, Fedora, CentOS - Note - For EL5, EL6, or EL7-based Linux platforms and Fedora 21 - or 22, you can install MySQL using the MySQL Yum - repository instead of the platform's native software - repository. See Section 2.5.1, "Installing MySQL on Linux - Using the MySQL Yum Repository" for details. - For Red Hat and similar distributions, the MySQL - distribution is divided into a number of separate - packages, mysql for the client tools, mysql-server for - the server and associated tools, and mysql-libs for the - libraries. The libraries are required if you want to - provide connectivity from different languages and - environments such as Perl, Python and others. - To install, use the yum command to specify the packages - that you want to install. For example: -root-shell> yum install mysql mysql-server mysql-libs mysql-server -Loaded plugins: presto, refresh-packagekit -Setting up Install Process -Resolving Dependencies ---> Running transaction check ----> Package mysql.x86_64 0:5.1.48-2.fc13 set to be updated ----> Package mysql-libs.x86_64 0:5.1.48-2.fc13 set to be updated ----> Package mysql-server.x86_64 0:5.1.48-2.fc13 set to be updated ---> Processing Dependency: perl-DBD-MySQL for package: mysql-server-5. -1.48-2.fc13.x86_64 ---> Running transaction check ----> Package perl-DBD-MySQL.x86_64 0:4.017-1.fc13 set to be updated ---> Finished Dependency Resolution - -Dependencies Resolved - -====================================================================== -========== - Package Arch Version Repository - Size -====================================================================== -========== -Installing: - mysql x86_64 5.1.48-2.fc13 updates - 889 k - mysql-libs x86_64 5.1.48-2.fc13 updates - 1.2 M - mysql-server x86_64 5.1.48-2.fc13 updates - 8.1 M -Installing for dependencies: - perl-DBD-MySQL x86_64 4.017-1.fc13 updates - 136 k - -Transaction Summary -====================================================================== -========== -Install 4 Package(s) -Upgrade 0 Package(s) - -Total download size: 10 M -Installed size: 30 M -Is this ok [y/N]: y -Downloading Packages: -Setting up and reading Presto delta metadata -Processing delta metadata -Package(s) data still to download: 10 M -(1/4): mysql-5.1.48-2.fc13.x86_64.rpm | 889 kB -00:04 -(2/4): mysql-libs-5.1.48-2.fc13.x86_64.rpm | 1.2 MB -00:06 -(3/4): mysql-server-5.1.48-2.fc13.x86_64.rpm | 8.1 MB -00:40 -(4/4): perl-DBD-MySQL-4.017-1.fc13.x86_64.rpm | 136 kB -00:00 ----------------------------------------------------------------------- ----------- -Total 201 kB/s | 10 MB -00:52 -Running rpm_check_debug -Running Transaction Test -Transaction Test Succeeded -Running Transaction - Installing : mysql-libs-5.1.48-2.fc13.x86_64 - 1/4 - Installing : mysql-5.1.48-2.fc13.x86_64 - 2/4 - Installing : perl-DBD-MySQL-4.017-1.fc13.x86_64 - 3/4 - Installing : mysql-server-5.1.48-2.fc13.x86_64 - 4/4 - -Installed: - mysql.x86_64 0:5.1.48-2.fc13 mysql-libs.x86_64 0:5.1.48-2 -.fc13 - mysql-server.x86_64 0:5.1.48-2.fc13 - -Dependency Installed: - perl-DBD-MySQL.x86_64 0:4.017-1.fc13 - -Complete! - - MySQL and the MySQL server should now be installed. A - sample configuration file is installed into /etc/my.cnf. - An init script, to start and stop the server, will have - been installed into /etc/init.d/mysqld. To start the - MySQL server use service: -root-shell> service mysqld start - - To enable the server to be started and stopped - automatically during boot, use chkconfig: -root-shell> chkconfig --levels 235 mysqld on - - Which enables the MySQL server to be started (and - stopped) automatically at the specified the run levels. - The database tables will have been automatically created - for you, if they do not already exist. You should, - however, run mysql_secure_installation to set the root - passwords on your server. - - * Debian, Ubuntu, Kubuntu - Note - For Debian 7 and 8, and Ubuntu 12, 14, and 15, MySQL can - be installed using the MySQL APT Repository - (http://dev.mysql.com/downloads/repo/apt/) instead of the - platform's native software repository. See Section 2.5.3, - "Installing MySQL on Linux Using the MySQL APT - Repository" for details. - On Debian and related distributions, there are two - packages for MySQL in their software repositories, - mysql-client and mysql-server, for the client and server - components respectively. You should specify an explicit - version, for example mysql-client-5.1, to ensure that you - install the version of MySQL that you want. - To download and install, including any dependencies, use - the apt-get command, specifying the packages that you - want to install. - Note - Before installing, make sure that you update your apt-get - index files to ensure you are downloading the latest - available version. - A sample installation of the MySQL packages might look - like this (some sections trimmed for clarity): -root-shell> apt-get install mysql-client-5.1 mysql-server-5.1 -Reading package lists... Done -Building dependency tree -Reading state information... Done -The following packages were automatically installed and are no longer -required: - linux-headers-2.6.28-11 linux-headers-2.6.28-11-generic -Use 'apt-get autoremove' to remove them. -The following extra packages will be installed: - bsd-mailx libdbd-mysql-perl libdbi-perl libhtml-template-perl - libmysqlclient15off libmysqlclient16 libnet-daemon-perl libplrpc-per -l mailx - mysql-common postfix -Suggested packages: - dbishell libipc-sharedcache-perl tinyca procmail postfix-mysql postf -ix-pgsql - postfix-ldap postfix-pcre sasl2-bin resolvconf postfix-cdb -The following NEW packages will be installed - bsd-mailx libdbd-mysql-perl libdbi-perl libhtml-template-perl - libmysqlclient15off libmysqlclient16 libnet-daemon-perl libplrpc-per -l mailx - mysql-client-5.1 mysql-common mysql-server-5.1 postfix -0 upgraded, 13 newly installed, 0 to remove and 182 not upgraded. -Need to get 1907kB/25.3MB of archives. -After this operation, 59.5MB of additional disk space will be used. -Do you want to continue [Y/n]? Y -Get: 1 http://gb.archive.ubuntu.com jaunty-updates/main mysql-common 5 -.1.30really5.0.75-0ubuntu10.5 [63.6kB] -Get: 2 http://gb.archive.ubuntu.com jaunty-updates/main libmysqlclient -15off 5.1.30really5.0.75-0ubuntu10.5 [1843kB] -Fetched 1907kB in 9s (205kB/s) -Preconfiguring packages ... -Selecting previously deselected package mysql-common. -(Reading database ... 121260 files and directories currently installed -.) -... -Processing 1 added doc-base file(s)... -Registering documents with scrollkeeper... -Setting up libnet-daemon-perl (0.43-1) ... -Setting up libplrpc-perl (0.2020-1) ... -Setting up libdbi-perl (1.607-1) ... -Setting up libmysqlclient15off (5.1.30really5.0.75-0ubuntu10.5) ... - -Setting up libdbd-mysql-perl (4.008-1) ... -Setting up libmysqlclient16 (5.1.31-1ubuntu2) ... - -Setting up mysql-client-5.1 (5.1.31-1ubuntu2) ... - -Setting up mysql-server-5.1 (5.1.31-1ubuntu2) ... - - * Stopping MySQL database server mysqld - ...done. -100825 11:46:15 InnoDB: Started; log sequence number 0 46409 -100825 11:46:15 InnoDB: Starting shutdown... -100825 11:46:17 InnoDB: Shutdown completed; log sequence number 0 464 -09 -100825 11:46:17 [Warning] Forcing shutdown of 1 plugins - - * Starting MySQL database server mysqld - ...done. - - * Checking for corrupt, not cleanly closed and upgrade needing tables -. -... -Processing triggers for libc6 ... -ldconfig deferred processing now taking place - - Note - The apt-get command will install a number of packages, - including the MySQL server, in order to provide the - typical tools and application environment. This can mean - that you install a large number of packages in addition - to the main MySQL package. - During installation, the initial database will be - created, and you will be prompted for the MySQL root - password (and confirmation). A configuration file will - have been created in /etc/mysql/my.cnf. An init script - will have been created in /etc/init.d/mysql. - The server will already be started. You can manually - start and stop the server using: -root-shell> service mysql [start|stop] - - The service will automatically be added to the 2, 3 and 4 - run levels, with stop scripts in the single, shutdown and - restart levels. - - * Gentoo Linux - As a source-based distribution, installing MySQL on - Gentoo involves downloading the source, patching the - Gentoo specifics, and then compiling the MySQL server and - installing it. This process is handled automatically by - the emerge command. Depending on the version of MySQL - that you want to install, you may need to unmask the - specific version that you want for your chosen platform. - The MySQL server and client tools are provided within a - single package, dev-db/mysql. You can obtain a list of - the versions available to install by looking at the - portage directory for the package: -root-shell> ls /usr/portage/dev-db/mysql/mysql-5.1* -mysql-5.1.39-r1.ebuild -mysql-5.1.44-r1.ebuild -mysql-5.1.44-r2.ebuild -mysql-5.1.44-r3.ebuild -mysql-5.1.44.ebuild -mysql-5.1.45-r1.ebuild -mysql-5.1.45.ebuild -mysql-5.1.46.ebuild - - To install a specific MySQL version, you must specify the - entire atom. For example: -root-shell> emerge =dev-db/mysql-5.1.46 - - A simpler alternative is to use the virtual/mysql-5.1 - package, which will install the latest version: -root-shell> emerge =virtual/mysql-5.1 - - If the package is masked (because it is not tested or - certified for the current platform), use the - ACCEPT_KEYWORDS environment variable. For example: -root-shell> ACCEPT_KEYWORDS="~x86" emerge =virtual/mysql-5.1 - - After installation, you should create a new database - using mysql_install_db, and set the password for the root - user on MySQL. You can use the configuration interface to - set the password and create the initial database: -root-shell> emerge --config =dev-db/mysql-5.1.46 - - A sample configuration file will have been created for - you in /etc/mysql/my.cnf, and an init script will have - been created in /etc/init.d/mysql. - To enable MySQL to start automatically at the normal - (default) run levels, you can use: -root-shell> rc-update add mysql default - -2.6 Installing MySQL Using Unbreakable Linux Network (ULN) - - Linux supports a number of different solutions for installing - MySQL, covered in Section 2.5, "Installing MySQL on Linux." - One of the methods, covered in this section, is installing - from Oracle's Unbreakable Linux Network (ULN). You can find - information about Oracle Linux and ULN under - http://linux.oracle.com/. - - To use ULN, you need to obtain a ULN login and register the - machine used for installation with ULN. This is described in - detail in the ULN FAQ - (https://linux.oracle.com/uln_faq.html). The page also - describes how to install and update packages.The MySQL - packages are in the "MySQL for Oracle Linux 6" and "MySQL for - Oracle Linux 7" channels for your system architecture on ULN. - Note - - At the time of this writing, ULN provides MySQL 5.6 for - Oracle Linux 6 and Oracle Linux 7. - - Once MySQL has been installed using ULN, you can find - information on starting and stopping the server, and more, in - this section, particularly under Section 2.5.5, "Installing - MySQL on Linux Using RPM Packages." - - If you're updating an existing MySQL installation to an - installation using ULN, the recommended procedure is to - export your data using mysqldump, remove the existing - installation, install MySQL from ULN, and load the exported - data into your freshly installed MySQL. - - If the existing MySQL installation you're upgrading from is - from a previous release series (prior to MySQL 5.6), make - sure to read the section on upgrading MySQL, Section 2.11.1, - "Upgrading MySQL." - -2.7 Installing MySQL on Solaris and OpenSolaris - - MySQL on Solaris and OpenSolaris is available in a number of - different formats. - - * For information on installing using the native Solaris - PKG format, see Section 2.7.1, "Installing MySQL on - Solaris Using a Solaris PKG." - - * On OpenSolaris, the standard package repositories include - MySQL packages specially built for OpenSolaris that - include entries for the Service Management Framework - (SMF) to enable control of the installation using the SMF - administration commands. For more information, see - Section 2.7.2, "Installing MySQL on OpenSolaris Using - IPS." - - * To use a standard tar binary installation, use the notes - provided in Section 2.2, "Installing MySQL on Unix/Linux - Using Generic Binaries." Check the notes and hints at the - end of this section for Solaris specific notes that you - may need before or after installation. - - To obtain a binary MySQL distribution for Solaris in tarball - or PKG format, http://dev.mysql.com/downloads/mysql/5.6.html. - - Additional notes to be aware of when installing and using - MySQL on Solaris: - - * If you want to use MySQL with the mysql user and group, - use the groupadd and useradd commands: -groupadd mysql -useradd -g mysql mysql - - - * If you install MySQL using a binary tarball distribution - on Solaris, you may run into trouble even before you get - the MySQL distribution unpacked, as the Solaris tar - cannot handle long file names. This means that you may - see errors when you try to unpack MySQL. - If this occurs, you must use GNU tar (gtar) to unpack the - distribution. In Solaris 10 and OpenSolaris gtar is - normally located in /usr/sfw/bin/gtar, but may not be - included in the default path definition. - - * When using Solaris 10 for x86_64, you should mount any - file systems on which you intend to store InnoDB files - with the forcedirectio option. (By default mounting is - done without this option.) Failing to do so will cause a - significant drop in performance when using the InnoDB - storage engine on this platform. - - * If you would like MySQL to start automatically, you can - copy support-files/mysql.server to /etc/init.d and create - a symbolic link to it named /etc/rc3.d/S99mysql.server. - - * If too many processes try to connect very rapidly to - mysqld, you should see this error in the MySQL log: -Error in accept: Protocol error - - You might try starting the server with the --back_log=50 - option as a workaround for this. - - * To configure the generation of core files on Solaris you - should use the coreadm command. Because of the security - implications of generating a core on a setuid() - application, by default, Solaris does not support core - files on setuid() programs. However, you can modify this - behavior using coreadm. If you enable setuid() core files - for the current user, they will be generated using the - mode 600 and owned by the superuser. - -2.7.1 Installing MySQL on Solaris Using a Solaris PKG - - You can install MySQL on Solaris and OpenSolaris using a - binary package using the native Solaris PKG format instead of - the binary tarball distribution. - - To use this package, download the corresponding - mysql-VERSION-solaris10-PLATFORM.pkg.gz file, then uncompress - it. For example: -shell> gunzip mysql-5.6.28-solaris10-x86_64.pkg.gz - - To install a new package, use pkgadd and follow the onscreen - prompts. You must have root privileges to perform this - operation: -shell> pkgadd -d mysql-5.6.28-solaris10-x86_64.pkg - -The following packages are available: - 1 mysql MySQL Community Server (GPL) - (i86pc) 5.6.28 - -Select package(s) you wish to process (or 'all' to process -all packages). (default: all) [?,??,q]: - - The PKG installer installs all of the files and tools needed, - and then initializes your database if one does not exist. To - complete the installation, you should set the root password - for MySQL as provided in the instructions at the end of the - installation. Alternatively, you can run the - mysql_secure_installation script that comes with the - installation. - - By default, the PKG package installs MySQL under the root - path /opt/mysql. You can change only the installation root - path when using pkgadd, which can be used to install MySQL in - a different Solaris zone. If you need to install in a - specific directory, use a binary tar file distribution. - - The pkg installer copies a suitable startup script for MySQL - into /etc/init.d/mysql. To enable MySQL to startup and - shutdown automatically, you should create a link between this - file and the init script directories. For example, to ensure - safe startup and shutdown of MySQL you could use the - following commands to add the right links: -shell> ln /etc/init.d/mysql /etc/rc3.d/S91mysql -shell> ln /etc/init.d/mysql /etc/rc0.d/K02mysql - - To remove MySQL, the installed package name is mysql. You can - use this in combination with the pkgrm command to remove the - installation. - - To upgrade when using the Solaris package file format, you - must remove the existing installation before installing the - updated package. Removal of the package does not delete the - existing database information, only the server, binaries and - support files. The typical upgrade sequence is therefore: -shell> mysqladmin shutdown -shell> pkgrm mysql -shell> pkgadd -d mysql-5.6.28-solaris10-x86_64.pkg -shell> mysqld_safe & -shell> mysql_upgrade - - You should check the notes in Section 2.11, "Upgrading or - Downgrading MySQL" before performing any upgrade. - -2.7.2 Installing MySQL on OpenSolaris Using IPS - - OpenSolaris includes standard packages for MySQL in the core - repository. The MySQL packages are based on a specific - release of MySQL and updated periodically. For the latest - release you must use either the native Solaris PKG, tar, or - source installations. The native OpenSolaris packages include - SMF files so that you can easily control your MySQL - installation, including automatic startup and recovery, using - the native service management tools. - - To install MySQL on OpenSolaris, use the pkg command. You - will need to be logged in as root, or use the pfexec tool, as - shown in the example below: -shell> pfexec pkg install SUNWmysql56 - - The package set installs three individual packages, - SUNWmysql56lib, which contains the MySQL client libraries; - SUNWmysql56r which contains the root components, including - SMF and configuration files; and SUNWmysql56u which contains - the scripts, binary tools and other files. You can install - these packages individually if you only need the - corresponding components. - - The MySQL files are installed into /usr/mysql which symbolic - links for the sub directories (bin, lib, etc.) to a version - specific directory. For MySQL 5.6, the full installation is - located in /usr/mysql/5.6. The default data directory is - /var/mysql/5.6/data. The configuration file is installed in - /etc/mysql/5.6/my.cnf. This layout permits multiple versions - of MySQL to be installed, without overwriting the data and - binaries from other versions. - - Once installed, you must run mysql_install_db to initialize - the database, and use the mysql_secure_installation to secure - your installation. - -Using SMF to manage your MySQL installation - - Once installed, you can start and stop your MySQL server - using the installed SMF configuration. The service name is - mysql, or if you have multiple versions installed, you should - use the full version name, for example mysql:version_56. To - start and enable MySQL to be started at boot time: -shell> svcadm enable mysql - - To disable MySQL from starting during boot time, and shut the - MySQL server down if it is running, use: -shell> svcadm disable mysql - - To restart MySQL, for example after a configuration file - changes, use the restart option: -shell> svcadm restart mysql - - You can also use SMF to configure the data directory and - enable full 64-bit mode. For example, to set the data - directory used by MySQL: -shell> svccfg -svc:> select mysql:version_56 -svc:/application/database/mysql:version_56> setprop mysql/data=/data0/ -mysql - - By default, the 32-bit binaries are used. To enable the - 64-bit server on 64-bit platforms, set the enable_64bit - parameter. For example: -svc:/application/database/mysql:version_56> setprop mysql/enable_64bit -=1 - - You need to refresh the SMF after settings these options: -shell> svcadm refresh mysql - -2.8 Installing MySQL on FreeBSD - - This section provides information about installing MySQL on - variants of FreeBSD Unix. - - You can install MySQL on FreeBSD by using the binary - distribution provided by Oracle. For more information, see - Section 2.2, "Installing MySQL on Unix/Linux Using Generic - Binaries." - - The easiest (and preferred) way to install MySQL is to use - the mysql-server and mysql-client ports available at - http://www.freebsd.org/. Using these ports gives you the - following benefits: - - * A working MySQL with all optimizations enabled that are - known to work on your version of FreeBSD. - - * Automatic configuration and build. - - * Startup scripts installed in /usr/local/etc/rc.d. - - * The ability to use pkg_info -L to see which files are - installed. - - * The ability to use pkg_delete to remove MySQL if you no - longer want it on your machine. - - The MySQL build process requires GNU make (gmake) to work. If - GNU make is not available, you must install it first before - compiling MySQL. - - To install using the ports system: -# cd /usr/ports/databases/mysql51-server -# make -... -# cd /usr/ports/databases/mysql51-client -# make -... - - The standard port installation places the server into - /usr/local/libexec/mysqld, with the startup script for the - MySQL server placed in /usr/local/etc/rc.d/mysql-server. - - Some additional notes on the BSD implementation: - - * To remove MySQL after installation using the ports - system: -# cd /usr/ports/databases/mysql51-server -# make deinstall -... -# cd /usr/ports/databases/mysql51-client -# make deinstall -... - - - * If you get problems with the current date in MySQL, - setting the TZ variable should help. See Section 2.12, - "Environment Variables." - -2.9 Installing MySQL from Source - - Building MySQL from the source code enables you to customize - build parameters, compiler optimizations, and installation - location. For a list of systems on which MySQL is known to - run, see - http://www.mysql.com/support/supportedplatforms/database.html - . - - Before you proceed with an installation from source, check - whether Oracle produces a precompiled binary distribution for - your platform and whether it works for you. We put a great - deal of effort into ensuring that our binaries are built with - the best possible options for optimal performance. - Instructions for installing binary distributions are - available in Section 2.2, "Installing MySQL on Unix/Linux - Using Generic Binaries." - -Source Installation Methods - - There are two methods for installing MySQL from source: - - * Use a standard MySQL source distribution. To obtain a - standard distribution, see Section 2.1.2, "How to Get - MySQL." For instructions on building from a standard - distribution, see Section 2.9.2, "Installing MySQL Using - a Standard Source Distribution." - Standard distributions are available as compressed tar - files, Zip archives, or RPM packages. Distribution files - have names of the form mysql-VERSION.tar.gz, - mysql-VERSION.zip, or mysql-VERSION.rpm, where VERSION is - a number like 5.6.28. File names for source distributions - can be distinguished from those for precompiled binary - distributions in that source distribution names are - generic and include no platform name, whereas binary - distribution names include a platform name indicating the - type of system for which the distribution is intended - (for example, pc-linux-i686 or winx64). - - * Use a MySQL development tree. For information on building - from one of the development trees, see Section 2.9.3, - "Installing MySQL Using a Development Source Tree." - -Source Installation System Requirements - - Installation of MySQL from source requires several - development tools. Some of these tools are needed no matter - whether you use a standard source distribution or a - development source tree. Other tool requirements depend on - which installation method you use. - - To install MySQL from source, your system must have the - following tools, regardless of installation method: - - * CMake, which is used as the build framework on all - platforms. CMake can be downloaded from - http://www.cmake.org. - - * A good make program. Although some platforms come with - their own make implementations, it is highly recommended - that you use GNU make 3.75 or newer. It may already be - available on your system as gmake. GNU make is available - from http://www.gnu.org/software/make/. - - * A working ANSI C++ compiler. GCC 4.2.1 or later, Sun - Studio 12 or later, Visual Studio 2010 or later, and many - current vendor-supplied compilers are known to work. - - * Perl is needed if you intend to run test scripts. Most - Unix-like systems include Perl. On Windows, you can use a - version such as ActiveState Perl. - - To install MySQL from a standard source distribution, one of - the following tools is required to unpack the distribution - file: - - * For a .tar.gz compressed tar file: GNU gunzip to - uncompress the distribution and a reasonable tar to - unpack it. If your tar program supports the z option, it - can both uncompress and unpack the file. - GNU tar is known to work. The standard tar provided with - some operating systems is not able to unpack the long - file names in the MySQL distribution. You should download - and install GNU tar, or if available, use a preinstalled - version of GNU tar. Usually this is available as gnutar, - gtar, or as tar within a GNU or Free Software directory, - such as /usr/sfw/bin or /usr/local/bin. GNU tar is - available from http://www.gnu.org/software/tar/. - - * For a .zip Zip archive: WinZip or another tool that can - read .zip files. - - * For an .rpm RPM package: The rpmbuild program used to - build the distribution unpacks it. - - To install MySQL from a development source tree, the - following additional tools are required: - - * One of the following revision control systems is required - to obtain the development source code: - - + Git: The GitHub Help (https://help.github.com/) - provides instructions for downloading and installing - Git on different platforms. MySQL officially joined - GitHub in September, 2014. For more information - about MySQL's move to GitHub, refer to the - announcement on the MySQL Release Engineering blog: - MySQL on GitHub - (http://mysqlrelease.com/2014/09/mysql-on-github/) - - + Bazaar: The Bazaar VCS Web site - (http://bazaar-vcs.org) provides instructions for - downloading and installing Bazaar on different - platforms. Bazaar is supported on any platform that - supports Python, and is therefore compatible with - any Linux, Unix, Windows, or OS X host. - - * bison 2.1 or newer, available from - http://www.gnu.org/software/bison/. (Version 1 is no - longer supported.) Use the latest version of bison where - possible; if you experience problems, upgrade to a later - version, rather than revert to an earlier one. - bison is available from - http://www.gnu.org/software/bison/. bison for Windows can - be downloaded from - http://gnuwin32.sourceforge.net/packages/bison.htm. - Download the package labeled "Complete package, excluding - sources". On Windows, the default location for bison is - the C:\Program Files\GnuWin32 directory. Some utilities - may fail to find bison because of the space in the - directory name. Also, Visual Studio may simply hang if - there are spaces in the path. You can resolve these - problems by installing into a directory that does not - contain a space; for example C:\GnuWin32. - - * On OpenSolaris and Solaris Express, m4 must be installed - in addition to bison. m4 is available from - http://www.gnu.org/software/m4/. - - Note - - If you have to install any programs, modify your PATH - environment variable to include any directories in which the - programs are located. See Section 4.2.10, "Setting - Environment Variables." - - If you run into problems and need to file a bug report, - please use the instructions in Section 1.6, "How to Report - Bugs or Problems." - -2.9.1 MySQL Layout for Source Installation - - By default, when you install MySQL after compiling it from - source, the installation step installs files under - /usr/local/mysql. The component locations under the - installation directory are the same as for binary - distributions. See Section 2.2, "MySQL Installation Layout - for Generic Unix/Linux Binary Package," and Section 2.3.1, - "MySQL Installation Layout on Microsoft Windows." To - configure installation locations different from the defaults, - use the options described at Section 2.9.4, "MySQL - Source-Configuration Options." - -2.9.2 Installing MySQL Using a Standard Source Distribution - - To install MySQL from a standard source distribution: - - 1. Verify that your system satisfies the tool requirements - listed at Section 2.9, "Installing MySQL from Source." - - 2. Obtain a distribution file using the instructions in - Section 2.1.2, "How to Get MySQL." - - 3. Configure, build, and install the distribution using the - instructions in this section. - - 4. Perform postinstallation procedures using the - instructions in Section 2.10, "Postinstallation Setup and - Testing." - - In MySQL 5.6, CMake is used as the build framework on all - platforms. The instructions given here should enable you to - produce a working installation. For additional information on - using CMake to build MySQL, see How to Build MySQL Server - with CMake - (http://dev.mysql.com/doc/internals/en/cmake.html). - - If you start from a source RPM, use the following command to - make a binary RPM that you can install. If you do not have - rpmbuild, use rpm instead. -shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm - - The result is one or more binary RPM packages that you - install as indicated in Section 2.5.5, "Installing MySQL on - Linux Using RPM Packages." - - The sequence for installation from a compressed tar file or - Zip archive source distribution is similar to the process for - installing from a generic binary distribution (see Section - 2.2, "Installing MySQL on Unix/Linux Using Generic - Binaries"), except that it is used on all platforms and - includes steps to configure and compile the distribution. For - example, with a compressed tar file source distribution on - Unix, the basic installation command sequence looks like - this: -# Preconfiguration setup -shell> groupadd mysql -shell> useradd -r -g mysql mysql -# Beginning of source-build specific instructions -shell> tar zxvf mysql-VERSION.tar.gz -shell> cd mysql-VERSION -shell> cmake . -shell> make -shell> make install -# End of source-build specific instructions -# Postinstallation setup -shell> cd /usr/local/mysql -shell> chown -R mysql . -shell> chgrp -R mysql . -shell> scripts/mysql_install_db --user=mysql -shell> chown -R root . -shell> chown -R mysql data -shell> bin/mysqld_safe --user=mysql & -# Next command is optional -shell> cp support-files/mysql.server /etc/init.d/mysql.server - - mysql_install_db creates a default option file named my.cnf - in the base installation directory. This file is created from - a template included in the distribution package named - my-default.cnf. For more information, see Section 5.1.2.2, - "Using a Sample Default Server Configuration File." - - A more detailed version of the source-build specific - instructions is shown following. - Note - - The procedure shown here does not set up any passwords for - MySQL accounts. After following the procedure, proceed to - Section 2.10, "Postinstallation Setup and Testing," for - postinstallation setup and testing. - -Perform Preconfiguration Setup - - On Unix, set up the mysql user and group that will be used to - run and execute the MySQL server and own the database - directory. For details, see Creating a mysql System User and - Group, in Section 2.2, "Installing MySQL on Unix/Linux Using - Generic Binaries." Then perform the following steps as the - mysql user, except as noted. - -Obtain and Unpack the Distribution - - Pick the directory under which you want to unpack the - distribution and change location into it. - - Obtain a distribution file using the instructions in Section - 2.1.2, "How to Get MySQL." - - Unpack the distribution into the current directory: - - * To unpack a compressed tar file, tar can uncompress and - unpack the distribution if it has z option support: -shell> tar zxvf mysql-VERSION.tar.gz - - If your tar does not have z option support, use gunzip to - unpack the distribution and tar to unpack it: -shell> gunzip < mysql-VERSION.tar.gz | tar xvf - - - Alternatively, CMake can uncompress and unpack the - distribution: -shell> cmake -E tar zxvf mysql-VERSION.tar.gz - - - * To unpack a Zip archive, use WinZip or another tool that - can read .zip files. - - Unpacking the distribution file creates a directory named - mysql-VERSION. - -Configure the Distribution - - Change location into the top-level directory of the unpacked - distribution: -shell> cd mysql-VERSION - - Configure the source directory. The minimum configuration - command includes no options to override configuration - defaults: -shell> cmake . - - On Windows, specify the development environment. For example, - the following commands configure MySQL for 32-bit or 64-bit - builds, respectively: -shell> cmake . -G "Visual Studio 10 2010" -shell> cmake . -G "Visual Studio 10 2010 Win64" - - On OS X, to use the Xcode IDE: -shell> cmake . -G Xcode - - When you run cmake, you might want to add options to the - command line. Here are some examples: - - * -DBUILD_CONFIG=mysql_release: Configure the source with - the same build options used by Oracle to produce binary - distributions for official MySQL releases. - - * -DCMAKE_INSTALL_PREFIX=dir_name: Configure the - distribution for installation under a particular - location. - - * -DCPACK_MONOLITHIC_INSTALL=1: Cause make package to - generate a single installation file rather than multiple - files. - - * -DWITH_DEBUG=1: Build the distribution with debugging - support. - - For a more extensive list of options, see Section 2.9.4, - "MySQL Source-Configuration Options." - - To list the configuration options, use one of the following - commands: -shell> cmake . -L # overview -shell> cmake . -LH # overview with help text -shell> cmake . -LAH # all params with help text -shell> ccmake . # interactive display - - If CMake fails, you might need to reconfigure by running it - again with different options. If you do reconfigure, take - note of the following: - - * If CMake is run after it has previously been run, it may - use information that was gathered during its previous - invocation. This information is stored in CMakeCache.txt. - When CMake starts up, it looks for that file and reads - its contents if it exists, on the assumption that the - information is still correct. That assumption is invalid - when you reconfigure. - - * Each time you run CMake, you must run make again to - recompile. However, you may want to remove old object - files from previous builds first because they were - compiled using different configuration options. - - To prevent old object files or configuration information from - being used, run these commands on Unix before re-running - CMake: -shell> make clean -shell> rm CMakeCache.txt - - Or, on Windows: -shell> devenv MySQL.sln /clean -shell> del CMakeCache.txt - - If you build out of the source tree (as described later), the - CMakeCache.txt file and all built files are in the build - directory, so you can remove that directory to object files - and cached configuration information. - - If you are going to send mail to a MySQL mailing list to ask - for configuration assistance, first check the files in the - CMakeFiles directory for useful information about the - failure. To file a bug report, please use the instructions in - Section 1.6, "How to Report Bugs or Problems." - -Build the Distribution - - On Unix: -shell> make -shell> make VERBOSE=1 - - The second command sets VERBOSE to show the commands for each - compiled source. - - Use gmake instead on systems where you are using GNU make and - it has been installed as gmake. - - On Windows: -shell> devenv MySQL.sln /build RelWithDebInfo - - It is possible to build out of the source tree to keep the - tree clean. If the top-level source directory is named - mysql-src under your current working directory, you can build - in a directory named bld at the same level like this: -shell> mkdir bld -shell> cd bld -shell> cmake ../mysql-src - - The build directory need not actually be outside the source - tree. For example, to build in a directory, you can build in - a directory named bld under the top-level source tree, do - this, starting with mysql-src as your current working - directory: -shell> mkdir bld -shell> cd bld -shell> cmake .. - - If you have multiple source trees at the same level (for - example, to build multiple versions of MySQL), the second - strategy can be advantageous. The first strategy places all - build directories at the same level, which requires that you - choose a unique name for each. With the second strategy, you - can use the same name for the build directory within each - source tree. - - If you have gotten to the compilation stage, but the - distribution does not build, see Section 2.9.5, "Dealing with - Problems Compiling MySQL," for help. If that does not solve - the problem, please enter it into our bugs database using the - instructions given in Section 1.6, "How to Report Bugs or - Problems." If you have installed the latest versions of the - required tools, and they crash trying to process our - configuration files, please report that also. However, if you - get a command not found error or a similar problem for - required tools, do not report it. Instead, make sure that all - the required tools are installed and that your PATH variable - is set correctly so that your shell can find them. - -Install the Distribution - - On Unix: -shell> make install - - This installs the files under the configured installation - directory (by default, /usr/local/mysql). You might need to - run the command as root. - - To install in a specific directory, add a DESTDIR parameter - to the command line: -shell> make install DESTDIR="/opt/mysql" - - Alternatively, generate installation package files that you - can install where you like: -shell> make package - - This operation produces one or more .tar.gz files that can be - installed like generic binary distribution packages. See - Section 2.2, "Installing MySQL on Unix/Linux Using Generic - Binaries." If you run CMake with - -DCPACK_MONOLITHIC_INSTALL=1, the operation produces a single - file. Otherwise, it produces multiple files. - - On Windows, generate the data directory, then create a .zip - archive installation package: -shell> devenv MySQL.sln /build RelWithDebInfo /project initial_databas -e -shell> devenv MySQL.sln /build RelWithDebInfo /project package - - You can install the resulting .zip archive where you like. - See Section 2.3.5, "Installing MySQL on Microsoft Windows - Using a noinstall Zip Archive." - -Perform Postinstallation Setup - - The remainder of the installation process involves setting up - the configuration file, creating the core databases, and - starting the MySQL server. For instructions, see Section - 2.10, "Postinstallation Setup and Testing." - Note - - The accounts that are listed in the MySQL grant tables - initially have no passwords. After starting the server, you - should set up passwords for them using the instructions in - Section 2.10, "Postinstallation Setup and Testing." - -2.9.3 Installing MySQL Using a Development Source Tree - - This section describes how to install MySQL from the latest - development source code, which is currently hosted on both - GitHub (https://github.com/) and Launchpad - (http://launchpad.net/). To obtain the MySQL Server source - code from one of these repository hosting services, you can - set up a local MySQL Git repository or a local MySQL Bazaar - branch. - - * On GitHub (https://github.com/), MySQL Server and other - MySQL projects are found on the MySQL - (https://github.com/mysql) page. The MySQL Server project - is a single repository that contains branches for MySQL - 5.5, 5.6, and 5.7. - MySQL officially joined GitHub in September, 2014. For - more information about MySQL's move to GitHub, refer to - the announcement on the MySQL Release Engineering blog: - MySQL on GitHub - (http://mysqlrelease.com/2014/09/mysql-on-github/) - - * On Launchpad (http://launchpad.net/), MySQL projects, - including MySQL Server, MySQL Workbench, and others are - found on the Oracle/MySQL Engineering - (http://launchpad.net/~mysql) page. For the repositories - related only to MySQL Server, see the MySQL Server - (http://launchpad.net/mysql-server) page. - Note - The MySQL Server repositories on Launchpad are frozen as - of MySQL 5.5.41, MySQL 5.6.22, and MySQL 5.7.5. Updates - for later MySQL releases are published to GitHub - (https://github.com/mysql). - -Prerequisites for Installing from Development Source - - To install MySQL from a development source tree, your system - must satisfy the tool requirements outlined in Section 2.9, - "Installing MySQL from Source." - -Setting Up a MySQL Git Repository - - To set up a MySQL Git repository on your machine, use this - procedure: - - 1. Clone the MySQL Git repository to your machine. The - following command clones the MySQL Git repository to a - directory named mysql-server. The download size is - approximately 437 MB. The initial download will take some - time to complete, depending on the speed of your - connection. -~$ git clone https://github.com/mysql/mysql-server.git -Cloning into 'mysql-server'... -remote: Counting objects: 1035465, done. -remote: Total 1035465 (delta 0), reused 0 (delta 0) -Receiving objects: 100% (1035465/1035465), 437.48 MiB | 5.10 MiB/s, do -ne. -Resolving deltas: 100% (855607/855607), done. -Checking connectivity... done. -Checking out files: 100% (21902/21902), done. - - 2. When the clone operation completes, the contents of your - local MySQL Git repository appear similar to the - following: -~$ cd mysql-server - -~/mysql-server$ ls -BUILD COPYING libmysqld regex tests -BUILD-CMAKE dbug libservices scripts unitt -est -client Docs man sql VERSI -ON -cmake extra mysql-test sql-bench vio -CMakeLists.txt include mysys sql-common win -cmd-line-utils INSTALL-SOURCE packaging storage zlib -config.h.cmake INSTALL-WIN-SOURCE plugin strings -configure.cmake libmysql README support-files - - 3. Use the git branch -r command to view the remote tracking - branches for the MySQL repository. -~/mysql-server$ git branch -r - origin/5.5 - origin/5.6 - origin/5.7 - origin/HEAD -> origin/5.7 - origin/cluster-7.2 - origin/cluster-7.3 - origin/cluster-7.4 - - 4. To view the branches that are checked out in your local - repository, issue the git branch command. When you cloned - the MySQL Git repository, the MySQL 5.7 branch was - checked out automatically. The asterisk identifies the - 5.7 branch as the active branch. -~/mysql-server$ git branch -* 5.7 - - 5. To check out a different MySQL branch, run the git - checkout command, specifying the branch name. For - example, to checkout the MySQL 5.6 branch: -~/mysql-server$ git checkout 5.6 -Branch 5.6 set up to track remote branch 5.6 from origin. -Switched to a new branch '5.6' - - 6. Run git branch again to verify that the MySQL 5.6 branch - is present. MySQL 5.6, which is the last branch you - checked out, is marked by an asterisk indicating that it - is the active branch. -~/mysql-server$ git branch -* 5.6 - 5.7 - The git checkout command is also used to switch branches. - For example, to make MySQL 5.7 the active branch again, - you would run git checkout 5.7. - - 7. To obtain changes made after your initial setup of the - MySQL Git repository, switch to the branch you want to - update and issue the git pull command: -~/mysql-server$ git checkout 5.6 -~/mysql-server$ git pull - - To examine the commit history, use the git log option: -~/mysql-server$ git log - - You can also browse commit history and source code on the - GitHub MySQL (https://github.com/mysql) site. - If you see changes or code that you have a question - about, send an email to the MySQL internals mailing list. - See Section 1.5.1, "MySQL Mailing Lists." For information - about contributing a patch, see Contributing to MySQL - Server - (http://mysqlserverteam.com/contributing-to-mysql-server/ - ). - - 8. After you have cloned the MySQL Git repository and have - checked out the branch you want to build, you can build - MySQL Server from the source code. Instructions are - provided in Section 2.9.2, "Installing MySQL Using a - Standard Source Distribution," except that you skip the - part about obtaining and unpacking the distribution. - Be careful about installing a build from a distribution - source tree on a production machine. The installation - command may overwrite your live release installation. If - you already have MySQL installed and do not want to - overwrite it, run CMake with values for the - CMAKE_INSTALL_PREFIX, MYSQL_TCP_PORT, and MYSQL_UNIX_ADDR - options different from those used by your production - server. For additional information about preventing - multiple servers from interfering with each other, see - Section 5.3, "Running Multiple MySQL Instances on One - Machine." - Play hard with your new installation. For example, try to - make new features crash. Start by running make test. See - Section 24.1.2, "The MySQL Test Suite." - -Setting Up a MySQL Bazaar Branch - - Note - - The MySQL Server repositories on Launchpad are frozen as of - MySQL 5.5.41, MySQL 5.6.22, and MySQL 5.7.5. Updates for - later MySQL releases are published to GitHub - (https://github.com/mysql). - - To setup a MySQL Bazaar branch on your machine, use this - procedure: - - 1. To obtain a copy of the MySQL development source code - hosted on Launchpad (http://launchpad.net/), create a new - Bazaar branch. If you do not already have a Bazaar - repository directory set up, you must initialize a new - directory: -shell> mkdir mysql-server -shell> bzr init-repo --trees mysql-server - - This is a one-time operation. - - 2. Assuming that you have an initialized repository - directory, you can branch from the public MySQL server - repositories to create a local source tree. To create a - branch of a specific version: -shell> cd mysql-server -shell> bzr branch lp:mysql-server/5.6 mysql-5.6 - - This is a one-time operation per source tree. You can - branch the source trees for several versions of MySQL - under the mysql-server directory. - The initial download will take some time to complete, - depending on the speed of your connection. Once you have - downloaded the first tree, additional trees should take - significantly less time to download. - - 3. When building from the Bazaar branch, you may want to - create a copy of your active branch so that you can make - configuration and other changes without affecting the - original branch contents. You can achieve this by - branching from the original branch: -shell> bzr branch mysql-5.6 mysql-5.6-build - - - 4. To obtain changes made after you have set up the branch - initially, update it using the pull option periodically. - Use this command in the top-level directory of the local - copy: -shell> bzr pull - - To examine the changeset comments for the tree, use the - log option to bzr: -shell> bzr log - - You can also browse changesets, comments, and source code - online at the Launchpad MySQL Server - (http://launchpad.net/mysql-server) page. - If you see diffs (changes) or code that you have a - question about, do not hesitate to send email to the - MySQL internals mailing list. See Section 1.5.1, "MySQL - Mailing Lists." For information about contributing at - patch, see Contributing to MySQL Server - (http://mysqlserverteam.com/contributing-to-mysql-server/ - ). - - 5. After you have the local branch, you can build MySQL - server from the source code. Instructions are provided in - Section 2.9.2, "Installing MySQL Using a Standard Source - Distribution," except that you skip the part about - obtaining and unpacking the distribution. - Be careful about installing a build from a distribution - source tree on a production machine. The installation - command may overwrite your live release installation. If - you already have MySQL installed and do not want to - overwrite it, run CMake with values for the - CMAKE_INSTALL_PREFIX, MYSQL_TCP_PORT, and MYSQL_UNIX_ADDR - options different from those used by your production - server. For additional information about preventing - multiple servers from interfering with each other, see - Section 5.3, "Running Multiple MySQL Instances on One - Machine." - Play hard with your new installation. For example, try to - make new features crash. Start by running make test. See - Section 24.1.2, "The MySQL Test Suite." - -2.9.4 MySQL Source-Configuration Options - - The CMake program provides a great deal of control over how - you configure a MySQL source distribution. Typically, you do - this using options on the CMake command line. For information - about options supported by CMake, run either of these - commands in the top-level source directory: -shell> cmake . -LH -shell> ccmake . - - You can also affect CMake using certain environment - variables. See Section 2.12, "Environment Variables." - - The following table shows the available CMake options. In the - Default column, PREFIX stands for the value of the - CMAKE_INSTALL_PREFIX option, which specifies the installation - base directory. This value is used as the parent location for - several of the installation subdirectories. - - Table 2.11 MySQL Source-Configuration Option Reference - (CMake) - Formats Description Default Introduced Removed - BUILD_CONFIG Use same build options as official releases - - CMAKE_BUILD_TYPE Type of build to produce RelWithDebInfo - CMAKE_C_FLAGS Flags for C Compiler - CMAKE_CXX_FLAGS Flags for C++ Compiler - CMAKE_INSTALL_PREFIX Installation base directory - /usr/local/mysql - COMPILATION_COMMENT Comment about compilation environment - - CPACK_MONOLITHIC_INSTALL Whether package build produces - single file OFF - DEFAULT_CHARSET The default server character set latin1 - DEFAULT_COLLATION The default server collation - latin1_swedish_ci - ENABLE_DEBUG_SYNC Whether to enable Debug Sync support ON - ENABLE_DOWNLOADS Whether to download optional files OFF - ENABLE_DTRACE Whether to include DTrace support - ENABLE_GCOV Whether to include gcov support 5.6.3 - ENABLE_GPROF Enable gprof (optimized Linux builds only) OFF - 5.6.6 - ENABLED_LOCAL_INFILE Whether to enable LOCAL for LOAD DATA - INFILE OFF - ENABLED_PROFILING Whether to enable query profiling code ON - - IGNORE_AIO_CHECK With -DBUILD_CONFIG=mysql_release, ignore - libaio check OFF 5.6.1 - INNODB_PAGE_ATOMIC_REF_COUNT Enable or disable atomic page - reference counting ON 5.6.16 - INSTALL_BINDIR User executables directory PREFIX/bin - INSTALL_DOCDIR Documentation directory PREFIX/docs - INSTALL_DOCREADMEDIR README file directory PREFIX - INSTALL_INCLUDEDIR Header file directory PREFIX/include - INSTALL_INFODIR Info file directory PREFIX/docs - INSTALL_LAYOUT Select predefined installation layout - STANDALONE - INSTALL_LIBDIR Library file directory PREFIX/lib - INSTALL_MANDIR Manual page directory PREFIX/man - INSTALL_MYSQLSHAREDIR Shared data directory PREFIX/share - INSTALL_MYSQLTESTDIR mysql-test directory PREFIX/mysql-test - - INSTALL_PLUGINDIR Plugin directory PREFIX/lib/plugin - INSTALL_SBINDIR Server executable directory PREFIX/bin - INSTALL_SCRIPTDIR Scripts directory PREFIX/scripts - INSTALL_SHAREDIR aclocal/mysql.m4 installation directory - PREFIX/share - INSTALL_SQLBENCHDIR sql-bench directory PREFIX - INSTALL_SUPPORTFILESDIR Extra support files directory - PREFIX/support-files - MEMCACHED_HOME Path to memcached [none] - MYSQL_DATADIR Data directory - MYSQL_MAINTAINER_MODE Whether to enable MySQL - maintainer-specific development environment OFF - MYSQL_PROJECT_NAME Windows/OS X project name 3306 5.6.5 - MYSQL_TCP_PORT TCP/IP port number 3306 - MYSQL_UNIX_ADDR Unix socket file /tmp/mysql.sock - ODBC_INCLUDES ODBC includes directory - ODBC_LIB_DIR ODBC library directory - OPTIMIZER_TRACE Whether to support optimizer tracing 5.6.3 - - SUNPRO_CXX_LIBRARY Client link library on Solaris 10+ - 5.6.20 - SYSCONFDIR Option file directory - TMPDIR tmpdir default value 5.6.16 - WITH_ASAN Enable AddressSanitizer OFF 5.6.15 - WITH_BUNDLED_LIBEVENT Use bundled libevent when building - ndbmemcache ON - WITH_BUNDLED_MEMCACHED Use bundled memcached when building - ndbmemcache ON - WITH_CLASSPATH Classpath to use when building MySQL Cluster - Connector for Java. Default is an empty string. - WITH_DEBUG Whether to include debugging support OFF - WITH_DEFAULT_COMPILER_OPTIONS Whether to use default compiler - options ON 5.6.6 - WITH_DEFAULT_FEATURE_SET Whether to use default feature set - ON 5.6.6 - WITH_EDITLINE Which libedit/editline library to use bundled - 5.6.12 - WITH_EMBEDDED_SERVER Whether to build embedded server OFF - WITH_EMBEDDED_SHARED_LIBRARY Whether to build a shared - embedded server library OFF 5.6.17 - WITH_xxx_STORAGE_ENGINE Compile storage engine xxx statically - into server - WITH_ERROR_INSERT Enable error injection in the NDB storage - engine. Should not be used for building binaries intended for - production. OFF - WITH_EXTRA_CHARSETS Which extra character sets to include all - - WITH_INNODB_MEMCACHED Whether to generate memcached shared - libraries. OFF - WITH_LIBEDIT Use bundled libedit library ON 5.6.12 - WITH_LIBEVENT Which libevent library to use bundled 5.6.6 - WITH_LIBWRAP Whether to include libwrap (TCP wrappers) - support OFF - WITH_NDB_BINLOG Enable binary logging by default by mysqld. - ON - WITH_NDB_DEBUG Produce a debug build for testing or - troubleshooting. OFF - WITH_NDB_JAVA Enable building of Java and ClusterJ support. - Enabled by default. Supported in MySQL Cluster only. ON - WITH_NDB_PORT Default port used by a management server built - with this option. If this option was not used to build it, - the management server's default port is 1186. [none] - WITH_NDB_TEST Include NDB API test programs. OFF - WITH_NDBCLUSTER Build the NDB storage engine; alias for - WITH_NDBCLUSTER_STORAGE_ENGINE ON - WITH_NDBCLUSTER_STORAGE_ENGINE Build the NDB storage engine - ON - WITH_NDBMTD Build multi-threaded data node. ON - WITH_READLINE Use bundled readline library OFF 5.6.5 - WITH_SSL Type of SSL support bundled - WITH_UNIXODBC Enable unixODBC support OFF - WITH_VALGRIND Whether to compile in Valgrind header files OFF - - WITH_ZLIB Type of zlib support system - WITHOUT_xxx_STORAGE_ENGINE Exclude storage engine xxx from - build - WITHOUT_SERVER Do not build the server OFF - - The following sections provide more information about CMake - options. - - * Section 2.9.4, "" - - * Section 2.9.4, "" - - * Section 2.9.4, "" - - * Section 2.9.4, "" - - * Section 2.9.4, "" - - For boolean options, the value may be specified as 1 or ON to - enable the option, or as 0 or OFF to disable the option. - - Many options configure compile-time defaults that can be - overridden at server startup. For example, the - CMAKE_INSTALL_PREFIX, MYSQL_TCP_PORT, and MYSQL_UNIX_ADDR - options that configure the default installation base - directory location, TCP/IP port number, and Unix socket file - can be changed at server startup with the --basedir, --port, - and --socket options for mysqld. Where applicable, - configuration option descriptions indicate the corresponding - mysqld startup option. - -General Options - - - * -DBUILD_CONFIG=mysql_release - This option configures a source distribution with the - same build options used by Oracle to produce binary - distributions for official MySQL releases. - - * -DCMAKE_BUILD_TYPE=type - The type of build to produce: - - + RelWithDebInfo: Enable optimizations and generate - debugging information. This is the default MySQL - build type. - - + Debug: Disable optimizations and generate debugging - information. This build type is also used if the - WITH_DEBUG option is enabled. That is, - -DWITH_DEBUG=1 has the same effect as - -DCMAKE_BUILD_TYPE=Debug. - - * -DCPACK_MONOLITHIC_INSTALL=bool - This option affects whether the make package operation - produces multiple installation package files or a single - file. If disabled, the operation produces multiple - installation package files, which may be useful if you - want to install only a subset of a full MySQL - installation. If enabled, it produces a single file for - installing everything. - -Installation Layout Options - - The CMAKE_INSTALL_PREFIX option indicates the base - installation directory. Other options with names of the form - INSTALL_xxx that indicate component locations are interpreted - relative to the prefix and their values are relative - pathnames. Their values should not include the prefix. - - * -DCMAKE_INSTALL_PREFIX=dir_name - The installation base directory. - This value can be set at server startup with the - --basedir option. - - * -DINSTALL_BINDIR=dir_name - Where to install user programs. - - * -DINSTALL_DOCDIR=dir_name - Where to install documentation. - - * -DINSTALL_DOCREADMEDIR=dir_name - Where to install README files. - - * -DINSTALL_INCLUDEDIR=dir_name - Where to install header files. - - * -DINSTALL_INFODIR=dir_name - Where to install Info files. - - * -DINSTALL_LAYOUT=name - Select a predefined installation layout: - - + STANDALONE: Same layout as used for .tar.gz and .zip - packages. This is the default. - - + RPM: Layout similar to RPM packages. - - + SVR4: Solaris package layout. - - + DEB: DEB package layout (experimental). - You can select a predefined layout but modify individual - component installation locations by specifying other - options. For example: -shell> cmake . -DINSTALL_LAYOUT=SVR4 -DMYSQL_DATADIR=/var/mysql/data - - - * -DINSTALL_LIBDIR=dir_name - Where to install library files. - - * -DINSTALL_MANDIR=dir_name - Where to install manual pages. - - * -DINSTALL_MYSQLSHAREDIR=dir_name - Where to install shared data files. - - * -DINSTALL_MYSQLTESTDIR=dir_name - Where to install the mysql-test directory. As of MySQL - 5.6.12, to suppress installation of this directory, - explicitly set the option to the empty value - (-DINSTALL_MYSQLTESTDIR=). - - * -DINSTALL_PLUGINDIR=dir_name - The location of the plugin directory. - This value can be set at server startup with the - --plugin_dir option. - - * -DINSTALL_SBINDIR=dir_name - Where to install the mysqld server. - - * -DINSTALL_SCRIPTDIR=dir_name - Where to install mysql_install_db. - - * -DINSTALL_SHAREDIR=dir_name - Where to install aclocal/mysql.m4. - - * -DINSTALL_SQLBENCHDIR=dir_name - Where to install the sql-bench directory. To suppress - installation of this directory, explicitly set the option - to the empty value (-DINSTALL_SQLBENCHDIR=). - - * -DINSTALL_SUPPORTFILESDIR=dir_name - Where to install extra support files. - - * -DMYSQL_DATADIR=dir_name - The location of the MySQL data directory. - This value can be set at server startup with the - --datadir option. - - * -DODBC_INCLUDES=dir_name - The location of the ODBC includes directory, and may be - used while configuring Connector/ODBC. - - * -DODBC_LIB_DIR=dir_name - The location of the ODBC library directory, and may be - used while configuring Connector/ODBC. - - * -DSYSCONFDIR=dir_name - The default my.cnf option file directory. - This location cannot be set at server startup, but you - can start the server with a given option file using the - --defaults-file=file_name option, where file_name is the - full path name to the file. - - * -DTMPDIR=dir_name - The default location to use for the tmpdir system - variable. If unspecified, the value defaults to P_tmpdir - in . This option was added in MySQL 5.6.16. - -Storage Engine Options - - Storage engines are built as plugins. You can build a plugin - as a static module (compiled into the server) or a dynamic - module (built as a dynamic library that must be installed - into the server using the INSTALL PLUGIN statement or the - --plugin-load option before it can be used). Some plugins - might not support static or dynamic building. - - The MyISAM, MERGE, MEMORY, and CSV engines are mandatory - (always compiled into the server) and need not be installed - explicitly. - - To compile a storage engine statically into the server, use - -DWITH_engine_STORAGE_ENGINE=1. Some permissible engine - values are ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE - (InnoDB), NDB or NDBCLUSTER (NDB), PARTITION (partitioning - support), and PERFSCHEMA (Performance Schema). Examples: --DWITH_INNOBASE_STORAGE_ENGINE=1 --DWITH_ARCHIVE_STORAGE_ENGINE=1 --DWITH_BLACKHOLE_STORAGE_ENGINE=1 --DWITH_PERFSCHEMA_STORAGE_ENGINE=1 - - Note - - WITH_NDBCLUSTER_STORAGE_ENGINE is supported only when - building MySQL Cluster using the MySQL Cluster sources. It - cannot be used to enable clustering support in other MySQL - source trees or distributions. In MySQL Cluster source - distributions, it is enabled by default. See Section - 18.2.2.3, "Building MySQL Cluster from Source on Linux," and - Section 18.2.3.2, "Compiling and Installing MySQL Cluster - from Source on Windows," for more information. - - To exclude a storage engine from the build, use - -DWITHOUT_engine_STORAGE_ENGINE=1. Examples: --DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 --DWITHOUT_FEDERATED_STORAGE_ENGINE=1 --DWITHOUT_PARTITION_STORAGE_ENGINE=1 - - If neither -DWITH_engine_STORAGE_ENGINE nor - -DWITHOUT_engine_STORAGE_ENGINE are specified for a given - storage engine, the engine is built as a shared module, or - excluded if it cannot be built as a shared module. - -Feature Options - - - * -DCOMPILATION_COMMENT=string - A descriptive comment about the compilation environment. - - * -DDEFAULT_CHARSET=charset_name - The server character set. By default, MySQL uses the - latin1 (cp1252 West European) character set. - charset_name may be one of binary, armscii8, ascii, big5, - cp1250, cp1251, cp1256, cp1257, cp850, cp852, cp866, - cp932, dec8, eucjpms, euckr, gb2312, gbk, geostd8, greek, - hebrew, hp8, keybcs2, koi8r, koi8u, latin1, latin2, - latin5, latin7, macce, macroman, sjis, swe7, tis620, - ucs2, ujis, utf8, utf8mb4, utf16, utf16le, utf32. The - permissible character sets are listed in the - cmake/character_sets.cmake file as the value of - CHARSETS_AVAILABLE. - This value can be set at server startup with the - --character_set_server option. - - * -DDEFAULT_COLLATION=collation_name - The server collation. By default, MySQL uses - latin1_swedish_ci. Use the SHOW COLLATION statement to - determine which collations are available for each - character set. - This value can be set at server startup with the - --collation_server option. - - * -DENABLE_DEBUG_SYNC=bool - Whether to compile the Debug Sync facility into the - server. This facility is used for testing and debugging. - This option is enabled by default, but has no effect - unless MySQL is configured with debugging enabled. If - debugging is enabled and you want to disable Debug Sync, - use -DENABLE_DEBUG_SYNC=0. - When compiled in, Debug Sync is disabled by default at - runtime. To enable it, start mysqld with the - --debug-sync-timeout=N option, where N is a timeout value - greater than 0. (The default value is 0, which disables - Debug Sync.) N becomes the default timeout for individual - synchronization points. - For a description of the Debug Sync facility and how to - use synchronization points, see MySQL Internals: Test - Synchronization - (http://dev.mysql.com/doc/internals/en/test-synchronizati - on.html). - - * -DENABLE_DOWNLOADS=bool - Whether to download optional files. For example, with - this option enabled, CMake downloads the Google Test - distribution that is used by the test suite to run unit - tests. - - * -DENABLE_DTRACE=bool - Whether to include support for DTrace probes. For - information about DTrace, wee Section 5.4, "Tracing - mysqld Using DTrace" - - * -DENABLE_GCOV=bool - Whether to include gcov support (Linux only). - - * -DENABLE_GPROF=bool - Whether to enable gprof (optimized Linux builds only). - This option was added in MySQL 5.6.6. - - * -DENABLED_LOCAL_INFILE=bool - Whether to enable LOCAL capability in the client library - for LOAD DATA INFILE. - This option controls client-side LOCAL capability, but - the capability can be set on the server side at server - startup with the --local-infile option. See Section - 6.1.6, "Security Issues with LOAD DATA LOCAL." - - * -DENABLED_PROFILING=bool - Whether to enable query profiling code (for the SHOW - PROFILE and SHOW PROFILES statements). - - * -DIGNORE_AIO_CHECK=bool - If the -DBUILD_CONFIG=mysql_release option is given on - Linux, the libaio library must be linked in by default. - If you do not have libaio or do not want to install it, - you can suppress the check for it by specifying - -DIGNORE_AIO_CHECK=1. This option was added in MySQL - 5.6.1. - - * -DINNODB_PAGE_ATOMIC_REF_COUNT=bool - Whether to enable or disable atomic page reference - counting. Fetching and releasing pages from the buffer - pool and tracking the page state are expensive and - complex operations. Using a page mutex to track these - operations does not scale well. With - INNODB_PAGE_ATOMIC_REF_COUNT=ON (default), fetch and - release is tracked using atomics where available. For - platforms that do not support atomics, set - INNODB_PAGE_ATOMIC_REF_COUNT=OFF to disable atomic page - reference counting. - When atomic page reference counting is enabled (default), - "[Note] InnoDB: Using atomics to ref count buffer pool - pages" is printed to the error log at server startup. If - atomic page reference counting is disabled, "[Note] - InnoDB: Using mutexes to ref count buffer pool pages" is - printed instead. - INNODB_PAGE_ATOMIC_REF_COUNT was introduced with the fix - for MySQL Bug #68079. The option is removed in MySQL - 5.7.5. Support for atomics is required to build MySQL as - of MySQL 5.7.5, which makes the option obsolete. - - * -DMYSQL_MAINTAINER_MODE=bool - Whether to enable a MySQL maintainer-specific development - environment. If enabled, this option causes compiler - warnings to become errors. - - * -DMYSQL_PROJECT_NAME=name - For Windows or OS X, the project name to incorporate into - the project file name. This option was added in MySQL - 5.6.5. - - * -DMYSQL_TCP_PORT=port_num - The port number on which the server listens for TCP/IP - connections. The default is 3306. - This value can be set at server startup with the --port - option. - - * -DMYSQL_UNIX_ADDR=file_name - The Unix socket file path on which the server listens for - socket connections. This must be an absolute path name. - The default is /tmp/mysql.sock. - This value can be set at server startup with the --socket - option. - - * -DOPTIMIZER_TRACE=bool - Whether to support optimizer tracing. See MySQL - Internals: Tracing the Optimizer - (http://dev.mysql.com/doc/internals/en/optimizer-tracing. - html). This option was added in MySQL 5.6.3. - - * -DWITH_ASAN=bool - Whether to enable AddressSanitizer, for compilers that - support it. The default is off. This option was added in - MySQL 5.6.15. - - * -DWITH_DEBUG=bool - Whether to include debugging support. - Configuring MySQL with debugging support enables you to - use the --debug="d,parser_debug" option when you start - the server. This causes the Bison parser that is used to - process SQL statements to dump a parser trace to the - server's standard error output. Typically, this output is - written to the error log. - - * -DWITH_DEFAULT_FEATURE_SET=bool - Whether to use the flags from - cmake/build_configurations/feature_set.cmake. This option - was added in MySQL 5.6.6. - - * -DWITH_EDITLINE=value - Which libedit/editline library to use. The permitted - values are bundled (the default) and system. - WITH_EDITLINE was added in MySQL 5.6.12. It replaces - WITH_LIBEDIT, which has been removed. - - * -DWITH_EMBEDDED_SERVER=bool - Whether to build the libmysqld embedded server library. - - * -DWITH_EMBEDDED_SHARED_LIBRARY=bool - Whether to build a shared libmysqld embedded server - library. This option was added in MySQL 5.6.17. - - * -DWITH_EXTRA_CHARSETS=name - Which extra character sets to include: - - + all: All character sets. This is the default. - - + complex: Complex character sets. - - + none: No extra character sets. - - * -DWITH_INNODB_MEMCACHED=bool - Whether to generate memcached shared libraries - (libmemcached.so and innodb_engine.so). - - * -DWITH_LIBEVENT=string - Which libevent library to use. Permitted values are - bundled (default), system, and yes. If you specify system - or yes, the system libevent library is used if present. - If the system library is not found, the bundled libevent - library is used. The libevent library is required by - InnoDB memcached. - - * -DWITH_LIBEDIT=bool - Whether to use the libedit library bundled with the - distribution. - WITH_LIBEDIT was removed in MySQL 5.6.12. Use - WITH_EDITLINE instead. - - * -DWITH_LIBWRAP=bool - Whether to include libwrap (TCP wrappers) support. - - * -DWITH_READLINE=bool - Whether to use the readline library bundled with the - distribution. This option was removed in MySQL 5.6.5 - because readline is no longer bundled. - - * -DWITH_SSL={ssl_type|path_name} - - * The type of SSL support to include (if any) or the path - name to the OpenSSL installation to use. - - + ssl_type can be one of the following values: - o no: No SSL support. This is the default before - MySQL 5.6.6. As of 5.6.6, this is no longer a - permitted value and the default is bundled. - o yes: Use the system SSL library if present, - else the library bundled with the distribution. - o bundled: Use the SSL library bundled with the - distribution. This is the default as of MySQL - 5.6.6. - o system: Use the system SSL library. - - + path_name, permitted for MySQL 5.6.7 and after, is - the path name to the OpenSSL installation to use. - Using this can be preferable to using the ssl_type - value of system, for it can prevent CMake from - detecting and using an older or incorrect OpenSSL - version installed on the system. (Another permitted - way to do the same thing is to set the - CMAKE_PREFIX_PATH option to path_name.) - For information about using SSL support, see Section - 6.3.10, "Using SSL for Secure Connections." - - * -DWITH_UNIXODBC=1 - Enables unixODBC support, for Connector/ODBC. - - * -DWITH_VALGRIND=bool - Whether to compile in the Valgrind header files, which - exposes the Valgrind API to MySQL code. The default is - OFF. - To generate a Valgrind-aware debug build, - -DWITH_VALGRIND=1 normally is combined with - -DWITH_DEBUG=1. See Building Debug Configurations - (http://dev.mysql.com/doc/internals/en/debug-configuratio - ns.html). - - * -DWITH_ZLIB=zlib_type - Some features require that the server be built with - compression library support, such as the COMPRESS() and - UNCOMPRESS() functions, and compression of the - client/server protocol. The WITH_ZLIB indicates the - source of zlib support: - - + bundled: Use the zlib library bundled with the - distribution. - - + system: Use the system zlib library. This is the - default. - - * -DWITHOUT_SERVER=bool - Whether to build without the MySQL server. The default is - OFF, which does build the server. - -Compiler Flags - - - * -DCMAKE_C_FLAGS="flags" - Flags for the C Compiler. - - * -DCMAKE_CXX_FLAGS="flags" - Flags for the C++ Compiler. - - * -DWITH_DEFAULT_COMPILER_OPTIONS=bool - Whether to use the flags from - cmake/build_configurations/compiler_options.cmake. This - option was added in MySQL 5.6.6. - Note - All optimization flags were carefully chosen and tested - by the MySQL build team. Overriding them can lead to - unexpected results and is done at your own risk. - - * -DSUNPRO_CXX_LIBRARY="lib_name" - Enable linking against libCstd instead of stlport4 on - Solaris 10 or later. This works only for client code - because the server depends on C++98. Example usage: -cmake -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd - - This option was added in MySQL 5.6.20. - - To specify your own C and C++ compiler flags, for flags that - do not affect optimization, use the CMAKE_C_FLAGS and - CMAKE_CXX_FLAGS CMake options. - - When providing your own compiler flags, you might want to - specify CMAKE_BUILD_TYPE as well. - - For example, to create a 32-bit release build on a 64-bit - Linux machine, do this: -shell> mkdir bld -shell> cd bld -shell> cmake .. -DCMAKE_C_FLAGS=-m32 \ - -DCMAKE_CXX_FLAGS=-m32 \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo - - If you set flags that affect optimization (-Onumber), you - must set the CMAKE_C_FLAGS_build_type and/or - CMAKE_CXX_FLAGS_build_type options, where build_type - corresponds to the CMAKE_BUILD_TYPE value. To specify a - different optimization for the default build type - (RelWithDebInfo) set the CMAKE_C_FLAGS_RELWITHDEBINFO and - CMAKE_CXX_FLAGS_RELWITHDEBINFO options. For example, to - compile on Linux with -O3 and with debug symbols, do this: -shell> cmake .. -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g" \ - -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g" - -CMake Options for Compiling MySQL Cluster - - The following options are for use when building MySQL Cluster - with the MySQL Cluster sources; they are not currently - supported when using sources from the MySQL 5.6 Server tree. - - * -DMEMCACHED_HOME=dir_name - Perform the build using the memcached (version 1.6 or - later) installed in the system directory indicated by - dir_name. Files from this installation that are used in - the build include the memcached binary, header files, and - libraries, as well as the memcached_utilities library and - the header file engine_testapp.h. - You must leave this option unset when building - ndbmemcache using the bundled memcached sources - (WITH_BUNDLED_MEMCACHED option); in other words, the - bundled sources are used by default). - This option was added in MySQL Cluster NDB 7.2.2. - While additional CMake options---such as for SASL - authorization and for providing dtrace support---are - available for use when compiling memcached from external - sources, these options are currently not enabled for the - memcached sources bundled with MySQL Cluster. - - * -DWITH_BUNDLED_LIBEVENT={ON|OFF} - Use the libevent included in the MySQL Cluster sources - when building MySQL Cluster with ndbmemcached support - (MySQL Cluster NDB 7.2.2 and later). Enabled by default. - OFF causes the system's libevent to be used instead. - - * -DWITH_BUNDLED_MEMCACHED={ON|OFF} - Build the memcached sources included in the MySQL Cluster - source tree (MySQL Cluster NDB 7.2.3 and later), then use - the resulting memcached server when building the - ndbmemcache engine. In this case, make install places the - memcached binary in the installation bin directory, and - the ndbmemcache engine shared object file ndb_engine.so - in the installation lib directory. - This option is ON by default. - - * -DWITH_CLASSPATH=path - Sets the classpath for building MySQL Cluster Connector - for Java. The default is empty. In MySQL Cluster NDB - 7.2.9 and later, this option is ignored if - -DWITH_NDB_JAVA=OFF is used. - - * -DWITH_ERROR_INSERT={ON|OFF} - Enables error injection in the NDB kernel. For testing - only; not intended for use in building production - binaries. The default is OFF. - - * -DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF} - Build and link in support for the NDB (NDBCLUSTER) - storage engine in mysqld. The default is ON. - - * -DWITH_NDBCLUSTER={ON|OFF} - This is an alias for WITH_NDBCLUSTER_STORAGE_ENGINE. - - * -DWITH_NDBMTD={ON|OFF} - Build the multi-threaded data node executable ndbmtd. The - default is ON. - - * -DWITH_NDB_BINLOG={ON|OFF} - Enable binary logging by default in the mysqld built - using this option. ON by default. - - * -DWITH_NDB_DEBUG={ON|OFF} - Enable building the debug versions of the MySQL Cluster - binaries. OFF by default. - - * -DWITH_NDB_JAVA={ON|OFF} - Enable building MySQL Cluster with Java support, - including ClusterJ. - This option was added in MySQL Cluster NDB 7.2.9, and is - ON by default. If you do not wish to compile MySQL - Cluster with Java support, you must disable it explicitly - by specifying -DWITH_NDB_JAVA=OFF when running CMake. - Otherwise, if Java cannot be found, configuration of the - build fails. - - * -DWITH_NDB_PORT=port - Causes the MySQL Cluster management server (ndb_mgmd) - that is built to use this port by default. If this option - is unset, the resulting management server tries to use - port 1186 by default. - - * -DWITH_NDB_TEST={ON|OFF} - If enabled, include a set of NDB API test programs. The - default is OFF. - -2.9.5 Dealing with Problems Compiling MySQL - - The solution to many problems involves reconfiguring. If you - do reconfigure, take note of the following: - - * If CMake is run after it has previously been run, it may - use information that was gathered during its previous - invocation. This information is stored in CMakeCache.txt. - When CMake starts up, it looks for that file and reads - its contents if it exists, on the assumption that the - information is still correct. That assumption is invalid - when you reconfigure. - - * Each time you run CMake, you must run make again to - recompile. However, you may want to remove old object - files from previous builds first because they were - compiled using different configuration options. - - To prevent old object files or configuration information from - being used, run the following commands before re-running - CMake: - - On Unix: -shell> make clean -shell> rm CMakeCache.txt - - On Windows: -shell> devenv MySQL.sln /clean -shell> del CMakeCache.txt - - If you build outside of the source tree, remove and recreate - your build directory before re-running CMake. For - instructions on building outside of the source tree, see How - to Build MySQL Server with CMake - (http://dev.mysql.com/doc/internals/en/cmake.html). - - On some systems, warnings may occur due to differences in - system include files. The following list describes other - problems that have been found to occur most often when - compiling MySQL: - - * To define which C and C++ compilers to use, you can - define the CC and CXX environment variables. For example: -shell> CC=gcc -shell> CXX=g++ -shell> export CC CXX - - To specify your own C and C++ compiler flags, use the - CMAKE_C_FLAGS and CMAKE_CXX_FLAGS CMake options. See - Section 2.9.4, "." - To see what flags you might need to specify, invoke - mysql_config with the --cflags and --cxxflags options. - - * To see what commands are executed during the compile - stage, after using CMake to configure MySQL, run make - VERBOSE=1 rather than just make. - - * If compilation fails, check whether the - MYSQL_MAINTAINER_MODE option is enabled. This mode causes - compiler warnings to become errors, so disabling it may - enable compilation to proceed. - - * If your compile fails with errors such as any of the - following, you must upgrade your version of make to GNU - make: -make: Fatal error in reader: Makefile, line 18: -Badly formed macro assignment - - Or: -make: file `Makefile' line 18: Must be a separator (: - - Or: -pthread.h: No such file or directory - - Solaris and FreeBSD are known to have troublesome make - programs. - GNU make 3.75 is known to work. - - * The sql_yacc.cc file is generated from sql_yacc.yy. - Normally, the build process does not need to create - sql_yacc.cc because MySQL comes with a pregenerated copy. - However, if you do need to re-create it, you might - encounter this error: -"sql_yacc.yy", line xxx fatal: default action causes potential... - - This is a sign that your version of yacc is deficient. - You probably need to install a recent version of bison - (the GNU version of yacc) and use that instead. - Versions of bison older than 1.75 may report this error: -sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded - - The maximum table size is not actually exceeded; the - error is caused by bugs in older versions of bison. - - For information about acquiring or updating tools, see the - system requirements in Section 2.9, "Installing MySQL from - Source." - -2.9.6 MySQL Configuration and Third-Party Tools - - Third-party tools that need to determine the MySQL version - from the MySQL source can read the VERSION file in the - top-level source directory. The file lists the pieces of the - version separately. For example, if the version is MySQL - 5.7.4-m14, the file looks like this: -MYSQL_VERSION_MAJOR=5 -MYSQL_VERSION_MINOR=7 -MYSQL_VERSION_PATCH=4 -MYSQL_VERSION_EXTRA=-m14 - - If the source is not for a General Availablility (GA) - release, the MYSQL_VERSION_EXTRA value will be nonempty. For - the example, the value corresponds to Milestone 14. - - To construct a five-digit number from the version components, - use this formula: -MYSQL_VERSION_MAJOR*10000 + MYSQL_VERSION_MINOR*100 + MYSQL_VERSION_PA -TCH - -2.10 Postinstallation Setup and Testing - - This section discusses tasks that you should perform after - installing MySQL: - - * If necessary, initialize the data directory and create - the MySQL grant tables. For some MySQL installation - methods, data directory initialization may be done for - you automatically: - - + Installation on Windows - - + Installation on Linux using a server RPM - distribution. - - + Installation using the native packaging system on - many platforms, including Debian Linux, Ubuntu - Linux, Gentoo Linux, and others. - - + Installation on OS X using a DMG distribution. - For other platforms and installation types, including - installation from generic binary and source - distributions, you must initialize the data directory - yourself. For instructions, see Section 2.10.1, - "Initializing the Data Directory." - - * For instructions, see Section 2.10.2, "Starting the - Server," and Section 2.10.3, "Testing the Server." - - * Assign passwords to any initial accounts in the grant - tables, if that was not already done during data - directory initialization. Passwords prevent unauthorized - access to the MySQL server. You may also wish to restrict - access to test databases. For instructions, see Section - 2.10.4, "Securing the Initial MySQL Accounts." - - * Optionally, arrange for the server to start and stop - automatically when your system starts and stops. For - instructions, see Section 2.10.5, "Starting and Stopping - MySQL Automatically." - - * Optionally, populate time zone tables to enable - recognition of named time zones. For instructions, see - Section 10.6, "MySQL Server Time Zone Support." - - When you are ready to create additional user accounts, you - can find information on the MySQL access control system and - account management in Section 6.2, "The MySQL Access - Privilege System," and Section 6.3, "MySQL User Account - Management." - -2.10.1 Initializing the Data Directory - - After installing MySQL, you must initialize the data - directory, including the tables in the mysql system database. - For some MySQL installation methods, data directory - initialization may be done automatically, as described in - Section 2.10, "Postinstallation Setup and Testing." For other - installation methods, including installation from generic - binary and source distributions, you must initialize the data - directory yourself. - - This section describes how to initialize the data directory - on Unix and Unix-like systems. (For Windows, see Section - 2.3.7, "Windows Postinstallation Procedures.") For some - suggested commands that you can use to test whether the - server is accessible and working properly, see Section - 2.10.3, "Testing the Server." - - In the examples shown here, the server runs under the user ID - of the mysql login account. This assumes that such an account - exists. Either create the account if it does not exist, or - substitute the name of a different existing login account - that you plan to use for running the server. For information - about creating the account, see Creating a mysql System User - and Group, in Section 2.2, "Installing MySQL on Unix/Linux - Using Generic Binaries." - - 1. Change location into the top-level directory of your - MySQL installation, represented here by BASEDIR: -shell> cd BASEDIR - - BASEDIR is likely to be something like /usr/local/mysql, - /usr/local, or /usr/bin (for installation wtih MySQL Yum - repository, or other means). The following steps assume - that you have changed location to this directory. - You will find several files and subdirectories in the - BASEDIR directory. The most important for installation - purposes are the bin and scripts subdirectories, which - contain the server as well as client and utility - programs. - - 2. If necessary, ensure that the distribution contents are - accessible to mysql. If you installed the distribution as - mysql, no further action is required. If you installed - the distribution as root, its contents will be owned by - root. Change its ownership to mysql by executing the - following commands as root in the installation directory. - The first command changes the owner attribute of the - files to the mysql user. The second changes the group - attribute to the mysql group. -shell> chown -R mysql . -shell> chgrp -R mysql . - - - 3. If necessary, initialize the data directory, including - the mysql database containing the initial MySQL grant - tables that determine how users are permitted to connect - to the server. - Typically, data directory initialization need be done - only the first time you install MySQL. If you are - upgrading an existing installation, you should run - mysql_upgrade instead (see Section 4.4.7, "mysql_upgrade - --- Check and Upgrade MySQL Tables"). However, the - command that initializes the data directory does not - overwrite any existing privilege tables, so it should be - safe to run in any circumstances. -shell> scripts/mysql_install_db --user=mysql - - It is important to make sure that the database - directories and files are owned by the mysql login - account so that the server has read and write access to - them when you run it later. To ensure this if you run - mysql_install_db as root, include the --user option as - shown. Otherwise, you should execute the program while - logged in as mysql, in which case you can omit the --user - option from the command. - The mysql_install_db command creates the server's data - directory. Under the data directory, it creates - directories for the mysql database that holds the grant - tables and the test database that you can use to test - MySQL. The program also creates privilege table entries - for the initial account or accounts. test_. For a - complete listing and description of the grant tables, see - Section 6.2, "The MySQL Access Privilege System." - It might be necessary to specify other options such as - --basedir or --datadir if mysql_install_db does not - identify the correct locations for the installation - directory or data directory. For example: -shell> scripts/mysql_install_db --user=mysql \ - --basedir=/opt/mysql/mysql \ - --datadir=/opt/mysql/mysql/data - - For a more secure installation, invoke mysql_install_db - with the --random-passwords option. This causes it to - assign a random password to the MySQL root accounts, set - the "password expired" flag for those accounts, and - remove the anonymous-user MySQL accounts. For additional - details, see Section 4.4.3, "mysql_install_db --- - Initialize MySQL Data Directory." (Install operations - using RPMs for Unbreakable Linux Network are unaffected - because they do not use mysql_install_db.) - If you do not want to have the test database, you can - remove it after starting the server, using the - instructions in Section 2.10.4, "Securing the Initial - MySQL Accounts." - If you have trouble with mysql_install_db at this point, - see Section 2.10.1.1, "Problems Running - mysql_install_db." - - 4. After initializing the data directory, you can establish - the final installation ownership settings. To leave the - installation owned by mysql, no action is required here. - Otherwise, most of the MySQL installation can be owned by - root if you like. The exception is that the data - directory must be owned by mysql. To accomplish this, run - the following commands as root in the installation - directory. For some distribution types, the data - directory might be named var rather than data; adjust the - second command accordingly. -shell> chown -R root . -shell> chown -R mysql data - - If the plugin directory (the directory named by the - plugin_dir system variable) is writable by the server, it - may be possible for a user to write executable code to a - file in the directory using SELECT ... INTO DUMPFILE. - This can be prevented by making the plugin directory read - only to the server or by setting the secure_file_priv - system variable at server startup to a directory where - SELECT writes can be performed safely. - - 5. To specify options that the MySQL server should use at - startup, put them in a /etc/my.cnf or /etc/mysql/my.cnf - file. See Section 5.1.2, "Server Configuration Defaults." - If you do not do this, the server starts with its default - settings. - - 6. If you want MySQL to start automatically when you boot - your machine, see Section 2.10.5, "Starting and Stopping - MySQL Automatically." - - Data directory initialization creates time zone tables in the - mysql database but does not populate them. To do so, use the - instructions in Section 10.6, "MySQL Server Time Zone - Support." - -2.10.1.1 Problems Running mysql_install_db - - The purpose of the mysql_install_db program is to initialize - the data directory, including the tables in the mysql system - database. It does not overwrite existing MySQL privilege - tables, and it does not affect any other data. - - To re-create your privilege tables, first stop the mysqld - server if it is running. Then rename the mysql directory - under the data directory to save it, and run - mysql_install_db. Suppose that your current directory is the - MySQL installation directory and that mysql_install_db is - located in the bin directory and the data directory is named - data. To rename the mysql database and re-run - mysql_install_db, use these commands. -shell> mv data/mysql data/mysql.old -shell> scripts/mysql_install_db --user=mysql - - When you run mysql_install_db, you might encounter the - following problems: - - * mysql_install_db fails to install the grant tables - You may find that mysql_install_db fails to install the - grant tables and terminates after displaying the - following messages: -Starting mysqld daemon with databases from XXXXXX -mysqld ended - - In this case, you should examine the error log file very - carefully. The log should be located in the directory - XXXXXX named by the error message and should indicate why - mysqld did not start. If you do not understand what - happened, include the log when you post a bug report. See - Section 1.6, "How to Report Bugs or Problems." - - * There is a mysqld process running - This indicates that the server is running, in which case - the grant tables have probably been created already. If - so, there is no need to run mysql_install_db at all - because it needs to be run only once, when you first - install MySQL. - - * Installing a second mysqld server does not work when one - server is running - This can happen when you have an existing MySQL - installation, but want to put a new installation in a - different location. For example, you might have a - production installation, but you want to create a second - installation for testing purposes. Generally the problem - that occurs when you try to run a second server is that - it tries to use a network interface that is in use by the - first server. In this case, you should see one of the - following error messages: -Can't start server: Bind on TCP/IP port: -Address already in use -Can't start server: Bind on unix socket... - - For instructions on setting up multiple servers, see - Section 5.3, "Running Multiple MySQL Instances on One - Machine." - - * You do not have write access to the /tmp directory - If you do not have write access to create temporary files - or a Unix socket file in the default location (the /tmp - directory) or the TMPDIR environment variable, if it has - been set, an error occurs when you run mysql_install_db - or the mysqld server. - You can specify different locations for the temporary - directory and Unix socket file by executing these - commands prior to starting mysql_install_db or mysqld, - where some_tmp_dir is the full path name to some - directory for which you have write permission: -shell> TMPDIR=/some_tmp_dir/ -shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock -shell> export TMPDIR MYSQL_UNIX_PORT - - Then you should be able to run mysql_install_db and start - the server with these commands: -shell> scripts/mysql_install_db --user=mysql -shell> bin/mysqld_safe --user=mysql & - - If mysql_install_db is located in the scripts directory, - modify the first command to scripts/mysql_install_db. - See Section B.5.4.5, "How to Protect or Change the MySQL - Unix Socket File," and Section 2.12, "Environment - Variables." - - There are some alternatives to running the mysql_install_db - program provided in the MySQL distribution: - - * If you want the initial privileges to be different from - the standard defaults, use account-management statements - such as CREATE USER, GRANT, and REVOKE to change the - privileges after the grant tables have been set up. In - other words, run mysql_install_db, and then use mysql -u - root mysql to connect to the server as the MySQL root - user so that you can issue the necessary statements. (See - Section 13.7.1, "Account Management Statements.") - To install MySQL on several machines with the same - privileges, put the CREATE USER, GRANT, and REVOKE - statements in a file and execute the file as a script - using mysql after running mysql_install_db. For example: -shell> scripts/mysql_install_db --user=mysql -shell> bin/mysql -u root < your_script_file - - This enables you to avoid issuing the statements manually - on each machine. - - * It is possible to re-create the grant tables completely - after they have previously been created. You might want - to do this if you are just learning how to use CREATE - USER, GRANT, and REVOKE and have made so many - modifications after running mysql_install_db that you - want to wipe out the tables and start over. - To re-create the grant tables, stop the server if it is - running and remove the mysql database directory. Then run - mysql_install_db again. - -2.10.2 Starting the Server - - This section describes how start the server on Unix and - Unix-like systems. (For Windows, see Section 2.3.5.4, - "Starting the Server for the First Time.") For some suggested - commands that you can use to test whether the server is - accessible and working properly, see Section 2.10.3, "Testing - the Server." - - Start the MySQL server like this: -shell> bin/mysqld_safe --user=mysql & - - It is important that the MySQL server be run using an - unprivileged (non-root) login account. To ensure this if you - run mysqld_safe as root, include the --user option as shown. - Otherwise, execute the program while logged in as mysql, in - which case you can omit the --user option from the command. - - For further instructions for running MySQL as an unprivileged - user, see Section 6.1.5, "How to Run MySQL as a Normal User." - - If the command fails immediately and prints mysqld ended, - look for information in the error log (which by default is - the host_name.err file in the data directory). - - If the server is unable to access the data directory it - starts or read the grant tables in the mysql database, it - writes a message to its error log. Such problems can occur if - you neglected to create the grant tables by initializing the - data directory before proceeding to this step, or if you ran - the command that initializes the data directory without the - --user option. Remove the data directory and run the command - with the --user option. - - If you have other problems starting the server, see Section - 2.10.2.1, "Troubleshooting Problems Starting the MySQL - Server." For more information about mysqld_safe, see Section - 4.3.2, "mysqld_safe --- MySQL Server Startup Script." - -2.10.2.1 Troubleshooting Problems Starting the MySQL Server - - This section provides troubleshooting suggestions for - problems starting the server. For additional suggestions for - Windows systems, see Section 2.3.6, "Troubleshooting a - Microsoft Windows MySQL Server Installation." - - If you have problems starting the server, here are some - things to try: - - * Check the error log to see why the server does not start. - Log files are located in the data directory (typically - C:\Program Files\MySQL\MySQL Server 5.6\data on Windows, - /usr/local/mysql/data for a Unix/Linux binary - distribution, and /usr/local/var for a Unix/Linux source - distribution). Look in the data directory for files with - names of the form host_name.err and host_name.log, where - host_name is the name of your server host. Then examine - the last few lines of these files. Use tail to display - them: -shell> tail host_name.err -shell> tail host_name.log - - - * Specify any special options needed by the storage engines - you are using. You can create a my.cnf file and specify - startup options for the engines that you plan to use. If - you are going to use storage engines that support - transactional tables (InnoDB, NDB), be sure that you have - them configured the way you want before starting the - server. If you are using InnoDB tables, see Section 14.3, - "InnoDB Configuration" for guidelines and Section 14.11, - "InnoDB Startup Options and System Variables" for option - syntax. - Although storage engines use default values for options - that you omit, Oracle recommends that you review the - available options and specify explicit values for any - options whose defaults are not appropriate for your - installation. - - * Make sure that the server knows where to find the data - directory. The mysqld server uses this directory as its - current directory. This is where it expects to find - databases and where it expects to write log files. The - server also writes the pid (process ID) file in the data - directory. - The default data directory location is hardcoded when the - server is compiled. To determine what the default path - settings are, invoke mysqld with the --verbose and --help - options. If the data directory is located somewhere else - on your system, specify that location with the --datadir - option to mysqld or mysqld_safe, on the command line or - in an option file. Otherwise, the server will not work - properly. As an alternative to the --datadir option, you - can specify mysqld the location of the base directory - under which MySQL is installed with the --basedir, and - mysqld looks for the data directory there. - To check the effect of specifying path options, invoke - mysqld with those options followed by the --verbose and - --help options. For example, if you change location into - the directory where mysqld is installed and then run the - following command, it shows the effect of starting the - server with a base directory of /usr/local: -shell> ./mysqld --basedir=/usr/local --verbose --help - - You can specify other options such as --datadir as well, - but --verbose and --help must be the last options. - Once you determine the path settings you want, start the - server without --verbose and --help. - If mysqld is currently running, you can find out what - path settings it is using by executing this command: -shell> mysqladmin variables - - Or: -shell> mysqladmin -h host_name variables - - host_name is the name of the MySQL server host. - - * Make sure that the server can access the data directory. - The ownership and permissions of the data directory and - its contents must allow the server to read and modify - them. - If you get Errcode 13 (which means Permission denied) - when starting mysqld, this means that the privileges of - the data directory or its contents do not permit server - access. In this case, you change the permissions for the - involved files and directories so that the server has the - right to use them. You can also start the server as root, - but this raises security issues and should be avoided. - Change location into the data directory and check the - ownership of the data directory and its contents to make - sure the server has access. For example, if the data - directory is /usr/local/mysql/var, use this command: -shell> ls -la /usr/local/mysql/var - - If the data directory or its files or subdirectories are - not owned by the login account that you use for running - the server, change their ownership to that account. If - the account is named mysql, use these commands: -shell> chown -R mysql /usr/local/mysql/var -shell> chgrp -R mysql /usr/local/mysql/var - - Even with correct ownership, MySQL might fail to start up - if there is other security software running on your - system that manages application access to various parts - of the file system. In this case, reconfigure that - software to enable mysqld to access the directories it - uses during normal operation. - - * Verify that the network interfaces the server wants to - use are available. - If either of the following errors occur, it means that - some other program (perhaps another mysqld server) is - using the TCP/IP port or Unix socket file that mysqld is - trying to use: -Can't start server: Bind on TCP/IP port: Address already in use -Can't start server: Bind on unix socket... - - Use ps to determine whether you have another mysqld - server running. If so, shut down the server before - starting mysqld again. (If another server is running, and - you really want to run multiple servers, you can find - information about how to do so in Section 5.3, "Running - Multiple MySQL Instances on One Machine.") - If no other server is running, execute the command telnet - your_host_name tcp_ip_port_number. (The default MySQL - port number is 3306.) Then press Enter a couple of times. - If you do not get an error message like telnet: Unable to - connect to remote host: Connection refused, some other - program is using the TCP/IP port that mysqld is trying to - use. Track down what program this is and disable it, or - tell mysqld to listen to a different port with the --port - option. In this case, specify the same non-default port - number for client programs when connecting to the server - using TCP/IP. - Another reason the port might be inaccessible is that you - have a firewall running that blocks connections to it. If - so, modify the firewall settings to permit access to the - port. - If the server starts but you cannot connect to it, make - sure that you have an entry in /etc/hosts that looks like - this: -127.0.0.1 localhost - - - * If you cannot get mysqld to start, try to make a trace - file to find the problem by using the --debug option. See - Section 24.5.3, "The DBUG Package." - -2.10.3 Testing the Server - - After the data directory is initialized and you have started - the server, perform some simple tests to make sure that it - works satisfactorily. This section assumes that your current - location is the MySQL installation directory and that it has - a bin subdirectory containing the MySQL programs used here. - If that is not true, adjust the command path names - accordingly. - - Alternatively, add the bin directory to your PATH environment - variable setting. That enables your shell (command - interpreter) to find MySQL programs properly, so that you can - run a program by typing only its name, not its path name. See - Section 4.2.10, "Setting Environment Variables." - - Use mysqladmin to verify that the server is running. The - following commands provide simple tests to check whether the - server is up and responding to connections: -shell> bin/mysqladmin version -shell> bin/mysqladmin variables - - If you cannot connect to the server, specify a -u root option - to connect as root. If you have assigned a password for the - root account already, you'll also need to specify -p on the - command line and enter the password when prompted. For - example: -shell> bin/mysqladmin -u root -p version -Enter password: (enter root password here) - - The output from mysqladmin version varies slightly depending - on your platform and version of MySQL, but should be similar - to that shown here: -shell> bin/mysqladmin version -mysqladmin Ver 14.12 Distrib 5.6.28, for pc-linux-gnu on i686 -... - -Server version 5.6.28 -Protocol version 10 -Connection Localhost via UNIX socket -UNIX socket /var/lib/mysql/mysql.sock -Uptime: 14 days 5 hours 5 min 21 sec - -Threads: 1 Questions: 366 Slow queries: 0 -Opens: 0 Flush tables: 1 Open tables: 19 -Queries per second avg: 0.000 - - To see what else you can do with mysqladmin, invoke it with - the --help option. - - Verify that you can shut down the server (include a -p option - if the root account has a password already): -shell> bin/mysqladmin -u root shutdown - - Verify that you can start the server again. Do this by using - mysqld_safe or by invoking mysqld directly. For example: -shell> bin/mysqld_safe --user=mysql & - - If mysqld_safe fails, see Section 2.10.2.1, "Troubleshooting - Problems Starting the MySQL Server." - - Run some simple tests to verify that you can retrieve - information from the server. The output should be similar to - that shown here. - - Use mysqlshow to see what databases exist: -shell> bin/mysqlshow -+--------------------+ -| Databases | -+--------------------+ -| information_schema | -| mysql | -| performance_schema | -| test | -+--------------------+ - - The list of installed databases may vary, but will always - include the minimum of mysql and information_schema. - - If you specify a database name, mysqlshow displays a list of - the tables within the database: -shell> bin/mysqlshow mysql -Database: mysql -+---------------------------+ -| Tables | -+---------------------------+ -| columns_priv | -| db | -| event | -| func | -| general_log | -| help_category | -| help_keyword | -| help_relation | -| help_topic | -| innodb_index_stats | -| innodb_table_stats | -| ndb_binlog_index | -| plugin | -| proc | -| procs_priv | -| proxies_priv | -| servers | -| slave_master_info | -| slave_relay_log_info | -| slave_worker_info | -| slow_log | -| tables_priv | -| time_zone | -| time_zone_leap_second | -| time_zone_name | -| time_zone_transition | -| time_zone_transition_type | -| user | -+---------------------------+ - - Use the mysql program to select information from a table in - the mysql database: -shell> bin/mysql -e "SELECT User, Host, plugin FROM mysql.user" mysql -+------+-----------+-----------------------+ -| User | Host | plugin | -+------+-----------+-----------------------+ -| root | localhost | mysql_native_password | -+------+-----------+-----------------------+ - - At this point, your server is running and you can access it. - To tighten security if you have not yet assigned passwords to - the initial account or accounts, follow the instructions in - Section 2.10.4, "Securing the Initial MySQL Accounts." - - For more information about mysql, mysqladmin, and mysqlshow, - see Section 4.5.1, "mysql --- The MySQL Command-Line Tool," - Section 4.5.2, "mysqladmin --- Client for Administering a - MySQL Server," and Section 4.5.6, "mysqlshow --- Display - Database, Table, and Column Information." - -2.10.4 Securing the Initial MySQL Accounts - - Part of the MySQL installation process involves initializing - the data directory, including the mysql database containing - the grant tables that define the initial MySQL accounts. For - details, see Section 2.10, "Postinstallation Setup and - Testing." - - The mysql.user grant table defines the initial MySQL user - accounts and their access privileges: - - * Some accounts have the user name root. These are - superuser accounts that have all privileges and can do - anything. If these root accounts have empty passwords, - anyone can connect to the MySQL server as root without a - password and be granted all privileges. - - + On Windows, root accounts are created that permit - connections from the local host only. Connections - can be made by specifying the host name localhost, - the IP address 127.0.0.1, or the IPv6 address ::1. - If the user selects the Enable root access from - remote machines option during installation, the - Windows installer creates another root account that - permits connections from any host. - - + On Unix, each root account permits connections from - the local host. Connections can be made by - specifying the host name localhost, the IP address - 127.0.0.1, the IPv6 address ::1, or the actual host - name or IP address. - An attempt to connect to the host 127.0.0.1 normally - resolves to the localhost account. However, this fails if - the server is run with the --skip-name-resolve option, so - the 127.0.0.1 account is useful in that case. The ::1 - account is used for IPv6 connections. - - * If accounts for anonymous users were created, these have - an empty user name. The anonymous accounts have no - password, so anyone can use them to connect to the MySQL - server. - - + On Windows, there is one anonymous account that - permits connections from the local host. Connections - can be made by specifying a host name of localhost. - - + On Unix, each anonymous account permits connections - from the local host. Connections can be made by - specifying a host name of localhost for one of the - accounts, or the actual host name or IP address for - the other. - - + The 'root'@'localhost' account also has a row in the - mysql.proxies_priv table that enables granting the - PROXY privilege for ''@'', that is, for all users - and all hosts. This enables root to set up proxy - users, as well as to delegate to other accounts the - authority to set up proxy users. See Section 6.3.9, - "Proxy Users." - - To display which accounts exist in the mysql.user table and - check whether their passwords are empty, use the following - statement: -mysql> SELECT User, Host, Password FROM mysql.user; -+------+--------------------+----------+ -| User | Host | Password | -+------+--------------------+----------+ -| root | localhost | | -| root | myhost.example.com | | -| root | 127.0.0.1 | | -| root | ::1 | | -| | localhost | | -| | myhost.example.com | | -+------+--------------------+----------+ - - This output indicates that there are several root and - anonymous-user accounts, none of which have passwords. The - output might differ on your system, but the presence of - accounts with empty passwords means that your MySQL - installation is unprotected until you do something about it: - - * Assign a password to each MySQL root account that does - not have one. - - * To prevent clients from connecting as anonymous users - without a password, either assign a password to each - anonymous account or remove the accounts. - - In addition, the mysql.db table contains rows that permit all - accounts to access the test database and other databases with - names that start with test_. This is true even for accounts - that otherwise have no special privileges such as the default - anonymous accounts. This is convenient for testing but - inadvisable on production servers. Administrators who want - database access restricted only to accounts that have - permissions granted explicitly for that purpose should remove - these mysql.db table rows. - - The following instructions describe how to set up passwords - for the initial MySQL accounts, first for the root accounts, - then for the anonymous accounts. The instructions also cover - how to remove anonymous accounts, should you prefer not to - permit anonymous access at all, and describe how to remove - permissive access to test databases. Replace newpwd in the - examples with the password that you want to use. Replace - host_name with the name of the server host. You can determine - this name from the output of the preceding SELECT statement. - For the output shown, host_name is myhost.example.com. - Note - - For additional information about setting passwords, see - Section 6.3.5, "Assigning Account Passwords." If you forget - your root password after setting it, see Section B.5.4.1, - "How to Reset the Root Password." - - You might want to defer setting the passwords until later, to - avoid the need to specify them while you perform additional - setup or testing. However, be sure to set them before using - your installation for production purposes. - - To set up additional accounts, see Section 6.3.2, "Adding - User Accounts." - Note - - On Windows, you can also perform the process described in - this section during installation with MySQL Installer (see - Section 2.3.3, "Installing MySQL on Microsoft Windows Using - MySQL Installer"). On all platforms, the MySQL distribution - includes mysql_secure_installation, a command-line utility - that automates much of the process of securing a MySQL - installation. MySQL Workbench is available on all platforms, - and also offers the ability to manage user accounts (see - Chapter 26, "MySQL Workbench" ). - -Assigning root Account Passwords - - A root account password can be set several ways. The - following discussion demonstrates three methods: - - * Use the SET PASSWORD statement - - * Use the UPDATE statement - - * Use the mysqladmin command-line client program - - To assign passwords using SET PASSWORD, connect to the server - as root and issue a SET PASSWORD statement for each root - account listed in the mysql.user table. - - For Windows, do this: -shell> mysql -u root -mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd'); - - The last statement is unnecessary if the mysql.user table has - no root account with a host value of %. - - For Unix, do this: -shell> mysql -u root -mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd'); - - You can also use a single statement that assigns a password - to all root accounts by using UPDATE to modify the mysql.user - table directly. This method works on any platform: -shell> mysql -u root -mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') - -> WHERE User = 'root'; -mysql> FLUSH PRIVILEGES; - - The FLUSH statement causes the server to reread the grant - tables. Without it, the password change remains unnoticed by - the server until you restart it. - - To assign passwords to the root accounts using mysqladmin, - execute the following commands: -shell> mysqladmin -u root password "newpwd" -shell> mysqladmin -u root -h host_name password "newpwd" - - Those commands apply both to Windows and to Unix. The double - quotation marks around the password are not always necessary, - but you should use them if the password contains spaces or - other characters that are special to your command - interpreter. - - The mysqladmin method of setting the root account passwords - does not work for the 'root'@'127.0.0.1' or 'root'@'::1' - account. Use the SET PASSWORD method shown earlier. - - After the root passwords have been set, you must supply the - appropriate password whenever you connect as root to the - server. For example, to shut down the server with mysqladmin, - use this command: -shell> mysqladmin -u root -p shutdown -Enter password: (enter root password here) - - The mysql commands in the following instructions include a -p - option based on the assumption that you have assigned the - root account passwords using the preceding instructions and - must specify that password when connecting to the server. - -Assigning Anonymous Account Passwords - - To assign passwords to the anonymous accounts, connect to the - server as root, then use either SET PASSWORD or UPDATE. - - To use SET PASSWORD on Windows, do this: -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd'); - - To use SET PASSWORD on Unix, do this: -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd'); -mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd'); - - To set the anonymous-user account passwords with a single - UPDATE statement, do this (on any platform): -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') - -> WHERE User = ''; -mysql> FLUSH PRIVILEGES; - - The FLUSH statement causes the server to reread the grant - tables. Without it, the password change remains unnoticed by - the server until you restart it. - -Removing Anonymous Accounts - - If you prefer to remove any anonymous accounts rather than - assigning them passwords, do so as follows on Windows: -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> DROP USER ''@'localhost'; - - On Unix, remove the anonymous accounts like this: -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> DROP USER ''@'localhost'; -mysql> DROP USER ''@'host_name'; - -Securing Test Databases - - By default, the mysql.db table contains rows that permit - access by any user to the test database and other databases - with names that start with test_. (These rows have an empty - User column value, which for access-checking purposes matches - any user name.) This means that such databases can be used - even by accounts that otherwise possess no privileges. If you - want to remove any-user access to test databases, do so as - follows: -shell> mysql -u root -p -Enter password: (enter root password here) -mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%'; -mysql> FLUSH PRIVILEGES; - - The FLUSH statement causes the server to reread the grant - tables. Without it, the privilege change remains unnoticed by - the server until you restart it. - - With the preceding change, only users who have global - database privileges or privileges granted explicitly for the - test database can use it. However, if you prefer that the - database not exist at all, drop it: -mysql> DROP DATABASE test; - -2.10.5 Starting and Stopping MySQL Automatically - - This section discusses methods for starting and stopping the - MySQL server. - - Generally, you start the mysqld server in one of these ways: - - * Invoke mysqld directly. This works on any platform. - - * On Windows, you can set up a MySQL service that runs - automatically when Windows starts. See Section 2.3.5.7, - "Starting MySQL as a Windows Service." - - * On Unix and Unix-like systems, you can invoke - mysqld_safe, which tries to determine the proper options - for mysqld and then runs it with those options. See - Section 4.3.2, "mysqld_safe --- MySQL Server Startup - Script." - - * On systems that use System V-style run directories (that - is, /etc/init.d and run-level specific directories), - invoke mysql.server. This script is used primarily at - system startup and shutdown. It usually is installed - under the name mysql. The mysql.server script starts the - server by invoking mysqld_safe. See Section 4.3.3, - "mysql.server --- MySQL Server Startup Script." - - * On OS X, install a launchd daemon to enable automatic - MySQL startup at system startup. The daemon starts the - server by invoking mysqld_safe. For details, see Section - 2.4.3, "Installing a MySQL Launch Daemon." A MySQL - Preference Pane also provides control for starting and - stopping MySQL through the System Preferences. See - Section 2.4.4, "Installing and Using the MySQL Preference - Pane." - - * On Solaris/OpenSolaris, use the service management - framework (SMF) system to initiate and control MySQL - startup. For more information, see Section 2.7.2, - "Installing MySQL on OpenSolaris Using IPS." - - The mysqld_safe and mysql.server scripts, Solaris/OpenSolaris - SMF, and the OS X Startup Item (or MySQL Preference Pane) can - be used to start the server manually, or automatically at - system startup time. mysql.server and the Startup Item also - can be used to stop the server. - - The following table shows which option groups the server and - startup scripts read from option files. - - Table 2.12 MySQL Startup Scripts and Supported Server Option - Groups - Script Option Groups - mysqld [mysqld], [server], [mysqld-major_version] - mysqld_safe [mysqld], [server], [mysqld_safe] - mysql.server [mysqld], [mysql.server], [server] - - [mysqld-major_version] means that groups with names like - [mysqld-5.5] and [mysqld-5.6] are read by servers having - versions 5.5.x, 5.6.x, and so forth. This feature can be used - to specify options that can be read only by servers within a - given release series. - - For backward compatibility, mysql.server also reads the - [mysql_server] group and mysqld_safe also reads the - [safe_mysqld] group. However, you should update your option - files to use the [mysql.server] and [mysqld_safe] groups - instead. - - For more information on MySQL configuration files and their - structure and contents, see Section 4.2.6, "Using Option - Files." - -2.11 Upgrading or Downgrading MySQL - - This section describes the steps to upgrade or downgrade a - MySQL installation. - - Upgrading is a common procedure, as you pick up bug fixes - within the same MySQL release series or significant features - between major MySQL releases. You perform this procedure - first on some test systems to make sure everything works - smoothly, and then on the production systems. - - Downgrading is less common. Typically, you undo an upgrade - because of some compatibility or performance issue that - occurs on a production system, and was not uncovered during - initial upgrade verification on the test systems. As with the - upgrade procedure, perform and verify the downgrade procedure - on some test systems first, before using it on a production - system. - -2.11.1 Upgrading MySQL - - As a general rule, to upgrade from one release series to - another, go to the next series rather than skipping a series. - To upgrade from a release series previous to MySQL 5.5, - upgrade to each successive release series in turn until you - have reached MySQL 5.5, and then proceed with the upgrade to - MySQL 5.6. For example, if you currently are running MySQL - 5.1 and wish to upgrade to a newer series, upgrade to MySQL - 5.5 first before upgrading to 5.6, and so forth. For - information on upgrading to MySQL 5.5, see the MySQL 5.5 - Reference Manual. - - To upgrade to MySQL 5.6, use the items in the following - checklist as a guide: - - * Before any upgrade, back up your databases, including the - mysql database that contains the grant tables. See - Section 7.2, "Database Backup Methods." - - * Read all the notes in Section 2.11.1.3, "Upgrading from - MySQL 5.5 to 5.6." These notes enable you to identify - upgrade issues that apply to your current MySQL - installation. Some incompatibilities discussed in that - section require your attention before upgrading. Others - require some action after upgrading. - - * Read the Release Notes - (http://dev.mysql.com/doc/relnotes/mysql/5.6/en/) as - well, which provide information about features that are - new in MySQL 5.6 or differ from those found in earlier - MySQL releases. - - * After upgrading to a new version of MySQL, run - mysql_upgrade (see Section 4.4.7, "mysql_upgrade --- - Check and Upgrade MySQL Tables"). This program checks - your tables, and attempts to repair them if necessary. It - also updates your grant tables to ensure that they have - the current structure so that you can take advantage of - any new capabilities. (Some releases of MySQL introduce - changes to the structure of the grant tables to add new - privileges or features.) - mysql_upgrade does not upgrade the contents of the help - tables. For upgrade instructions, see Section 5.1.10, - "Server-Side Help." - mysql_upgrade should not be used when the server is - running with --gtid-mode=ON, since it may make changes in - nontransactional system tables in the mysql database, - many of which are MyISAM and cannot be changed to use a - different storage engine. See Section 17.1.3.4, "GTID - mode and mysql_upgrade." - - * If you run MySQL Server on Windows, see Section 2.3.8, - "Upgrading MySQL on Windows." - - * If you use replication, see Section 17.4.3, "Upgrading a - Replication Setup," for information on upgrading your - replication setup. - - * If you use InnoDB, consider setting innodb_fast_shutdown - to 0 before shutting down and upgrading your server. When - you set innodb_fast_shutdown to 0, InnoDB does a slow - shutdown, a full purge and a change buffer merge before - shutting down, which ensures that all data files are - fully prepared in case the upgrade process modifies the - file format. - - * If you upgrade an installation originally produced by - installing multiple RPM packages, it is best to upgrade - all the packages, not just some. For example, if you - previously installed the server and client RPMs, do not - upgrade just the server RPM. - - * If you have created a user-defined function (UDF) with a - given name and upgrade MySQL to a version that implements - a new built-in function with the same name, the UDF - becomes inaccessible. To correct this, use DROP FUNCTION - to drop the UDF, and then use CREATE FUNCTION to - re-create the UDF with a different nonconflicting name. - The same is true if the new version of MySQL implements a - built-in function with the same name as an existing - stored function. See Section 9.2.4, "Function Name - Parsing and Resolution," for the rules describing how the - server interprets references to different kinds of - functions. - - For EL5, EL6, or EL7-based Linux platforms and Fedora 21 or - 22, you can perform an in-place upgrade of MySQL and its - components with the MySQL Yum repository. See Section - 2.11.1.1, "Upgrading MySQL with the MySQL Yum Repository." - - On Debian 7 or 8 and Ubuntu 12, 14, or 15, you can perform an - in-place upgrade of MySQL and its components with the MySQL - APT repository. See Section 2.11.1.2, "Upgrading MySQL with - the MySQL APT Repository." - - For upgrades between versions of a MySQL release series that - has reached General Availability status, you can move the - MySQL format files and data files between different versions - on systems with the same architecture. For upgrades to a - version of a MySQL release series that is in development - status, that is not necessarily true. Use of development - releases is at your own risk. - - If you are cautious about using new versions, you can always - rename your old mysqld before installing a newer one. For - example, if you are using a version of MySQL 5.5 and want to - upgrade to 5.6, rename your current server from mysqld to - mysqld-5.5. If your new mysqld then does something - unexpected, you can simply shut it down and restart with your - old mysqld. - - If problems occur, such as that the new mysqld server does - not start or that you cannot connect without a password, - verify that you do not have an old my.cnf file from your - previous installation. You can check this with the - --print-defaults option (for example, mysqld - --print-defaults). If this command displays anything other - than the program name, you have an active my.cnf file that - affects server or client operation. - - If, after an upgrade, you experience problems with compiled - client programs, such as Commands out of sync or unexpected - core dumps, you probably have used old header or library - files when compiling your programs. In this case, check the - date for your mysql.h file and libmysqlclient.a library to - verify that they are from the new MySQL distribution. If not, - recompile your programs with the new headers and libraries. - Recompilation might also be necessary for programs compiled - against the shared client library if the library major - version number has changed (for example from - libmysqlclient.so.15 to libmysqlclient.so.16. - - If your MySQL installation contains a large amount of data - that might take a long time to convert after an in-place - upgrade, you might find it useful to create a "dummy" - database instance for assessing what conversions might be - needed and the work involved to perform them. Make a copy of - your MySQL instance that contains a full copy of the mysql - database, plus all other databases without data. Run your - upgrade procedure on this dummy instance to see what actions - might be needed so that you can better evaluate the work - involved when performing actual data conversion on your - original database instance. - - It is a good idea to rebuild and reinstall the Perl - DBD::mysql module whenever you install a new release of - MySQL. The same applies to other MySQL interfaces as well, - such as PHP mysql extensions and the Python MySQLdb module. - -2.11.1.1 Upgrading MySQL with the MySQL Yum Repository - - For supported Yum-based platforms (see Section 2.5.1, - "Installing MySQL on Linux Using the MySQL Yum Repository," - for a list), you can perform an in-place upgrade for MySQL - (that is, replacing the old version and then running the new - version off the old data files) with the MySQL Yum - repository. - Notes - - * Before performing any update to MySQL, follow carefully - the instructions in Section 2.11.1, "Upgrading MySQL." - Among other instructions discussed there, it is - especially important to back up your database before the - update. - - * The following instructions assume you have installed - MySQL with the MySQL Yum repository; if that is not the - case, follow the instructions in Section 2.5.2, - "Replacing a Third-Party Distribution of MySQL Using the - MySQL Yum Repository." - - - 1. Selecting a Target Series - By default, the MySQL Yum repository updates MySQL to the - latest version in the release series you have chosen - during installation (see Section 2.5.1, "" for details), - which means, for example, a 5.6.x installation will NOT - be updated to a 5.7.x release automatically. To update to - another release series, you need to first disable the - subrepository for the series that has been selected (by - default, or by yourself) and enable the subrepository for - your target series. To do that, follow the steps - explained in Section 2.5.1, "" for editing the - subrepository entries in - the/etc/yum.repos.d/mysql-community.repo file. - As a general rule, to upgrade from one release series to - another, go to the next series rather than skipping a - series. For example, if you are currently running MySQL - 5.5 and wish to upgrade to 5.7, upgrade to MySQL 5.6 - first before upgrading to 5.7. - Important - For important information about upgrading from MySQL 5.6 - to 5.7, see Upgrading from MySQL 5.6 to 5.7 - (http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-pr - evious-series.html). - - 2. Upgrading MySQL - Upgrade MySQL and its components by the following - command, for platforms except Fedora 22: -shell> sudo yum update mysql-server - For Fedora 22: -shell> sudo dnf upgrade mysql-server - Alternatively, you can update MySQL by telling Yum to - update everything on your system, which might take - considerably more time; for platforms except Fedora 22: -shell> sudo yum update - For Fedora 22: -shell> sudo dnf upgrade - - 3. Restarting MySQL - The MySQL server always restarts after an update by Yum. - Once the server restarts, run mysql_upgrade to check and - possibly resolve any incompatibilities between the old - data and the upgraded software. mysql_upgrade also - performs other functions; see Section 4.4.7, - "mysql_upgrade --- Check and Upgrade MySQL Tables" for - details. - - You can also update only a specific component. Use the - following command to list all the installed packages for the - MySQL components (for Fedora 22, replace yum in the command - with dnf): -shell> sudo yum list installed | grep "^mysql" - - After identifying the package name of the component of your - choice, for platforms except Fedora 22, update the package - with the following command, replacing package-name with the - name of the package: -shell> sudo yum update package-name - - For Fedora 22: -shell> sudo dnf upgrade package-name - -Upgrading the Shared Client Libraries - - After updating MySQL using the Yum repository, applications - compiled with older versions of the shared client libraries - should continue to work. - - If you recompile applications and dynamically link them with - the updated libraries: As typical with new versions of shared - libraries where there are differences or additions in symbol - versioning between the newer and older libraries (for - example, between the newer, standard 5.6 shared client - libraries and some older---prior or variant---versions of the - shared libraries shipped natively by the Linux distributions' - software repositories, or from some other sources), any - applications compiled using the updated, newer shared - libraries will require those updated libraries on systems - where the applications are deployed. And, as expected, if - those libraries are not in place, the applications requiring - the shared libraries will fail. So, be sure to deploy the - packages for the shared libraries from MySQL on those - systems. You can do this by adding the MySQL Yum repository - to the systems (see Section 2.5.1, "") and install the latest - shared libraries using the instructions given in Section - 2.5.1, "." - -2.11.1.2 Upgrading MySQL with the MySQL APT Repository - - On Debian 7 or 8 and Ubuntu 12, 14, or 15, you can perform an - in-place upgrade of MySQL and its components with the MySQL - APT repository. See Upgrading MySQL with the MySQL APT - Repository - (http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/index - .html#repo-qg-apt-upgrading) in A Quick Guide to Using the - MySQL APT Repository - (http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/). - -2.11.1.3 Upgrading from MySQL 5.5 to 5.6 - - Note - - Beginning with MySQL 5.6.6, several MySQL Server parameters - have defaults that differ from previous releases. See the - notes regarding these changes later in this section, - particularly regarding overriding them to preserve backward - compatibility if that is a concern. - Note - - It is good practice to back up your data before installing - any new version of software. Although MySQL works very hard - to ensure a high level of quality, protect your data by - making a backup. - - To upgrade to 5.6 from any previous version, MySQL recommends - that you dump your tables with mysqldump before upgrading and - reload the dump file after upgrading. Use the --all-databases - option to include all databases in the dump. If your - databases include stored programs, use the --routines and - --events options as well. - - In general, do the following when upgrading from MySQL 5.5 to - 5.6: - - * Read all the items in these sections to see whether any - of them might affect your applications: - - + Section 2.11.1, "Upgrading MySQL," has general - update information. - - + The items in the change lists provided later in this - section enable you to identify upgrade issues that - apply to your current MySQL installation. Some - incompatibilities discussed there require your - attention before upgrading. Others should be dealt - with after upgrading. - - + The MySQL 5.6 Release Notes - (http://dev.mysql.com/doc/relnotes/mysql/5.6/en/) - describe significant new features you can use in 5.6 - or that differ from those found in earlier MySQL - releases. Some of these changes may result in - incompatibilities. - Changes marked as either Known issue or Incompatible - change are incompatibilities with earlier versions of - MySQL, and may require your attention before you upgrade. - Our aim is to avoid these changes, but occasionally they - are necessary to correct problems that would be worse - than an incompatibility between releases. If any upgrade - issue applicable to your installation involves an - incompatibility that requires special handling, follow - the instructions given in the incompatibility - description. Sometimes this involves dumping and - reloading tables, or use of a statement such as CHECK - TABLE or REPAIR TABLE. - For dump and reload instructions, see Section 2.11.4, - "Rebuilding or Repairing Tables or Indexes." Any - procedure that involves REPAIR TABLE with the USE_FRM - option must be done before upgrading. Use of this - statement with a version of MySQL different from the one - used to create the table (that is, using it after - upgrading) may damage the table. See Section 13.7.2.5, - "REPAIR TABLE Syntax." - - * Before upgrading to a new version of MySQL, Section - 2.11.3, "Checking Whether Tables or Indexes Must Be - Rebuilt," to see whether changes to table formats or to - character sets or collations were made between your - current version of MySQL and the version to which you are - upgrading. If so and these changes result in an - incompatibility between MySQL versions, you will need to - upgrade the affected tables using the instructions in - Section 2.11.4, "Rebuilding or Repairing Tables or - Indexes." - - * After upgrading to a new version of MySQL, run - mysql_upgrade (see Section 4.4.7, "mysql_upgrade --- - Check and Upgrade MySQL Tables"). This program checks - your tables, and attempts to repair them if necessary. It - also updates your grant tables to ensure that they have - the current structure so that you can take advantage of - any new capabilities. (Some releases of MySQL introduce - changes to the structure of the grant tables to add new - privileges or features.) - mysql_upgrade does not upgrade the contents of the help - tables. For upgrade instructions, see Section 5.1.10, - "Server-Side Help." - - * If you run MySQL Server on Windows, see Section 2.3.8, - "Upgrading MySQL on Windows." - - * If you use replication, see Section 17.4.3, "Upgrading a - Replication Setup," for information on upgrading your - replication setup. - - If your MySQL installation contains a large amount of data - that might take a long time to convert after an in-place - upgrade, you might find it useful to create a "dummy" - database instance for assessing what conversions might be - needed and the work involved to perform them. Make a copy of - your MySQL instance that contains a full copy of the mysql - database, plus all other databases without data. Run your - upgrade procedure on this dummy instance to see what actions - might be needed so that you can better evaluate the work - involved when performing actual data conversion on your - original database instance. - - Read all the items in the following sections to see whether - any of them might affect your applications: - -Configuration Changes - - - * Beginning with MySQL 5.6.6, several MySQL Server - parameters have defaults that differ from previous - releases. The motivation for these changes is to provide - better out-of-box performance and to reduce the need for - the database administrator to change settings manually. - These changes are subject to possible revision in future - releases as we gain feedback. - In some cases, a parameter has a different static default - value. In other cases, the server autosizes a parameter - at startup using a formula based on other related - parameters or server host configuration, rather than - using a static value. For example, the setting for - back_log now is its previous default of 50, adjusted up - by an amount proportional to the value of - max_connections. The idea behind autosizing is that when - the server has information available to make a decision - about a parameter setting likely to be better than a - fixed default, it will. - The following table summarizes changes to defaults. Any - of these can be overridden by specifying an explicit - value at server startup. - - Parameter Old Default New Default - back_log 50 Autosized using max_connections - binlog_checksum NONE CRC32 - --binlog-row-event-max-size 1024 8192 - flush_time 1800 (on Windows) 0 - innodb_autoextend_increment 8 64 - innodb_buffer_pool_instances 1 8 (platform dependent) - innodb_checksum_algorithm INNODB CRC32 (changed back to - INNODB in MySQL 5.6.7) - innodb_concurrency_tickets 500 5000 - innodb_file_per_table 0 1 - innodb_old_blocks_time 0 1000 - innodb_open_files 300 Autosized using innodb_file_per_table, - table_open_cache - innodb_stats_on_metadata ON OFF - join_buffer_size 128KB 256KB - max_allowed_packet 1MB 4MB - max_connect_errors 10 100 - sync_master_info 0 10000 - sync_relay_log 0 10000 - sync_relay_log_info 0 10000 - With regard to compatibility with previous releases, the - most important changes are: - - + innodb_file_per_table is enabled (previously - disabled). - - + innodb_checksum_algorithm is CRC32 (previously - INNODB and changed back to INNODB in MySQL 5.6.7). - - + binlog_checksum is CRC32 (previously NONE). - Therefore, if you are upgrading an existing MySQL - installation, have not already changed the values of - these parameters from their previous defaults, and - backward compatibility is a concern, you may want to - explicitly set these parameters to their previous - defaults. For example, put these lines in the server - option file: -[mysqld] -innodb_file_per_table=0 -innodb_checksum_algorithm=INNODB -binlog_checksum=NONE - - Those settings preserve compatibility as follows: - - + With the new default of innodb_file_per_table - enabled, ALTER TABLE operations following an upgrade - will move InnoDB tables that are in the system - tablespace to individual .ibd files. Using - innodb_file_per_table=0 will prevent this from - happening. - - + Setting innodb_checksum_algorithm=INNODB permits - binary downgrades after upgrading to this release. - With a setting of CRC32, InnoDB would use - checksumming that older MySQL versions cannot use. - - + With binlog_checksum=NONE, the server can be used as - a replication master without causing failure of - older slaves that do not understand binary log - checksums. - - * As of MySQL 5.6.5, pre-4.1 passwords and the - mysql_old_password authentication plugin are deprecated. - Passwords stored in the older hash format used before - MySQL 4.1 are less secure than passwords that use the - native password hashing method and should be avoided. To - prevent connections using accounts that have pre-4.1 - password hashes, the secure_auth system variable is now - enabled by default. (To permit connections for accounts - that have such password hashes, start the server with - --secure_auth=0.) - DBAs are advised to convert accounts that use the - mysql_old_password authentication plugin to use - mysql_native_password instead. For account upgrade - instructions, see Section 6.3.8.3, "Migrating Away from - Pre-4.1 Password Hashing and the mysql_old_password - Plugin." - Known issue: In some early development versions of MySQL - 5.6 (5.6.6 to 5.6.10), the server could create accounts - with a mismatched password hash and authentication - plugin. For example, if the default authentication plugin - is mysql_native_password, this sequence of statements - results in an account with a plugin of - mysql_native_password but a pre-4.1 password hash (the - format used by mysql_old_password): -SET old_passwords = 1; -CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; - - The mismatch produces symptoms such as being unable to - connect to the MySQL server and being unable to use SET - PASSWORD with OLD_PASSWORD() or with old_passwords=1. - As of MySQL 5.6.11, this mismatch no longer occurs. - Instead, the server produces an error: -mysql> SET old_passwords = 1; -mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; -ERROR 1827 (HY000): The password hash doesn't have the expected -format. Check if the correct password algorithm is being used with -the PASSWORD() function. - - To deal with an account affected by a mismatch, the DBA - can modify either the plugin or Password column in the - account's mysql.user table row to be consistent with the - other column: - - + Set old_passwords to 0, then assign a new password - to the account using SET PASSWORD and PASSWORD(). - This sets the Password column to have a 4.1 password - hash, consistent with the mysql_native_password - plugin. This is the preferred method of fixing the - account. - - + Alternatively, the DBA can change the plugin to - mysql_old_password to make the plugin match the - password hash format, then flush the privileges. - This is not recommended because the - mysql_old_password plugin and pre-4.1 password - hashing are deprecated and support for them will be - removed in a future version of MySQL. - -Server Changes - - - * Incompatible change: It is possible for a column DEFAULT - value to be valid for the sql_mode value at - table-creation time but invalid for the sql_mode value - when rows are inserted or updated. Example: -SET sql_mode = ''; -CREATE TABLE t (d DATE DEFAULT 0); -SET sql_mode = 'NO_ZERO_DATE,STRICT_ALL_TABLES'; -INSERT INTO t (d) VALUES(DEFAULT); - - In this case, 0 should be accepted for the CREATE TABLE - but rejected for the INSERT. However, the server did not - evaluate DEFAULT values used for inserts or updates - against the current sql_mode. In the example, the INSERT - succeeds and inserts '0000-00-00' into the DATE column. - As of MySQL 5.6.13, the server applies the proper - sql_mode checks to generate a warning or error at insert - or update time. - A resulting incompatibility for replication if you use - statement-based logging (binlog_format=STATEMENT) is that - if a slave is upgraded, a nonupgraded master will execute - the preceding example without error, whereas the INSERT - will fail on the slave and replication will stop. - To deal with this, stop all new statements on the master - and wait until the slaves catch up. Then upgrade the - slaves followed by the master. Alternatively, if you - cannot stop new statements, temporarily change to - row-based logging on the master (binlog_format=ROW) and - wait until all slaves have processed all binary logs - produced up to the point of this change. Then upgrade the - slaves followed by the master and change the master back - to statement-based logging. - - * Incompatible change: MySQL 5.6.11 and later supports - CREATE TABLE ... [SUB]PARTITION BY ALGORITHM=n [LINEAR] - KEY (...), which can be used to create a table whose KEY - partitioning is compatible with a MySQL 5.1 server (n=1). - (Bug #14521864, Bug #66462) This syntax is not accepted - by MySQL 5.6.10 and earlier, although it is supported in - MySQL 5.5 beginning with MySQL 5.5.31. mysqldump in MySQL - 5.5.31 and later MySQL 5.5 releases includes the - ALGORITHM option when dumping tables using this option, - but surrounds it with conditional comments, like this: -CREATE TABLE t1 (a INT) -/*!50100 PARTITION BY KEY */ /*!50531 ALGORITHM = 1 */ /*!50100 () - PARTITIONS 3 */ - - When importing a dump containing such CREATE TABLE - statements into a MySQL 5.6.10 or earlier MySQL 5.6 - server, the versioned comment is not ignored, which - causes a syntax error. Therefore, prior to importing such - a dump file, you must either change the comments so that - the MySQL 5.6 server ignores them (by removing the string - !50531 or replacing it with !50611, wherever it occurs), - or remove them. - This is not an issue with dump files made using MySQL - 5.6.11 or later, where the ALGORITHM option is written - using /*!50611 ... */. - - * Incompatible change: For TIME, DATETIME, and TIMESTAMP - columns, the storage required for tables created before - MySQL 5.6.4 differs from storage required for tables - created in 5.6.4 and later. This is due to a change in - 5.6.4 that permits these temporal types to have a - fractional part. This change can affect the output of - statements that depend on the row format, such as - CHECKSUM TABLE. After upgrading from MySQL 5.5 to MySQL - 5.6.4 or later, it is recommended that you also upgrade - from MySQL 5.5 to MySQL 5.6 TIME, DATETIME, and TIMESTAMP - types. ALTER TABLE currently allows the creation of - tables containing temporal columns in both MySQL 5.5 and - MySQL 5.6.4 (or later) binary format but this makes it - more difficult to recreate tables in cases where .frm - files are not available. Additionally, as of MySQL 5.6.4, - the aforementioned temporal types are more space - efficient. For more information about changes to temporal - types in MySQL 5.6.4, see Section 11.7, "." - As of MySQL 5.6.16, ALTER TABLE upgrades old temporal - columns to 5.6 format for ADD COLUMN, CHANGE COLUMN, - MODIFY COLUMN, ADD INDEX, and FORCE operations. Hence, - the following statement upgrades a table containing - columns in the old format: -ALTER TABLE tbl_name FORCE; - - This conversion cannot be done using the INPLACE - algorithm because the table must be rebuilt, so - specifying ALGORITHM=INPLACE in these cases results in an - error. Specify ALGORITHM=COPY if necessary. - When ALTER TABLE does produce a temporal-format - conversion, it generates a message that can be displayed - with SHOW WARNINGS: TIME/TIMESTAMP/DATETIME columns of - old format have been upgraded to the new format. - - * Due to the temporal type changes described in the - previous incompatible change item above, importing - pre-MySQL 5.6.4 tables (using ALTER TABLE ... IMPORT - TABLESPACE) that contain DATETIME and TIMESTAMP types - into MySQL 5.6.4 (or later) fails. Importing a MySQL 5.5 - table with these temporal types into MySQL 5.6.4 (or - later) is the mostly likely scenario for this problem to - occur. - The following procedures describe workarounds that use - the original pre-MySQL 5.6.4 .frm file to recreate a - table with a row structure that is compatible with 5.6.4 - (or later). The procedures involve changing the original - pre-MySQL 5.6.4 .frm file to use the Memory storage - engine instead of InnoDB, copying the .frm file to the - data directory of the destination instance, and using - ALTER TABLE to change the table's storage engine type - back to InnoDB. Use the first procedure if your tables do - not have foreign keys. Use the second procedure, which - has additional steps, if your table includes foreign - keys. - If the table does not have foreign keys: - - 1. Copy the table's original .frm file to the data - directory on the server where you want to import the - tablespace. - - 2. Modify the table's .frm file to use the Memory - storage engine instead of the InnoDB storage engine. - This modification requires changing 7 bytes in the - .frm file that define the table's storage engine - type. Using a hexidecimal editing tool: - o Change the byte at offset position 0003, which - is the legacy_db_type, from "0c" (for InnoDB) - to "06" (for Memory), as shown below: -00000000 fe 01 09 06 03 00 00 10 01 00 00 30 00 00 10 00 - - o The remaining 6 bytes do not have a fixed - offset. Search the .frm file for "InnoDB" to - locate the line with the other 6 bytes. The - line appears as shown below: -00001010 ff 00 00 00 00 00 00 06 00 49 6e 6e 6f 44 42 00 |......... -InnoDB.| - - o Modify the bytes so that the line appears as - follows: -00001010 ff 00 00 00 00 00 00 06 00 4d 45 4d 4f 52 59 00 - - - 3. Run ALTER TABLE ... ENGINE=INNODB to add the table - definition to the InnoDB data dictionary. This - creates the InnoDB table with the temporal data - types in the new format. For the ALTER TABLE - operation to complete successfully, the .frm file - must correspond to the tablespace. - - 4. Import the table using ALTER TABLE ... IMPORT - TABLESPACE. - If table has foreign keys: - - 1. Recreate the tables with foreign keys using table - definitions from SHOW CREATE TABLE output. The - incorrect temporal column formats do not matter at - this point. - - 2. Dump all foreign key definitions to a text file by - selecting the foreign key information from - INFORMATION_SCHEMA.TABLE_CONSTRAINTS and - INFORMATION_SCHEMA.KEY_COLUMN_USAGE. - - 3. Drop all tables and complete the table import - process described in steps 1 to 4 in the procedure - described above for tables without foreign keys. - - 4. After the import operation is complete, add the - foreign keys from foreign key definitions that you - saved to a text file. - - * Incompatible change: As of MySQL 5.6, the full-text - stopword file is loaded and searched using latin1 if - character_set_server is ucs2, utf16, utf16le, or utf32. - If any table was created with FULLTEXT indexes while the - server character set was ucs2, utf16, utf16le, or utf32, - repair it using this statement: -REPAIR TABLE tbl_name QUICK; - - - * Incompatible change: In MySQL 5.6.20, the patch for Bug - #69477 limits the size of redo log BLOB writes to 10% of - the redo log file size. As a result of this new limit, - innodb_log_file_size should be set to a value greater - than 10 times the largest BLOB data size found in the - rows of your tables. No action is required if your - innodb_log_file_size setting is already 10 times the - largest BLOB data size or your tables contain no BLOB - data. - In MySQL 5.6.22, the redo log BLOB write limit is relaxed - to 10% of the total redo log size (innodb_log_file_size * - innodb_log_files_in_group). (Bug #19498877) - -SQL Changes - - - * Some keywords may be reserved in MySQL 5.6 that were not - reserved in MySQL 5.5. See Section 9.3, "Keywords and - Reserved Words." - - * The YEAR(2) data type has certain issues that you should - consider before choosing to use it. As of MySQL 5.6.6, - YEAR(2) is deprecated. YEAR(2) columns in existing tables - are treated as before, but YEAR(2) in new or altered - tables are converted to YEAR(4). For more information, - see Section 11.3.4, "YEAR(2) Limitations and Migrating to - YEAR(4)." - - * As of MySQL 5.6.6, it is explicitly disallowed to assign - the value DEFAULT to stored procedure or function - parameters or stored program local variables (for example - with a SET var_name = DEFAULT statement). This was not - previously supported, or documented as permitted, but is - flagged as an incompatible change in case existing code - inadvertently used this construct. It remains permissible - to assign DEFAULT to system variables, as before, but - assigning DEFAULT to parameters or local variables now - results in a syntax error. - After an upgrade to MySQL 5.6.6 or later, existing stored - programs that use this construct produce a syntax error - when invoked. If a mysqldump file from 5.6.5 or earlier - is loaded into 5.6.6 or later, the load operation fails - and affected stored program definitions must be changed. - - * In MySQL, the TIMESTAMP data type differs in nonstandard - ways from other data types: - - + TIMESTAMP columns not explicitly declared with the - NULL attribute are assigned the NOT NULL attribute. - (Columns of other data types, if not explicitly - declared as NOT NULL, permit NULL values.) Setting - such a column to NULL sets it to the current - timestamp. - - + The first TIMESTAMP column in a table, if not - declared with the NULL attribute or an explicit - DEFAULT or ON UPDATE clause, is automatically - assigned the DEFAULT CURRENT_TIMESTAMP and ON UPDATE - CURRENT_TIMESTAMP attributes. - - + TIMESTAMP columns following the first one, if not - declared with the NULL attribute or an explicit - DEFAULT clause, are automatically assigned DEFAULT - '0000-00-00 00:00:00' (the "zero" timestamp). For - inserted rows that specify no explicit value for - such a column, the column is assigned '0000-00-00 - 00:00:00' and no warning occurs. - Those nonstandard behaviors remain the default for - TIMESTAMP but as of MySQL 5.6.6 are deprecated and this - warning appears at startup: -[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. -Please use --explicit_defaults_for_timestamp server option (see -documentation for more details). - - As indicated by the warning, to turn off the nonstandard - behaviors, enable the new explicit_defaults_for_timestamp - system variable at server startup. With this variable - enabled, the server handles TIMESTAMP as follows instead: - - + TIMESTAMP columns not explicitly declared as NOT - NULL permit NULL values. Setting such a column to - NULL sets it to NULL, not the current timestamp. - - + No TIMESTAMP column is assigned the DEFAULT - CURRENT_TIMESTAMP or ON UPDATE CURRENT_TIMESTAMP - attributes automatically. Those attributes must be - explicitly specified. - - + TIMESTAMP columns declared as NOT NULL and without - an explicit DEFAULT clause are treated as having no - default value. For inserted rows that specify no - explicit value for such a column, the result depends - on the SQL mode. If strict SQL mode is enabled, an - error occurs. If strict SQL mode is not enabled, the - column is assigned the implicit default of - '0000-00-00 00:00:00' and a warning occurs. This is - similar to how MySQL treats other temporal types - such as DATETIME. - To upgrade servers used for replication, upgrade the - slaves first, then the master. Replication between the - master and its slaves should work provided that all use - the same value of explicit_defaults_for_timestamp: - - 1. Bring down the slaves, upgrade them, configure them - with the desired value of - explicit_defaults_for_timestamp, and bring them back - up. - The slaves will recognize from the format of the - binary logs received from the master that the master - is older (predates the introduction of - explicit_defaults_for_timestamp) and that operations - on TIMESTAMP columns coming from the master use the - old TIMESTAMP behavior. - - 2. Bring down the master, upgrade it, and configure it - with the same explicit_defaults_for_timestamp value - used on the slaves, and bring it back up. - -2.11.2 Downgrading MySQL - - This section describes what to do to downgrade to an older - MySQL version, in the unlikely case that the previous version - worked better than the new one. - - It is always a good idea to make a backup beforehand, in case - a downgrade fails and leaves the instance in an unusable - state. - - To downgrade between General Availability (GA) status - versions within the same release series, typically you just - install the new binaries on top of the old ones and do not - make any changes to the databases. - - Downgrades between milestone releases (or from a GA release - to a milestone release) within the same release series are - not supported and you may encounter issues. - - The following items form a checklist of things to do whenever - you perform a downgrade: - - * Read the upgrading section for the release series from - which you are downgrading to be sure that it does not - have any features you really need. See Section 2.11.1, - "Upgrading MySQL." - - * If there is a downgrading section for that version, read - that as well. - - * To see which new features were added between the version - to which you are downgrading and your current version, - see the Release Notes - (http://dev.mysql.com/doc/relnotes/mysql/5.6/en/). - - * Check Section 2.11.3, "Checking Whether Tables or Indexes - Must Be Rebuilt," to see whether changes to table formats - or to character sets or collations were made between your - current version of MySQL and the version to which you are - downgrading. If so and these changes result in an - incompatibility between MySQL versions, you will need to - downgrade the affected tables using the instructions in - Section 2.11.4, "Rebuilding or Repairing Tables or - Indexes." - - In most cases, you can move the MySQL format files and data - files between different GA versions on the same architecture - as long as you stay within versions for the same release - series of MySQL. - - If you downgrade from one release series to another, there - may be incompatibilities in table storage formats. In this - case, use mysqldump to dump your tables before downgrading. - After downgrading, reload the dump file using mysql or - mysqlimport to re-create your tables. For examples, see - Section 2.11.5, "Copying MySQL Databases to Another Machine." - - A typical symptom of a downward-incompatible table format - change when you downgrade is that you cannot open tables. In - that case, use the following procedure: - - 1. Stop the older MySQL server that you are downgrading to. - - 2. Restart the newer MySQL server you are downgrading from. - - 3. Dump any tables that were inaccessible to the older - server by using mysqldump to create a dump file. - - 4. Stop the newer MySQL server and restart the older one. - - 5. Reload the dump file into the older server. Your tables - should be accessible. - - If system tables in the mysql database changed, downgrading - might introduce some loss of functionality or require some - adjustments. Here are some examples: - - * Trigger creation requires the TRIGGER privilege as of - MySQL 5.1. In MySQL 5.0, there is no TRIGGER privilege - and SUPER is required instead. If you downgrade from - MySQL 5.1 to 5.0, you will need to give the SUPER - privilege to those accounts that had the TRIGGER - privilege in 5.1. - - * Triggers were added in MySQL 5.0, so if you downgrade - from 5.0 to 4.1, you cannot use triggers at all. - - * The mysql.proc.comment column definition changed between - MySQL 5.1 and 5.5. After a downgrade from 5.5 to 5.1, - this table is seen as corrupt and in need of repair. To - workaround this problem, execute mysql_upgrade from the - version of MySQL to which you downgraded. - -2.11.2.1 Downgrading to MySQL 5.5 - - When downgrading to MySQL 5.5 from MySQL 5.6, keep in mind - the following issues relating to behavior or features in - MySQL 5.6 that differ in MySQL 5.5: - -System Tables - - - * The mysql.user table in MySQL 5.6 has a password_expired - column. The mysql.user table in MySQL 5.5 does not. This - means that an account with an expired password in MySQL - 5.6 will work normally in MySQL 5.5. - -Data Types - - - * For TIME, DATETIME, and TIMESTAMP columns, the storage - required for tables created before MySQL 5.6.4 differs - from storage required for tables created in 5.6.4 and - later. This is due to a change in 5.6.4 that permits - these temporal types to have a fractional part. To - downgrade to a version older than 5.6.4, dump affected - tables with mysqldump before downgrading, and reload the - tables after downgrading. - The following query identifies tables and columns that - may be affected by this problem. Some of them are system - tables in the mysql database (such ascolumns_priv and - proxies_priv). This means that mysql is one of the - databases you must dump and reload, or server startup may - fail after downgrading. -SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE -FROM INFORMATION_SCHEMA.COLUMNS -WHERE DATA_TYPE IN ('TIME','DATETIME','TIMESTAMP') -ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME; - -InnoDB - - - * InnoDB search indexes (with a type of FULLTEXT), - introduced in MySQL 5.6.4, are not compatible with - earlier versions of MySQL, including earlier releases in - the 5.6 series. Drop such indexes before performing a - downgrade. - - * InnoDB small page sizes specified by the innodb_page_size - configuration option, introduced in MySQL 5.6.4, are not - compatible with earlier versions of MySQL, including - earlier releases in the 5.6 series. Dump all InnoDB - tables in instances that use a smaller InnoDB page size, - drop the tables, and re-create and reload them after the - downgrade. - -Replication - - - * As of MySQL 5.6, the relay-log.info file contains a line - count and a replication delay value, so the file format - differs from that in older versions. See Section - 17.2.2.2, "Slave Status Logs." If you downgrade a slave - server to a version older than MySQL 5.6, the older - server will not read the file correctly. To address this, - modify the file in a text editor to delete the initial - line containing the number of lines. - - * Beginning with MySQL 5.6.6, the MySQL Server employs - Version 2 binary log events when writing the binary log. - Binary logs written using Version 2 log events cannot by - read by earlier versions of MySQL Server. To generate a - binary log that is written using Version 1 log events - readable by older servers, start the MySQL 5.6.6 or later - server using --log-bin-use-v1-row-events=1, which forces - the server to employ Version 1 events when writing the - binary log. - -2.11.3 Checking Whether Tables or Indexes Must Be Rebuilt - - A binary upgrade or downgrade is one that installs one - version of MySQL "in place" over an existing version, without - dumping and reloading tables: - - 1. Stop the server for the existing version if it is - running. - - 2. Install a different version of MySQL. This is an upgrade - if the new version is higher than the original version, a - downgrade if the version is lower. - - 3. Start the server for the new version. - - In many cases, the tables from the previous version of MySQL - can be used without problem by the new version. However, - sometimes changes occur that require tables or table indexes - to be rebuilt, as described in this section. If you have - tables that are affected by any of the issues described here, - rebuild the tables or indexes as necessary using the - instructions given in Section 2.11.4, "Rebuilding or - Repairing Tables or Indexes." - -Table Incompatibilities - - After a binary upgrade to MySQL 5.1 from a MySQL 5.0 - installation that contains ARCHIVE tables, accessing those - tables causes the server to crash, even if you have run - mysql_upgrade or CHECK TABLE ... FOR UPGRADE. To work around - this problem, use mysqldump to dump all ARCHIVE tables before - upgrading, and reload them into MySQL 5.1 after upgrading. - The same problem occurs for binary downgrades from MySQL 5.1 - to 5.0. - - The upgrade problem is fixed in MySQL 5.6.4: The server can - open ARCHIVE tables created in MySQL 5.0. However, it remains - the recommended upgrade procedure to dump 5.0 ARCHIVE tables - before upgrading and reload them after upgrading. - -Index Incompatibilities - - In MySQL 5.6.3, the length limit for index prefix keys is - increased from 767 bytes to 3072 bytes, for InnoDB tables - using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED. See - Section 14.5.7, "Limits on InnoDB Tables" for details. This - change is also backported to MySQL 5.5.14. If you downgrade - from one of these releases or higher, to an earlier release - with a lower length limit, the index prefix keys could be - truncated at 767 bytes or the downgrade could fail. This - issue could only occur if the configuration option - innodb_large_prefix was enabled on the server being - downgraded. - - If you perform a binary upgrade without dumping and reloading - tables, you cannot upgrade directly from MySQL 4.1 to 5.1 or - higher. This occurs due to an incompatible change in the - MyISAM table index format in MySQL 5.0. Upgrade from MySQL - 4.1 to 5.0 and repair all MyISAM tables. Then upgrade from - MySQL 5.0 to 5.1 and check and repair your tables. - - Modifications to the handling of character sets or collations - might change the character sort order, which causes the - ordering of entries in any index that uses an affected - character set or collation to be incorrect. Such changes - result in several possible problems: - - * Comparison results that differ from previous results - - * Inability to find some index values due to misordered - index entries - - * Misordered ORDER BY results - - * Tables that CHECK TABLE reports as being in need of - repair - - The solution to these problems is to rebuild any indexes that - use an affected character set or collation, either by - dropping and re-creating the indexes, or by dumping and - reloading the entire table. In some cases, it is possible to - alter affected columns to use a different collation. For - information about rebuilding indexes, see Section 2.11.4, - "Rebuilding or Repairing Tables or Indexes." - - To check whether a table has indexes that must be rebuilt, - consult the following list. It indicates which versions of - MySQL introduced character set or collation changes that - require indexes to be rebuilt. Each entry indicates the - version in which the change occurred and the character sets - or collations that the change affects. If the change is - associated with a particular bug report, the bug number is - given. - - The list applies both for binary upgrades and downgrades. For - example, Bug #27877 was fixed in MySQL 5.1.24, so it applies - to upgrades from versions older than 5.1.24 to 5.1.24 or - newer, and to downgrades from 5.1.24 or newer to versions - older than 5.1.24. - - In many cases, you can use CHECK TABLE ... FOR UPGRADE to - identify tables for which index rebuilding is required. It - will report this message: -Table upgrade required. -Please do "REPAIR TABLE `tbl_name`" or dump/reload to fix it! - - In these cases, you can also use mysqlcheck --check-upgrade - or mysql_upgrade, which execute CHECK TABLE. However, the use - of CHECK TABLE applies only after upgrades, not downgrades. - Also, CHECK TABLE is not applicable to all storage engines. - For details about which storage engines CHECK TABLE supports, - see Section 13.7.2.2, "CHECK TABLE Syntax." - - These changes cause index rebuilding to be necessary: - - * MySQL 5.1.24 (Bug #27877) - Affects indexes that use the utf8_general_ci or - ucs2_general_ci collation for columns that contain 'ß' - LATIN SMALL LETTER SHARP S (German). The bug fix - corrected an error in the original collations but - introduced an incompatibility such that 'ß' compares - equal to characters with which it previously compared - different. - Affected tables can be detected by CHECK TABLE ... FOR - UPGRADE as of MySQL 5.1.30 (see Bug #40053). - A workaround for this issue is implemented as of MySQL - 5.1.62, 5.5.21, and 5.6.5. The workaround involves - altering affected columns to use the - utf8_general_mysql500_ci and ucs2_general_mysql500_ci - collations, which preserve the original pre-5.1.24 - ordering of utf8_general_ci and ucs2_general_ci. - - * MySQL 5.0.48, 5.1.23 (Bug #27562) - Affects indexes that use the ascii_general_ci collation - for columns that contain any of these characters: '`' - GRAVE ACCENT, '[' LEFT SQUARE BRACKET, '\' REVERSE - SOLIDUS, ']' RIGHT SQUARE BRACKET, '~' TILDE - Affected tables can be detected by CHECK TABLE ... FOR - UPGRADE as of MySQL 5.1.29 (see Bug #39585). - - * MySQL 5.0.48, 5.1.21 (Bug #29461) - Affects indexes for columns that use any of these - character sets: eucjpms, euc_kr, gb2312, latin7, macce, - ujis - Affected tables can be detected by CHECK TABLE ... FOR - UPGRADE as of MySQL 5.1.29 (see Bug #39585). - -2.11.4 Rebuilding or Repairing Tables or Indexes - - This section describes how to rebuild a table, following - changes to MySQL such as how data types or character sets are - handled. For example, an error in a collation might have been - corrected, requiring a table rebuild to update the indexes - for character columns that use the collation. (For examples, - see Section 2.11.3, "Checking Whether Tables or Indexes Must - Be Rebuilt.") You might also need to repair or upgrade a - table, as indicated by a table check operation such as that - performed by CHECK TABLE, mysqlcheck, or mysql_upgrade. - - Methods for rebuilding a table include dumping and reloading - it, or using ALTER TABLE or REPAIR TABLE. REPAIR TABLE only - applies to MyISAM, ARCHIVE, and CSV tables. - Note - - If you are rebuilding tables because a different version of - MySQL will not handle them after a binary (in-place) upgrade - or downgrade, you must use the dump-and-reload method. Dump - the tables before upgrading or downgrading using your - original version of MySQL. Then reload the tables after - upgrading or downgrading. - - If you use the dump-and-reload method of rebuilding tables - only for the purpose of rebuilding indexes, you can perform - the dump either before or after upgrading or downgrading. - Reloading still must be done afterward. - - To rebuild a table by dumping and reloading it, use mysqldump - to create a dump file and mysql to reload the file: -shell> mysqldump db_name t1 > dump.sql -shell> mysql db_name < dump.sql - - To rebuild all the tables in a single database, specify the - database name without any following table name: -shell> mysqldump db_name > dump.sql -shell> mysql db_name < dump.sql - - To rebuild all tables in all databases, use the - --all-databases option: -shell> mysqldump --all-databases > dump.sql -shell> mysql < dump.sql - - To rebuild a table with ALTER TABLE, use a "null" alteration; - that is, an ALTER TABLE statement that "changes" the table to - use the storage engine that it already has. For example, if - t1 is an InnoDB table, use this statement: -mysql> ALTER TABLE t1 ENGINE = InnoDB; - - If you are not sure which storage engine to specify in the - ALTER TABLE statement, use SHOW CREATE TABLE to display the - table definition. - - If you need to rebuild an InnoDB table because a CHECK TABLE - operation indicates that a table upgrade is required, use - mysqldump to create a dump file and mysql to reload the file, - as described earlier. If the CHECK TABLE operation indicates - that there is a corruption or causes InnoDB to fail, refer to - Section 14.18.2, "Forcing InnoDB Recovery" for information - about using the innodb_force_recovery option to restart - InnoDB. To understand the type of problem that CHECK TABLE - may be encountering, refer to the InnoDB notes in Section - 13.7.2.2, "CHECK TABLE Syntax." - - For MyISAM, ARCHIVE, or CSV tables, you can use REPAIR TABLE - if the table checking operation indicates that there is a - corruption or that an upgrade is required. For example, to - repair a MyISAM table, use this statement: -mysql> REPAIR TABLE t1; - - mysqlcheck --repair provides command-line access to the - REPAIR TABLE statement. This can be a more convenient means - of repairing tables because you can use the --databases or - --all-databases option to repair all tables in specific - databases or all databases, respectively: -shell> mysqlcheck --repair --databases db_name ... -shell> mysqlcheck --repair --all-databases - - For incompatibilities introduced in MySQL 5.1.24 by the fix - for Bug #27877 that corrected the utf8_general_ci and - ucs2_general_ci collations, a workaround is implemented as of - MySQL 5.1.62, 5.5.21, and 5.6.5. Upgrade to one of those - versions, then convert each affected table using one of the - following methods. In each case, the workaround altering - affected columns to use the utf8_general_mysql500_ci and - ucs2_general_mysql500_ci collations, which preserve the - original pre-5.1.24 ordering of utf8_general_ci and - ucs2_general_ci. - - * To convert an affected table after a binary upgrade that - leaves the table files in place, alter the table to use - the new collation. Suppose that the table t1 contains one - or more problematic utf8 columns. To convert the table at - the table level, use a statement like this: -ALTER TABLE t1 -CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci; - - To apply the change on a column-specific basis, use a - statement like this (be sure to repeat the column - definition as originally specified except for the COLLATE - clause): -ALTER TABLE t1 -MODIFY c1 CHAR(N) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci; - - - * To upgrade the table using a dump and reload procedure, - dump the table using mysqldump, modify the CREATE TABLE - statement in the dump file to use the new collation, and - reload the table. - - After making the appropriate changes, CHECK TABLE should - report no error. - -2.11.5 Copying MySQL Databases to Another Machine - - In cases where you need to transfer databases between - different architectures, you can use mysqldump to create a - file containing SQL statements. You can then transfer the - file to the other machine and feed it as input to the mysql - client. - Note - - You can copy the .frm, .MYI, and .MYD files for MyISAM tables - between different architectures that support the same - floating-point format. (MySQL takes care of any byte-swapping - issues.) See Section 15.2, "The MyISAM Storage Engine." - - Use mysqldump --help to see what options are available. - - The easiest (although not the fastest) way to move a database - between two machines is to run the following commands on the - machine on which the database is located: -shell> mysqladmin -h 'other_hostname' create db_name -shell> mysqldump db_name | mysql -h 'other_hostname' db_name - - If you want to copy a database from a remote machine over a - slow network, you can use these commands: -shell> mysqladmin create db_name -shell> mysqldump -h 'other_hostname' --compress db_name | mysql db_nam -e - - You can also store the dump in a file, transfer the file to - the target machine, and then load the file into the database - there. For example, you can dump a database to a compressed - file on the source machine like this: -shell> mysqldump --quick db_name | gzip > db_name.gz - - Transfer the file containing the database contents to the - target machine and run these commands there: -shell> mysqladmin create db_name -shell> gunzip < db_name.gz | mysql db_name - - You can also use mysqldump and mysqlimport to transfer the - database. For large tables, this is much faster than simply - using mysqldump. In the following commands, DUMPDIR - represents the full path name of the directory you use to - store the output from mysqldump. - - First, create the directory for the output files and dump the - database: -shell> mkdir DUMPDIR -shell> mysqldump --tab=DUMPDIR db_name - - Then transfer the files in the DUMPDIR directory to some - corresponding directory on the target machine and load the - files into MySQL there: -shell> mysqladmin create db_name # create database -shell> cat DUMPDIR/*.sql | mysql db_name # create tables in database -shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables - - Do not forget to copy the mysql database because that is - where the grant tables are stored. You might have to run - commands as the MySQL root user on the new machine until you - have the mysql database in place. - - After you import the mysql database on the new machine, - execute mysqladmin flush-privileges so that the server - reloads the grant table information. - -2.12 Environment Variables - - This section lists all the environment variables that are - used directly or indirectly by MySQL. Most of these can also - be found in other places in this manual. - - Options on the command line take precedence over values - specified in option files and environment variables, and - values in option files take precedence over values in - environment variables. - - In many cases, it is preferable to use an option file instead - of environment variables to modify the behavior of MySQL. See - Section 4.2.6, "Using Option Files." - Variable Description - CXX The name of your C++ compiler (for running CMake). - CC The name of your C compiler (for running CMake). - DBI_USER The default user name for Perl DBI. - DBI_TRACE Trace options for Perl DBI. - HOME The default path for the mysql history file is - $HOME/.mysql_history. - LD_RUN_PATH Used to specify the location of - libmysqlclient.so. - LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN Enable mysql_clear_password - authentication plugin; see Section 6.3.8.7, "The Cleartext - Client-Side Authentication Plugin." - LIBMYSQL_PLUGIN_DIR Directory in which to look for client - plugins. - LIBMYSQL_PLUGINS Client plugins to preload. - MYSQL_DEBUG Debug trace options when debugging. - MYSQL_GROUP_SUFFIX Option group suffix value (like specifying - --defaults-group-suffix). - MYSQL_HISTFILE The path to the mysql history file. If this - variable is set, its value overrides the default for - $HOME/.mysql_history. - MYSQL_HISTIGNORE Patterns specifying statements not to log to - $HOME/.mysql_history. - MYSQL_HOME The path to the directory in which the - server-specific my.cnf file resides. - MYSQL_HOST The default host name used by the mysql - command-line client. - MYSQL_PS1 The command prompt to use in the mysql command-line - client. - MYSQL_PWD The default password when connecting to mysqld. - Note that using this is insecure. See Section 6.1.2.1, - "End-User Guidelines for Password Security." - MYSQL_TCP_PORT The default TCP/IP port number. - MYSQL_TEST_LOGIN_FILE The name of the .mylogin.cnf login path - file. - MYSQL_UNIX_PORT The default Unix socket file name; used for - connections to localhost. - PATH Used by the shell to find MySQL programs. - TMPDIR The directory where temporary files are created. - TZ This should be set to your local time zone. See Section - B.5.4.6, "Time Zone Problems." - UMASK The user-file creation mode when creating files. See - note following table. - UMASK_DIR The user-directory creation mode when creating - directories. See note following table. - USER The default user name on Windows when connecting to - mysqld. - - For information about the mysql history file, see Section - 4.5.1.3, "mysql Logging." - - MYSQL_TEST_LOGIN_FILE is the path name of the login path file - (the file created by mysql_config_editor). If not set, the - default value is %APPDATA%\MySQL\.mylogin.cnf directory on - Windows and $HOME/.mylogin.cnf on non-Windows systems. See - Section 4.6.6, "mysql_config_editor --- MySQL Configuration - Utility." - - The UMASK and UMASK_DIR variables, despite their names, are - used as modes, not masks: - - * If UMASK is set, mysqld uses ($UMASK | 0600) as the mode - for file creation, so that newly created files have a - mode in the range from 0600 to 0666 (all values octal). - - * If UMASK_DIR is set, mysqld uses ($UMASK_DIR | 0700) as - the base mode for directory creation, which then is - AND-ed with ~(~$UMASK & 0666), so that newly created - directories have a mode in the range from 0700 to 0777 - (all values octal). The AND operation may remove read and - write permissions from the directory mode, but not - execute permissions. - - MySQL assumes that the value for UMASK or UMASK_DIR is in - octal if it starts with a zero. - -2.13 Perl Installation Notes - - The Perl DBI module provides a generic interface for database - access. You can write a DBI script that works with many - different database engines without change. To use DBI, you - must install the DBI module, as well as a DataBase Driver - (DBD) module for each type of database server you want to - access. For MySQL, this driver is the DBD::mysql module. - - Perl, and the DBD::MySQL module for DBI must be installed if - you want to run the MySQL benchmark scripts; see Section - 8.13.2, "The MySQL Benchmark Suite." - Note - - Perl support is not included with MySQL distributions. You - can obtain the necessary modules from http://search.cpan.org - for Unix, or by using the ActiveState ppm program on Windows. - The following sections describe how to do this. - - The DBI/DBD interface requires Perl 5.6.0, and 5.6.1 or later - is preferred. DBI does not work if you have an older version - of Perl. You should use DBD::mysql 4.009 or higher. Although - earlier versions are available, they do not support the full - functionality of MySQL 5.6. - -2.13.1 Installing Perl on Unix - - MySQL Perl support requires that you have installed MySQL - client programming support (libraries and header files). Most - installation methods install the necessary files. If you - install MySQL from RPM files on Linux, be sure to install the - developer RPM as well. The client programs are in the client - RPM, but client programming support is in the developer RPM. - - The files you need for Perl support can be obtained from the - CPAN (Comprehensive Perl Archive Network) at - http://search.cpan.org. - - The easiest way to install Perl modules on Unix is to use the - CPAN module. For example: -shell> perl -MCPAN -e shell -cpan> install DBI -cpan> install DBD::mysql - - The DBD::mysql installation runs a number of tests. These - tests attempt to connect to the local MySQL server using the - default user name and password. (The default user name is - your login name on Unix, and ODBC on Windows. The default - password is "no password.") If you cannot connect to the - server with those values (for example, if your account has a - password), the tests fail. You can use force install - DBD::mysql to ignore the failed tests. - - DBI requires the Data::Dumper module. It may be installed; if - not, you should install it before installing DBI. - - It is also possible to download the module distributions in - the form of compressed tar archives and build the modules - manually. For example, to unpack and build a DBI - distribution, use a procedure such as this: - - 1. Unpack the distribution into the current directory: -shell> gunzip < DBI-VERSION.tar.gz | tar xvf - - - This command creates a directory named DBI-VERSION. - - 2. Change location into the top-level directory of the - unpacked distribution: -shell> cd DBI-VERSION - - - 3. Build the distribution and compile everything: -shell> perl Makefile.PL -shell> make -shell> make test -shell> make install - - The make test command is important because it verifies that - the module is working. Note that when you run that command - during the DBD::mysql installation to exercise the interface - code, the MySQL server must be running or the test fails. - - It is a good idea to rebuild and reinstall the DBD::mysql - distribution whenever you install a new release of MySQL. - This ensures that the latest versions of the MySQL client - libraries are installed correctly. - - If you do not have access rights to install Perl modules in - the system directory or if you want to install local Perl - modules, the following reference may be useful: - http://learn.perl.org/faq/perlfaq8.html#How-do-I-keep-my-own- - module-library-directory- - -2.13.2 Installing ActiveState Perl on Windows - - On Windows, you should do the following to install the MySQL - DBD module with ActiveState Perl: - - 1. Get ActiveState Perl from - http://www.activestate.com/Products/ActivePerl/ and - install it. - - 2. Open a console window. - - 3. If necessary, set the HTTP_proxy variable. For example, - you might try a setting like this: -C:\> set HTTP_proxy=my.proxy.com:3128 - - - 4. Start the PPM program: -C:\> C:\perl\bin\ppm.pl - - - 5. If you have not previously done so, install DBI: -ppm> install DBI - - - 6. If this succeeds, run the following command: -ppm> install DBD-mysql - - This procedure should work with ActiveState Perl 5.6 or - newer. - - If you cannot get the procedure to work, you should install - the ODBC driver instead and connect to the MySQL server - through ODBC: -use DBI; -$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) || - die "Got error $DBI::errstr when connecting to $dsn\n"; - -2.13.3 Problems Using the Perl DBI/DBD Interface - - If Perl reports that it cannot find the ../mysql/mysql.so - module, the problem is probably that Perl cannot locate the - libmysqlclient.so shared library. You should be able to fix - this problem by one of the following methods: - - * Copy libmysqlclient.so to the directory where your other - shared libraries are located (probably /usr/lib or /lib). - - * Modify the -L options used to compile DBD::mysql to - reflect the actual location of libmysqlclient.so. - - * On Linux, you can add the path name of the directory - where libmysqlclient.so is located to the /etc/ld.so.conf - file. - - * Add the path name of the directory where - libmysqlclient.so is located to the LD_RUN_PATH - environment variable. Some systems use LD_LIBRARY_PATH - instead. - - You may also need to modify the -L options if there are other - libraries that the linker fails to find. For example, if the - linker cannot find libc because it is in /lib and the link - command specifies -L/usr/lib, change the -L option to -L/lib - or add -L/lib to the existing link command. - - If you get the following errors from DBD::mysql, you are - probably using gcc (or using an old binary compiled with - gcc): -/usr/bin/perl: can't resolve symbol '__moddi3' -/usr/bin/perl: can't resolve symbol '__divdi3' - - Add -L/usr/lib/gcc-lib/... -lgcc to the link command when the - mysql.so library gets built (check the output from make for - mysql.so when you compile the Perl client). The -L option - should specify the path name of the directory where libgcc.a - is located on your system. - - Another cause of this problem may be that Perl and MySQL are - not both compiled with gcc. In this case, you can solve the - mismatch by compiling both with gcc. diff -Nru mysql-5.6-5.6.27/INSTALL-WIN-SOURCE mysql-5.6-5.6.33/INSTALL-WIN-SOURCE --- mysql-5.6-5.6.27/INSTALL-WIN-SOURCE 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/INSTALL-WIN-SOURCE 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ - -You can find information about how to install from a Windows source -distributions at - - http://dev.mysql.com/doc/refman/5.5/en/source-installation.html - -The MySQL Reference Manual is also available in various formats on -http://dev.mysql.com/doc. diff -Nru mysql-5.6-5.6.27/libmysql/CMakeLists.txt mysql-5.6-5.6.33/libmysql/CMakeLists.txt --- mysql-5.6-5.6.27/libmysql/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/libmysql/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -234,12 +234,22 @@ OUTPUT_NAME mysqlclient VERSION "${OS_SHARED_LIB_VERSION}" SOVERSION "${SHARED_LIB_MAJOR_VERSION}") - CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) + IF(WITH_SYMVER16) + CONFIGURE_FILE(libmysql.ver16.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) + ELSE() + CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) + ENDIF() + + GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) + IF(NOT libmysql_link_flag) + SET(libmysql_link_flags) + ENDIF() + SET(libmysql_link_flags + "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${libmysql_link_flags}") + SET_TARGET_PROPERTIES(libmysql + PROPERTIES LINK_FLAGS "${libmysql_link_flags}") + IF(LINK_FLAG_NO_UNDEFINED) - GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) - IF(NOT libmysql_link_flag) - SET(libmysql_link_flags) - ENDIF() SET(libmysql_link_flags "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}") SET(libmysql_link_flags diff -Nru mysql-5.6-5.6.27/libmysql/conf_to_src.c mysql-5.6-5.6.33/libmysql/conf_to_src.c --- mysql-5.6-5.6.27/libmysql/conf_to_src.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/libmysql/conf_to_src.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ { FILE *f; - sprintf(buf, "%s.conf", set); + snprintf(buf, sizeof(buf), "%s.conf", set); if ((f = fopen(buf, "r")) == NULL) { fprintf(stderr, "%s: can't read conf file for charset %s\n", prog, set); diff -Nru mysql-5.6-5.6.27/libmysql/libmysql.c mysql-5.6-5.6.33/libmysql/libmysql.c --- mysql-5.6-5.6.27/libmysql/libmysql.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/libmysql/libmysql.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -111,9 +111,9 @@ 1 could not initialize environment (out of memory or thread keys) */ -int STDCALL mysql_server_init(int argc __attribute__((unused)), - char **argv __attribute__((unused)), - char **groups __attribute__((unused))) +int STDCALL mysql_server_init(int argc MY_ATTRIBUTE((unused)), + char **argv MY_ATTRIBUTE((unused)), + char **groups MY_ATTRIBUTE((unused))) { int result= 0; if (!mysql_client_init) @@ -128,7 +128,7 @@ if (!mysql_port) { char *env; - struct servent *serv_ptr __attribute__((unused)); + struct servent *serv_ptr MY_ATTRIBUTE((unused)); mysql_port = MYSQL_PORT; @@ -264,7 +264,7 @@ **************************************************************************/ void STDCALL -mysql_debug(const char *debug __attribute__((unused))) +mysql_debug(const char *debug MY_ATTRIBUTE((unused))) { #ifndef DBUG_OFF char *env; @@ -299,7 +299,7 @@ **************************************************************************/ sig_handler -my_pipe_sig_handler(int sig __attribute__((unused))) +my_pipe_sig_handler(int sig MY_ATTRIBUTE((unused))) { DBUG_PRINT("info",("Hit by signal %d",sig)); #ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY @@ -559,7 +559,7 @@ */ static int default_local_infile_init(void **ptr, const char *filename, - void *userdata __attribute__ ((unused))) + void *userdata MY_ATTRIBUTE ((unused))) { default_local_infile_data *data; char tmp_name[FN_REFLEN]; @@ -2341,15 +2341,15 @@ */ static int -stmt_read_row_no_data(MYSQL_STMT *stmt __attribute__((unused)), - unsigned char **row __attribute__((unused))) +stmt_read_row_no_data(MYSQL_STMT *stmt MY_ATTRIBUTE((unused)), + unsigned char **row MY_ATTRIBUTE((unused))) { return MYSQL_NO_DATA; } static int -stmt_read_row_no_result_set(MYSQL_STMT *stmt __attribute__((unused)), - unsigned char **row __attribute__((unused))) +stmt_read_row_no_result_set(MYSQL_STMT *stmt MY_ATTRIBUTE((unused)), + unsigned char **row MY_ATTRIBUTE((unused))) { set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate, NULL); return 1; @@ -3708,7 +3708,7 @@ } static void fetch_result_int32(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { my_bool field_is_unsigned= MY_TEST(field->flags & UNSIGNED_FLAG); @@ -3719,7 +3719,7 @@ } static void fetch_result_int64(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { my_bool field_is_unsigned= MY_TEST(field->flags & UNSIGNED_FLAG); @@ -3730,7 +3730,7 @@ } static void fetch_result_float(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { float value; @@ -3740,7 +3740,7 @@ } static void fetch_result_double(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { double value; @@ -3750,7 +3750,7 @@ } static void fetch_result_time(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; @@ -3758,7 +3758,7 @@ } static void fetch_result_date(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; @@ -3766,7 +3766,7 @@ } static void fetch_result_datetime(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; @@ -3774,7 +3774,7 @@ } static void fetch_result_bin(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { ulong length= net_field_length(row); @@ -3786,7 +3786,7 @@ } static void fetch_result_str(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { ulong length= net_field_length(row); @@ -3807,7 +3807,7 @@ */ static void skip_result_fixed(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { @@ -3815,8 +3815,8 @@ } -static void skip_result_with_length(MYSQL_BIND *param __attribute__((unused)), - MYSQL_FIELD *field __attribute__((unused)), +static void skip_result_with_length(MYSQL_BIND *param MY_ATTRIBUTE((unused)), + MYSQL_FIELD *field MY_ATTRIBUTE((unused)), uchar **row) { @@ -3825,7 +3825,7 @@ } -static void skip_result_string(MYSQL_BIND *param __attribute__((unused)), +static void skip_result_string(MYSQL_BIND *param MY_ATTRIBUTE((unused)), MYSQL_FIELD *field, uchar **row) @@ -4922,3 +4922,615 @@ return (*mysql->methods->read_query_result)(mysql); } +#if defined(EXPORT_SYMVER16) +#ifndef EMBEDDED_LIBRARY + +// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions + +#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") + +void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name) +{ + return myodbc_remove_escape(mysql, name); +} +SYM_16(myodbc_remove_escape); + + +my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql) +{ + return mysql_affected_rows(mysql); +} +SYM_16(mysql_affected_rows); + + +my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode) +{ + return mysql_autocommit(mysql, auto_mode); +} +SYM_16(mysql_autocommit); + + +my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) +{ + return mysql_change_user(mysql, user, passwd, db); +} +SYM_16(mysql_change_user); + + +const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql) +{ + return mysql_character_set_name(mysql); +} +SYM_16(mysql_character_set_name); + + +my_bool STDCALL symver16_mysql_commit(MYSQL * mysql) +{ + return mysql_commit(mysql); +} +SYM_16(mysql_commit); + + +void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row) +{ + return mysql_data_seek(result, row); +} +SYM_16(mysql_data_seek); + + +void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused))) +{ + return mysql_debug(debug); +} +SYM_16(mysql_debug); + + +int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql) +{ + return mysql_dump_debug_info(mysql); +} +SYM_16(mysql_dump_debug_info); + + +my_bool STDCALL symver16_mysql_embedded(void) +{ + return mysql_embedded(); +} +SYM_16(mysql_embedded); + + +my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res) +{ + return mysql_eof(res); +} +SYM_16(mysql_eof); + + +ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length) +{ + return mysql_escape_string(to, from, length); +} +SYM_16(mysql_escape_string); + + +MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result) +{ + return mysql_fetch_field(result); +} +SYM_16(mysql_fetch_field); + + +MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) +{ + return mysql_fetch_field_direct(res, fieldnr); +} +SYM_16(mysql_fetch_field_direct); + + +MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res) +{ + return mysql_fetch_fields(res); +} +SYM_16(mysql_fetch_fields); + + +unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql) +{ + return mysql_field_count(mysql); +} +SYM_16(mysql_field_count); + + +MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) +{ + return mysql_field_seek(result, field_offset); +} +SYM_16(mysql_field_seek); + + +MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res) +{ + return mysql_field_tell(res); +} +SYM_16(mysql_field_tell); + + +void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) +{ + return mysql_get_character_set_info(mysql, csinfo); +} +SYM_16(mysql_get_character_set_info); + + +const char * STDCALL symver16_mysql_get_client_info(void) +{ + return mysql_get_client_info(); +} +SYM_16(mysql_get_client_info); + +ulong STDCALL symver16_mysql_get_client_version(void) +{ + return mysql_get_client_version(); +} +SYM_16(mysql_get_client_version); + + +const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql) +{ + return mysql_get_host_info(mysql); +} +SYM_16(mysql_get_host_info); + + +MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void) +{ + return mysql_get_parameters(); +} +SYM_16(mysql_get_parameters); + + +uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql) +{ + return mysql_get_proto_info(mysql); +} +SYM_16(mysql_get_proto_info); + + +const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql) +{ + return mysql_get_server_info(mysql); +} +SYM_16(mysql_get_server_info); + + +ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length) +{ + return mysql_hex_string(to, from, length); +} +SYM_16(mysql_hex_string); + + +const char *STDCALL symver16_mysql_info(MYSQL *mysql) +{ + return mysql_info(mysql); +} +SYM_16(mysql_info); + + +my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql) +{ + return mysql_insert_id(mysql); +} +SYM_16(mysql_insert_id); + + +int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid) +{ + return mysql_kill(mysql, pid); +} +SYM_16(mysql_kill); + + +MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild) +{ + return mysql_list_dbs(mysql, wild); +} +SYM_16(mysql_list_dbs); + + +MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) +{ + return mysql_list_fields(mysql, table, wild); +} +SYM_16(mysql_list_fields); + + +MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql) +{ + return mysql_list_processes(mysql); +} +SYM_16(mysql_list_processes); + + +MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild) +{ + return mysql_list_tables(mysql, wild); +} +SYM_16(mysql_list_tables); + + +my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql) +{ + return mysql_more_results(mysql); +} +SYM_16(mysql_more_results); + + +int STDCALL symver16_mysql_next_result(MYSQL *mysql) +{ + return mysql_next_result(mysql); +} +SYM_16(mysql_next_result); + + +int STDCALL symver16_mysql_ping(MYSQL *mysql) +{ + return mysql_ping(mysql); +} +SYM_16(mysql_ping); + + +int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query) +{ + return mysql_query(mysql, query); +} +SYM_16(mysql_query); + + +my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql) +{ + return mysql_read_query_result(mysql); +} +SYM_16(mysql_read_query_result); + + +ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length) +{ + return mysql_real_escape_string(mysql, to, from, length); +} +SYM_16(mysql_real_escape_string); + + +int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options) +{ + return mysql_refresh(mysql, options); +} +SYM_16(mysql_refresh); + + +my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql) +{ + return mysql_rollback(mysql); +} +SYM_16(mysql_rollback); + + +MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) +{ + return mysql_row_seek(result, row); +} +SYM_16(mysql_row_seek); + + +MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res) +{ + return mysql_row_tell(res); +} +SYM_16(mysql_row_tell); + + +void STDCALL symver16_mysql_server_end() +{ + return mysql_server_end(); +} +SYM_16(mysql_server_end); + + +int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused))) +{ + return mysql_server_init(argc, argv, groups); +} +SYM_16(mysql_server_init); + + +void symver16_mysql_set_local_infile_default(MYSQL *mysql) +{ + return mysql_set_local_infile_default(mysql); +} +SYM_16(mysql_set_local_infile_default); + + +void symver16_mysql_set_local_infile_handler(MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), int (*local_infile_read)(void *, char *, uint), void (*local_infile_end)(void *), int (*local_infile_error)(void *, char *, uint), void *userdata) +{ + return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata); +} +SYM_16(mysql_set_local_infile_handler); + + +int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option) +{ + return mysql_set_server_option(mysql, option); +} +SYM_16(mysql_set_server_option); + + +int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level) +{ + return mysql_shutdown(mysql, shutdown_level); +} +SYM_16(mysql_shutdown); + + +const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql) +{ + return mysql_sqlstate(mysql); +} +SYM_16(mysql_sqlstate); + + +const char * STDCALL symver16_mysql_stat(MYSQL *mysql) +{ + return mysql_stat(mysql); +} +SYM_16(mysql_stat); + + +my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt) +{ + return mysql_stmt_affected_rows(stmt); +} +SYM_16(mysql_stmt_affected_rows); + + +my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value) +{ + return mysql_stmt_attr_get(stmt, attr_type, value); +} +SYM_16(mysql_stmt_attr_get); + + +my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value) +{ + return mysql_stmt_attr_set(stmt, attr_type, value); +} +SYM_16(mysql_stmt_attr_set); + + +my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) +{ + return mysql_stmt_bind_param(stmt, my_bind); +} +SYM_16(mysql_stmt_bind_param); + + +my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) +{ + return mysql_stmt_bind_result(stmt, my_bind); +} +SYM_16(mysql_stmt_bind_result); + + +my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt) +{ + return mysql_stmt_close(stmt); +} +SYM_16(mysql_stmt_close); + + +void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) +{ + return mysql_stmt_data_seek(stmt, row); +} +SYM_16(mysql_stmt_data_seek); + + +uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt) +{ + return mysql_stmt_errno(stmt); +} +SYM_16(mysql_stmt_errno); + + +const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt) +{ + return mysql_stmt_error(stmt); +} +SYM_16(mysql_stmt_error); + + +int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt) +{ + return mysql_stmt_execute(stmt); +} +SYM_16(mysql_stmt_execute); + + +int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt) +{ + return mysql_stmt_fetch(stmt); +} +SYM_16(mysql_stmt_fetch); + + +int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset) +{ + return mysql_stmt_fetch_column(stmt, my_bind, column, offset); +} +SYM_16(mysql_stmt_fetch_column); + + +unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt) +{ + return mysql_stmt_field_count(stmt); +} +SYM_16(mysql_stmt_field_count); + + +my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt) +{ + return mysql_stmt_free_result(stmt); +} +SYM_16(mysql_stmt_free_result); + + +MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql) +{ + return mysql_stmt_init(mysql); +} +SYM_16(mysql_stmt_init); + + +my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt) +{ + return mysql_stmt_insert_id(stmt); +} +SYM_16(mysql_stmt_insert_id); + + +my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt) +{ + return mysql_stmt_num_rows(stmt); +} +SYM_16(mysql_stmt_num_rows); + + +ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt) +{ + return mysql_stmt_param_count(stmt); +} +SYM_16(mysql_stmt_param_count); + + +MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt) +{ + return mysql_stmt_param_metadata(stmt); +} +SYM_16(mysql_stmt_param_metadata); + + +int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) +{ + return mysql_stmt_prepare(stmt, query, length); +} +SYM_16(mysql_stmt_prepare); + + +my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt) +{ + return mysql_stmt_reset(stmt); +} +SYM_16(mysql_stmt_reset); + + +MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt) +{ + return mysql_stmt_result_metadata(stmt); +} +SYM_16(mysql_stmt_result_metadata); + + +MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row) +{ + return mysql_stmt_row_seek(stmt, row); +} +SYM_16(mysql_stmt_row_seek); + + +MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt) +{ + return mysql_stmt_row_tell(stmt); +} +SYM_16(mysql_stmt_row_tell); + + +my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length) +{ + return mysql_stmt_send_long_data(stmt, param_number, data, length); +} +SYM_16(mysql_stmt_send_long_data); + + +const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt) +{ + return mysql_stmt_sqlstate(stmt); +} +SYM_16(mysql_stmt_sqlstate); + + +int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt) +{ + return mysql_stmt_store_result(stmt); +} +SYM_16(mysql_stmt_store_result); + + +void STDCALL symver16_mysql_thread_end() +{ + return mysql_thread_end(); +} +SYM_16(mysql_thread_end); + + +ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql) +{ + return mysql_thread_id(mysql); +} +SYM_16(mysql_thread_id); + + +my_bool STDCALL symver16_mysql_thread_init() +{ + return mysql_thread_init(); +} +SYM_16(mysql_thread_init); + + +uint STDCALL symver16_mysql_thread_safe(void) +{ + return mysql_thread_safe(); +} +SYM_16(mysql_thread_safe); + + +MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql) +{ + return mysql_use_result(mysql); +} +SYM_16(mysql_use_result); + + +uint STDCALL symver16_mysql_warning_count(MYSQL *mysql) +{ + return mysql_warning_count(mysql); +} +SYM_16(mysql_warning_count); + +/*****/ + +MYSQL * STDCALL symver16_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag) +{ + return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag); +} +SYM_16(mysql_real_connect); + +/*****/ + +my_bool symver16_my_init(void) +{ + return my_init(); +} +SYM_16(my_init); + + +#endif +#endif /* EXPORT_SYMVER16 */ diff -Nru mysql-5.6-5.6.27/libmysql/libmysql.ver16.in mysql-5.6-5.6.33/libmysql/libmysql.ver16.in --- mysql-5.6-5.6.27/libmysql/libmysql.ver16.in 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/libmysql/libmysql.ver16.in 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,151 @@ +/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +libmysqlclient_16 +{ + local: + symver16_*; +}; + +libmysqlclient_18 +{ + global: + my_init; + myodbc_remove_escape; + mysql_affected_rows; + mysql_autocommit; + mysql_change_user; + mysql_character_set_name; + mysql_close; + mysql_commit; + mysql_data_seek; + mysql_debug; + mysql_dump_debug_info; + mysql_embedded; + mysql_eof; + mysql_errno; + mysql_error; + mysql_escape_string; + mysql_fetch_field; + mysql_fetch_field_direct; + mysql_fetch_fields; + mysql_fetch_lengths; + mysql_fetch_row; + mysql_field_count; + mysql_field_seek; + mysql_field_tell; + mysql_free_result; + mysql_get_character_set_info; + mysql_get_client_info; + mysql_get_client_version; + mysql_get_host_info; + mysql_get_parameters; + mysql_get_proto_info; + mysql_get_server_info; + mysql_get_server_version; + mysql_get_ssl_cipher; + mysql_hex_string; + mysql_info; + mysql_init; + mysql_insert_id; + mysql_kill; + mysql_list_dbs; + mysql_list_fields; + mysql_list_processes; + mysql_list_tables; + mysql_more_results; + mysql_next_result; + mysql_num_fields; + mysql_num_rows; + mysql_options; + mysql_ping; + mysql_query; + mysql_read_query_result; + mysql_real_connect; + mysql_real_escape_string; + mysql_real_query; + mysql_refresh; + mysql_rollback; + mysql_row_seek; + mysql_row_tell; + mysql_select_db; + mysql_send_query; + mysql_server_end; + mysql_server_init; + mysql_set_character_set; + mysql_set_local_infile_default; + mysql_set_local_infile_handler; + mysql_set_server_option; + mysql_shutdown; + mysql_sqlstate; + mysql_ssl_set; + mysql_stat; + mysql_stmt_affected_rows; + mysql_stmt_attr_get; + mysql_stmt_attr_set; + mysql_stmt_bind_param; + mysql_stmt_bind_result; + mysql_stmt_close; + mysql_stmt_data_seek; + mysql_stmt_errno; + mysql_stmt_error; + mysql_stmt_execute; + mysql_stmt_fetch; + mysql_stmt_fetch_column; + mysql_stmt_field_count; + mysql_stmt_free_result; + mysql_stmt_init; + mysql_stmt_insert_id; + mysql_stmt_num_rows; + mysql_stmt_param_count; + mysql_stmt_param_metadata; + mysql_stmt_prepare; + mysql_stmt_reset; + mysql_stmt_result_metadata; + mysql_stmt_row_seek; + mysql_stmt_row_tell; + mysql_stmt_send_long_data; + mysql_stmt_sqlstate; + mysql_stmt_store_result; + mysql_store_result; + mysql_thread_end; + mysql_thread_id; + mysql_thread_init; + mysql_thread_safe; + mysql_use_result; + mysql_warning_count; + + free_defaults; + handle_options; + load_defaults; + my_print_help; + + #my_make_scrambled_password; + THR_KEY_mysys; + + mysql_client_find_plugin; + mysql_client_register_plugin; + mysql_load_plugin; + mysql_load_plugin_v; + mysql_plugin_options; + mysql_stmt_next_result; + + #mysql_default_charset_info; + mysql_get_charset; + mysql_get_charset_by_csname; + mysql_net_realloc; + #mysql_client_errors; + *; +} libmysqlclient_16; diff -Nru mysql-5.6-5.6.27/libmysql/libmysql.ver.in mysql-5.6-5.6.33/libmysql/libmysql.ver.in --- mysql-5.6-5.6.27/libmysql/libmysql.ver.in 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/libmysql/libmysql.ver.in 2016-08-26 11:22:35.000000000 +0000 @@ -1 +1,16 @@ +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + libmysqlclient_@SHARED_LIB_MAJOR_VERSION@ { global: *; }; diff -Nru mysql-5.6-5.6.27/libmysqld/lib_sql.cc mysql-5.6-5.6.33/libmysqld/lib_sql.cc --- mysql-5.6-5.6.27/libmysqld/lib_sql.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/libmysqld/lib_sql.cc 2016-08-26 11:22:35.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (c) 2000 * SWsoft company * - * Modifications copyright (c) 2001, 2014. Oracle and/or its affiliates. + * Modifications copyright (c) 2001, 2016. Oracle and/or its affiliates. * All rights reserved. * * This material is provided "as is", with absolutely no warranty expressed @@ -213,8 +213,8 @@ */ static MYSQL_DATA * -emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)), - unsigned int fields __attribute__((unused))) +emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields MY_ATTRIBUTE((unused)), + unsigned int fields MY_ATTRIBUTE((unused))) { MYSQL_DATA *result= ((THD*)mysql->thd)->cur_data; ((THD*)mysql->thd)->cur_data= 0; @@ -327,15 +327,26 @@ return 0; } +#define HEADER_SIZE 9 static int emb_stmt_execute(MYSQL_STMT *stmt) { DBUG_ENTER("emb_stmt_execute"); - uchar header[5]; + /* + Header size is made similar to non-embedded library. + It should be consistent across embedded and non-embedded + libraries. + */ + uchar header[HEADER_SIZE]; THD *thd; my_bool res; int4store(header, stmt->stmt_id); header[4]= (uchar) stmt->flags; + /* + Dummy value is stored in the last 4 bytes of the header + to make it consistent with non-embedded library. + */ + int4store(header + 5, 1); thd= (THD*)stmt->mysql->thd; thd->client_param_count= stmt->param_count; thd->client_params= stmt->params; @@ -1276,6 +1287,14 @@ return FALSE; } +void Protocol_binary::prepare_for_resend() +{ + MYSQL_DATA *data= thd->cur_data; + next_mysql_field= data->embedded_info->fields_list; + packet->length(bit_fields + 1); + memset(const_cast(packet->ptr()), 0, 1 + bit_fields); + field_pos= 0; +} void Protocol_text::prepare_for_resend() { @@ -1312,6 +1331,78 @@ return false; } +bool Protocol_binary::net_store_data(const uchar *from, size_t length) +{ + if (!thd->mysql) // bootstrap file handling + return 0; + + ulong packet_length= packet->length(); + /* + The +9 comes from that strings of length longer than 16M require + 9 bytes to be stored (see net_store_length). + */ + if (packet_length + 9 + length > packet->alloced_length() && + packet->realloc(packet_length + 9 + length)) + return 1; + uchar *to= net_store_length((uchar*)packet->ptr() + packet_length, length); + memcpy(to, from, length); + packet->length((uint)(to + length - (uchar*)packet->ptr())); + if (next_mysql_field->max_length < length) + next_mysql_field->max_length= length; + ++next_mysql_field; + return 0; +} + +bool Protocol_binary::net_store_data(const uchar *from, size_t length, + const CHARSET_INFO *from_cs, + const CHARSET_INFO *to_cs) +{ + uint dummy_errors; + /* Calculate maxumum possible result length */ + uint conv_length= to_cs->mbmaxlen * length / from_cs->mbminlen; + + if (!thd->mysql) // bootstrap file handling + return 0; + + if (conv_length > 250) + { + /* + For strings with conv_length greater than 250 bytes + we don't know how many bytes we will need to store length: one or two, + because we don't know result length until conversion is done. + For example, when converting from utf8 (mbmaxlen=3) to latin1, + conv_length=300 means that the result length can vary between 100 to 300. + length=100 needs one byte, length=300 needs to bytes. + + Thus conversion directly to "packet" is not worthy. + Let's use "convert" as a temporary buffer. + */ + return (convert->copy((const char*)from, length, from_cs, + to_cs, &dummy_errors) || + net_store_data((const uchar*)convert->ptr(), convert->length())); + } + + ulong packet_length= packet->length(); + ulong new_length= packet_length + conv_length + 1; + + if (new_length > packet->alloced_length() && packet->realloc(new_length)) + return 1; + + char *length_pos= (char*) packet->ptr() + packet_length; + char *to= length_pos + 1; + + to+= length= copy_and_convert(to, conv_length, to_cs, + (const char*)from, length, from_cs, + &dummy_errors); + + net_store_length((uchar*)length_pos, to - length_pos - 1); + packet->length((uint)(to - packet->ptr())); + if (next_mysql_field->max_length < length) + next_mysql_field->max_length= length; + ++next_mysql_field; + return 0; +} + bool Protocol::net_store_data(const uchar *from, size_t length) { char *field_buf; @@ -1335,7 +1426,7 @@ #define vsnprintf _vsnprintf #endif -int vprint_msg_to_log(enum loglevel level __attribute__((unused)), +int vprint_msg_to_log(enum loglevel level MY_ATTRIBUTE((unused)), const char *format, va_list argsi) { my_vsnprintf(mysql_server_last_error, sizeof(mysql_server_last_error), diff -Nru mysql-5.6-5.6.27/man/comp_err.1 mysql-5.6-5.6.33/man/comp_err.1 --- mysql-5.6-5.6.27/man/comp_err.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/comp_err.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBcomp_err\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBCOMP_ERR\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBCOMP_ERR\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" comp_err .SH "NAME" comp_err \- compile MySQL error message file .SH "SYNOPSIS" @@ -45,7 +44,7 @@ normally is run automatically when MySQL is built\&. It compiles the errmsg\&.sys file from the text file located at -sql/share/errmsg\&.txt +sql/share/errmsg\-utf8\&.txt in MySQL source distributions\&. .PP \fBcomp_err\fR @@ -83,8 +82,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: help option -.\" help option: comp_err \fB\-\-help\fR, \fB\-?\fR .sp @@ -99,8 +96,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: charset option -.\" charset option: comp_err \fB\-\-charset=\fR\fB\fIdir_name\fR\fR, \fB\-C \fR\fB\fIdir_name\fR\fR .sp @@ -116,8 +111,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: debug option -.\" debug option: comp_err \fB\-\-debug=\fR\fB\fIdebug_options\fR\fR, \fB\-# \fR\fB\fIdebug_options\fR\fR .sp @@ -136,8 +129,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: debug-info option -.\" debug-info option: comp_err \fB\-\-debug\-info\fR, \fB\-T\fR .sp @@ -152,8 +143,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: header_file option -.\" header_file option: comp_err \fB\-\-header_file=\fR\fB\fIfile_name\fR\fR, \fB\-H \fR\fB\fIfile_name\fR\fR .sp @@ -169,13 +158,11 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: in_file option -.\" in_file option: comp_err \fB\-\-in_file=\fR\fB\fIfile_name\fR\fR, \fB\-F \fR\fB\fIfile_name\fR\fR .sp The name of the input file\&. The default is -\&.\&./sql/share/errmsg\&.txt\&. +\&.\&./sql/share/errmsg\-utf8\&.txt\&. .RE .sp .RS 4 @@ -186,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: name_file option -.\" name_file option: comp_err \fB\-\-name_file=\fR\fB\fIfile_name\fR\fR, \fB\-N \fR\fB\fIfile_name\fR\fR .sp @@ -203,8 +188,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: out_dir option -.\" out_dir option: comp_err \fB\-\-out_dir=\fR\fB\fIdir_name\fR\fR, \fB\-D \fR\fB\fIdir_name\fR\fR .sp @@ -220,8 +203,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: out_file option -.\" out_file option: comp_err \fB\-\-out_file=\fR\fB\fIfile_name\fR\fR, \fB\-O \fR\fB\fIfile_name\fR\fR .sp @@ -237,8 +218,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: statefile option -.\" statefile option: comp_err \fB\-\-statefile=\fR\fB\fIfile_name\fR\fR, \fB\-S \fR\fB\fIfile_name\fR\fR .sp @@ -254,8 +233,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" comp_err: version option -.\" version option: comp_err \fB\-\-version\fR, \fB\-V\fR .sp @@ -264,7 +241,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/innochecksum.1 mysql-5.6-5.6.33/man/innochecksum.1 --- mysql-5.6-5.6.27/man/innochecksum.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/innochecksum.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBinnochecksum\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBINNOCHECKSUM\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBINNOCHECKSUM\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" innochecksum .SH "NAME" innochecksum \- offline InnoDB file checksum utility .SH "SYNOPSIS" @@ -154,7 +153,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/msql2mysql.1 mysql-5.6-5.6.33/man/msql2mysql.1 --- mysql-5.6-5.6.27/man/msql2mysql.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/msql2mysql.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmsql2mysql\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMSQL2MYSQL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMSQL2MYSQL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" msql2mysql .SH "NAME" msql2mysql \- convert mSQL programs for use with MySQL .SH "SYNOPSIS" @@ -85,7 +84,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/myisamchk.1 mysql-5.6-5.6.33/man/myisamchk.1 --- mysql-5.6-5.6.27/man/myisamchk.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/myisamchk.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmyisamchk\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYISAMCHK\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYISAMCHK\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" myisamchk .SH "NAME" myisamchk \- MyISAM table\-maintenance utility .SH "SYNOPSIS" @@ -252,8 +251,6 @@ group of an option file\&. For information about option files used by MySQL programs, see Section\ \&4.2.6, \(lqUsing Option Files\(rq\&. .SH "MYISAMCHK GENERAL OPTIONS" -.\" options: myisamchk -.\" myisamchk: options .PP The options described in this section can be used for any type of table maintenance operation performed by \fBmyisamchk\fR\&. The sections following this one describe options that pertain only to specific operations, such as table checking or repairing\&. @@ -266,8 +263,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: help option -.\" help option: myisamchk \fB\-\-help\fR, \fB\-?\fR .sp @@ -282,8 +277,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: HELP option -.\" HELP option: myisamchk \fB\-\-HELP\fR, \fB\-H\fR .sp @@ -298,8 +291,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: debug option -.\" debug option: myisamchk \fB\-\-debug=\fR\fB\fIdebug_options\fR\fR, \fB\-# \fR\fB\fIdebug_options\fR\fR .sp @@ -318,8 +309,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: defaults-extra-file option -.\" defaults-extra-file option: myisamchk \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -335,8 +324,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: defaults-file option -.\" defaults-file option: myisamchk \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -352,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: defaults-group-suffix option -.\" defaults-group-suffix option: myisamchk \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -378,8 +363,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: no-defaults option -.\" no-defaults option: myisamchk \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -405,8 +388,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: print-defaults option -.\" print-defaults option: myisamchk \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -420,8 +401,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: silent option -.\" silent option: myisamchk \fB\-\-silent\fR, \fB\-s\fR .sp @@ -440,8 +419,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: verbose option -.\" verbose option: myisamchk \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -462,8 +439,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: version option -.\" version option: myisamchk \fB\-\-version\fR, \fB\-V\fR .sp @@ -478,8 +453,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: wait option -.\" wait option: myisamchk \fB\-\-wait\fR, \fB\-w\fR .sp @@ -493,18 +466,6 @@ You can also set the following variables by using \fB\-\-\fR\fB\fIvar_name\fR\fR\fB=\fR\fB\fIvalue\fR\fR syntax: -.\" decode_bits myisamchk variable -.\" ft_max_word_len myisamchk variable -.\" ft_min_word_len myisamchk variable -.\" ft_stopword_file myisamchk variable -.\" key_buffer_size myisamchk variable -.\" myisam_block_size myisamchk variable -.\" read_buffer_size myisamchk variable -.\" sort_buffer_size myisamchk variable -.\" myisam_sort_buffer_size myisamchk variable -.\" sort_key_blocks myisamchk variable -.\" stats_method myisamchk variable -.\" write_buffer_size myisamchk variable .TS allbox tab(:); lB lB. @@ -738,8 +699,6 @@ OPTIMIZE TABLE, or ALTER TABLE\&. These statements are performed by the server, which knows the proper full\-text parameter values to use\&. .SH "MYISAMCHK CHECK OPTIONS" -.\" check options: myisamchk -.\" tables: checking .PP \fBmyisamchk\fR supports the following options for table checking operations: @@ -752,8 +711,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: check option -.\" check option: myisamchk \fB\-\-check\fR, \fB\-c\fR .sp @@ -768,8 +725,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: check-only-changed option -.\" check-only-changed option: myisamchk \fB\-\-check\-only\-changed\fR, \fB\-C\fR .sp @@ -784,8 +739,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: extend-check option -.\" extend-check option: myisamchk \fB\-\-extend\-check\fR, \fB\-e\fR .sp @@ -815,8 +768,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: fast option -.\" fast option: myisamchk \fB\-\-fast\fR, \fB\-F\fR .sp @@ -831,8 +782,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: force option -.\" force option: myisamchk \fB\-\-force\fR, \fB\-f\fR .sp @@ -853,8 +802,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: information option -.\" information option: myisamchk \fB\-\-information\fR, \fB\-i\fR .sp @@ -869,8 +816,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: medium-check option -.\" medium-check option: myisamchk \fB\-\-medium\-check\fR, \fB\-m\fR .sp @@ -887,8 +832,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: read-only option -.\" read-only option: myisamchk \fB\-\-read\-only\fR, \fB\-T\fR .sp @@ -907,8 +850,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: update-state option -.\" update-state option: myisamchk \fB\-\-update\-state\fR, \fB\-U\fR .sp @@ -921,8 +862,6 @@ server is using the table and you are running it with external locking disabled\&. .RE .SH "MYISAMCHK REPAIR OPTIONS" -.\" repair options: myisamchk -.\" files: repairing .PP \fBmyisamchk\fR supports the following options for table repair operations (operations performed when an option such as @@ -939,8 +878,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: backup option -.\" backup option: myisamchk \fB\-\-backup\fR, \fB\-B\fR .sp @@ -958,8 +895,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: character-sets-dir option -.\" character-sets-dir option: myisamchk \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -974,8 +909,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: correct-checksum option -.\" correct-checksum option: myisamchk \fB\-\-correct\-checksum\fR .sp Correct the checksum information for the table\&. @@ -989,8 +922,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: data-file-length option -.\" data-file-length option: myisamchk \fB\-\-data\-file\-length=\fR\fB\fIlen\fR\fR, \fB\-D \fR\fB\fIlen\fR\fR .sp @@ -1006,8 +937,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: extend-check option -.\" extend-check option: myisamchk \fB\-\-extend\-check\fR, \fB\-e\fR .sp @@ -1027,8 +956,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: force option -.\" force option: myisamchk \fB\-\-force\fR, \fB\-f\fR .sp @@ -1044,8 +971,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: keys-used option -.\" keys-used option: myisamchk \fB\-\-keys\-used=\fR\fB\fIval\fR\fR, \fB\-k \fR\fB\fIval\fR\fR .sp @@ -1062,8 +987,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: no-symlinks option -.\" no-symlinks option: myisamchk \fB\-\-no\-symlinks\fR, \fB\-l\fR .sp @@ -1080,8 +1003,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: max-record-length option -.\" max-record-length option: myisamchk \fB\-\-max\-record\-length=\fR\fB\fIlen\fR\fR .sp Skip rows larger than the given length if @@ -1097,8 +1018,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: parallel-recover option -.\" parallel-recover option: myisamchk \fB\-\-parallel\-recover\fR, \fB\-p\fR .sp @@ -1117,8 +1036,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: quick option -.\" quick option: myisamchk \fB\-\-quick\fR, \fB\-q\fR .sp @@ -1135,8 +1052,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: recover option -.\" recover option: myisamchk \fB\-\-recover\fR, \fB\-r\fR .sp @@ -1163,8 +1078,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: safe-recover option -.\" safe-recover option: myisamchk \fB\-\-safe\-recover\fR, \fB\-o\fR .sp @@ -1191,25 +1104,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: set-character-set option -.\" set-character-set option: myisamchk -\fB\-\-set\-character\-set=\fR\fB\fIname\fR\fR -.sp -Change the character set used by the table indexes\&. This option was replaced by -\fB\-\-set\-collation\fR -in MySQL 5\&.0\&.3\&. -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -.\" myisamchk: set-collation option -.\" set-collation option: myisamchk \fB\-\-set\-collation=\fR\fB\fIname\fR\fR .sp Specify the collation to use for sorting table indexes\&. The character set name is implied by the first part of the collation name\&. @@ -1223,8 +1117,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: sort-recover option -.\" sort-recover option: myisamchk \fB\-\-sort\-recover\fR, \fB\-n\fR .sp @@ -1241,8 +1133,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: tmpdir option -.\" tmpdir option: myisamchk \fB\-\-tmpdir=\fR\fB\fIdir_name\fR\fR, \fB\-t \fR\fB\fIdir_name\fR\fR .sp @@ -1263,8 +1153,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: unpack option -.\" unpack option: myisamchk \fB\-\-unpack\fR, \fB\-u\fR .sp @@ -1284,8 +1172,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: analyze option -.\" analyze option: myisamchk \fB\-\-analyze\fR, \fB\-a\fR .sp @@ -1304,8 +1190,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: block-search option -.\" block-search option: myisamchk \fB\-\-block\-search=\fR\fB\fIoffset\fR\fR, \fB\-b \fR\fB\fIoffset\fR\fR .sp @@ -1320,8 +1204,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: description option -.\" description option: myisamchk \fB\-\-description\fR, \fB\-d\fR .sp @@ -1339,8 +1221,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: set-auto-increment[ option -.\" set-auto-increment[ option: myisamchk \fB\-\-set\-auto\-increment[=\fR\fB\fIvalue\fR\fR\fB]\fR, \fB\-A[\fR\fB\fIvalue\fR\fR\fB]\fR .sp @@ -1363,8 +1243,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: sort-index option -.\" sort-index option: myisamchk \fB\-\-sort\-index\fR, \fB\-S\fR .sp @@ -1379,8 +1257,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisamchk: sort-records option -.\" sort-records option: myisamchk \fB\-\-sort\-records=\fR\fB\fIN\fR\fR, \fB\-R \fR\fB\fIN\fR\fR .sp @@ -1400,10 +1276,6 @@ must unpack key blocks first, then re\-create indexes and pack the key blocks again\&. (In this case, re\-creating indexes is faster than updating offsets for each index\&.) .RE .SH "OBTAINING TABLE INFORMATION WITH MYISAMCHK" -.\" table description: myisamchk -.\" tables: information -.\" examples: myisamchk output -.\" myisamchk: example output .PP To obtain a description of a MyISAM @@ -1642,7 +1514,7 @@ .sp Version of MyISAM -format\&. Currently always 1\&. +format\&. Always 1\&. .RE .sp .RS 4 @@ -2466,7 +2338,6 @@ is the sum of the amount of storage used by all such pointers\&. .RE .SH "MYISAMCHK MEMORY USAGE" -.\" memory usage: myisamchk .PP Memory allocation is important when you run \fBmyisamchk\fR\&. @@ -2592,7 +2463,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/myisam_ftdump.1 mysql-5.6-5.6.33/man/myisam_ftdump.1 --- mysql-5.6-5.6.27/man/myisam_ftdump.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/myisam_ftdump.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmyisam_ftdump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYISAM_FTDUMP\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYISAM_FTDUMP\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" myisam_ftdump .SH "NAME" myisam_ftdump \- display full\-text index information .SH "SYNOPSIS" @@ -160,8 +159,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: help option -.\" help option: myisam_ftdump \fB\-\-help\fR, \fB\-h\fR \fB\-?\fR @@ -177,8 +174,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: count option -.\" count option: myisam_ftdump \fB\-\-count\fR, \fB\-c\fR .sp @@ -193,8 +188,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: dump option -.\" dump option: myisam_ftdump \fB\-\-dump\fR, \fB\-d\fR .sp @@ -209,8 +202,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: length option -.\" length option: myisam_ftdump \fB\-\-length\fR, \fB\-l\fR .sp @@ -225,8 +216,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: stats option -.\" stats option: myisam_ftdump \fB\-\-stats\fR, \fB\-s\fR .sp @@ -241,8 +230,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisam_ftdump: verbose option -.\" verbose option: myisam_ftdump \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -251,7 +238,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/myisamlog.1 mysql-5.6-5.6.33/man/myisamlog.1 --- mysql-5.6-5.6.27/man/myisamlog.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/myisamlog.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmyisamlog\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYISAMLOG\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYISAMLOG\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" myisamlog .SH "NAME" myisamlog \- display MyISAM log file contents .SH "SYNOPSIS" @@ -228,7 +227,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/myisampack.1 mysql-5.6-5.6.33/man/myisampack.1 --- mysql-5.6-5.6.27/man/myisampack.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/myisampack.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmyisampack\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYISAMPACK\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYISAMPACK\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,10 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" myisampack -.\" compressed tables -.\" tables: compressed -.\" MyISAM: compressed tables .SH "NAME" myisampack \- generate compressed, read\-only MyISAM tables .SH "SYNOPSIS" @@ -132,8 +128,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: help option -.\" help option: myisampack \fB\-\-help\fR, \fB\-?\fR .sp @@ -148,8 +142,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: backup option -.\" backup option: myisampack \fB\-\-backup\fR, \fB\-b\fR .sp @@ -165,8 +157,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: character-sets-dir option -.\" character-sets-dir option: myisampack \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -181,8 +171,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: debug option -.\" debug option: myisampack \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -201,8 +189,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: force option -.\" force option: myisampack \fB\-\-force\fR, \fB\-f\fR .sp @@ -232,8 +218,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: join option -.\" join option: myisampack \fB\-\-join=\fR\fB\fIbig_tbl_name\fR\fR, \fB\-j \fR\fB\fIbig_tbl_name\fR\fR .sp @@ -245,13 +229,7 @@ \fIbig_tbl_name\fR must not exist prior to the join operation\&. All source tables named on the command line to be merged into \fIbig_tbl_name\fR -must exist\&. The source tables are read for the join operation but not modified\&. The join operation does not create a -\&.frm -file for -\fIbig_tbl_name\fR, so after the join operation finishes, copy the -\&.frm -file from one of the source tables and name it -\fIbig_tbl_name\fR\&.frm\&. +must exist\&. The source tables are read for the join operation but not modified\&. .RE .sp .RS 4 @@ -262,8 +240,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: silent option -.\" silent option: myisampack \fB\-\-silent\fR, \fB\-s\fR .sp @@ -278,8 +254,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: test option -.\" test option: myisampack \fB\-\-test\fR, \fB\-t\fR .sp @@ -294,8 +268,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: tmpdir option -.\" tmpdir option: myisampack \fB\-\-tmpdir=\fR\fB\fIdir_name\fR\fR, \fB\-T \fR\fB\fIdir_name\fR\fR .sp @@ -312,8 +284,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: verbose option -.\" verbose option: myisampack \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -328,8 +298,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: version option -.\" version option: myisampack \fB\-\-version\fR, \fB\-V\fR .sp @@ -344,8 +312,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" myisampack: wait option -.\" wait option: myisampack \fB\-\-wait\fR, \fB\-w\fR .sp @@ -355,7 +321,6 @@ \fBmyisampack\fR if the table might be updated by the server during the packing process\&. .RE -.\" examples: compressed tables .PP The following sequence of commands illustrates a typical table compression session: .sp @@ -860,7 +825,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/my_print_defaults.1 mysql-5.6-5.6.33/man/my_print_defaults.1 --- mysql-5.6-5.6.27/man/my_print_defaults.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/my_print_defaults.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmy_print_defaults\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMY_PRINT_DEFAULTS" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMY_PRINT_DEFAULTS" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" my_print_defaults .SH "NAME" my_print_defaults \- display options from option files .SH "SYNOPSIS" @@ -72,8 +71,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: help option -.\" help option: my_print_defaults \fB\-\-help\fR, \fB\-?\fR .sp @@ -88,11 +85,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: config-file option -.\" config-file option: my_print_defaults \fB\-\-config\-file=\fR\fB\fIfile_name\fR\fR, -.\" my_print_defaults: defaults-file option -.\" defaults-file option: my_print_defaults \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR, \fB\-c \fR\fB\fIfile_name\fR\fR .sp @@ -107,8 +100,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: debug option -.\" debug option: my_print_defaults \fB\-\-debug=\fR\fB\fIdebug_options\fR\fR, \fB\-# \fR\fB\fIdebug_options\fR\fR .sp @@ -127,11 +118,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: defaults-extra-file option -.\" defaults-extra-file option: my_print_defaults \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR, -.\" my_print_defaults: extra-file option -.\" extra-file option: my_print_defaults \fB\-\-extra\-file=\fR\fB\fIfile_name\fR\fR, \fB\-e \fR\fB\fIfile_name\fR\fR .sp @@ -146,8 +133,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: defaults-group-suffix option -.\" defaults-group-suffix option: my_print_defaults \fB\-\-defaults\-group\-suffix=\fR\fB\fIsuffix\fR\fR, \fB\-g \fR\fB\fIsuffix\fR\fR .sp @@ -162,7 +147,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" login-path option \fB\-\-login\-path=\fR\fB\fIname\fR\fR, \fB\-l \fR\fB\fIname\fR\fR .sp @@ -184,8 +168,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: no-defaults option -.\" no-defaults option: my_print_defaults \fB\-\-no\-defaults\fR, \fB\-n\fR .sp @@ -200,14 +182,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: show option -.\" show option: my_print_defaults \fB\-\-show\fR, \fB\-s\fR .sp As of MySQL 5\&.6\&.25, \fBmy_print_defaults\fR -masks passwords by defaults\&. Use this option to display passwords in cleartext\&. +masks passwords by default\&. Use this option to display passwords in cleartext\&. .RE .sp .RS 4 @@ -218,8 +198,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: verbose option -.\" verbose option: my_print_defaults \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -234,8 +212,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" my_print_defaults: version option -.\" version option: my_print_defaults \fB\-\-version\fR, \fB\-V\fR .sp @@ -244,7 +220,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql.1 mysql-5.6-5.6.33/man/mysql.1 --- mysql-5.6-5.6.27/man/mysql.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,12 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql -.\" command-line tool -.\" tools: command-line -.\" scripts: SQL -.\" SQL scripts -.\" batch SQL files .SH "NAME" mysql \- the MySQL command\-line tool .SH "SYNOPSIS" @@ -111,10 +105,6 @@ client logs statements executed interactively to a history file\&. See the section called \(lqMYSQL LOGGING\(rq\&. .SH "MYSQL OPTIONS" -.\" mysql command options -.\" command options: mysql -.\" options: command-line: mysql -.\" startup parameters: mysql .PP \fBmysql\fR supports the following options, which can be specified on the command line or in the @@ -132,8 +122,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: help option -.\" help option: mysql \fB\-\-help\fR, \fB\-?\fR .sp @@ -148,8 +136,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: auto-rehash option -.\" auto-rehash option: mysql \fB\-\-auto\-rehash\fR .sp Enable automatic rehashing\&. This option is on by default, which enables database, table, and column name completion\&. Use @@ -194,8 +180,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: auto-vertical-output option -.\" auto-vertical-output option: mysql \fB\-\-auto\-vertical\-output\fR .sp Cause result sets to be displayed vertically if they are too wide for the current window, and using normal tabular format otherwise\&. (This applies to statements terminated by @@ -212,8 +196,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: batch option -.\" batch option: mysql \fB\-\-batch\fR, \fB\-B\fR .sp @@ -234,8 +216,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: binary-mode option -.\" binary-mode option: mysql \fB\-\-binary\-mode\fR .sp This option helps when processing @@ -275,8 +255,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: bind-address option -.\" bind-address option: mysql \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -292,8 +270,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: character-sets-dir option -.\" character-sets-dir option: mysql \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -308,8 +284,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: column-names option -.\" column-names option: mysql \fB\-\-column\-names\fR .sp Write column names in results\&. @@ -323,8 +297,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: column-type-info option -.\" column-type-info option: mysql \fB\-\-column\-type\-info\fR .sp Display result set metadata\&. @@ -338,8 +310,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: comments option -.\" comments option: mysql \fB\-\-comments\fR, \fB\-c\fR .sp @@ -354,8 +324,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: compress option -.\" compress option: mysql \fB\-\-compress\fR, \fB\-C\fR .sp @@ -370,8 +338,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: connect-expired-password option -.\" connect-expired-password option: mysql \fB\-\-connect\-expired\-password\fR .sp Indicate to the server that the client can handle sandbox mode if the account used to connect has an expired password\&. This can be useful for noninteractive invocations of @@ -388,8 +354,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: database option -.\" database option: mysql \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-D \fR\fB\fIdb_name\fR\fR .sp @@ -404,8 +368,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: debug option -.\" debug option: mysql \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -414,6 +376,11 @@ string is d:t:o,\fIfile_name\fR\&. The default is d:t:o,/tmp/mysql\&.trace\&. +.sp +This option is available only if MySQL was built using +\fBWITH_DEBUG\fR\&. MySQL release binaries provided by Oracle are +\fInot\fR +built using this option\&. .RE .sp .RS 4 @@ -424,8 +391,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: debug-check option -.\" debug-check option: mysql \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -439,8 +404,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: debug-info option -.\" debug-info option: mysql \fB\-\-debug\-info\fR, \fB\-T\fR .sp @@ -455,8 +418,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: default-auth option -.\" default-auth option: mysql \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -471,24 +432,19 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: default-character-set option -.\" default-character-set option: mysql \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use \fIcharset_name\fR as the default character set for the client and connection\&. .sp -A common issue that can occur when the operating system uses -utf8 -or another multibyte character set is that output from the -\fBmysql\fR -client is formatted incorrectly, due to the fact that the MySQL client uses the -latin1 -character set by default\&. You can usually fix such issues by using this option to force the client to use the system character set instead\&. +This option can be useful if the operating system uses one character set and the +\fBmysql\fR +client by default uses another\&. In this case, output may be formatted incorrectly\&. You can usually fix such issues by using this option to force the client to use the system character set instead\&. .sp -See -Section\ \&10.5, \(lqCharacter Set Configuration\(rq, for more information\&. +For more information, see +Section\ \&10.1.5, \(lqConnection Character Sets and Collations\(rq, and +Section\ \&10.5, \(lqCharacter Set Configuration\(rq\&. .RE .sp .RS 4 @@ -499,8 +455,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: defaults-extra-file option -.\" defaults-extra-file option: mysql \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -516,8 +470,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: defaults-file option -.\" defaults-file option: mysql \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -533,8 +485,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: defaults-group-suffix option -.\" defaults-group-suffix option: mysql \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -563,8 +513,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: delimiter option -.\" delimiter option: mysql \fB\-\-delimiter=\fR\fB\fIstr\fR\fR .sp Set the statement delimiter\&. The default is the semicolon character (\(lq;\(rq)\&. @@ -578,8 +526,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: disable named commands -.\" disable named command: mysql \fB\-\-disable\-named\-commands\fR .sp Disable named commands\&. Use the @@ -600,14 +546,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: enable-cleartext-plugin option -.\" enable-cleartext-plugin option: mysql \fB\-\-enable\-cleartext\-plugin\fR .sp Enable the mysql_clear_password cleartext authentication plugin\&. (See -Section\ \&6.3.8.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. .RE .sp .RS 4 @@ -618,8 +562,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: execute option -.\" execute option: mysql \fB\-\-execute=\fR\fB\fIstatement\fR\fR, \fB\-e \fR\fB\fIstatement\fR\fR .sp @@ -638,8 +580,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: force option -.\" force option: mysql \fB\-\-force\fR, \fB\-f\fR .sp @@ -654,8 +594,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: histignore option -.\" histignore option: mysql \fB\-\-histignore\fR .sp A colon\-separated list of one or more patterns specifying statements to ignore for logging purposes\&. These patterns are added to the default pattern list ("*IDENTIFIED*:*PASSWORD*")\&. The value specified for this option affects logging of statements written to the history file\&. For more information, see @@ -670,8 +608,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: host option -.\" host option: mysql \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -686,8 +622,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: html option -.\" html option: mysql \fB\-\-html\fR, \fB\-H\fR .sp @@ -702,8 +636,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: ignore-spaces option -.\" ignore-spaces option: mysql \fB\-\-ignore\-spaces\fR, \fB\-i\fR .sp @@ -721,8 +653,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: init-command option -.\" init-command option: mysql \fB\-\-init\-command=str\fR .sp SQL statement to execute after connecting to the server\&. If auto\-reconnect is enabled, the statement is executed again after reconnection occurs\&. @@ -736,8 +666,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: line-numbers option -.\" line-numbers option: mysql \fB\-\-line\-numbers\fR .sp Write line numbers for errors\&. Disable this with @@ -752,8 +680,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: local-infile option -.\" local-infile option: mysql \fB\-\-local\-infile[={0|1}]\fR .sp Enable or disable @@ -778,8 +704,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: login-path option -.\" login-path option: mysql \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -800,8 +724,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: named-commands option -.\" named-commands option: mysql \fB\-\-named\-commands\fR, \fB\-G\fR .sp @@ -825,8 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: no-auto-rehash option -.\" no-auto-rehash option: mysql \fB\-\-no\-auto\-rehash\fR, \fB\-A\fR .sp @@ -843,8 +763,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: no-beep option -.\" no-beep option: mysql \fB\-\-no\-beep\fR, \fB\-b\fR .sp @@ -859,8 +777,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: no-defaults option -.\" no-defaults option: mysql \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -886,8 +802,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: one-database option -.\" one-database option: mysql \fB\-\-one\-database\fR, \fB\-o\fR .sp @@ -990,8 +904,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: pager option -.\" pager option: mysql \fB\-\-pager[=\fR\fB\fIcommand\fR\fR\fB]\fR .sp Use the given command for paging query output\&. If the command is omitted, the default pager is the value of your @@ -1012,8 +924,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: password option -.\" password option: mysql \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -1041,8 +951,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: pipe option -.\" pipe option: mysql \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -1057,8 +965,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: plugin-dir option -.\" plugin-dir option: mysql \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -1077,9 +983,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: port option -.\" port option: mysql -.\" TCP/IP \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -1094,8 +997,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: print-defaults option -.\" print-defaults option: mysql \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -1109,8 +1010,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: prompt option -.\" prompt option: mysql \fB\-\-prompt=\fR\fB\fIformat_str\fR\fR .sp Set the prompt to the specified format\&. The default is @@ -1126,8 +1025,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: protocol option -.\" protocol option: mysql \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -1142,8 +1039,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: quick option -.\" quick option: mysql \fB\-\-quick\fR, \fB\-q\fR .sp @@ -1160,8 +1055,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: raw option -.\" raw option: mysql \fB\-\-raw\fR, \fB\-r\fR .sp @@ -1215,8 +1108,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: reconnect option -.\" reconnect option: mysql \fB\-\-reconnect\fR .sp If the connection to the server is lost, automatically try to reconnect\&. A single reconnect attempt is made each time the connection is lost\&. To suppress reconnection behavior, use @@ -1231,10 +1122,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: safe-updates option -.\" safe-updates option: mysql -.\" mysql: i-am-a-dummy option -.\" i-am-a-dummy option: mysql \fB\-\-safe\-updates\fR, \fB\-\-i\-am\-a\-dummy\fR, \fB\-U\fR @@ -1257,8 +1144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: secure-auth option -.\" secure-auth option: mysql \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. As of MySQL 5\&.6\&.7, this option is enabled by default; use @@ -1277,7 +1162,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -1290,8 +1190,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: server-public-key-path option -.\" server-public-key-path option: mysql \fB\-\-server\-public\-key\-path=\fR\fBfile_name\fR .sp The path name to a file containing the server RSA public key\&. The file must be in PEM format\&. The public key is used for RSA encryption of the client password for connections to the server made using accounts that authenticate with the @@ -1303,7 +1201,7 @@ For additional discussion regarding use of the sha256_password plugin, including how to get the RSA public key, see -Section\ \&6.3.8.4, \(lqThe SHA-256 Authentication Plugin\(rq\&. +Section\ \&6.5.1.4, \(lqThe SHA-256 Authentication Plugin\(rq\&. .sp This option is available only if MySQL was built using OpenSSL\&. It was added in MySQL 5\&.6\&.6 under the name \fB\-\-server\-public\-key\fR @@ -1319,8 +1217,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: shared-memory-base-name option -.\" shared-memory-base-name option: mysql \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -1339,8 +1235,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: show-warnings option -.\" show-warnings option: mysql \fB\-\-show\-warnings\fR .sp Cause warnings to be shown after each statement if there are any\&. This option applies to interactive and batch mode\&. @@ -1354,8 +1248,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: sigint-ignore option -.\" sigint-ignore option: mysql \fB\-\-sigint\-ignore\fR .sp Ignore @@ -1372,8 +1264,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: silent option -.\" silent option: mysql \fB\-\-silent\fR, \fB\-s\fR .sp @@ -1392,8 +1282,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: skip-column-names option -.\" skip-column-names option: mysql \fB\-\-skip\-column\-names\fR, \fB\-N\fR .sp @@ -1408,8 +1296,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: skip-line-numbers option -.\" skip-line-numbers option: mysql \fB\-\-skip\-line\-numbers\fR, \fB\-L\fR .sp @@ -1424,8 +1310,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: socket option -.\" socket option: mysql \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -1441,14 +1325,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: SSL options -.\" SSL options: mysql \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -1459,8 +1341,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: table option -.\" table option: mysql \fB\-\-table\fR, \fB\-t\fR .sp @@ -1475,8 +1355,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: tee option -.\" tee option: mysql \fB\-\-tee=\fR\fB\fIfile_name\fR\fR .sp Append a copy of output to the given file\&. This option works only in interactive mode\&. @@ -1491,8 +1369,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: unbuffered option -.\" unbuffered option: mysql \fB\-\-unbuffered\fR, \fB\-n\fR .sp @@ -1507,8 +1383,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: user option -.\" user option: mysql \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -1523,8 +1397,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: verbose option -.\" verbose option: mysql \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1541,8 +1413,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: version option -.\" version option: mysql \fB\-\-version\fR, \fB\-V\fR .sp @@ -1557,8 +1427,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: vertical option -.\" vertical option: mysql \fB\-\-vertical\fR, \fB\-E\fR .sp @@ -1574,8 +1442,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: wait option -.\" wait option: mysql \fB\-\-wait\fR, \fB\-w\fR .sp @@ -1590,8 +1456,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: xml option -.\" xml option: mysql \fB\-\-xml\fR, \fB\-X\fR .sp @@ -1661,8 +1525,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" timeout: connect_timeout variable -.\" connect_timeout variable connect_timeout .sp The number of seconds before connection timeout\&. (Default value is @@ -1677,7 +1539,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" max_allowed_packet variable max_allowed_packet .sp The maximum size of the buffer for client/server communication\&. The default is 16MB, the maximum is 1GB\&. @@ -1691,7 +1552,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" max_join_size variable max_join_size .sp The automatic limit for rows in a join when using @@ -1706,7 +1566,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" net_buffer_length variable net_buffer_length .sp The buffer size for TCP/IP and socket communication\&. (Default value is 16KB\&.) @@ -1720,7 +1579,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" select_limit variable select_limit .sp The automatic limit for @@ -1740,7 +1598,6 @@ at the mysql> prompt: -.\" mysql commands: list of .sp .if n \{\ .RS 4 @@ -1799,7 +1656,7 @@ .PP Each command has both a long and short form\&. The long form is not case sensitive; the short form is\&. The long form can be followed by an optional semicolon terminator, but the short form should not\&. .PP -The use of short\-form commands within multi\-line +The use of short\-form commands within multiple\-line /* \&.\&.\&. */ comments is not supported\&. .sp @@ -1811,8 +1668,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: help command -.\" help command: mysql help [\fIarg\fR], \eh [\fIarg\fR], \e? [\fIarg\fR], @@ -1827,7 +1682,7 @@ command, \fBmysql\fR uses it as a search string to access server\-side help from the contents of the MySQL Reference Manual\&. For more information, see -the section called \(lqMYSQL SERVER-SIDE HELP\(rq\&. +the section called \(lqMYSQL SERVER\-SIDE HELP\(rq\&. .RE .sp .RS 4 @@ -1838,8 +1693,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: charset command -.\" charset command: mysql charset \fIcharset_name\fR, \eC \fIcharset_name\fR .sp @@ -1858,8 +1711,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: clear command -.\" clear command: mysql clear, \ec .sp @@ -1874,8 +1725,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: connect command -.\" connect command: mysql connect [\fIdb_name\fR \fIhost_name\fR]], \er [\fIdb_name\fR \fIhost_name\fR]] .sp @@ -1890,8 +1739,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: delimiter command -.\" delimiter command: mysql delimiter \fIstr\fR, \ed \fIstr\fR .sp @@ -1932,8 +1779,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: edit command -.\" edit command: mysql edit, \ee .sp @@ -1960,8 +1805,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: ego command -.\" ego command: mysql ego, \eG .sp @@ -1976,8 +1819,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: exit command -.\" exit command: mysql exit, \eq .sp @@ -1993,8 +1834,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: go command -.\" go command: mysql go, \eg .sp @@ -2009,8 +1848,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: nopager command -.\" nopager command: mysql nopager, \en .sp @@ -2030,8 +1867,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: notee command -.\" notee command: mysql notee, \et .sp @@ -2047,8 +1882,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: nowarning command -.\" nowarning command: mysql nowarning, \ew .sp @@ -2063,8 +1896,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: pager command -.\" pager command: mysql pager [\fIcommand\fR], \eP [\fIcommand\fR] .sp @@ -2103,8 +1934,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: print command -.\" print command: mysql print, \ep .sp @@ -2119,8 +1948,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: prompt command -.\" prompt command: mysql prompt [\fIstr\fR], \eR [\fIstr\fR] .sp @@ -2144,8 +1971,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: quit command -.\" quit command: mysql quit, \eq .sp @@ -2161,8 +1986,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: rehash command -.\" rehash command: mysql rehash, \e# .sp @@ -2179,8 +2002,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: source command -.\" source command: mysql source \fIfile_name\fR, \e\&. \fIfile_name\fR .sp @@ -2198,8 +2019,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: status command -.\" status command: mysql status, \es .sp @@ -2220,8 +2039,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: system command -.\" system command: mysql system \fIcommand\fR, \e! \fIcommand\fR .sp @@ -2240,8 +2057,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: tee command -.\" tee command: mysql tee [\fIfile_name\fR], \eT [\fIfile_name\fR] .sp @@ -2271,8 +2086,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: use command -.\" use command: mysql use \fIdb_name\fR, \eu \fIdb_name\fR .sp @@ -2289,8 +2102,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql: warnings command -.\" warnings command: mysql warnings, \eW .sp @@ -2455,7 +2266,6 @@ tee file logging can be turned on and off interactively from within \fBmysql\fR\&. This is useful when you want to log some queries to a file, but not others\&. -.\" mysql prompt command .PP The prompt @@ -2781,15 +2591,6 @@ .\} .RE .SH "MYSQL LOGGING" -.\" MYSQL_HISTFILE environment variable -.\" environment variable: MYSQL_HISTFILE -.\" MYSQL_HISTIGNORE environment variable -.\" environment variable: MYSQL_HISTIGNORE -.\" HOME environment variable -.\" environment variable: HOME -.\" mysql history file -.\" command-line history: mysql -.\" .mysql_history file .PP On Unix, the \fBmysql\fR @@ -2863,7 +2664,7 @@ mysql> \fBSELECT\fR \-> \fB\*(AqToday is\*(Aq\fR \-> \fB,\fR - \-> \fBCONCAT()\fR + \-> \fBCURDATE()\fR \-> \fB;\fR .fi .if n \{\ @@ -2876,7 +2677,7 @@ \(lqSELECT\(rq, \(lq\*(AqToday is\*(Aq\(rq, \(lq,\(rq, -\(lqCONCAT()\(rq, and +\(lqCURDATE()\(rq, and \(lq;\(rq lines as it reads them\&. It also logs the complete statement, after mapping SELECT\en\*(AqToday is\*(Aq\en,\enCURDATE() @@ -3000,7 +2801,7 @@ .RE .\} .RE -.SH "MYSQL SERVER-SIDE HELP" +.SH "MYSQL SERVER\-SIDE HELP" .sp .if n \{\ .RS 4 @@ -3019,7 +2820,7 @@ uses it as a search string to access server\-side help from the contents of the MySQL Reference Manual\&. The proper operation of this command requires that the help tables in the mysql database be initialized with help topic information (see -Section\ \&5.1.10, \(lqServer-Side Help\(rq)\&. +Section\ \&5.1.9, \(lqServer-Side Help\(rq)\&. .PP If there is no match for the search string, the search fails: .sp @@ -3144,15 +2945,6 @@ .RE .\} .SH "EXECUTING SQL STATEMENTS FROM A TEXT FILE" -.\" executing SQL statements from text files -.\" importing: data -.\" data: importing -.\" files: text -.\" text files: importing -.\" source (mysql client command) -.\" \. (mysql client command) -.\" mysql source (command for reading from text files) -.\" mysql \. (command for reading from text files) .PP The \fBmysql\fR @@ -3262,7 +3054,7 @@ and right\-arrow keys move horizontally within the current input line, and the -up\-arror +up\-arrow and down\-arrow keys move up and down through the set of previously entered lines\&. @@ -3440,7 +3232,6 @@ .RE .\} .SS "Using the \-\-safe\-updates Option" -.\" safe-updates option .PP For beginners, a useful startup option is \fB\-\-safe\-updates\fR @@ -3595,7 +3386,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlaccess.1 mysql-5.6-5.6.33/man/mysqlaccess.1 --- mysql-5.6-5.6.27/man/mysqlaccess.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlaccess.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlaccess\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLACCESS\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLACCESS\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlaccess .SH "NAME" mysqlaccess \- client for checking access privileges .SH "SYNOPSIS" @@ -89,8 +88,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: help option -.\" help option: mysqlaccess \fB\-\-help\fR, \fB\-?\fR .sp @@ -105,8 +102,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: brief option -.\" brief option: mysqlaccess \fB\-\-brief\fR, \fB\-b\fR .sp @@ -121,8 +116,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: commit option -.\" commit option: mysqlaccess \fB\-\-commit\fR .sp Copy the new access privileges from the temporary tables to the original grant tables\&. The grant tables must be flushed for the new privileges to take effect\&. (For example, execute a @@ -138,8 +131,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: copy option -.\" copy option: mysqlaccess \fB\-\-copy\fR .sp Reload the temporary grant tables from original ones\&. @@ -153,8 +144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: db option -.\" db option: mysqlaccess \fB\-\-db=\fR\fB\fIdb_name\fR\fR, \fB\-d \fR\fB\fIdb_name\fR\fR .sp @@ -169,8 +158,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: debug option -.\" debug option: mysqlaccess \fB\-\-debug=\fR\fB\fIN\fR\fR .sp Specify the debug level\&. @@ -186,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: host option -.\" host option: mysqlaccess \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -202,8 +187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: howto option -.\" howto option: mysqlaccess \fB\-\-howto\fR .sp Display some examples that show how to use @@ -218,8 +201,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: old_server option -.\" old_server option: mysqlaccess \fB\-\-old_server\fR .sp Assume that the server is an old MySQL server (before MySQL 3\&.21) that does not yet know how to handle full @@ -235,8 +216,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: password option -.\" password option: mysqlaccess \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -262,8 +241,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: plan option -.\" plan option: mysqlaccess \fB\-\-plan\fR .sp Display suggestions and ideas for future releases\&. @@ -277,8 +254,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: preview option -.\" preview option: mysqlaccess \fB\-\-preview\fR .sp Show the privilege differences after making changes to the temporary grant tables\&. @@ -292,8 +267,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: relnotes option -.\" relnotes option: mysqlaccess \fB\-\-relnotes\fR .sp Display the release notes\&. @@ -307,8 +280,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: rhost option -.\" rhost option: mysqlaccess \fB\-\-rhost=\fR\fB\fIhost_name\fR\fR, \fB\-H \fR\fB\fIhost_name\fR\fR .sp @@ -323,8 +294,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: rollback option -.\" rollback option: mysqlaccess \fB\-\-rollback\fR .sp Undo the most recent changes to the temporary grant tables\&. @@ -338,8 +307,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: spassword option -.\" spassword option: mysqlaccess \fB\-\-spassword[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-P[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -365,8 +332,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: superuser option -.\" superuser option: mysqlaccess \fB\-\-superuser=\fR\fB\fIuser_name\fR\fR, \fB\-U \fR\fB\fIuser_name\fR\fR .sp @@ -381,8 +346,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: table option -.\" table option: mysqlaccess \fB\-\-table\fR, \fB\-t\fR .sp @@ -397,8 +360,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: user option -.\" user option: mysqlaccess \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -413,8 +374,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlaccess: version option -.\" version option: mysqlaccess \fB\-\-version\fR, \fB\-v\fR .sp @@ -448,7 +407,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqladmin.1 mysql-5.6-5.6.33/man/mysqladmin.1 --- mysql-5.6-5.6.27/man/mysqladmin.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqladmin.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqladmin\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLADMIN\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLADMIN\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,9 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqladmin -.\" administration: server -.\" server administration .SH "NAME" mysqladmin \- client for administering a MySQL server .SH "SYNOPSIS" @@ -215,7 +212,7 @@ .sp -1 .IP \(bu 2.3 .\} -old\-password \fInew\-password\fR +old\-password \fInew_password\fR .sp This is like the password @@ -231,10 +228,10 @@ .sp -1 .IP \(bu 2.3 .\} -password \fInew\-password\fR +password \fInew_password\fR .sp Set a new password\&. This changes the password to -\fInew\-password\fR +\fInew_password\fR for the account that you use with \fBmysqladmin\fR for connecting to the server\&. Thus, the next time you invoke @@ -242,7 +239,7 @@ (or any other client program) using the same account, you will need to specify the new password\&. .sp If the -\fInew\-password\fR +\fInew_password\fR value contains spaces or other characters that are special to your command interpreter, you need to enclose it within quotation marks\&. On Windows, be sure to use double quotation marks rather than single quotation marks; single quotation marks are not stripped from the password, but rather are interpreted as part of the password\&. For example: .sp .if n \{\ @@ -449,8 +446,6 @@ .if n \{\ .RE .\} -.sp -.\" status command: results .PP The \fBmysqladmin status\fR @@ -464,7 +459,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" uptime Uptime .sp The number of seconds the MySQL server has been running\&. @@ -478,7 +472,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" threads Threads .sp The number of active threads (clients)\&. @@ -492,7 +485,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" questions Questions .sp The number of questions (queries) from clients since the server was started\&. @@ -506,13 +498,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" slow queries Slow queries .sp The number of queries that have taken more than long_query_time seconds\&. See -Section\ \&5.2.5, \(lqThe Slow Query Log\(rq\&. +Section\ \&5.4.5, \(lqThe Slow Query Log\(rq\&. .RE .sp .RS 4 @@ -523,7 +514,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" opens Opens .sp The number of tables the server has opened\&. @@ -537,8 +527,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" flush tables -.\" tables: flush Flush tables .sp The number of @@ -556,7 +544,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" open tables Open tables .sp The number of tables that currently are open\&. @@ -567,10 +554,6 @@ when connecting to a local server using a Unix socket file, \fBmysqladmin\fR waits until the server\*(Aqs process ID file has been removed, to ensure that the server has stopped properly\&. -.\" mysqladmin command options -.\" command options: mysqladmin -.\" options: command-line: mysqladmin -.\" startup parameters: mysqladmin .PP \fBmysqladmin\fR supports the following options, which can be specified on the command line or in the @@ -588,8 +571,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: help option -.\" help option: mysqladmin \fB\-\-help\fR, \fB\-?\fR .sp @@ -604,8 +585,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: bind-address option -.\" bind-address option: mysqladmin \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -621,8 +600,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: character-sets-dir option -.\" character-sets-dir option: mysqladmin \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -637,8 +614,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: compress option -.\" compress option: mysqladmin \fB\-\-compress\fR, \fB\-C\fR .sp @@ -653,8 +628,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: count option -.\" count option: mysqladmin \fB\-\-count=\fR\fB\fIN\fR\fR, \fB\-c \fR\fB\fIN\fR\fR .sp @@ -671,8 +644,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: debug option -.\" debug option: mysqladmin \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -691,8 +662,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: debug-check option -.\" debug-check option: mysqladmin \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -706,8 +675,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: debug-info option -.\" debug-info option: mysqladmin \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -721,8 +688,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: default-auth option -.\" default-auth option: mysqladmin \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -737,8 +702,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: default-character-set option -.\" default-character-set option: mysqladmin \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -755,8 +718,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: defaults-extra-file option -.\" defaults-extra-file option: mysqladmin \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -772,8 +733,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: defaults-file option -.\" defaults-file option: mysqladmin \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -789,8 +748,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: defaults-group-suffix option -.\" defaults-group-suffix option: mysqladmin \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -819,14 +776,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: enable-cleartext-plugin option -.\" enable-cleartext-plugin option: mysqladmin \fB\-\-enable\-cleartext\-plugin\fR .sp Enable the mysql_clear_password cleartext authentication plugin\&. (See -Section\ \&6.3.8.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. .RE .sp .RS 4 @@ -837,8 +792,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: force option -.\" force option: mysqladmin \fB\-\-force\fR, \fB\-f\fR .sp @@ -855,8 +808,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: host option -.\" host option: mysqladmin \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -871,8 +822,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: login-path option -.\" login-path option: mysqladmin \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -893,8 +842,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: no-beep option -.\" no-beep option: mysqladmin \fB\-\-no\-beep\fR, \fB\-b\fR .sp @@ -909,8 +856,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: no-defaults option -.\" no-defaults option: mysqladmin \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -936,8 +881,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: password option -.\" password option: mysqladmin \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -965,8 +908,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: pipe option -.\" pipe option: mysqladmin \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -981,8 +922,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: plugin-dir option -.\" plugin-dir option: mysqladmin \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -1001,8 +940,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: port option -.\" port option: mysqladmin \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -1017,8 +954,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: print-defaults option -.\" print-defaults option: mysqladmin \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -1032,8 +967,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: protocol option -.\" protocol option: mysqladmin \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -1048,8 +981,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: relative option -.\" relative option: mysqladmin \fB\-\-relative\fR, \fB\-r\fR .sp @@ -1068,8 +999,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: secure-auth option -.\" secure-auth option: mysqladmin \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -1088,7 +1017,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -1101,8 +1045,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: shared-memory-base-name option -.\" shared-memory-base-name option: mysqladmin \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -1121,8 +1063,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: silent option -.\" silent option: mysqladmin \fB\-\-silent\fR, \fB\-s\fR .sp @@ -1137,8 +1077,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: sleep option -.\" sleep option: mysqladmin \fB\-\-sleep=\fR\fB\fIdelay\fR\fR, \fB\-i \fR\fB\fIdelay\fR\fR .sp @@ -1161,8 +1099,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: socket option -.\" socket option: mysqladmin \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -1178,14 +1114,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: SSL options -.\" SSL options: mysqladmin \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -1196,8 +1130,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: user option -.\" user option: mysqladmin \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -1212,8 +1144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: verbose option -.\" verbose option: mysqladmin \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1228,8 +1158,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: version option -.\" version option: mysqladmin \fB\-\-version\fR, \fB\-V\fR .sp @@ -1244,8 +1172,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: vertical option -.\" vertical option: mysqladmin \fB\-\-vertical\fR, \fB\-E\fR .sp @@ -1261,8 +1187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqladmin: wait option -.\" wait option: mysqladmin \fB\-\-wait[=\fR\fB\fIcount\fR\fR\fB]\fR, \fB\-w[\fR\fB\fIcount\fR\fR\fB]\fR .sp @@ -1282,8 +1206,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" connect_timeout variable -.\" timeout: connect_timeout variable connect_timeout .sp The maximum number of seconds before connection timeout\&. The default value is 43200 (12 hours)\&. @@ -1297,8 +1219,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" shutdown_timeout variable -.\" timeout: shutdown_timeout variable shutdown_timeout .sp The maximum number of seconds to wait for server shutdown\&. The default value is 3600 (1 hour)\&. @@ -1306,7 +1226,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlbinlog.1 mysql-5.6-5.6.33/man/mysqlbinlog.1 --- mysql-5.6-5.6.27/man/mysqlbinlog.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlbinlog.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlbinlog\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLBINLOG\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLBINLOG\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlbinlog .SH "NAME" mysqlbinlog \- utility for processing binary log files .SH "SYNOPSIS" @@ -42,7 +41,7 @@ utility\&. You can also use \fBmysqlbinlog\fR to display the contents of relay log files written by a slave server in a replication setup because relay logs have the same format as binary logs\&. The binary log and relay log are discussed further in -Section\ \&5.2.4, \(lqThe Binary Log\(rq, and +Section\ \&5.4.4, \(lqThe Binary Log\(rq, and Section\ \&17.2.2, \(lqReplication Relay and Status Logs\(rq\&. .PP Invoke @@ -168,8 +167,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: help option -.\" help option: mysqlbinlog \fB\-\-help\fR, \fB\-?\fR .sp @@ -184,8 +181,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: base64-output option -.\" base64-output option: mysqlbinlog \fB\-\-base64\-output=\fR\fB\fIvalue\fR\fR .sp This option determines when events should be displayed encoded as base\-64 strings using @@ -285,8 +280,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: bind-address option -.\" bind-address option: mysqlbinlog \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -302,8 +295,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: binlog-row-event-max-size option -.\" binlog-row-event-max-size option: mysqlbinlog \fB\-\-binlog\-row\-event\-max\-size=\fR\fB\fIN\fR\fR .TS allbox tab(:); @@ -352,8 +343,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: character-sets-dir option -.\" character-sets-dir option: mysqlbinlog \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -368,8 +357,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: connection-server-id option -.\" connection-server-id option: mysqlbinlog \fB\-\-connection\-server\-id=\fR\fB\fIserver_id\fR\fR .sp This option is used to test a MySQL server for support of the @@ -393,8 +380,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: database option -.\" database option: mysqlbinlog \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-d \fR\fB\fIdb_name\fR\fR .sp @@ -512,8 +497,7 @@ statements following USE db2\&. .PP -\fBRow-based logging\fR. -\fBmysqlbinlog\fR +\fBRow-based logging\fR. \fBmysqlbinlog\fR outputs only entries that change tables belonging to \fIdb_name\fR\&. The default database has no effect on this\&. Suppose that the binary log just described was created using row\-based logging rather than statement\-based logging\&. \fBmysqlbinlog \-\-database=test\fR @@ -546,8 +530,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: debug option -.\" debug option: mysqlbinlog \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -566,8 +548,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: debug-check option -.\" debug-check option: mysqlbinlog \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -581,8 +561,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: debug-info option -.\" debug-info option: mysqlbinlog \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -596,8 +574,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: default-auth option -.\" default-auth option: mysqlbinlog \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -614,8 +590,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: defaults-extra-file option -.\" defaults-extra-file option: mysqlbinlog \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -631,8 +605,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: defaults-file option -.\" defaults-file option: mysqlbinlog \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -648,8 +620,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: defaults-group-suffix option -.\" defaults-group-suffix option: mysqlbinlog \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -678,8 +648,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: disable-log-bin option -.\" disable-log-bin option: mysqlbinlog \fB\-\-disable\-log\-bin\fR, \fB\-D\fR .sp @@ -708,8 +676,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: exclude-gtids option -.\" exclude-gtids option: mysqlbinlog \fB\-\-exclude\-gtids=\fR\fB\fIgtid_set\fR\fR .sp Do not display any of the groups listed in the @@ -724,8 +690,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: force-if-open option -.\" force-if-open option: mysqlbinlog \fB\-\-force\-if\-open\fR, \fB\-F\fR .sp @@ -740,8 +704,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: force-read option -.\" force-read option: mysqlbinlog \fB\-\-force\-read\fR, \fB\-f\fR .sp @@ -760,8 +722,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: hexdump option -.\" hexdump option: mysqlbinlog \fB\-\-hexdump\fR, \fB\-H\fR .sp @@ -777,8 +737,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: host option -.\" host option: mysqlbinlog \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -793,8 +751,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: include-gtids option -.\" include-gtids option: mysqlbinlog \fB\-\-include\-gtids=\fR\fB\fIgtid_set\fR\fR .sp Display only the groups listed in the @@ -809,8 +765,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: local-load option -.\" local-load option: mysqlbinlog \fB\-\-local\-load=\fR\fB\fIdir_name\fR\fR, \fB\-l \fR\fB\fIdir_name\fR\fR .sp @@ -844,8 +798,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: login-path option -.\" login-path option: mysqlbinlog \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -866,8 +818,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: no-defaults option -.\" no-defaults option: mysqlbinlog \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -893,8 +843,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: offset option -.\" offset option: mysqlbinlog \fB\-\-offset=\fR\fB\fIN\fR\fR, \fB\-o \fR\fB\fIN\fR\fR .sp @@ -911,8 +859,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: password option -.\" password option: mysqlbinlog \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -940,8 +886,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: plugin-dir option -.\" plugin-dir option: mysqlbinlog \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -962,10 +906,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: port option -.\" port option: mysqlbinlog -.\" TCP/IP -.\" ports \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -980,8 +920,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: print-defaults option -.\" print-defaults option: mysqlbinlog \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -995,8 +933,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: protocol option -.\" protocol option: mysqlbinlog \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -1011,8 +947,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: raw option -.\" raw option: mysqlbinlog \fB\-\-raw\fR .sp By default, @@ -1049,8 +983,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: read-from-remote-master option -.\" read-from-remote-master option: mysqlbinlog \fB\-\-read\-from\-remote\-master=\fR\fB\fItype\fR\fR .sp Read binary logs from a MySQL server with the @@ -1079,8 +1011,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: read-from-remote-server option -.\" read-from-remote-server option: mysqlbinlog \fB\-\-read\-from\-remote\-server\fR, \fB\-R\fR .sp @@ -1106,8 +1036,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: result-file option -.\" result-file option: mysqlbinlog \fB\-\-result\-file=\fR\fB\fIname\fR\fR, \fB\-r \fR\fB\fIname\fR\fR .sp @@ -1131,8 +1059,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: secure-auth option -.\" secure-auth option: mysqlbinlog \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -1151,7 +1077,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -1164,8 +1105,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: server-id option -.\" server-id option: mysqlbinlog \fB\-\-server\-id=\fR\fB\fIid\fR\fR .sp Display only those events created by the server having the given server ID\&. @@ -1179,8 +1118,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: server-id-bits option -.\" server-id-bits option: mysqlbinlog \fB\-\-server\-id\-bits=\fR\fB\fIN\fR\fR .sp Use only the first @@ -1208,8 +1145,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: set-charset option -.\" set-charset option: mysqlbinlog \fB\-\-set\-charset=\fR\fB\fIcharset_name\fR\fR .sp Add a @@ -1225,8 +1160,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: shared-memory-base-name option -.\" shared-memory-base-name option: mysqlbinlog \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -1245,8 +1178,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: short-form option -.\" short-form option: mysqlbinlog \fB\-\-short\-form\fR, \fB\-s\fR .sp @@ -1261,8 +1192,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: skip-gtids option -.\" skip-gtids option: mysqlbinlog \fB\-\-skip\-gtids[=(true|false)]\fR .sp Do not display any GTIDs in the output\&. This is needed when writing to a dump file from one or more binary logs containing GTIDs, as shown in this example: @@ -1292,8 +1221,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: socket option -.\" socket option: mysqlbinlog \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -1309,8 +1236,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: start-datetime option -.\" start-datetime option: mysqlbinlog \fB\-\-start\-datetime=\fR\fB\fIdatetime\fR\fR .sp Start reading the binary log at the first event having a timestamp equal to or later than the @@ -1346,8 +1271,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: start-position option -.\" start-position option: mysqlbinlog \fB\-\-start\-position=\fR\fB\fIN\fR\fR, \fB\-j \fR\fB\fIN\fR\fR .sp @@ -1366,8 +1289,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: stop-datetime option -.\" stop-datetime option: mysqlbinlog \fB\-\-stop\-datetime=\fR\fB\fIdatetime\fR\fR .sp Stop reading the binary log at the first event having a timestamp equal to or later than the @@ -1390,8 +1311,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: stop-never option -.\" stop-never option: mysqlbinlog \fB\-\-stop\-never\fR .sp This option is used with @@ -1422,8 +1341,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: stop-never-slave-server-id option -.\" stop-never-slave-server-id option: mysqlbinlog \fB\-\-stop\-never\-slave\-server\-id=\fR\fB\fIid\fR\fR .sp With @@ -1447,8 +1364,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: stop-position option -.\" stop-position option: mysqlbinlog \fB\-\-stop\-position=\fR\fB\fIN\fR\fR .sp Stop reading the binary log at the first event having a position equal to or greater than @@ -1466,8 +1381,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: to-last-log option -.\" to-last-log option: mysqlbinlog \fB\-\-to\-last\-log\fR, \fB\-t\fR .sp @@ -1483,8 +1396,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: user option -.\" user option: mysqlbinlog \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -1499,8 +1410,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: verbose option -.\" verbose option: mysqlbinlog \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1522,8 +1431,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: verify-binlog-checksum option -.\" verify-binlog-checksum option: mysqlbinlog \fB\-\-verify\-binlog\-checksum\fR, \fB\-c\fR .sp @@ -1538,8 +1445,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlbinlog: version option -.\" version option: mysqlbinlog \fB\-\-version\fR, \fB\-V\fR .sp @@ -1562,7 +1467,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" open_files_limit variable open_files_limit .sp Specify the number of open file descriptors to reserve\&. @@ -2114,7 +2018,7 @@ .sp -1 .IP \(bu 2.3 .\} -Flags: 16 flags\&. Currently, the following flags are used\&. The others are reserved for future use\&. +Flags: 16 flags\&. The following flags are used\&. The others are reserved for future use\&. .TS allbox tab(:); lB lB lB. @@ -2172,7 +2076,6 @@ .sp 1 .RE .SH "MYSQLBINLOG ROW EVENT DISPLAY" -.\" BINLOG statement: mysqlbinlog output .PP The following examples illustrate how \fBmysqlbinlog\fR @@ -2979,7 +2882,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlbug.1 mysql-5.6-5.6.33/man/mysqlbug.1 --- mysql-5.6-5.6.27/man/mysqlbug.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlbug.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlbug\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLBUG\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLBUG\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlbug .SH "NAME" mysqlbug \- generate bug report .SH "SYNOPSIS" @@ -42,7 +41,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlcheck.1 mysql-5.6-5.6.33/man/mysqlcheck.1 --- mysql-5.6-5.6.27/man/mysqlcheck.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlcheck.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlcheck\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLCHECK\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLCHECK\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlcheck -.\" maintenance: tables -.\" repair: tables -.\" tables: maintenance -.\" tables: repair .SH "NAME" mysqlcheck \- a table maintenance program .SH "SYNOPSIS" @@ -215,8 +210,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: help option -.\" help option: mysqlcheck \fB\-\-help\fR, \fB\-?\fR .sp @@ -231,8 +224,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: all-databases option -.\" all-databases option: mysqlcheck \fB\-\-all\-databases\fR, \fB\-A\fR .sp @@ -255,8 +246,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: all-in-1 option -.\" all-in-1 option: mysqlcheck \fB\-\-all\-in\-1\fR, \fB\-1\fR .sp @@ -271,8 +260,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: analyze option -.\" analyze option: mysqlcheck \fB\-\-analyze\fR, \fB\-a\fR .sp @@ -287,8 +274,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: auto-repair option -.\" auto-repair option: mysqlcheck \fB\-\-auto\-repair\fR .sp If a checked table is corrupted, automatically fix it\&. Any necessary repairs are done after all tables have been checked\&. @@ -302,8 +287,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: bind-address option -.\" bind-address option: mysqlcheck \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -319,8 +302,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: character-sets-dir option -.\" character-sets-dir option: mysqlcheck \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -335,8 +316,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: check option -.\" check option: mysqlcheck \fB\-\-check\fR, \fB\-c\fR .sp @@ -351,8 +330,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: check-only-changed option -.\" check-only-changed option: mysqlcheck \fB\-\-check\-only\-changed\fR, \fB\-C\fR .sp @@ -367,8 +344,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: check-upgrade option -.\" check-upgrade option: mysqlcheck \fB\-\-check\-upgrade\fR, \fB\-g\fR .sp @@ -391,8 +366,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: compress option -.\" compress option: mysqlcheck \fB\-\-compress\fR .sp Compress all information sent between the client and the server if both support compression\&. @@ -406,8 +379,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: databases option -.\" databases option: mysqlcheck \fB\-\-databases\fR, \fB\-B\fR .sp @@ -434,8 +405,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: debug option -.\" debug option: mysqlcheck \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -454,8 +423,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: debug-check option -.\" debug-check option: mysqlcheck \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -469,8 +436,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: debug-info option -.\" debug-info option: mysqlcheck \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -484,8 +449,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: default-character-set option -.\" default-character-set option: mysqlcheck \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -502,8 +465,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: defaults-extra-file option -.\" defaults-extra-file option: mysqlcheck \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -519,8 +480,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: defaults-file option -.\" defaults-file option: mysqlcheck \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -536,8 +495,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: defaults-group-suffix option -.\" defaults-group-suffix option: mysqlcheck \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -566,8 +523,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: extended option -.\" extended option: mysqlcheck \fB\-\-extended\fR, \fB\-e\fR .sp @@ -584,8 +539,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: default-auth option -.\" default-auth option: mysqlcheck \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -602,8 +555,24 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: fast option -.\" fast option: mysqlcheck +\fB\-\-enable\-cleartext\-plugin\fR +.sp +Enable the +mysql_clear_password +cleartext authentication plugin\&. (See +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) +.sp +This option was added in MySQL 5\&.6\&.28\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-fast\fR, \fB\-F\fR .sp @@ -618,8 +587,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: fix-db-names option -.\" fix-db-names option: mysqlcheck \fB\-\-fix\-db\-names\fR .sp Convert database names to 5\&.1 format\&. Only database names that contain special characters are affected\&. @@ -633,8 +600,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: fix-table-names option -.\" fix-table-names option: mysqlcheck \fB\-\-fix\-table\-names\fR .sp Convert table names to 5\&.1 format\&. Only table names that contain special characters are affected\&. This option also applies to views\&. @@ -648,8 +613,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: force option -.\" force option: mysqlcheck \fB\-\-force\fR, \fB\-f\fR .sp @@ -664,8 +627,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: host option -.\" host option: mysqlcheck \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -680,8 +641,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: login-path option -.\" login-path option: mysqlcheck \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -702,8 +661,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: medium-check option -.\" medium-check option: mysqlcheck \fB\-\-medium\-check\fR, \fB\-m\fR .sp @@ -720,8 +677,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: no-defaults option -.\" no-defaults option: mysqlcheck \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -747,8 +702,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: optimize option -.\" optimize option: mysqlcheck \fB\-\-optimize\fR, \fB\-o\fR .sp @@ -763,8 +716,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: password option -.\" password option: mysqlcheck \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -792,8 +743,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: pipe option -.\" pipe option: mysql \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -808,8 +757,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: plugin-dir option -.\" plugin-dir option: mysqlcheck \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -830,8 +777,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: port option -.\" port option: mysqlcheck \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -846,8 +791,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: print-defaults option -.\" print-defaults option: mysqlcheck \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -861,8 +804,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: protocol option -.\" protocol option: mysqlcheck \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -877,8 +818,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: quick option -.\" quick option: mysqlcheck \fB\-\-quick\fR, \fB\-q\fR .sp @@ -895,8 +834,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: repair option -.\" repair option: mysqlcheck \fB\-\-repair\fR, \fB\-r\fR .sp @@ -911,8 +848,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: secure-auth option -.\" secure-auth option: mysqlcheck \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -931,7 +866,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -944,8 +894,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: shared-memory-base-name option -.\" shared-memory-base-name option: mysqlcheck \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -964,8 +912,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: silent option -.\" silent option: mysqlcheck \fB\-\-silent\fR, \fB\-s\fR .sp @@ -980,8 +926,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: skip-database option -.\" skip-database option: mysqlcheck \fB\-\-skip\-database=\fR\fB\fIdb_name\fR\fR .sp Do not include the named database (case sensitive) in the operations performed by @@ -996,8 +940,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: socket option -.\" socket option: mysqlcheck \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -1013,14 +955,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: SSL options -.\" SSL options: mysqlcheck \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -1031,8 +971,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: tables option -.\" tables option: mysqlcheck \fB\-\-tables\fR .sp Override the @@ -1050,8 +988,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: use-frm option -.\" use-frm option: mysqlcheck \fB\-\-use\-frm\fR .sp For repair operations on @@ -1071,8 +1007,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: user option -.\" user option: mysqlcheck \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -1087,8 +1021,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: verbose option -.\" verbose option: mysqlcheck \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1103,8 +1035,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: version option -.\" version option: mysqlcheck \fB\-\-version\fR, \fB\-V\fR .sp @@ -1119,8 +1049,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlcheck: write-binlog option -.\" write-binlog option: mysqlcheck \fB\-\-write\-binlog\fR .sp This option is enabled by default, so that @@ -1140,7 +1068,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_client_test.1 mysql-5.6-5.6.33/man/mysql_client_test.1 --- mysql-5.6-5.6.27/man/mysql_client_test.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_client_test.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_client_test\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/16/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL .\" Language: English .\" -.TH "\FBMYSQL_CLIENT_TEST" "1" "09/16/2015" "MySQL" "MySQL Database System" +.TH "\FBMYSQL_CLIENT_TEST" "1" "08/25/2016" "MySQL" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_client_test -.\" mysql_client_test_embedded .SH "NAME" mysql_client_test \- test client API .br @@ -68,8 +66,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: help option -.\" help option: mysql_client_test \fB\-\-help\fR, \fB\-?\fR .sp @@ -85,8 +81,6 @@ .IP \(bu 2.3 .\} \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR, -.\" mysql_client_test: basedir option -.\" basedir option: mysql_client_test \fB\-b \fR\fB\fIdir_name\fR\fR .sp The base directory for the tests\&. @@ -101,8 +95,6 @@ .IP \(bu 2.3 .\} \fB\-\-count=\fR\fB\fIcount\fR\fR, -.\" mysql_client_test: count option -.\" count option: mysql_client_test \fB\-t \fR\fB\fIcount\fR\fR .sp The number of times to execute the tests\&. @@ -116,8 +108,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: database option -.\" database option: mysql_client_test \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-D \fR\fB\fIdb_name\fR\fR .sp @@ -132,8 +122,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: debug option -.\" debug option: mysql_client_test \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-#[\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -152,8 +140,6 @@ .IP \(bu 2.3 .\} \fB\-\-getopt\-ll\-test=\fR\fB\fIoption\fR\fR, -.\" mysql_client_test: getopt-ll-test option -.\" getopt-ll-test option: mysql_client_test \fB\-g \fR\fB\fIoption\fR\fR .sp Option to use for testing bugs in the @@ -169,8 +155,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: host option -.\" host option: mysql_client_test \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -185,8 +169,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: password option -.\" password option: mysql_client_test \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -195,8 +177,6 @@ have a space between the option and the password\&. If you omit the \fIpassword\fR value following the -.\" mysql_client_test: password option -.\" password option: mysql_client_test \fB\-\-password\fR or \fB\-p\fR @@ -211,8 +191,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: port option -.\" port option: mysql_client_test \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -228,8 +206,6 @@ .IP \(bu 2.3 .\} \fB\-\-server\-arg=\fR\fB\fIarg\fR\fR, -.\" mysql_client_test: server-arg option -.\" server-arg option: mysql_client_test \fB\-A \fR\fB\fIarg\fR\fR .sp Argument to send to the embedded server\&. @@ -257,8 +233,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: silent option -.\" silent option: mysql_client_test \fB\-\-silent\fR, \fB\-s\fR .sp @@ -273,8 +247,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: socket option -.\" socket option: mysql_client_test \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -308,8 +280,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_client_test: user option -.\" user option: mysql_client_test \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -325,8 +295,6 @@ .IP \(bu 2.3 .\} \fB\-v \fR\fB\fIdir_name\fR\fR, -.\" mysql_client_test: vardir option -.\" vardir option: mysql_client_test \fB\-\-vardir=\fR\fB\fIdir_name\fR\fR .sp The data directory for tests\&. The default is @@ -335,7 +303,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 2006, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 2006, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_client_test_embedded.1 mysql-5.6-5.6.33/man/mysql_client_test_embedded.1 --- mysql-5.6-5.6.27/man/mysql_client_test_embedded.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_client_test_embedded.1 2016-08-26 11:32:53.000000000 +0000 @@ -1 +1 @@ -.so man/mysql_client_test.1 +.so mysql_client_test.1 diff -Nru mysql-5.6-5.6.27/man/mysql_config.1 mysql-5.6-5.6.33/man/mysql_config.1 --- mysql-5.6-5.6.27/man/mysql_config.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_config.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_config\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_CONFIG\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_CONFIG\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_config .SH "NAME" mysql_config \- display options for compiling clients .SH "SYNOPSIS" @@ -49,8 +48,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: cflags option -.\" cflags option: mysql_config \fB\-\-cflags\fR .sp C Compiler flags to find include files and critical compiler flags and defines used when compiling the @@ -68,8 +65,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: cxxflags option -.\" cxxflags option: mysql_config \fB\-\-cxxflags\fR .sp Like @@ -84,8 +79,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: include option -.\" include option: mysql_config \fB\-\-include\fR .sp Compiler options to find MySQL include files\&. @@ -99,10 +92,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: libmysqld-libs option -.\" libmysqld-libs option: mysql_config -.\" mysql_config: embedded option -.\" embedded option: mysql_config \fB\-\-libmysqld\-libs\fR, \fB\-\-embedded\fR .sp @@ -117,8 +106,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: libs option -.\" libs option: mysql_config \fB\-\-libs\fR .sp Libraries and options required to link with the MySQL client library\&. @@ -132,8 +119,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: libs_r option -.\" libs_r option: mysql_config \fB\-\-libs_r\fR .sp Libraries and options required to link with the thread\-safe MySQL client library\&. In MySQL 5\&.6, all client libraries are thread\-safe, so this option need not be used\&. The @@ -149,8 +134,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: plugindir option -.\" plugindir option: mysql_config \fB\-\-plugindir\fR .sp The default plugin directory path name, defined when configuring MySQL\&. @@ -164,9 +147,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: port option -.\" port option: mysql_config -.\" TCP/IP \fB\-\-port\fR .sp The default TCP/IP port number, defined when configuring MySQL\&. @@ -180,8 +160,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: socket option -.\" socket option: mysql_config \fB\-\-socket\fR .sp The default Unix socket file, defined when configuring MySQL\&. @@ -195,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: variable option -.\" variable option: mysql_config \fB\-\-variable=\fR\fB\fIvar_name\fR\fR .sp Display the value of the named configuration variable\&. Permitted @@ -218,8 +194,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config: version option -.\" version option: mysql_config \fB\-\-version\fR .sp Version number for the MySQL distribution\&. @@ -277,7 +251,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_config_editor.1 mysql-5.6-5.6.33/man/mysql_config_editor.1 --- mysql-5.6-5.6.27/man/mysql_config_editor.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_config_editor.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_config_editor\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_CONFIG_EDIT" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_CONFIG_EDIT" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_config_editor -.\" .mylogin.cnf file .SH "NAME" mysql_config_editor \- configure authentication information for connecting to MySQL server .SH "SYNOPSIS" @@ -78,8 +76,6 @@ \&.mylogin\&.cnf in conjunction with other option files\&. Its precedence is higher than other option files, but less than options specified explicitly on the client command line\&. For information about the order in which option files are used, see Section\ \&4.2.6, \(lqUsing Option Files\(rq\&. -.\" MYSQL_TEST_LOGIN_FILE environment variable -.\" environment variable: MYSQL_TEST_LOGIN_FILE .PP To specify an alternate login path file name, set the MYSQL_TEST_LOGIN_FILE @@ -148,7 +144,7 @@ .\} With a \fB\-\-login\-path\fR -option, client programs additionally read the named login path from the login path ile\&. The option groups read from other option files remain the same\&. Consider this command: +option, client programs additionally read the named login path from the login path file\&. The option groups read from other option files remain the same\&. Consider this command: .sp .if n \{\ .RS 4 @@ -501,8 +497,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config_editor: help option -.\" help option: mysql_config_editor \fB\-\-help\fR, \fB\-?\fR .sp @@ -534,8 +528,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config_editor: debug option -.\" debug option: mysql_config_editor \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# \fR\fB\fIdebug_options\fR\fR .sp @@ -554,8 +546,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config_editor: verbose option -.\" verbose option: mysql_config_editor \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -570,8 +560,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_config_editor: version option -.\" version option: mysql_config_editor \fB\-\-version\fR, \fB\-V\fR .sp @@ -1076,7 +1064,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_convert_table_format.1 mysql-5.6-5.6.33/man/mysql_convert_table_format.1 --- mysql-5.6-5.6.27/man/mysql_convert_table_format.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_convert_table_format.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_convert_table_format\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_CONVERT_TAB" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_CONVERT_TAB" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_convert_table_format .SH "NAME" mysql_convert_table_format \- convert tables to use a given storage engine .SH "SYNOPSIS" @@ -91,8 +90,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: help option -.\" help option: mysql_convert_table_format \fB\-\-help\fR .sp Display a help message and exit\&. @@ -106,8 +103,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: force option -.\" force option: mysql_convert_table_format \fB\-\-force\fR .sp Continue even if errors occur\&. @@ -121,8 +116,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: host option -.\" host option: mysql_convert_table_format \fB\-\-host=\fR\fB\fIhost_name\fR\fR .sp Connect to the MySQL server on the given host\&. @@ -136,8 +129,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: password option -.\" password option: mysql_convert_table_format \fB\-\-password=\fR\fB\fIpassword\fR\fR .sp The password to use when connecting to the server\&. Note that the password value is not optional for this option, unlike for other MySQL programs\&. @@ -154,8 +145,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: port option -.\" port option: mysql_convert_table_format \fB\-\-port=\fR\fB\fIport_num\fR\fR .sp The TCP/IP port number to use for the connection\&. @@ -169,8 +158,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: socket option -.\" socket option: mysql_convert_table_format \fB\-\-socket=\fR\fB\fIpath\fR\fR .sp For connections to @@ -185,8 +172,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: type option -.\" type option: mysql_convert_table_format \fB\-\-type=\fR\fB\fIengine_name\fR\fR .sp Specify the storage engine that the tables should be converted to use\&. The default is @@ -202,8 +187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: user option -.\" user option: mysql_convert_table_format \fB\-\-user=\fR\fB\fIuser_name\fR\fR .sp The MySQL user name to use when connecting to the server\&. @@ -217,8 +200,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: verbose option -.\" verbose option: mysql_convert_table_format \fB\-\-verbose\fR .sp Verbose mode\&. Print more information about what the program does\&. @@ -232,8 +213,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_convert_table_format: version option -.\" version option: mysql_convert_table_format \fB\-\-version\fR .sp Display version information and exit\&. @@ -241,7 +220,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqld.8 mysql-5.6-5.6.33/man/mysqld.8 --- mysql-5.6-5.6.27/man/mysqld.8 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqld.8 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqld\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLD\FR" "8" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLD\FR" "8" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqld: MySQL server -.\" MySQL server: mysqld .SH "NAME" mysqld \- the MySQL server .SH "SYNOPSIS" @@ -62,7 +60,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqld_multi.1 mysql-5.6-5.6.33/man/mysqld_multi.1 --- mysql-5.6-5.6.27/man/mysqld_multi.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqld_multi.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqld_multi\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLD_MULTI\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLD_MULTI\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,10 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqld_multi -.\" tools: mysqld_multi -.\" scripts -.\" multi mysqld .SH "NAME" mysqld_multi \- manage multiple MySQL servers .SH "SYNOPSIS" @@ -60,7 +56,7 @@ group used for starting \fBmysqld\fR\&. (See, for example, Section\ \&2.10.5, \(lqStarting and Stopping MySQL Automatically\(rq\&.) However, when using multiple servers, it is necessary that each one use its own value for options such as the Unix socket file and TCP/IP port number\&. For more information on which options must be unique per server in a multiple\-server environment, see -Section\ \&5.3, \(lqRunning Multiple MySQL Instances on One Machine\(rq\&. +Section\ \&5.6, \(lqRunning Multiple MySQL Instances on One Machine\(rq\&. .PP To invoke \fBmysqld_multi\fR, use the following syntax: @@ -158,8 +154,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: no-defaults option -.\" no-defaults option: mysqld_multi With \fB\-\-no\-defaults\fR, no option files are read\&. .RE @@ -172,8 +166,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: defaults-file option -.\" defaults-file option: mysqld_multi With \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR, only the named file is read\&. .RE @@ -186,8 +178,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: defaults-extra-file option -.\" defaults-extra-file option: mysqld_multi Otherwise, option files in the standard list of locations are read, including any file named by the \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR option, if one is given\&. (If the option is given multiple times, the last value is used\&.) @@ -233,8 +223,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: help option -.\" help option: mysqld_multi \fB\-\-help\fR .sp Display a help message and exit\&. @@ -248,8 +236,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: example option -.\" example option: mysqld_multi \fB\-\-example\fR .sp Display a sample option file\&. @@ -263,8 +249,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: log option -.\" log option: mysqld_multi \fB\-\-log=\fR\fB\fIfile_name\fR\fR .sp Specify the name of the log file\&. If the file exists, log output is appended to it\&. @@ -278,8 +262,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: mysqladmin option -.\" mysqladmin option: mysqld_multi \fB\-\-mysqladmin=\fR\fB\fIprog_name\fR\fR .sp The @@ -295,8 +277,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: mysqld option -.\" mysqld option: mysqld_multi \fB\-\-mysqld=\fR\fB\fIprog_name\fR\fR .sp The @@ -337,8 +317,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: no-log option -.\" no-log option: mysqld_multi \fB\-\-no\-log\fR .sp Print log information to @@ -354,8 +332,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: password option -.\" password option: mysqld_multi \fB\-\-password=\fR\fB\fIpassword\fR\fR .sp The password of the MySQL account to use when invoking @@ -370,8 +346,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: silent option -.\" silent option: mysqld_multi \fB\-\-silent\fR .sp Silent mode; disable warnings\&. @@ -385,8 +359,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: tcp-ip option -.\" tcp-ip option: mysqld_multi \fB\-\-tcp\-ip\fR .sp Connect to each MySQL server through the TCP/IP port instead of the Unix socket file\&. (If a socket file is missing, the server might still be running, but accessible only through the TCP/IP port\&.) By default, connections are made using the Unix socket file\&. This option affects @@ -404,8 +376,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: user option -.\" user option: mysqld_multi \fB\-\-user=\fR\fB\fIuser_name\fR\fR .sp The user name of the MySQL account to use when invoking @@ -420,8 +390,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: verbose option -.\" verbose option: mysqld_multi \fB\-\-verbose\fR .sp Be more verbose\&. @@ -435,8 +403,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_multi: version option -.\" version option: mysqld_multi \fB\-\-version\fR .sp Display version information and exit\&. @@ -468,7 +434,7 @@ what you are doing\&. Starting multiple servers with the same data directory does \fInot\fR give you extra performance in a threaded system\&. See -Section\ \&5.3, \(lqRunning Multiple MySQL Instances on One Machine\(rq\&. +Section\ \&5.6, \(lqRunning Multiple MySQL Instances on One Machine\(rq\&. .RE .sp .RS 4 @@ -644,42 +610,44 @@ .RS 4 .\} .nf -# This file should probably be in your home dir (~/\&.my\&.cnf) -# or /etc/my\&.cnf -# Version 2\&.1 by Jani Tolonen +# This is an example of a my\&.cnf file for mysqld_multi\&. +# Usually this file is located in home dir ~/\&.my\&.cnf or /etc/my\&.cnf [mysqld_multi] -mysqld = /usr/local/bin/mysqld_safe -mysqladmin = /usr/local/bin/mysqladmin +mysqld = /usr/local/mysql/bin/mysqld_safe +mysqladmin = /usr/local/mysql/bin/mysqladmin user = multi_admin -password = multipass +password = my_password [mysqld2] socket = /tmp/mysql\&.sock2 port = 3307 -pid\-file = /usr/local/mysql/var2/hostname\&.pid2 -datadir = /usr/local/mysql/var2 -language = /usr/local/share/mysql/english -user = john +pid\-file = /usr/local/mysql/data2/hostname\&.pid2 +datadir = /usr/local/mysql/data2 +language = /usr/local/mysql/share/mysql/english +user = unix_user1 [mysqld3] +mysqld = /path/to/mysqld_safe +ledir = /path/to/mysqld\-binary/ +mysqladmin = /path/to/mysqladmin socket = /tmp/mysql\&.sock3 port = 3308 -pid\-file = /usr/local/mysql/var3/hostname\&.pid3 -datadir = /usr/local/mysql/var3 -language = /usr/local/share/mysql/swedish -user = monty +pid\-file = /usr/local/mysql/data3/hostname\&.pid3 +datadir = /usr/local/mysql/data3 +language = /usr/local/mysql/share/mysql/swedish +user = unix_user2 [mysqld4] socket = /tmp/mysql\&.sock4 port = 3309 -pid\-file = /usr/local/mysql/var4/hostname\&.pid4 -datadir = /usr/local/mysql/var4 -language = /usr/local/share/mysql/estonia -user = tonu +pid\-file = /usr/local/mysql/data4/hostname\&.pid4 +datadir = /usr/local/mysql/data4 +language = /usr/local/mysql/share/mysql/estonia +user = unix_user3 [mysqld6] socket = /tmp/mysql\&.sock6 port = 3311 -pid\-file = /usr/local/mysql/var6/hostname\&.pid6 -datadir = /usr/local/mysql/var6 -language = /usr/local/share/mysql/japanese -user = jani +pid\-file = /usr/local/mysql/data6/hostname\&.pid6 +datadir = /usr/local/mysql/data6 +language = /usr/local/mysql/share/mysql/japanese +user = unix_user4 .fi .if n \{\ .RE @@ -690,7 +658,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqld_safe.1 mysql-5.6-5.6.33/man/mysqld_safe.1 --- mysql-5.6-5.6.27/man/mysqld_safe.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqld_safe.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqld_safe\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLD_SAFE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLD_SAFE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,9 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqld_safe -.\" tools: mysqld_safe -.\" scripts .SH "NAME" mysqld_safe \- MySQL server startup script .SH "SYNOPSIS" @@ -115,8 +112,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: help option -.\" help option: mysqld_safe \fB\-\-help\fR .sp Display a help message and exit\&. @@ -130,8 +125,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: basedir option -.\" basedir option: mysqld_safe \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL installation directory\&. @@ -145,8 +138,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: core-file-size option -.\" core-file-size option: mysqld_safe \fB\-\-core\-file\-size=\fR\fB\fIsize\fR\fR .sp The size of the core file that @@ -163,8 +154,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: datadir option -.\" datadir option: mysqld_safe \fB\-\-datadir=\fR\fB\fIdir_name\fR\fR .sp The path to the data directory\&. @@ -178,8 +167,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: defaults-extra-file option -.\" defaults-extra-file option: mysqld_safe \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp The name of an option file to be read in addition to the usual option files\&. This must be the first option on the command line if it is used\&. If the file does not exist or is otherwise inaccessible, the server will exit with an error\&. @@ -193,8 +180,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: defaults-file option -.\" defaults-file option: mysqld_safe \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp The name of an option file to be read instead of the usual option files\&. This must be the first option on the command line if it is used\&. @@ -208,8 +193,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: ledir option -.\" ledir option: mysqld_safe \fB\-\-ledir=\fR\fB\fIdir_name\fR\fR .sp If @@ -225,12 +208,10 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: log-error option -.\" log-error option: mysqld_safe \fB\-\-log\-error=\fR\fB\fIfile_name\fR\fR .sp Write the error log to the given file\&. See -Section\ \&5.2.2, \(lqThe Error Log\(rq\&. +Section\ \&5.4.2, \(lqThe Error Log\(rq\&. .RE .sp .RS 4 @@ -241,17 +222,33 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: malloc-lib option -.\" mysqld option: malloc-lib \fB\-\-malloc\-lib=[\fR\fB\fIlib_name\fR\fR\fB]\fR -.\" memory allocation library -.\" tcmalloc: memory allocation library The name of the library to use for memory allocation instead of the system malloc() -library\&. Any library can be used by specifying its path name, but there is a shortcut form to enable use of the +library\&. As of MySQL 5\&.6\&.33, the option value must be one of the directories +/usr/lib, +/usr/lib64, +/usr/lib/i386\-linux\-gnu, or +/usr/lib/x86_64\-linux\-gnu\&. Prior to MySQL 5\&.6\&.33, any library can be used by specifying its path name, but there is a shortcut form to enable use of the tcmalloc library that is shipped with binary MySQL distributions for Linux in MySQL 5\&.6\&. It is possible that the shortcut form will not work under certain configurations, in which case you should specify a path name instead\&. +.if n \{\ .sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +As of MySQL 5\&.6\&.31, MySQL distributions no longer include a +tcmalloc +library\&. +.sp .5v +.RE The \fB\-\-malloc\-lib\fR option works by modifying the @@ -379,8 +376,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: mysqld option -.\" mysqld option: mysqld_safe \fB\-\-mysqld=\fR\fB\fIprog_name\fR\fR .sp The name of the server program (in the @@ -390,6 +385,8 @@ cannot find the server, use the \fB\-\-ledir\fR option to indicate the path name to the directory where the server is located\&. +.sp +As of MySQL 5\&.6\&.33, this option can be given only on the command line and not in an option file\&. .RE .sp .RS 4 @@ -400,8 +397,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: mysqld-version option -.\" mysqld-version option: mysqld_safe \fB\-\-mysqld\-version=\fR\fB\fIsuffix\fR\fR .sp This option is similar to the @@ -423,6 +418,8 @@ in the ledir directory\&. +.sp +As of MySQL 5\&.6\&.33, this option can be given only on the command line and not in an option file\&. .RE .sp .RS 4 @@ -433,8 +430,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: nice option -.\" nice option: mysqld_safe \fB\-\-nice=\fR\fB\fIpriority\fR\fR .sp Use the @@ -450,8 +445,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: no-defaults option -.\" no-defaults option: mysqld_safe \fB\-\-no\-defaults\fR .sp Do not read any option files\&. This must be the first option on the command line if it is used\&. @@ -465,8 +458,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: open-files-limit option -.\" open-files-limit option: mysqld_safe \fB\-\-open\-files\-limit=\fR\fB\fIcount\fR\fR .sp The number of files that @@ -502,8 +493,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: pid-file option -.\" pid-file option: mysqld_safe \fB\-\-pid\-file=\fR\fB\fIfile_name\fR\fR .sp The path name of the process ID file\&. @@ -517,8 +506,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: plugin-dir option -.\" plugin-dir option: mysqld_safe \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The path name of the plugin directory\&. @@ -532,9 +519,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: port option -.\" port option: mysqld_safe -.\" TCP/IP \fB\-\-port=\fR\fB\fIport_num\fR\fR .sp The port number that the server should use when listening for TCP/IP connections\&. The port number must be 1024 or higher unless the server is started by the @@ -550,8 +534,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: skip-kill-mysqld option -.\" skip-kill-mysqld option: mysqld_safe \fB\-\-skip\-kill\-mysqld\fR .sp Do not try to kill stray @@ -567,8 +549,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: socket option -.\" socket option: mysqld_safe \fB\-\-socket=\fR\fB\fIpath\fR\fR .sp The Unix socket file that the server should use when listening for local connections\&. @@ -582,10 +562,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: syslog option -.\" syslog option: mysqld_safe -.\" mysqld_safe: skip-syslog option -.\" skip-syslog option: mysqld_safe \fB\-\-syslog\fR, \fB\-\-skip\-syslog\fR .sp @@ -614,8 +590,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: syslog-tag option -.\" syslog-tag option: mysqld_safe \fB\-\-syslog\-tag=\fR\fB\fItag\fR\fR .sp For logging to @@ -641,8 +615,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: timezone option -.\" timezone option: mysqld_safe \fB\-\-timezone=\fR\fB\fItimezone\fR\fR .sp Set the @@ -658,8 +630,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqld_safe: user option -.\" user option: mysqld_safe \fB\-\-user={\fR\fB\fIuser_name\fR\fR\fB|\fR\fB\fIuser_id\fR\fR\fB}\fR .sp Run the @@ -858,7 +828,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqldump.1 mysql-5.6-5.6.33/man/mysqldump.1 --- mysql-5.6-5.6.27/man/mysqldump.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqldump.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqldump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLDUMP\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLDUMP\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,17 +27,19 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqldump -.\" dumping: databases and tables -.\" backups: databases and tables -.\" databases: dumping -.\" tables: dumping .SH "NAME" mysqldump \- a database backup program .SH "SYNOPSIS" .HP \w'\fBmysqldump\ [\fR\fB\fIoptions\fR\fR\fB]\ [\fR\fB\fIdb_name\fR\fR\fB\ [\fR\fB\fItbl_name\fR\fR\fB\ \&.\&.\&.]]\fR\ 'u \fBmysqldump [\fR\fB\fIoptions\fR\fR\fB] [\fR\fB\fIdb_name\fR\fR\fB [\fR\fB\fItbl_name\fR\fR\fB \&.\&.\&.]]\fR .SH "DESCRIPTION" +.PP +The +\fBmysqldump\fR +client utility performs +logical backups, producing a set of SQL statements that can be executed to reproduce the original database object definitions and table data\&. It dumps one or more MySQL databases for backup or transfer to another SQL server\&. The +\fBmysqldump\fR +command can also generate output in CSV, other delimited text, or XML format\&. .sp .RS 4 .ie n \{\ @@ -226,13 +228,6 @@ Restrictions .RE .PP -The -\fBmysqldump\fR -client utility performs -logical backups, producing a set of SQL statements that can be executed to reproduce the original database object definitions and table data\&. It dumps one or more MySQL databases for backup or transfer to another SQL server\&. The -\fBmysqldump\fR -command can also generate output in CSV, other delimited text, or XML format\&. -.PP \fBmysqldump\fR requires at least the SELECT @@ -282,7 +277,7 @@ .\} .PP However, UTF\-16 is not permitted as a connection character set (see -Section\ \&10.1.4, \(lqConnection Character Sets and Collations\(rq), so the dump file will not load correctly\&. To work around this issue, use the +Section\ \&10.1.5, \(lqConnection Character Sets and Collations\(rq), so the dump file will not load correctly\&. To work around this issue, use the \fB\-\-result\-file\fR option, which creates the output in ASCII format: .sp @@ -419,8 +414,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: bind-address option -.\" bind-address option: mysqldump \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -436,8 +429,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: compress option -.\" compress option: mysqldump \fB\-\-compress\fR, \fB\-C\fR .sp @@ -452,8 +443,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: default-auth option -.\" default-auth option: mysqldump \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -468,8 +457,24 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: host option -.\" host option: mysqldump +\fB\-\-enable\-cleartext\-plugin\fR +.sp +Enable the +mysql_clear_password +cleartext authentication plugin\&. (See +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) +.sp +This option was added in MySQL 5\&.6\&.28\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -485,8 +490,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: login-path option -.\" login-path option: mysqldump \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -507,8 +510,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: password option -.\" password option: mysqldump \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -536,8 +537,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: pipe option -.\" pipe option: mysqldump \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -552,8 +551,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: plugin-dir option -.\" plugin-dir option: mysqldump \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -572,8 +569,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: port option -.\" port option: mysqldump \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -588,8 +583,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: protocol option -.\" protocol option: mysqldump \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -604,8 +597,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: secure-auth option -.\" secure-auth option: mysqldump \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -624,7 +615,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -637,8 +643,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: socket option -.\" socket option: mysqldump \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -654,14 +658,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: SSL options -.\" SSL options: mysqldump \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -672,8 +674,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: user option -.\" user option: mysqldump \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -732,8 +732,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: defaults-extra-file option -.\" defaults-extra-file option: mysqldump \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -749,8 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: defaults-file option -.\" defaults-file option: mysqldump \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -766,8 +762,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: defaults-group-suffix option -.\" defaults-group-suffix option: mysqldump \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -796,8 +790,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-defaults option -.\" no-defaults option: mysqldump \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -823,8 +815,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: print-defaults option -.\" print-defaults option: mysqldump \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -842,8 +832,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: add-drop-database option -.\" add-drop-database option: mysqldump \fB\-\-add\-drop\-database\fR .sp Write a @@ -867,8 +855,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: add-drop-table option -.\" add-drop-table option: mysqldump \fB\-\-add\-drop\-table\fR .sp Write a @@ -886,8 +872,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: add-drop-trigger option -.\" add-drop-trigger option: mysqldump \fB\-\-add\-drop\-trigger\fR .sp Write a @@ -905,8 +889,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: all-tablespaces option -.\" all-tablespaces option: mysqldump \fB\-\-all\-tablespaces\fR, \fB\-Y\fR .sp @@ -924,8 +906,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-create-db option -.\" no-create-db option: mysqldump \fB\-\-no\-create\-db\fR, \fB\-n\fR .sp @@ -946,8 +926,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-create-info option -.\" no-create-info option: mysqldump \fB\-\-no\-create\-info\fR, \fB\-t\fR .sp @@ -985,8 +963,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-tablespaces option -.\" no-tablespaces option: mysqldump \fB\-\-no\-tablespaces\fR, \fB\-y\fR .sp @@ -1006,8 +982,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: replace option -.\" replace option: mysqldump \fB\-\-replace\fR .sp Write @@ -1027,8 +1001,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: allow-keywords option -.\" allow-keywords option: mysqldump \fB\-\-allow\-keywords\fR .sp Permit creation of column names that are keywords\&. This works by prefixing each column name with the table name\&. @@ -1042,8 +1014,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: comments option -.\" comments option: mysqldump \fB\-\-comments\fR, \fB\-i\fR .sp @@ -1059,8 +1029,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: debug option -.\" debug option: mysqldump \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -1079,8 +1047,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: debug-check option -.\" debug-check option: mysqldump \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -1094,8 +1060,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: debug-info option -.\" debug-info option: mysqldump \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -1109,8 +1073,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: dump-date option -.\" dump-date option: mysqldump \fB\-\-dump\-date\fR .sp If the @@ -1148,8 +1110,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: force option -.\" force option: mysqldump \fB\-\-force\fR, \fB\-f\fR .sp @@ -1174,8 +1134,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: log-error option -.\" log-error option: mysqldump \fB\-\-log\-error=\fR\fB\fIfile_name\fR\fR .sp Log warnings and errors by appending them to the named file\&. The default is to do no logging\&. @@ -1189,8 +1147,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: skip-comments option -.\" skip-comments option: mysqldump \fB\-\-skip\-comments\fR .sp See the description for the @@ -1206,8 +1162,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: verbose option -.\" verbose option: mysqldump \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1226,8 +1180,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: help option -.\" help option: mysqldump \fB\-\-help\fR, \fB\-?\fR .sp @@ -1242,8 +1194,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: version option -.\" version option: mysqldump \fB\-\-version\fR, \fB\-V\fR .sp @@ -1262,8 +1212,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: character-sets-dir option -.\" character-sets-dir option: mysqldump \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -1278,8 +1226,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: default-character-set option -.\" default-character-set option: mysqldump \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -1299,8 +1245,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-set-names option -.\" no-set-names option: mysqldump \fB\-\-no\-set\-names\fR, \fB\-N\fR .sp @@ -1318,8 +1262,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: set-charset option -.\" set-charset option: mysqldump \fB\-\-set\-charset\fR .sp Write @@ -1342,8 +1284,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: apply-slave-statements option -.\" apply-slave-statements option: mysqldump \fB\-\-apply\-slave\-statements\fR .sp For a slave dump produced with the @@ -1365,8 +1305,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: delete-master-logs option -.\" delete-master-logs option: mysqldump \fB\-\-delete\-master\-logs\fR .sp On a master replication server, delete the binary logs by sending a @@ -1383,8 +1321,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: dump-slave option -.\" dump-slave option: mysqldump \fB\-\-dump\-slave[=\fR\fB\fIvalue\fR\fR\fB]\fR .sp This option is similar to @@ -1428,8 +1364,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: include-master-host-port option -.\" include-master-host-port option: mysqldump \fB\-\-include\-master\-host\-port\fR .sp For the @@ -1451,8 +1385,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: master-data option -.\" master-data option: mysqldump \fB\-\-master\-data[=\fR\fB\fIvalue\fR\fR\fB]\fR .sp Use this option to dump a master replication server to produce a dump file that can be used to set up another server as a slave of the master\&. It causes the dump output to include a @@ -1494,8 +1426,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: set-gtid-purged option -.\" set-gtid-purged option: mysqldump \fB\-\-set\-gtid\-purged=\fR\fB\fIvalue\fR\fR .sp This option enables control over global transaction ID (GTID) information written to the dump file, by indicating whether to add a @@ -1594,8 +1524,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: compact option -.\" compact option: mysqldump \fB\-\-compact\fR .sp Produce more compact output\&. This option enables the @@ -1615,8 +1543,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: compatible option -.\" compatible option: mysqldump \fB\-\-compatible=\fR\fB\fIname\fR\fR .sp Produce output that is more compatible with other database systems or with older MySQL servers\&. The value of @@ -1650,8 +1576,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: complete-insert option -.\" complete-insert option: mysqldump \fB\-\-complete\-insert\fR, \fB\-c\fR .sp @@ -1668,8 +1592,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: create-options option -.\" create-options option: mysqldump \fB\-\-create\-options\fR .sp Include all MySQL\-specific table options in the @@ -1685,17 +1607,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: fields-terminated-by option -.\" fields-terminated-by option: mysqldump \fB\-\-fields\-terminated\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-enclosed-by option -.\" fields-enclosed-by option: mysqldump \fB\-\-fields\-enclosed\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-optionally-enclosed-by option -.\" fields-optionally-enclosed-by option: mysqldump \fB\-\-fields\-optionally\-enclosed\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-escaped-by option -.\" fields-escaped-by option: mysqldump \fB\-\-fields\-escaped\-by=\&.\&.\&.\fR .sp These options are used with the @@ -1715,8 +1629,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: hex-blob option -.\" hex-blob option: mysqldump \fB\-\-hex\-blob\fR .sp Dump binary columns using hexadecimal notation (for example, @@ -1738,8 +1650,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: lines-terminated-by option -.\" lines-terminated-by option: mysqldump \fB\-\-lines\-terminated\-by=\&.\&.\&.\fR .sp This option is used with the @@ -1759,8 +1669,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: quote-names option -.\" quote-names option: mysqldump \fB\-\-quote\-names\fR, \fB\-Q\fR .sp @@ -1785,8 +1693,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: result-file option -.\" result-file option: mysqldump \fB\-\-result\-file=\fR\fB\fIfile_name\fR\fR, \fB\-r \fR\fB\fIfile_name\fR\fR .sp @@ -1807,8 +1713,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: tab option -.\" tab option: mysqldump \fB\-\-tab=\fR\fB\fIdir_name\fR\fR, \fB\-T \fR\fB\fIdir_name\fR\fR .sp @@ -1837,9 +1741,15 @@ \fBmysqldump\fR is run on the same machine as the \fBmysqld\fR -server\&. You must have the +server\&. Because the server creates files +*\&.txt +file in the directory that you specify, the directory must be writable by the server and the MySQL account that you use must have the FILE -privilege, and the server must have permission to write files in the directory that you specify\&. +privilege\&. Because +\fBmysqldump\fR +creates +*\&.sql +in the same directory, it must be writable by your system login account\&. .sp .5v .RE By default, the @@ -1863,8 +1773,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: tz-utc option -.\" tz-utc option: mysqldump \fB\-\-tz\-utc\fR .sp This option enables @@ -1891,8 +1799,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: xml option -.\" xml option: mysqldump \fB\-\-xml\fR, \fB\-X\fR .sp @@ -2007,8 +1913,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: all-databases option -.\" all-databases option: mysqldump \fB\-\-all\-databases\fR, \fB\-A\fR .sp @@ -2032,8 +1936,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: databases option -.\" databases option: mysqldump \fB\-\-databases\fR, \fB\-B\fR .sp @@ -2054,8 +1956,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: events option -.\" events option: mysqldump \fB\-\-events\fR, \fB\-E\fR .sp @@ -2085,8 +1985,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: ignore-table option -.\" ignore-table option: mysqldump \fB\-\-ignore\-table=\fR\fB\fIdb_name\&.tbl_name\fR\fR .sp Do not dump the given table, which must be specified using both the database and table names\&. To ignore multiple tables, use this option multiple times\&. This option also can be used to ignore views\&. @@ -2100,8 +1998,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-data option -.\" no-data option: mysqldump \fB\-\-no\-data\fR, \fB\-d\fR .sp @@ -2118,8 +2014,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: routines option -.\" routines option: mysqldump \fB\-\-routines\fR, \fB\-R\fR .sp @@ -2157,8 +2051,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: tables option -.\" tables option: mysqldump \fB\-\-tables\fR .sp Override the @@ -2178,12 +2070,14 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: triggers option -.\" triggers option: mysqldump \fB\-\-triggers\fR .sp Include triggers for each dumped table in the output\&. This option is enabled by default; disable it with \fB\-\-skip\-triggers\fR\&. +.sp +To be able to dump a table\*(Aqs triggers, you must have the +TRIGGER +privilege for the table\&. .RE .sp .RS 4 @@ -2194,8 +2088,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: where option -.\" where option: mysqldump \fB\-\-where=\*(Aq\fR\fB\fIwhere_condition\fR\fR\fB\*(Aq\fR, \fB\-w \*(Aq\fR\fB\fIwhere_condition\fR\fR\fB\*(Aq\fR .sp @@ -2239,8 +2131,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: delayed-insert option -.\" delayed-insert option: mysqldump \fB\-\-delayed\-insert\fR .sp For those nontransactional tables that support the @@ -2262,8 +2152,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: disable-keys option -.\" disable-keys option: mysqldump \fB\-\-disable\-keys\fR, \fB\-K\fR .sp @@ -2286,8 +2174,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: extended-insert option -.\" extended-insert option: mysqldump \fB\-\-extended\-insert\fR, \fB\-e\fR .sp @@ -2306,8 +2192,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: insert-ignore option -.\" insert-ignore option: mysqldump \fB\-\-insert\-ignore\fR .sp Write @@ -2325,8 +2209,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: opt option -.\" opt option: mysqldump \fB\-\-opt\fR .sp This option, enabled by default, is shorthand for the combination of @@ -2357,8 +2239,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: quick option -.\" quick option: mysqldump \fB\-\-quick\fR, \fB\-q\fR .sp @@ -2375,8 +2255,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: skip-opt option -.\" skip-opt option: mysqldump \fB\-\-skip\-opt\fR .sp See the description for the @@ -2394,8 +2272,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: add-locks option -.\" add-locks option: mysqldump \fB\-\-add\-locks\fR .sp Surround each table dump with @@ -2414,8 +2290,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: flush-logs option -.\" flush-logs option: mysqldump \fB\-\-flush\-logs\fR, \fB\-F\fR .sp @@ -2443,8 +2317,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: flush-privileges option -.\" flush-privileges option: mysqldump \fB\-\-flush\-privileges\fR .sp Add a @@ -2466,8 +2338,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: lock-all-tables option -.\" lock-all-tables option: mysqldump \fB\-\-lock\-all\-tables\fR, \fB\-x\fR .sp @@ -2485,8 +2355,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: lock-tables option -.\" lock-tables option: mysqldump \fB\-\-lock\-tables\fR, \fB\-l\fR .sp @@ -2520,8 +2388,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: no-autocommit option -.\" no-autocommit option: mysqldump \fB\-\-no\-autocommit\fR .sp Enclose the @@ -2541,8 +2407,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: order-by-primary option -.\" order-by-primary option: mysqldump \fB\-\-order\-by\-primary\fR .sp Dump each table\*(Aqs rows sorted by its primary key, or by its first unique index, if such an index exists\&. This is useful when dumping a @@ -2560,8 +2424,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: shared-memory-base-name option -.\" shared-memory-base-name option: mysqldump \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -2580,8 +2442,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: single-transaction option -.\" single-transaction option: mysqldump \fB\-\-single\-transaction\fR .sp This option sets the transaction isolation mode to @@ -2769,7 +2629,7 @@ For point\-in\-time recovery (also known as \(lqroll\-forward,\(rq when you need to restore an old backup and replay the changes that happened since that backup), it is often useful to rotate the binary log (see -Section\ \&5.2.4, \(lqThe Binary Log\(rq) or at least know the binary log coordinates to which the dump corresponds: +Section\ \&5.4.4, \(lqThe Binary Log\(rq) or at least know the binary log coordinates to which the dump corresponds: .sp .if n \{\ .RS 4 @@ -2844,10 +2704,7 @@ \fB\-\-disable\-keys\fR \fB\-\-lock\-tables\fR\&. .RE -Restrictions.\" mysqldump: views -.\" mysqldump: problems -.\" mysqldump: workarounds -.PP +Restrictions.PP \fBmysqldump\fR does not dump the INFORMATION_SCHEMA @@ -2875,12 +2732,12 @@ database\&. As of 5\&.6\&.6, the dump includes statements to recreate those tables so that they are not missing after reloading the dump file\&. Log table contents are not dumped\&. .PP If you encounter problems backing up views due to insufficient privileges, see -Section\ \&D.5, \(lqRestrictions on Views\(rq +Section\ \&C.5, \(lqRestrictions on Views\(rq for a workaround\&. .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqldumpslow.1 mysql-5.6-5.6.33/man/mysqldumpslow.1 --- mysql-5.6-5.6.27/man/mysqldumpslow.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqldumpslow.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqldumpslow\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLDUMPSLOW\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLDUMPSLOW\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqldumpslow .SH "NAME" mysqldumpslow \- Summarize slow query log files .SH "SYNOPSIS" @@ -36,7 +35,7 @@ .SH "DESCRIPTION" .PP The MySQL slow query log contains information about queries that take a long time to execute (see -Section\ \&5.2.5, \(lqThe Slow Query Log\(rq)\&. +Section\ \&5.4.5, \(lqThe Slow Query Log\(rq)\&. \fBmysqldumpslow\fR parses MySQL slow query log files and prints a summary of their contents\&. .PP @@ -79,8 +78,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldumpslow: help option -.\" help option: mysqldumpslow \fB\-\-help\fR .sp Display a help message and exit\&. @@ -110,8 +107,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldumpslow: debug option -.\" debug option: mysqldumpslow \fB\-\-debug\fR, \fB\-d\fR .sp @@ -294,8 +289,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldumpslow: verbose option -.\" verbose option: mysqldumpslow \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -323,7 +316,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_find_rows.1 mysql-5.6-5.6.33/man/mysql_find_rows.1 --- mysql-5.6-5.6.27/man/mysql_find_rows.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_find_rows.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_find_rows\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_FIND_ROWS\F" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_FIND_ROWS\F" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_find_rows .SH "NAME" mysql_find_rows \- extract SQL statements from files .SH "SYNOPSIS" @@ -102,8 +101,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_find_rows: help option -.\" help option: mysql_find_rows \fB\-\-help\fR, \fB\-\-Information\fR .sp @@ -118,8 +115,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_find_rows: regexp option -.\" regexp option: mysql_find_rows \fB\-\-regexp=\fR\fB\fIpattern\fR\fR .sp Display queries that match the pattern\&. @@ -133,8 +128,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_find_rows: rows option -.\" rows option: mysql_find_rows \fB\-\-rows=\fR\fB\fIN\fR\fR .sp Quit after displaying @@ -150,8 +143,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_find_rows: skip-use-db option -.\" skip-use-db option: mysql_find_rows \fB\-\-skip\-use\-db\fR .sp Do not include @@ -167,8 +158,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_find_rows: start_row option -.\" start_row option: mysql_find_rows \fB\-\-start_row=\fR\fB\fIN\fR\fR .sp Start output from this row\&. @@ -176,7 +165,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_fix_extensions.1 mysql-5.6-5.6.33/man/mysql_fix_extensions.1 --- mysql-5.6-5.6.27/man/mysql_fix_extensions.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_fix_extensions.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_fix_extensions\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_FIX_EXTENSI" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_FIX_EXTENSI" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_fix_extensions .SH "NAME" mysql_fix_extensions \- normalize table file name extensions .SH "SYNOPSIS" @@ -86,7 +85,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlhotcopy.1 mysql-5.6-5.6.33/man/mysqlhotcopy.1 --- mysql-5.6-5.6.27/man/mysqlhotcopy.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlhotcopy.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlhotcopy\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLHOTCOPY\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLHOTCOPY\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlhotcopy -.\" dumping: databases and tables -.\" backups: databases and tables -.\" databases: dumping -.\" tables: dumping .SH "NAME" mysqlhotcopy \- a database backup program .SH "SYNOPSIS" @@ -140,8 +135,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: help option -.\" help option: mysqlhotcopy \fB\-\-help\fR, \fB\-?\fR .sp @@ -156,8 +149,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: addtodest option -.\" addtodest option: mysqlhotcopy \fB\-\-addtodest\fR .sp Do not rename target directory (if it exists); merely add files to it\&. @@ -171,8 +162,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: allowold option -.\" allowold option: mysqlhotcopy \fB\-\-allowold\fR .sp Do not abort if a target exists; rename it by adding an @@ -188,8 +177,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: checkpoint option -.\" checkpoint option: mysqlhotcopy \fB\-\-checkpoint=\fR\fB\fIdb_name\fR\fR\fB\&.\fR\fB\fItbl_name\fR\fR .sp Insert checkpoint entries into the specified database @@ -206,8 +193,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: chroot option -.\" chroot option: mysqlhotcopy \fB\-\-chroot=\fR\fB\fIdir_name\fR\fR .sp Base directory of the @@ -230,8 +215,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: debug option -.\" debug option: mysqlhotcopy \fB\-\-debug\fR .sp Enable debug output\&. @@ -245,8 +228,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: dryrun option -.\" dryrun option: mysqlhotcopy \fB\-\-dryrun\fR, \fB\-n\fR .sp @@ -261,8 +242,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: flushlog option -.\" flushlog option: mysqlhotcopy \fB\-\-flushlog\fR .sp Flush logs after all tables are locked\&. @@ -276,8 +255,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: host option -.\" host option: mysqlhotcopy \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -294,8 +271,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: keepold option -.\" keepold option: mysqlhotcopy \fB\-\-keepold\fR .sp Do not delete previous (renamed) target when done\&. @@ -309,8 +284,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: method option -.\" method option: mysqlhotcopy \fB\-\-method=\fR\fB\fIcommand\fR\fR .sp The method for copying files (cp @@ -327,8 +300,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: noindices option -.\" noindices option: mysqlhotcopy \fB\-\-noindices\fR .sp Do not include full index files for @@ -345,8 +316,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: password option -.\" password option: mysqlhotcopy \fB\-\-password=\fR\fB\fIpassword\fR\fR, \fB\-p\fR\fB\fIpassword\fR\fR .sp @@ -364,8 +333,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: port option -.\" port option: mysqlhotcopy \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -380,8 +347,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: old_server option -.\" old_server option: mysqlhotcopy \fB\-\-old_server\fR .sp In MySQL 5\&.6, @@ -401,8 +366,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: quiet option -.\" quiet option: mysqlhotcopy \fB\-\-quiet\fR, \fB\-q\fR .sp @@ -417,8 +380,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: record_log_pos option -.\" record_log_pos option: mysqlhotcopy \fB\-\-record_log_pos=\fR\fB\fIdb_name\fR\fR\fB\&.\fR\fB\fItbl_name\fR\fR .sp Record master and slave status in the specified database @@ -435,8 +396,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: regexp option -.\" regexp option: mysqlhotcopy \fB\-\-regexp=\fR\fB\fIexpr\fR\fR .sp Copy all databases with names that match the given regular expression\&. @@ -450,8 +409,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: resetmaster option -.\" resetmaster option: mysqlhotcopy \fB\-\-resetmaster\fR .sp Reset the binary log after locking all the tables\&. @@ -465,8 +422,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: resetslave option -.\" resetslave option: mysqlhotcopy \fB\-\-resetslave\fR .sp Reset the master info repository file or table after locking all the tables\&. @@ -480,8 +435,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: socket option -.\" socket option: mysqlhotcopy \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -497,8 +450,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: suffix option -.\" suffix option: mysqlhotcopy \fB\-\-suffix=\fR\fB\fIstr\fR\fR .sp The suffix to use for names of copied databases\&. @@ -512,8 +463,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: tmpdir option -.\" tmpdir option: mysqlhotcopy \fB\-\-tmpdir=\fR\fB\fIdir_name\fR\fR .sp The temporary directory\&. The default is @@ -528,8 +477,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlhotcopy: user option -.\" user option: mysqlhotcopy \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -558,7 +505,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlimport.1 mysql-5.6-5.6.33/man/mysqlimport.1 --- mysql-5.6-5.6.27/man/mysqlimport.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlimport.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlimport\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLIMPORT\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLIMPORT\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlimport -.\" importing: data -.\" data: importing -.\" files: text -.\" text files: importing .SH "NAME" mysqlimport \- a data import program .SH "SYNOPSIS" @@ -89,8 +84,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: help option -.\" help option: mysqlimport \fB\-\-help\fR, \fB\-?\fR .sp @@ -105,8 +98,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: bind-address option -.\" bind-address option: mysqlimport \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -122,8 +113,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: character-sets-dir option -.\" character-sets-dir option: mysqlimport \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -138,8 +127,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: columns option -.\" columns option: mysqlimport \fB\-\-columns=\fR\fB\fIcolumn_list\fR\fR, \fB\-c \fR\fB\fIcolumn_list\fR\fR .sp @@ -154,8 +141,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: compress option -.\" compress option: mysqlimport \fB\-\-compress\fR, \fB\-C\fR .sp @@ -170,8 +155,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: debug option -.\" debug option: mysqlimport \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -190,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: debug-check option -.\" debug-check option: mysqlimport \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -205,8 +186,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: debug-info option -.\" debug-info option: mysqlimport \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -220,8 +199,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: default-character-set option -.\" default-character-set option: mysqlimport \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -238,8 +215,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: default-auth option -.\" default-auth option: mysqlimport \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -256,8 +231,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: defaults-extra-file option -.\" defaults-extra-file option: mysqlimport \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -273,8 +246,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: defaults-file option -.\" defaults-file option: mysqlimport \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -290,8 +261,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: defaults-group-suffix option -.\" defaults-group-suffix option: mysqlimport \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -320,8 +289,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: delete option -.\" delete option: mysqlimport \fB\-\-delete\fR, \fB\-D\fR .sp @@ -336,17 +303,27 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: fields-terminated-by option -.\" fields-terminated-by option: mysqldump +\fB\-\-enable\-cleartext\-plugin\fR +.sp +Enable the +mysql_clear_password +cleartext authentication plugin\&. (See +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) +.sp +This option was added in MySQL 5\&.6\&.28\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-fields\-terminated\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-enclosed-by option -.\" fields-enclosed-by option: mysqldump \fB\-\-fields\-enclosed\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-optionally-enclosed-by option -.\" fields-optionally-enclosed-by option: mysqldump \fB\-\-fields\-optionally\-enclosed\-by=\&.\&.\&.\fR, -.\" mysqldump: fields-escaped-by option -.\" fields-escaped-by option: mysqldump \fB\-\-fields\-escaped\-by=\&.\&.\&.\fR .sp These options have the same meaning as the corresponding clauses for @@ -362,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: force option -.\" force option: mysqlimport \fB\-\-force\fR, \fB\-f\fR .sp @@ -381,8 +356,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: host option -.\" host option: mysqlimport \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -398,8 +371,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: ignore option -.\" ignore option: mysqlimport \fB\-\-ignore\fR, \fB\-i\fR .sp @@ -416,8 +387,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: ignore-lines option -.\" ignore-lines option: mysqlimport \fB\-\-ignore\-lines=\fR\fB\fIN\fR\fR .sp Ignore the first @@ -433,8 +402,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqldump: lines-terminated-by option -.\" lines-terminated-by option: mysqldump \fB\-\-lines\-terminated\-by=\&.\&.\&.\fR .sp This option has the same meaning as the corresponding clause for @@ -451,8 +418,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: local option -.\" local option: mysqlimport \fB\-\-local\fR, \fB\-L\fR .sp @@ -467,8 +432,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: lock-tables option -.\" lock-tables option: mysqlimport \fB\-\-lock\-tables\fR, \fB\-l\fR .sp @@ -485,8 +448,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: login-path option -.\" login-path option: mysqlimport \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -507,8 +468,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: low-priority option -.\" low-priority option: mysqlimport \fB\-\-low\-priority\fR .sp Use @@ -527,8 +486,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: no-defaults option -.\" no-defaults option: mysqlimport \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -554,8 +511,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: password option -.\" password option: mysqlimport \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -583,8 +538,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: pipe option -.\" pipe option: mysqlimport \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -599,8 +552,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: plugin-dir option -.\" plugin-dir option: mysqlimport \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -621,8 +572,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: port option -.\" port option: mysqlimport \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -637,8 +586,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: print-defaults option -.\" print-defaults option: mysqlimport \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -652,8 +599,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: protocol option -.\" protocol option: mysqlimport \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -668,8 +613,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: replace option -.\" replace option: mysqlimport \fB\-\-replace\fR, \fB\-r\fR .sp @@ -690,8 +633,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: secure-auth option -.\" secure-auth option: mysqlimport \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -710,7 +651,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -723,8 +679,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: shared-memory-base-name option -.\" shared-memory-base-name option: mysqlimport \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -743,8 +697,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: silent option -.\" silent option: mysqlimport \fB\-\-silent\fR, \fB\-s\fR .sp @@ -759,8 +711,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: socket option -.\" socket option: mysqlimport \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -776,14 +726,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: SSL options -.\" SSL options: mysqlimport \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -794,8 +742,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: user option -.\" user option: mysqlimport \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -810,8 +756,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: use-threads option -.\" use-threads option: mysqlimport \fB\-\-use\-threads=\fR\fB\fIN\fR\fR .sp Load files in parallel using @@ -827,8 +771,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: verbose option -.\" verbose option: mysqlimport \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -843,8 +785,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlimport: version option -.\" version option: mysqlimport \fB\-\-version\fR, \fB\-V\fR .sp @@ -887,7 +827,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_install_db.1 mysql-5.6-5.6.33/man/mysql_install_db.1 --- mysql-5.6-5.6.27/man/mysql_install_db.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_install_db.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_install_db\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_INSTALL_DB\" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_INSTALL_DB\" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_install_db .SH "NAME" mysql_install_db \- initialize MySQL data directory .SH "SYNOPSIS" @@ -192,8 +191,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: help option -.\" help option: mysql_install_db \fB\-\-help\fR .sp Display a help message and exit\&. @@ -207,8 +204,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: basedir option -.\" basedir option: mysql_install_db \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL installation directory\&. @@ -222,8 +217,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: builddir option -.\" builddir option: mysql_install_db \fB\-\-builddir=\fR\fB\fIdir_name\fR\fR .sp For use with @@ -239,8 +232,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: cross-bootstrap option -.\" cross-bootstrap option: mysql_install_db \fB\-\-cross\-bootstrap\fR .sp For internal use\&. This option is used for building system tables on one host intended for another\&. @@ -254,8 +245,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: datadir option -.\" datadir option: mysql_install_db \fB\-\-datadir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL data directory\&. Beginning with MySQL 5\&.6\&.8, @@ -271,7 +260,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" defaults-extra-file option \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -287,7 +275,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" defaults-file option \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -303,8 +290,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: force option -.\" force option: mysql_install_db \fB\-\-force\fR .sp Cause @@ -320,8 +305,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: keep-my-cnf option -.\" keep-my-cnf option: mysql_install_db \fB\-\-keep\-my\-cnf\fR .sp Tell @@ -341,8 +324,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: ldata option -.\" ldata option: mysql_install_db \fB\-\-ldata=\fR\fB\fIdir_name\fR\fR .sp A synonym for @@ -357,7 +338,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" no-defaults option \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -373,8 +353,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: random-passwords option -.\" random-passwords option: mysql_install_db \fB\-\-random\-passwords\fR .sp On Unix platforms, this option provides for more secure MySQL installation\&. Invoking @@ -406,7 +384,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" .mysql_secret file The initial random root password is written to the @@ -491,8 +468,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: rpm option -.\" rpm option: mysql_install_db \fB\-\-rpm\fR .sp For internal use\&. This option is used during the MySQL installation process for install operations performed using RPM packages\&. @@ -506,8 +481,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: skip-name-resolve option -.\" skip-name-resolve option: mysql_install_db \fB\-\-skip\-name\-resolve\fR .sp Use IP addresses rather than host names when creating grant table entries\&. This option can be useful if your DNS does not work\&. @@ -521,8 +494,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: srcdir option -.\" srcdir option: mysql_install_db \fB\-\-srcdir=\fR\fB\fIdir_name\fR\fR .sp For internal use\&. This option specifies the directory under which @@ -538,8 +509,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: user option -.\" user option: mysql_install_db \fB\-\-user=\fR\fB\fIuser_name\fR\fR .sp The system (login) user name to use for running @@ -560,8 +529,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: verbose option -.\" verbose option: mysql_install_db \fB\-\-verbose\fR .sp Verbose mode\&. Print more information about what the program does\&. @@ -575,8 +542,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_install_db: windows option -.\" windows option: mysql_install_db \fB\-\-windows\fR .sp For internal use\&. This option is used for creating Windows distributions\&. @@ -584,7 +549,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_plugin.1 mysql-5.6-5.6.33/man/mysql_plugin.1 --- mysql-5.6-5.6.27/man/mysql_plugin.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_plugin.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_plugin\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_PLUGIN\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_PLUGIN\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_plugin .SH "NAME" mysql_plugin \- configure MySQL server plugins .SH "SYNOPSIS" @@ -58,11 +57,11 @@ automatically\&. For additional control over plugin activation, use \fB\-\-\fR\fB\fIplugin_name\fR\fR options named for specific plugins, as described in -Section\ \&5.1.8.1, \(lqInstalling and Uninstalling Plugins\(rq\&. +Section\ \&5.5.2, \(lqInstalling and Uninstalling Plugins\(rq\&. .PP Each invocation of \fBmysql_plugin\fR -reads a configuration file to determine how to configure the plugins contained in a single plugin library object file\&. To invoke +reads a configuration file to determine how to configure the plugins contained in a single plugin library file\&. To invoke \fBmysql_plugin\fR, use this syntax: .sp .if n \{\ @@ -120,7 +119,7 @@ .PP The first line in the myplugins\&.ini -file is the name of the library object file, without any extension such as +file is the name of the library file, without any extension such as \&.so or \&.dll\&. The remaining lines are the names of the components to be enabled or disabled\&. Each value in the file should be on a separate line\&. Lines on which the first character is @@ -174,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: help option -.\" help option: mysql_plugin \fB\-\-help\fR, \fB\-?\fR .sp @@ -190,8 +187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: basedir option -.\" basedir option: mysql_plugin \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR, \fB\-b \fR\fB\fIdir_name\fR\fR .sp @@ -206,8 +201,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: datadir option -.\" datadir option: mysql_plugin \fB\-\-datadir=\fR\fB\fIdir_name\fR\fR, \fB\-d \fR\fB\fIdir_name\fR\fR .sp @@ -222,8 +215,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: my-print-defaults option -.\" my-print-defaults option: mysql_plugin \fB\-\-my\-print\-defaults=\fR\fB\fIfile_name\fR\fR, \fB\-b \fR\fB\fIfile_name\fR\fR .sp @@ -240,8 +231,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: mysqld option -.\" mysqld option: mysql_plugin \fB\-\-mysqld=\fR\fB\fIfile_name\fR\fR, \fB\-b \fR\fB\fIfile_name\fR\fR .sp @@ -258,8 +247,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: no-defaults option -.\" no-defaults option: mysql_plugin \fB\-\-no\-defaults\fR, \fB\-p\fR .sp @@ -278,8 +265,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: plugin-dir option -.\" plugin-dir option: mysql_plugin \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR, \fB\-p \fR\fB\fIdir_name\fR\fR .sp @@ -294,8 +279,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: plugin-ini option -.\" plugin-ini option: mysql_plugin \fB\-\-plugin\-ini=\fR\fB\fIfile_name\fR\fR, \fB\-i \fR\fB\fIfile_name\fR\fR .sp @@ -318,8 +301,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: print-defaults option -.\" print-defaults option: mysql_plugin \fB\-\-print\-defaults\fR, \fB\-P\fR .sp @@ -344,8 +325,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: verbose option -.\" verbose option: mysql_plugin \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -360,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_plugin: version option -.\" version option: mysql_plugin \fB\-\-version\fR, \fB\-V\fR .sp @@ -370,7 +347,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_secure_installation.1 mysql-5.6-5.6.33/man/mysql_secure_installation.1 --- mysql-5.6-5.6.27/man/mysql_secure_installation.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_secure_installation.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_secure_installation\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_SECURE_INST" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_SECURE_INST" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_secure_installation .SH "NAME" mysql_secure_installation \- improve MySQL installation security .SH "SYNOPSIS" @@ -110,7 +109,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql.server.1 mysql-5.6-5.6.33/man/mysql.server.1 --- mysql-5.6-5.6.27/man/mysql.server.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql.server.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql.server\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL\&.SERVER\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL\&.SERVER\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql.server .SH "NAME" mysql.server \- MySQL server startup script .SH "SYNOPSIS" @@ -88,7 +87,7 @@ /etc/init\&.d directory with the name mysql\&. See -Section\ \&2.5.5, \(lqInstalling MySQL on Linux Using RPM Packages\(rq, for more information on the Linux RPM packages\&. +Section\ \&2.5.5, \(lqInstalling MySQL on Linux Using RPM Packages from Oracle\(rq, for more information on the Linux RPM packages\&. .PP Some vendors provide RPM packages that install a startup script under a different name such as \fBmysqld\fR\&. @@ -212,7 +211,6 @@ [mysql_server] sections, but to be current you should rename such sections to [mysql\&.server]\&. -.\" changing: socket location .PP You can add options for \fBmysql\&.server\fR @@ -258,8 +256,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql.server: basedir option -.\" basedir option: mysql.server \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL installation directory\&. @@ -273,8 +269,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql.server: datadir option -.\" datadir option: mysql.server \fB\-\-datadir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL data directory\&. @@ -288,8 +282,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql.server: pid-file option -.\" pid-file option: mysql.server \fB\-\-pid\-file=\fR\fB\fIfile_name\fR\fR .sp The path name of the file in which the server should write its process ID\&. @@ -328,8 +320,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql.server: service-startup-timeout option -.\" service-startup-timeout option: mysql.server \fB\-\-service\-startup\-timeout=\fR\fB\fIseconds\fR\fR .sp How long in seconds to wait for confirmation of server startup\&. If the server does not start within this time, @@ -339,7 +329,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_setpermission.1 mysql-5.6-5.6.33/man/mysql_setpermission.1 --- mysql-5.6-5.6.27/man/mysql_setpermission.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_setpermission.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_setpermission\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_SETPERMISSI" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_SETPERMISSI" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_setpermission .SH "NAME" mysql_setpermission \- interactively set permissions in grant tables .SH "SYNOPSIS" @@ -100,8 +99,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: help option -.\" help option: mysql_setpermission \fB\-\-help\fR .sp Display a help message and exit\&. @@ -115,8 +112,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: host option -.\" host option: mysql_setpermission \fB\-\-host=\fR\fB\fIhost_name\fR\fR .sp Connect to the MySQL server on the given host\&. @@ -130,8 +125,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: password option -.\" password option: mysql_setpermission \fB\-\-password=\fR\fB\fIpassword\fR\fR .sp The password to use when connecting to the server\&. Note that the password value is not optional for this option, unlike for other MySQL programs\&. @@ -148,8 +141,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: port option -.\" port option: mysql_setpermission \fB\-\-port=\fR\fB\fIport_num\fR\fR .sp The TCP/IP port number to use for the connection\&. @@ -163,8 +154,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: socket option -.\" socket option: mysql_setpermission \fB\-\-socket=\fR\fB\fIpath\fR\fR .sp For connections to @@ -179,8 +168,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_setpermission: user option -.\" user option: mysql_setpermission \fB\-\-user=\fR\fB\fIuser_name\fR\fR .sp The MySQL user name to use when connecting to the server\&. @@ -188,7 +175,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlshow.1 mysql-5.6-5.6.33/man/mysqlshow.1 --- mysql-5.6-5.6.27/man/mysqlshow.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlshow.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlshow\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLSHOW\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLSHOW\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,12 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlshow -.\" databases: displaying -.\" displaying: database information -.\" tables: displaying -.\" columns: displaying -.\" showing: database information .SH "NAME" mysqlshow \- display database, table, and column information .SH "SYNOPSIS" @@ -136,8 +130,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: help option -.\" help option: mysqlshow \fB\-\-help\fR, \fB\-?\fR .sp @@ -152,8 +144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: bind-address option -.\" bind-address option: mysqlshow \fB\-\-bind\-address=\fR\fB\fIip_address\fR\fR .sp On a computer having multiple network interfaces, use this option to select which interface to use for connecting to the MySQL server\&. @@ -169,8 +159,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: character-sets-dir option -.\" character-sets-dir option: mysqlshow \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -185,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: compress option -.\" compress option: mysqlshow \fB\-\-compress\fR, \fB\-C\fR .sp @@ -201,8 +187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: count option -.\" count option: mysqlshow \fB\-\-count\fR .sp Show the number of rows per table\&. This can be slow for non\-MyISAM @@ -217,8 +201,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: debug option -.\" debug option: mysqlshow \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -237,8 +219,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: debug-check option -.\" debug-check option: mysqlshow \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -252,8 +232,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: debug-info option -.\" debug-info option: mysqlshow \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -267,8 +245,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: default-character-set option -.\" default-character-set option: mysqlshow \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -285,8 +261,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: default-auth option -.\" default-auth option: mysqlshow \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -303,8 +277,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: defaults-extra-file option -.\" defaults-extra-file option: mysqlshow \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -320,8 +292,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: defaults-file option -.\" defaults-file option: mysqlshow \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -337,8 +307,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: defaults-group-suffix option -.\" defaults-group-suffix option: mysqlshow \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -367,8 +335,24 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: host option -.\" host option: mysqlshow +\fB\-\-enable\-cleartext\-plugin\fR +.sp +Enable the +mysql_clear_password +cleartext authentication plugin\&. (See +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) +.sp +This option was added in MySQL 5\&.6\&.28\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -383,8 +367,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: keys option -.\" keys option: mysqlshow \fB\-\-keys\fR, \fB\-k\fR .sp @@ -399,8 +381,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: login-path option -.\" login-path option: mysqlshow \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -421,8 +401,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: no-defaults option -.\" no-defaults option: mysqlshow \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -448,8 +426,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: password option -.\" password option: mysqlshow \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -477,8 +453,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: pipe option -.\" pipe option: mysqlshow \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -493,8 +467,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: plugin-dir option -.\" plugin-dir option: mysqlshow \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -515,8 +487,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: port option -.\" port option: mysqlshow \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -531,8 +501,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: print-defaults option -.\" print-defaults option: mysqlshow \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -546,8 +514,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: protocol option -.\" protocol option: mysqlshow \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -562,8 +528,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: secure-auth option -.\" secure-auth option: mysqlshow \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -582,7 +546,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -595,8 +574,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: shared-memory-base-name option -.\" shared-memory-base-name option: mysqlshow \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -615,8 +592,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: show-table-type option -.\" show-table-type option: mysqlshow \fB\-\-show\-table\-type\fR, \fB\-t\fR .sp @@ -635,8 +610,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: socket option -.\" socket option: mysqlshow \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -652,14 +625,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: SSL options -.\" SSL options: mysqlshow \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -670,8 +641,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: status option -.\" status option: mysqlshow \fB\-\-status\fR, \fB\-i\fR .sp @@ -686,8 +655,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: user option -.\" user option: mysqlshow \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -702,8 +669,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: verbose option -.\" verbose option: mysqlshow \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -718,8 +683,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlshow: version option -.\" version option: mysqlshow \fB\-\-version\fR, \fB\-V\fR .sp @@ -728,7 +691,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqlslap.1 mysql-5.6-5.6.33/man/mysqlslap.1 --- mysql-5.6-5.6.27/man/mysqlslap.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqlslap.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqlslap\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQLSLAP\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQLSLAP\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqlslap -.\" load emulation .SH "NAME" mysqlslap \- load emulation client .SH "SYNOPSIS" @@ -173,8 +171,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: help option -.\" help option: mysqlslap \fB\-\-help\fR, \fB\-?\fR .sp @@ -189,8 +185,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql option -.\" auto-generate-sql option: mysqlslap \fB\-\-auto\-generate\-sql\fR, \fB\-a\fR .sp @@ -205,8 +199,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-add-autoincrement option -.\" auto-generate-sql-add-autoincrement option: mysqlslap \fB\-\-auto\-generate\-sql\-add\-autoincrement\fR .sp Add an @@ -222,8 +214,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-execute-number option -.\" auto-generate-sql-execute-number option: mysqlslap \fB\-\-auto\-generate\-sql\-execute\-number=\fR\fB\fIN\fR\fR .sp Specify how many queries to generate automatically\&. @@ -237,8 +227,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-guid-primary option -.\" auto-generate-sql-guid-primary option: mysqlslap \fB\-\-auto\-generate\-sql\-guid\-primary\fR .sp Add a GUID\-based primary key to automatically generated tables\&. @@ -252,8 +240,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-load-type option -.\" auto-generate-sql-load-type option: mysqlslap \fB\-\-auto\-generate\-sql\-load\-type=\fR\fB\fItype\fR\fR .sp Specify the test load type\&. The permissible values are @@ -278,8 +264,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-secondary-indexes option -.\" auto-generate-sql-secondary-indexes option: mysqlslap \fB\-\-auto\-generate\-sql\-secondary\-indexes=\fR\fB\fIN\fR\fR .sp Specify how many secondary indexes to add to automatically generated tables\&. By default, none are added\&. @@ -293,8 +277,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-unique-query-number option -.\" auto-generate-sql-unique-query-number option: mysqlslap \fB\-\-auto\-generate\-sql\-unique\-query\-number=\fR\fB\fIN\fR\fR .sp How many different queries to generate for automatic tests\&. For example, if you run a @@ -310,8 +292,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-unique-write-number option -.\" auto-generate-sql-unique-write-number option: mysqlslap \fB\-\-auto\-generate\-sql\-unique\-write\-number=\fR\fB\fIN\fR\fR .sp How many different queries to generate for @@ -326,11 +306,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: auto-generate-sql-write-number option -.\" auto-generate-sql-write-number option: mysqlslap \fB\-\-auto\-generate\-sql\-write\-number=\fR\fB\fIN\fR\fR .sp -How many row inserts to perform on each thread\&. The default is 100\&. +How many row inserts to perform\&. The default is 100\&. .RE .sp .RS 4 @@ -341,8 +319,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: commit option -.\" commit option: mysqlslap \fB\-\-commit=\fR\fB\fIN\fR\fR .sp How many statements to execute before committing\&. The default is 0 (no commits are done)\&. @@ -356,8 +332,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: compress option -.\" compress option: mysqlslap \fB\-\-compress\fR, \fB\-C\fR .sp @@ -372,14 +346,10 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: concurrency option -.\" concurrency option: mysqlslap \fB\-\-concurrency=\fR\fB\fIN\fR\fR, \fB\-c \fR\fB\fIN\fR\fR .sp -The number of clients to simulate when issuing the -SELECT -statement\&. +The number of parallel clients to simulate\&. .RE .sp .RS 4 @@ -390,8 +360,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: create option -.\" create option: mysqlslap \fB\-\-create=\fR\fB\fIvalue\fR\fR .sp The file or string containing the statement to use for creating the table\&. @@ -405,8 +373,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: create-schema option -.\" create-schema option: mysqlslap \fB\-\-create\-schema=\fR\fB\fIvalue\fR\fR .sp The schema in which to run the tests\&. @@ -441,8 +407,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: csv option -.\" csv option: mysqlslap \fB\-\-csv[=\fR\fB\fIfile_name\fR\fR\fB]\fR .sp Generate output in comma\-separated values format\&. The output goes to the named file, or to the standard output if no file is given\&. @@ -456,8 +420,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: debug option -.\" debug option: mysqlslap \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -476,8 +438,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: debug-check option -.\" debug-check option: mysqlslap \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -491,8 +451,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: debug-info option -.\" debug-info option: mysqlslap \fB\-\-debug\-info\fR, \fB\-T\fR .sp @@ -507,8 +465,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: default-auth option -.\" default-auth option: mysqlslap \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -525,8 +481,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: defaults-extra-file option -.\" defaults-extra-file option: mysqlslap \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -542,8 +496,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: defaults-file option -.\" defaults-file option: mysqlslap \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -559,8 +511,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: defaults-group-suffix option -.\" defaults-group-suffix option: mysqlslap \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -589,8 +539,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: delimiter option -.\" delimiter option: mysqlslap \fB\-\-delimiter=\fR\fB\fIstr\fR\fR, \fB\-F \fR\fB\fIstr\fR\fR .sp @@ -605,8 +553,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: detach option -.\" detach option: mysqlslap \fB\-\-detach=\fR\fB\fIN\fR\fR .sp Detach (close and reopen) each connection after each @@ -622,14 +568,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: enable-cleartext-plugin option -.\" enable-cleartext-plugin option: mysqlslap \fB\-\-enable\-cleartext\-plugin\fR .sp Enable the mysql_clear_password cleartext authentication plugin\&. (See -Section\ \&6.3.8.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. +Section\ \&6.5.1.7, \(lqThe Cleartext Client-Side Authentication Plugin\(rq\&.) This option was added in MySQL 5\&.6\&.7\&. .RE .sp .RS 4 @@ -640,8 +584,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: engine option -.\" engine option: mysqlslap \fB\-\-engine=\fR\fB\fIengine_name\fR\fR, \fB\-e \fR\fB\fIengine_name\fR\fR .sp @@ -656,8 +598,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: host option -.\" host option: mysqlslap \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -672,8 +612,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: iterations option -.\" iterations option: mysqlslap \fB\-\-iterations=\fR\fB\fIN\fR\fR, \fB\-i \fR\fB\fIN\fR\fR .sp @@ -688,8 +626,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: login-path option -.\" login-path option: mysqlslap \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -710,8 +646,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: no-drop option -.\" no-drop option: mysqlslap \fB\-\-no\-drop\fR .sp Prevent @@ -727,8 +661,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: no-defaults option -.\" no-defaults option: mysqlslap \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -754,8 +686,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: number-char-cols option -.\" number-char-cols option: mysqlslap \fB\-\-number\-char\-cols=\fR\fB\fIN\fR\fR, \fB\-x \fR\fB\fIN\fR\fR .sp @@ -774,8 +704,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: number-int-cols option -.\" number-int-cols option: mysqlslap \fB\-\-number\-int\-cols=\fR\fB\fIN\fR\fR, \fB\-y \fR\fB\fIN\fR\fR .sp @@ -794,8 +722,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: number-of-queries option -.\" number-of-queries option: mysqlslap \fB\-\-number\-of\-queries=\fR\fB\fIN\fR\fR .sp Limit each client to approximately this many queries\&. Query counting takes into account the statement delimiter\&. For example, if you invoke @@ -824,8 +750,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: only-print option -.\" only-print option: mysqlslap \fB\-\-only\-print\fR .sp Do not connect to databases\&. @@ -841,8 +765,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: password option -.\" password option: mysqlslap \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -870,8 +792,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: pipe option -.\" pipe option: mysqlslap \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -886,8 +806,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: plugin-dir option -.\" plugin-dir option: mysqlslap \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -908,8 +826,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: port option -.\" port option: mysqlslap \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -924,8 +840,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: post-query option -.\" post-query option: mysqlslap \fB\-\-post\-query=\fR\fB\fIvalue\fR\fR .sp The file or string containing the statement to execute after the tests have completed\&. This execution is not counted for timing purposes\&. @@ -939,8 +853,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: post-system option -.\" post-system option: mysqlslap \fB\-\-post\-system=\fR\fB\fIstr\fR\fR .sp The string to execute using @@ -956,8 +868,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: pre-query option -.\" pre-query option: mysqlslap \fB\-\-pre\-query=\fR\fB\fIvalue\fR\fR .sp The file or string containing the statement to execute before running the tests\&. This execution is not counted for timing purposes\&. @@ -971,8 +881,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: pre-system option -.\" pre-system option: mysqlslap \fB\-\-pre\-system=\fR\fB\fIstr\fR\fR .sp The string to execute using @@ -988,8 +896,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: print-defaults option -.\" print-defaults option: mysqlslap \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -1003,8 +909,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: protocol option -.\" protocol option: mysqlslap \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -1019,8 +923,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: query option -.\" query option: mysqlslap \fB\-\-query=\fR\fB\fIvalue\fR\fR, \fB\-q \fR\fB\fIvalue\fR\fR .sp @@ -1037,8 +939,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: secure-auth option -.\" secure-auth option: mysqlslap \fB\-\-secure\-auth\fR .sp Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option is enabled by default; use @@ -1057,7 +957,22 @@ .ps -1 .br Passwords that use the pre\-4\&.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided\&. Pre\-4\&.1 passwords are deprecated and support for them will be removed in a future MySQL release\&. For account upgrade instructions, see -Section\ \&6.3.8.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin\(rq\&. +.sp .5v +.RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option is deprecated and will be removed in a future release\&. As of MySQL 5\&.7\&.5, it is always enabled and attempting to disable it produces an error\&. .sp .5v .RE .RE @@ -1070,8 +985,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: shared-memory-base-name option -.\" shared-memory-base-name option: mysqlslap \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. This option applies only if the server supports shared\-memory connections\&. @@ -1085,8 +998,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: silent option -.\" silent option: mysqlslap \fB\-\-silent\fR, \fB\-s\fR .sp @@ -1101,8 +1012,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: socket option -.\" socket option: mysqlslap \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -1118,14 +1027,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: SSL options -.\" SSL options: mysqlslap \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -1136,8 +1043,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: user option -.\" user option: mysqlslap \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -1152,8 +1057,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: verbose option -.\" verbose option: mysqlslap \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -1168,8 +1071,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqlslap: version option -.\" version option: mysqlslap \fB\-\-version\fR, \fB\-V\fR .sp @@ -1178,7 +1079,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql-stress-test.pl.1 mysql-5.6-5.6.33/man/mysql-stress-test.pl.1 --- mysql-5.6-5.6.27/man/mysql-stress-test.pl.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql-stress-test.pl.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql-stress-test.pl\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/16/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL .\" Language: English .\" -.TH "\FBMYSQL\-STRESS\-TE" "1" "09/16/2015" "MySQL" "MySQL Database System" +.TH "\FBMYSQL\-STRESS\-TE" "1" "08/25/2016" "MySQL" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql-stress-test.pl .SH "NAME" mysql-stress-test.pl \- server stress test program .SH "SYNOPSIS" @@ -67,8 +66,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: help option -.\" help option: mysql-stress-test.pl \fB\-\-help\fR .sp Display a help message and exit\&. @@ -82,8 +79,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: abort-on-error option -.\" abort-on-error option: mysql-stress-test.pl \fB\-\-abort\-on\-error=\fR\fB\fIN\fR\fR .sp Causes the program to abort if an error with severity less than or equal to N was encountered\&. Set to 1 to abort on any error\&. @@ -97,8 +92,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: check-tests-file option -.\" check-tests-file option: mysql-stress-test.pl \fB\-\-check\-tests\-file\fR .sp Periodically check the file that lists the tests to be run\&. If it has been modified, reread the file\&. This can be useful if you update the list of tests to be run during a stress test\&. @@ -112,8 +105,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: cleanup option -.\" cleanup option: mysql-stress-test.pl \fB\-\-cleanup\fR .sp Force cleanup of the working directory\&. @@ -127,8 +118,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: log-error-details option -.\" log-error-details option: mysql-stress-test.pl \fB\-\-log\-error\-details\fR .sp Log error details in the global error log file\&. @@ -142,8 +131,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: loop-count option -.\" loop-count option: mysql-stress-test.pl \fB\-\-loop\-count=\fR\fB\fIN\fR\fR .sp In sequential test mode, the number of loops to execute before exiting\&. @@ -157,8 +144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: mysqltest option -.\" mysqltest option: mysql-stress-test.pl \fB\-\-mysqltest=\fR\fB\fIpath\fR\fR .sp The path name to the @@ -174,8 +159,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-database option -.\" server-database option: mysql-stress-test.pl \fB\-\-server\-database=\fR\fB\fIdb_name\fR\fR .sp The database to use for the tests\&. The default is @@ -190,8 +173,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-host option -.\" server-host option: mysql-stress-test.pl \fB\-\-server\-host=\fR\fB\fIhost_name\fR\fR .sp The host name of the local host to use for making a TCP/IP connection to the local server\&. By default, the connection is made to @@ -207,8 +188,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-logs-dir option -.\" server-logs-dir option: mysql-stress-test.pl \fB\-\-server\-logs\-dir=\fR\fB\fIpath\fR\fR .sp This option is required\&. @@ -224,8 +203,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-password option -.\" server-password option: mysql-stress-test.pl \fB\-\-server\-password=\fR\fB\fIpassword\fR\fR .sp The password to use when connecting to the server\&. @@ -239,8 +216,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-port option -.\" server-port option: mysql-stress-test.pl \fB\-\-server\-port=\fR\fB\fIport_num\fR\fR .sp The TCP/IP port number to use for connecting to the server\&. The default is 3306\&. @@ -254,8 +229,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-socket option -.\" server-socket option: mysql-stress-test.pl \fB\-\-server\-socket=\fR\fB\fIfile_name\fR\fR .sp For connections to @@ -271,8 +244,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: server-user option -.\" server-user option: mysql-stress-test.pl \fB\-\-server\-user=\fR\fB\fIuser_name\fR\fR .sp The MySQL user name to use when connecting to the server\&. The default is @@ -287,8 +258,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: sleep-time option -.\" sleep-time option: mysql-stress-test.pl \fB\-\-sleep\-time=\fR\fB\fIN\fR\fR .sp The delay in seconds between test executions\&. @@ -302,8 +271,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-basedir option -.\" stress-basedir option: mysql-stress-test.pl \fB\-\-stress\-basedir=\fR\fB\fIpath\fR\fR .sp This option is required\&. @@ -319,8 +286,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-datadir option -.\" stress-datadir option: mysql-stress-test.pl \fB\-\-stress\-datadir=\fR\fB\fIpath\fR\fR .sp The directory of data files to be used during testing\&. The default location is the @@ -338,8 +303,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-init-file option -.\" stress-init-file option: mysql-stress-test.pl \fB\-\-stress\-init\-file[=\fR\fB\fIpath\fR\fR\fB]\fR .sp \fIfile_name\fR @@ -356,8 +319,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-mode option -.\" stress-mode option: mysql-stress-test.pl \fB\-\-stress\-mode=\fR\fB\fImode\fR\fR .sp This option indicates the test order in stress\-test mode\&. The @@ -378,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-suite-basedir option -.\" stress-suite-basedir option: mysql-stress-test.pl \fB\-\-stress\-suite\-basedir=\fR\fB\fIpath\fR\fR .sp This option is required\&. @@ -403,8 +362,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: stress-tests-file option -.\" stress-tests-file option: mysql-stress-test.pl \fB\-\-stress\-tests\-file[=\fR\fB\fIfile_name\fR\fR\fB]\fR .sp Use this option to run the stress tests\&. @@ -425,8 +382,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: suite option -.\" suite option: mysql-stress-test.pl \fB\-\-suite=\fR\fB\fIsuite_name\fR\fR .sp Run the named test suite\&. The default name is @@ -444,8 +399,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: test-count option -.\" test-count option: mysql-stress-test.pl \fB\-\-test\-count=\fR\fB\fIN\fR\fR .sp The number of tests to execute before exiting\&. @@ -459,8 +412,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: test-duration option -.\" test-duration option: mysql-stress-test.pl \fB\-\-test\-duration=\fR\fB\fIN\fR\fR .sp The duration of stress testing in seconds\&. @@ -474,8 +425,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: threads option -.\" threads option: mysql-stress-test.pl \fB\-\-threads=\fR\fB\fIN\fR\fR .sp The number of threads\&. The default is 1\&. @@ -489,8 +438,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-stress-test.pl: verbose option -.\" verbose option: mysql-stress-test.pl \fB\-\-verbose\fR .sp Verbose mode\&. Print more information about what the program does\&. @@ -498,7 +445,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 2006, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 2006, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqltest.1 mysql-5.6-5.6.33/man/mysqltest.1 --- mysql-5.6-5.6.27/man/mysqltest.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqltest.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysqltest\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/16/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL .\" Language: English .\" -.TH "\FBMYSQLTEST\FR" "1" "09/16/2015" "MySQL" "MySQL Database System" +.TH "\FBMYSQLTEST\FR" "1" "08/25/2016" "MySQL" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysqltest -.\" mysqltest_embedded .SH "NAME" mysqltest \- program to run test cases .br @@ -152,8 +150,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: help option -.\" help option: mysqltest \fB\-\-help\fR, \fB\-?\fR .sp @@ -168,8 +164,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: basedir option -.\" basedir option: mysqltest \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR, \fB\-b \fR\fB\fIdir_name\fR\fR .sp @@ -184,8 +178,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: character-sets-dir option -.\" character-sets-dir option: mysqltest \fB\-\-character\-sets\-dir=\fR\fB\fIpath\fR\fR .sp The directory where character sets are installed\&. @@ -199,8 +191,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: compress option -.\" compress option: mysqltest \fB\-\-compress\fR, \fB\-C\fR .sp @@ -215,8 +205,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: currsor-protocol option -.\" cursor-protocol option: mysqltest \fB\-\-cursor\-protocol\fR .sp Use cursors for prepared statements\&. @@ -230,8 +218,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: database option -.\" database option: mysqltest \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-D \fR\fB\fIdb_name\fR\fR .sp @@ -246,8 +232,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: debug option -.\" debug option: mysqltest \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-#[\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -265,8 +249,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: debug-check option -.\" debug-check option: mysqltest \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -280,8 +262,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: debug-info option -.\" debug-info option: mysqltest \fB\-\-debug\-info\fR .sp Print debugging information and memory and CPU usage statistics when the program exits\&. @@ -295,8 +275,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: explain-protocol option -.\" explain-protocol option: mysqltest \fB\-\-explain\-protocol\fR, .sp Run @@ -312,8 +290,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: host option -.\" host option: mysqltest \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -328,8 +304,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: include option -.\" include option: mysqltest \fB\-\-include=\fR\fB\fIfile_name\fR\fR, \fB\-i \fR\fB\fIfile_name\fR\fR .sp @@ -348,8 +322,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: json-explain-protocol option -.\" json-explain-protocol option: mysqltest \fB\-\-json\-explain\-protocol\fR, .sp Run @@ -367,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: logdir option -.\" logdir option: mysqltest \fB\-\-logdir=\fR\fB\fIdir_name\fR\fR .sp The directory to use for log files\&. @@ -382,8 +352,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: mark-progress option -.\" mark-progress option: mysqltest \fB\-\-mark\-progress\fR .sp Write the line number and elapsed time to @@ -398,8 +366,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: max-connect-retries option -.\" max-connect-retries option: mysqltest \fB\-\-max\-connect\-retries=\fR\fB\fInum\fR\fR .sp The maximum number of connection attempts when connecting to server\&. @@ -413,8 +379,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: max-connections option -.\" max-connections option: mysqltest \fB\-\-max\-connections=\fR\fB\fInum\fR\fR .sp The maximum number of simultaneous server connections per client (that is, per test)\&. If not set, the maximum is 128\&. Minimum allowed limit is 8, maximum is 5120\&. @@ -428,8 +392,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: no-defaults option -.\" no-defaults option: mysqltest \fB\-\-no\-defaults\fR .sp Do not read default options from any option files\&. If used, this must be the first option\&. @@ -443,8 +405,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: plugin-dir option -.\" plugin-dir option: mysqltest \fB\-\-plugin\-dir=\fR\fB\fIpath\fR\fR .sp The directory in which to look for plugins\&. It may be necessary to specify this option if the @@ -464,8 +424,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: password option -.\" password option: mysqltest \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -488,8 +446,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: port option -.\" port option: mysqltest \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -504,8 +460,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: protocol option -.\" protocol option: mysqltest \fB\-\-protocol=\fR\fB{TCP|SOCKET|PIPE|MEMORY}\fR .sp Choose the protocol for communication with the server\&. @@ -525,8 +479,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: ps-protocol option -.\" ps-protocol option: mysqltest \fB\-\-ps\-protocol\fR .sp Use the prepared\-statement protocol for communication\&. @@ -540,13 +492,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: quiet option -.\" quiet option: mysqltest \fB\-\-quiet\fR .sp Suppress all normal output\&. This is a synonym for -.\" mysqltest: silent option -.\" silent option: mysqltest \fB\-\-silent\fR\&. .RE .sp @@ -558,8 +506,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: record option -.\" record option: mysqltest \fB\-\-record\fR, \fB\-r\fR .sp @@ -577,8 +523,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: result-file option -.\" result-file option: mysqltest \fB\-\-result\-file=\fR\fB\fIfile_name\fR\fR, \fB\-R \fR\fB\fIfile_name\fR\fR .sp @@ -663,8 +607,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: server-arg option -.\" server-arg option: mysqltest \fB\-\-server\-arg=\fR\fB\fIvalue\fR\fR, \fB\-A \fR\fB\fIvalue\fR\fR .sp @@ -682,8 +624,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: server-file option -.\" server-file option: mysqltest \fB\-\-server\-file=\fR\fB\fIfile_name\fR\fR, \fB\-F \fR\fB\fIfile_name\fR\fR .sp @@ -698,8 +638,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: server-public-key-path option -.\" server-public-key-path option: mysqltest \fB\-\-server\-public\-key\-path=\fR\fBfile_name\fR .sp The path name to a file containing the server RSA public key\&. The file must be in PEM format\&. The public key is used for RSA encryption of the client password for connections to the server made using accounts that authenticate with the @@ -727,8 +665,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: silent option -.\" silent option: mysqltest \fB\-\-silent\fR, \fB\-s\fR .sp @@ -743,8 +679,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: skip-safemalloc option -.\" skip-safemalloc option: mysqltest \fB\-\-skip\-safemalloc\fR .sp Do not use memory allocation checking\&. @@ -758,8 +692,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: sleep option -.\" sleep option: mysqltest \fB\-\-sleep=\fR\fB\fInum\fR\fR, \fB\-T \fR\fB\fInum\fR\fR .sp @@ -784,8 +716,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: socket option -.\" socket option: mysqltest \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -802,8 +732,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: sp-protocol option -.\" sp-protocol option: mysqltest \fB\-\-sp\-protocol\fR .sp Execute DML statements within a stored procedure\&. For every DML statement, @@ -819,8 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: tail-lines option -.\" tail-lines option: mysqltest \fB\-\-tail\-lines=\fR\fB\fInn\fR\fR .sp Specify how many lines of the result to include in the output if the test fails because an SQL statement fails\&. The default is 0, meaning no lines of result printed\&. @@ -834,8 +760,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: test-file option -.\" test-file option: mysqltest \fB\-\-test\-file=\fR\fB\fIfile_name\fR\fR, \fB\-x \fR\fB\fIfile_name\fR\fR .sp @@ -850,8 +774,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: timer-file option -.\" timer-file option: mysqltest \fB\-\-timer\-file=\fR\fB\fIfile_name\fR\fR, \fB\-m \fR\fB\fIfile_name\fR\fR .sp @@ -868,8 +790,21 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: tmpdir option -.\" tmpdir option: mysqltest +\fB\-\-tls\-version=\fR\fB\fIprotocol_list\fR\fR +.sp +The protocols permitted by the client for encrypted connections\&. The value is a comma\-separated list containing one or more of these protocols: TLSv1, TLSv1\&.1, TLSv1\&.2\&. (TLSv1\&.2 is supported only if MySQL was compiled using OpenSSL 1\&.0\&.1 or higher\&. It is not supported if MySQL was compiled using yaSSL\&.) +.sp +This option was added in MySQL 5\&.7\&.10\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-tmpdir=\fR\fB\fIdir_name\fR\fR, \fB\-t \fR\fB\fIdir_name\fR\fR .sp @@ -884,8 +819,24 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: user option -.\" user option: mysqltest +\fB\-\-trace\-exec\fR +.sp +If enabled, this option causes +\fBmysqltest\fR +to immediately display the output from executed programs to +stdout\&. +.sp +This option was added in MySQL 5\&.8\&.0\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -900,8 +851,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: verbose option -.\" verbose option: mysqltest \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -916,8 +865,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: version option -.\" version option: mysqltest \fB\-\-version\fR, \fB\-V\fR .sp @@ -932,8 +879,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysqltest: view-protocol option -.\" view-protocol option: mysqltest \fB\-\-view\-protocol\fR .sp Every @@ -943,7 +888,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 2006, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 2006, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysqltest_embedded.1 mysql-5.6-5.6.33/man/mysqltest_embedded.1 --- mysql-5.6-5.6.27/man/mysqltest_embedded.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysqltest_embedded.1 2016-08-26 11:32:53.000000000 +0000 @@ -1 +1 @@ -.so man/mysqltest.1 +.so mysqltest.1 diff -Nru mysql-5.6-5.6.27/man/mysql-test-run.pl.1 mysql-5.6-5.6.33/man/mysql-test-run.pl.1 --- mysql-5.6-5.6.27/man/mysql-test-run.pl.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql-test-run.pl.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql-test-run.pl\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/16/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL .\" Language: English .\" -.TH "\FBMYSQL\-TEST\-RUN\" "1" "09/16/2015" "MySQL" "MySQL Database System" +.TH "\FBMYSQL\-TEST\-RUN\" "1" "08/25/2016" "MySQL" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql-test-run.pl .SH "NAME" mysql-test-run.pl \- run MySQL test suite .SH "SYNOPSIS" @@ -167,7 +166,7 @@ with anything in between\&. In the latter case, the pattern match is not anchored to the beginning of the test name, so it also matches names such as xmainytesta\&. .PP -From MySQL 5\&.7 it is possible to put a list of test names in a file and have +As of MySQL 5\&.7, it is possible to put a list of test names in a file and have \fBmysql\-test\-run\&.pl\fR run those tests, using the option \fB\-\-do\-test\-list=\fR\fB\fIfile\fR\fR\&. The tests should be listed one per line in the file, using the fully qualified name @@ -175,6 +174,14 @@ # indicates a comment and is ignored\&. .PP +As of MySQL 8\&.0, +\fBmysql\-test\-run\&.pl\fR +supports a +\fB\-\-do\-suite\fR +option, which is similar to +\fB\-\-do\-test\fR +but permits specifying entire suites of tests to run\&. +.PP To perform setup prior to running tests, \fBmysql\-test\-run\&.pl\fR needs to invoke @@ -254,8 +261,14 @@ l l l l l l +l l l l. T{ +MTR_BUILD_THREAD +T}:T{ +If set, defines which port number range is used for the server +T} +T{ MTR_MEM T}:T{ If set to anything, will run tests with files in "memory" using tmpfs or @@ -263,20 +276,10 @@ \fB\-\-mem\fR option T} T{ -MTR_PARALLEL -T}:T{ -If set, defines number of parallel threads executing tests\&. Same as - \fB\-\-parallel\fR option -T} -T{ -MTR_BUILD_THREAD +MTR_MAX_PARALLEL T}:T{ -If set, defines which port number range is used for the server -T} -T{ -MTR_PORT_BASE -T}:T{ -If set, defines which port number range is used for the server +If set, defines maximum number of parallel threads if + \fB\-\-parallel=auto\fR is given T} T{ MTR_\fINAME\fR_TIMEOUT @@ -286,8 +289,22 @@ \fB\-\-\fR\fB\fIname\fR\fR\fB\-timeout\fR\&. Avaliable timeout names are TESTCASE, SUITE (both in minutes) and - START, SHUTDOWN - (both in seconds)\&. + START, SHUTDOWN, + CTEST (all in seconds)\&. + MTR_CTEST_TIMEOUT is for + \fBctest\fR unit tests; it was added in + MySQL 5\&.8\&.0\&. +T} +T{ +MTR_PARALLEL +T}:T{ +If set, defines number of parallel threads executing tests\&. Same as + \fB\-\-parallel\fR option +T} +T{ +MTR_PORT_BASE +T}:T{ +If set, defines which port number range is used for the server T} T{ MYSQL_CONFIG_EDITOR @@ -301,6 +318,12 @@ Path name to \fBmysqltest\fR binary T} T{ +MYSQL_TEST_DIR +T}:T{ +Full path to the mysql\-test directory where tests + are being run from +T} +T{ MYSQL_TEST_LOGIN_FILE T}:T{ Path name to login file used by \fBmysql_config_editor\fR\&. @@ -310,6 +333,17 @@ Windows\&. Supported as of MySQL 5\&.6\&.6\&. T} T{ +MYSQL_TMP_DIR +T}:T{ +Path to temp directory used for temporary files during tests +T} +T{ +MYSQLD +T}:T{ +Full path to server executable used in tests\&. Supported as of MySQL + 5\&.5\&.17\&. +T} +T{ MYSQLD_BOOTSTRAP T}:T{ Full path name to \fBmysqld\fR that has all options enabled @@ -320,12 +354,6 @@ Full command line used for initial database setup for this test batch T} T{ -MYSQLD -T}:T{ -Full path to server executable used in tests\&. Supported as of MySQL - 5\&.5\&.17\&. -T} -T{ MYSQLD_CMD T}:T{ Command line for starting server as used in tests, with the minimum set @@ -337,17 +365,6 @@ Path name to the var directory that is used for logs, temporary files, and so forth T} -T{ -MYSQL_TEST_DIR -T}:T{ -Full path to the mysql\-test directory where tests - are being run from -T} -T{ -MYSQL_TMP_DIR -T}:T{ -Path to temp directory used for temporary files during tests -T} .TE .sp 1 .PP @@ -389,8 +406,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: help option -.\" help option: mysql-test-run.pl \fB\-\-help\fR, \fB\-h\fR .sp @@ -405,8 +420,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: big-test option -.\" big-test option: mysql-test-run.pl \fB\-\-big\-test\fR .sp Allow tests marked as "big" to run\&. Tests can be thus marked by including the line @@ -425,8 +438,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: boot-dbx option -.\" boot-dbx option: mysql-test-run.pl \fB\-\-boot\-dbx\fR .sp Run the @@ -444,8 +455,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: boot-ddd option -.\" boot-ddd option: mysql-test-run.pl \fB\-\-boot\-ddd\fR .sp Run the @@ -463,8 +472,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: boot-gdb option -.\" boot-gdb option: mysql-test-run.pl \fB\-\-boot\-gdb\fR .sp Run the @@ -472,6 +479,10 @@ server used for bootstrapping the database through the \fBgdb\fR debugger\&. This option is available from MySQL 5\&.5\&.17\&. +.sp +See also the +\fB\-\-manual\-boot\-gdb\fR +option\&. .RE .sp .RS 4 @@ -482,8 +493,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: build-thread option -.\" build-thread option: mysql-test-run.pl \fB\-\-build\-thread=\fR\fB\fInumber\fR\fR .sp Specify a number to calculate port numbers from\&. The formula is 10 * @@ -511,8 +520,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: callgrind option -.\" callgrind option: mysql-test-run.pl \fB\-\-callgrind\fR .sp Instructs @@ -529,8 +536,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: check-testcases option -.\" check-testcases option: mysql-test-run.pl \fB\-\-check\-testcases\fR .sp Check test cases for side effects\&. This is done by checking system state before and after each test case; if there is any difference, a warning to that effect will be written, but the test case will not be marked as failed because of it\&. This check is enabled by default\&. @@ -544,8 +549,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: clean-vardir option -.\" clean-vardir option: mysql-test-run.pl \fB\-\-clean\-vardir\fR .sp Clean up the @@ -562,8 +565,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-bindir option -.\" client-bindir option: mysql-test-run.pl \fB\-\-client\-bindir=\fR\fB\fIpath\fR\fR .sp The path to the directory where client binaries are located\&. @@ -577,8 +578,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-dbx option -.\" client-dbx option: mysql-test-run.pl \fB\-\-client\-dbx\fR .sp Start @@ -596,8 +595,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-ddd option -.\" client-ddd option: mysql-test-run.pl \fB\-\-client\-ddd\fR .sp Start @@ -615,8 +612,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-debugger option -.\" client-debugger option: mysql-test-run.pl \fB\-\-client\-debugger=\fR\fB\fIdebugger\fR\fR .sp Start @@ -632,8 +627,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-gdb option -.\" client-gdb option: mysql-test-run.pl \fB\-\-client\-gdb\fR .sp Start @@ -651,8 +644,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: client-libdir option -.\" client-libdir option: mysql-test-run.pl \fB\-\-client\-libdir=\fR\fB\fIpath\fR\fR .sp The path to the directory where client libraries are located\&. @@ -666,8 +657,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: combination option -.\" combination option: mysql-test-run.pl \fB\-\-combination=\fR\fB\fIvalue\fR\fR .sp Extra option to pass to @@ -697,8 +686,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: comment option -.\" comment option: mysql-test-run.pl \fB\-\-comment=\fR\fB\fIstr\fR\fR .sp Write @@ -715,8 +702,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: compress option -.\" compress option: mysql-test-run.pl \fB\-\-compress\fR .sp Compress all information sent between the client and the server if both support compression\&. @@ -730,8 +715,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: cursor-protocol option -.\" cursor-protocol option: mysql-test-run.pl \fB\-\-cursor\-protocol\fR .sp Pass the @@ -750,8 +733,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: dbx option -.\" gdb option: mysql-test-run.pl \fB\-\-dbx\fR .sp Start @@ -769,8 +750,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: ddd option -.\" ddd option: mysql-test-run.pl \fB\-\-ddd\fR .sp Start @@ -788,8 +767,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: debug option -.\" debug option: mysql-test-run.pl \fB\-\-debug\fR .sp Dump trace output for all clients and servers\&. @@ -803,8 +780,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: debugger option -.\" debugger option: mysql-test-run.pl \fB\-\-debugger=\fR\fB\fIdebugger\fR\fR .sp Start @@ -820,8 +795,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: debug-common option -.\" debug-common option: mysql-test-run.pl \fB\-\-debug\-common\fR .sp This option works similar to @@ -839,8 +812,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: debug-server option -.\" debug-server option: mysql-test-run.pl \fB\-\-debug\-server\fR .sp Runs @@ -863,15 +834,13 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: debug-sync-timeout option -.\" debug-sync-timeout option: mysql-test-run.pl -\fB\-\-debug\-sync\-timeout=\fR\fB\fIN\fR\fR +\fB\-\-debug\-sync\-timeout=\fR\fB\fIseconds\fR\fR .sp Controls whether the Debug Sync facility for testing and debugging is enabled\&. The option value is a timeout in seconds\&. The default value is 300\&. A value of 0 disables Debug Sync\&. The value of this option also becomes the default timeout for individual synchronization points\&. .sp \fBmysql\-test\-run\&.pl\fR passes -\fB\-\-loose\-debug\-sync\-timeout=\fR\fB\fIN\fR\fR +\fB\-\-loose\-debug\-sync\-timeout=\fR\fB\fIseconds\fR\fR to \fBmysqld\fR\&. The \fB\-\-loose\fR @@ -891,8 +860,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: default-myisam option -.\" default-myisam option: mysql-test-run.pl \fB\-\-default\-myisam\fR .sp Use MyISAM as default engine for all except InnoDB\-specific tests\&. This option is on by default in MySQL 5\&.5 and 5\&.6 but it off by default from MySQL 5\&.7\&. See also @@ -907,8 +874,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: defaults-file option -.\" default-file option: mysql-test-run.pl \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use the named file as fixed config file template for all tests\&. @@ -922,8 +887,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: defaults_extra_file option -.\" default_extra_file option: mysql-test-run.pl \fB\-\-defaults_extra_file=\fR\fB\fIfile_name\fR\fR .sp Add setting from the named file to all generated configs\&. @@ -937,17 +900,42 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: do-test option -.\" do-test option: mysql-test-run.pl -\fB\-\-do\-test=\fR\fB\fIprefix\fR\fR +\fB\-\-do\-suite=\fR\fB\fIprefix or regex\fR\fR +.sp +Run all test cases from suites having a name that begins with the given +\fIprefix\fR +value or matches the regular expression\&. If the argument matches no existing suites, +\fBmysql\-test\-run\&.pl\fR +aborts\&. +.sp +The argument for the +\fB\-\-do\-suite\fR +option allows more flexible specification of which tests to perform\&. See the description of the +\fB\-\-do\-test\fR +option for details\&. +.sp +The +\fB\-\-do\-suite\fR +option was added in MySQL 8\&.0\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-\-do\-test=\fR\fB\fIprefix or regex\fR\fR .sp Run all test cases having a name that begins with the given \fIprefix\fR -value\&. This option provides a convenient way to run a family of similarly named tests\&. +value or matches the regular expression\&. This option provides a convenient way to run a family of similarly named tests\&. .sp The argument for the \fB\-\-do\-test\fR -option also allows more flexible specification of which tests to perform\&. If the argument contains a pattern metacharacter other than a lone period, it is interpreted as a Perl regular expression and applies to test names that match the pattern\&. If the argument contains a lone period or does not contain any pattern metacharacters, it is interpreted the same way as previously and matches test names that begin with the argument value\&. For example, +option allows more flexible specification of which tests to perform\&. If the argument contains a pattern metacharacter other than a lone period, it is interpreted as a Perl regular expression and applies to test names that match the pattern\&. If the argument contains a lone period or does not contain any pattern metacharacters, it is interpreted the same way as previously and matches test names that begin with the argument value\&. For example, \fB\-\-do\-test=testa\fR matches tests that begin with testa, @@ -973,8 +961,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: do-test-list option -.\" do-test-list option: mysql-test-run.pl \fB\-\-do\-testlist=\fR\fB\fIfile\fR\fR .sp Run all tests listed in the file @@ -997,8 +983,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: embedded-server option -.\" embedded-server option: mysql-test-run.pl \fB\-\-embedded\-server\fR .sp Use a version of @@ -1014,8 +998,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: enable-disabled option -.\" enable-disabled option: mysql-test-run.pl \fB\-\-enable\-disabled\fR .sp Ignore any @@ -1031,8 +1013,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: experimental option -.\" experimental option: mysql-test-run.pl \fB\-\-experimental=\fR\fB\fIfile_name\fR\fR .sp Specify a file that contains a list of test cases that should be displayed with the @@ -1056,8 +1036,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: explain-protocol option -.\" explain-protocol option: mysql-test-run.pl \fB\-\-explain\-protocol\fR, .sp Run @@ -1073,8 +1051,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: extern option -.\" extern option: mysql-test-run.pl \fB\-\-extern\fR \fIoption\fR=\fIvalue\fR .sp @@ -1109,8 +1085,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: fast option -.\" fast option: mysql-test-run.pl \fB\-\-fast\fR .sp Do not perform controlled shutdown when servers need to be restarted or at the end of the test run\&. This is equivalent to using @@ -1125,8 +1099,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: force option -.\" force option: mysql-test-run.pl \fB\-\-force\fR .sp Normally, @@ -1144,8 +1116,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: force-restart option -.\" force-restart option: mysql-test-run.pl \fB\-\-force\-restart\fR .sp Always restart the server(s) between each tast case, whether it\*(Aqs needed or not\&. Will also restart between repeated runs of the same test case\&. This may be useful e\&.g\&. when looking for the source of a memory leak, as there will only have been one test run before the server exits\&. @@ -1159,8 +1129,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: gcov option -.\" gcov option: mysql-test-run.pl \fB\-\-gcov\fR .sp Run tests with the @@ -1176,8 +1144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: gdb option -.\" gdb option: mysql-test-run.pl \fB\-\-gdb\fR .sp Start @@ -1195,8 +1161,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: gprof option -.\" gprof option: mysql-test-run.pl \fB\-\-gprof\fR .sp Run tests with the @@ -1212,11 +1176,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: include-ndbcluster option -.\" include-ndbcluster option: mysql-test-run.pl \fB\-\-include\-ndbcluster\fR, -.\" mysql-test-run.pl: include-ndb option -.\" include-ndb option: mysql-test-run.pl \fB\-\-include\-ndb\fR .sp Run also tests that need Cluster\&. @@ -1230,8 +1190,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: json-explain-protocol option -.\" json-explain-protocol option: mysql-test-run.pl \fB\-\-json\-explain\-protocol\fR, .sp Run @@ -1249,8 +1207,21 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: manual-dbx option -.\" manual-dbx option: mysql-test-run.pl +\fB\-\-manual\-boot\-gdb\fR +.sp +This option is similar to +\fB\-\-boot\-gdb\fR +but attaches the debugger to the server during the bootstrapping process, permitting the use of a remote debugger\&. This option is available from MySQL 5\&.7\&.14\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-manual\-dbx\fR .sp Use a server that has already been started by the user in the @@ -1266,8 +1237,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: manual-ddd option -.\" manual-ddd option: mysql-test-run.pl \fB\-\-manual\-ddd\fR .sp Use a server that has already been started by the user in the @@ -1283,8 +1252,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: manual-debug option -.\" manual-debug option: mysql-test-run.pl \fB\-\-manual\-debug\fR .sp Use a server that has already been started by the user in a debugger\&. @@ -1298,8 +1265,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: manual-gdb option -.\" manual-gdb option: mysql-test-run.pl \fB\-\-manual\-gdb\fR .sp Use a server that has already been started by the user in the @@ -1315,8 +1280,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: mark-progress option -.\" mark-progress option: mysql-test-run.pl \fB\-\-mark\-progress\fR .sp Marks progress with timing (in milliseconds) and line number in @@ -1331,8 +1294,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: max-connections option -.\" max-connections option: mysql-test-run.pl \fB\-\-max\-connections=\fR\fB\fInum\fR\fR .sp The maximum number of simultaneous server connections that may be used per test\&. If not set, the maximum is 128\&. Minimum allowed limit is 8, maximum is 5120\&. Corresponds to the same option for @@ -1347,8 +1308,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: max-save-core option -.\" max-save-core option: mysql-test-run.pl \fB\-\-max\-save\-core=\fR\fB\fIN\fR\fR .sp Limit the number of core files saved, to avoid filling up disks in case of a frequently crashing server\&. Defaults to 5, set to 0 for no limit\&. May also be set with the environment variable @@ -1363,8 +1322,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: max-save-datadir option -.\" max-save-datadir option: mysql-test-run.pl \fB\-\-max\-save\-datadir=\fR\fB\fIN\fR\fR .sp Limit the number of data directories saved after failed tests, to avoid filling up disks in case of frequent failures\&. Defaults to 20, set to 0 for no limit\&. May also be set with the environment variable @@ -1379,8 +1336,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: max-test-fail option -.\" max-test-fail option: mysql-test-run.pl \fB\-\-max\-test\-fail=\fR\fB\fIN\fR\fR .sp Stop execution after the specified number of tests have failed, to avoid using up resources (and time) in case of massive failures\&. retries are noe counted, nor are failures of tests marked experimental\&. Defaults to 10, set to 0 for no limit\&. May also be set with the environment variable @@ -1395,8 +1350,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: mem option -.\" mem option: mysql-test-run.pl \fB\-\-mem\fR .sp This option is not supported on Windows\&. @@ -1432,8 +1385,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: mysqld option -.\" mysqld option: mysql-test-run.pl \fB\-\-mysqld=\fR\fB\fIvalue\fR\fR .sp Extra option to pass to @@ -1452,8 +1403,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: mysqld-env option -.\" mysqld-env option: mysql-test-run.pl \fB\-\-mysqld\-env=\fR\fB\fIvariable\fR\fR\fB=\fR\fB\fIvalue\fR\fR .sp Sets (or changes) an environment variable before starting @@ -1473,8 +1422,22 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: ndb-connectstring option -.\" ndb-connectstring option: mysql-test-run.pl +\fB\-\-mysqltest=\fR\fB\fIoptions\fR\fR +.sp +Extra options to pass to +\fBmysqltest\fR\&. +.sp +This option was added in MySQL 5\&.8\&.0\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-ndb\-connectstring=\fR\fB\fIstr\fR\fR .sp Pass @@ -1492,8 +1455,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: nocheck-testcases option -.\" nocheck-testcases option: mysql-test-run.pl \fB\-\-nocheck\-testcases\fR .sp Disable the check for test case side effects; see @@ -1509,8 +1470,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: nodefault-myisam option -.\" nodefault-myisam option: mysql-test-run.pl \fB\-\-nodefault\-myisam\fR .sp For MySQL 5\&.5 or 5\&.6, do not override the build\-in default engine to use MyISAM instead for non\-InnoDB tests\&. Since the existing collection of tests were originally adapted for MyISAM as default, many tests will fail when this option is used, because the test behaves differently or produces different output when the engine switches to InnoDB\&. @@ -1526,8 +1485,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: noreorder option -.\" noreorder option: mysql-test-run.pl \fB\-\-noreorder\fR .sp Do not reorder tests to reduce number of restarts, but run them in exactly the order given\&. If a whole suite is to be run, the tests are run in alphabetic order, though similiar combinations will be grouped together\&. If more than one suite is listed, the tests are run one suite at a time, in the order listed\&. @@ -1541,8 +1498,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: notimer option -.\" notimer option: mysql-test-run.pl \fB\-\-notimer\fR .sp Cause @@ -1558,11 +1513,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: nounit-tests option -.\" nounit-tests option: mysql-test-run.pl \fB\-\-nounit\-tests\fR .sp -Do not run unit tests, overriding default behaviour or setting of the +Do not run unit tests, overriding default behavior or setting of the MTR_UNIT_TESTS variable\&. .sp @@ -1577,8 +1530,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: nowarnings option -.\" nowarnings option: mysql-test-run.pl \fB\-\-nowarnings\fR .sp Do not look for and report errors and warning in the server logs\&. @@ -1592,16 +1543,32 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: parallel option -.\" parallel option: mysql-test-run.pl \fB\-\-parallel={\fR\fB\fIN\fR\fR\fB|auto}\fR .sp Run tests using \fIN\fR parallel threads\&. By default, 1 thread is used\&. Use \fB\-\-parallel=auto\fR -for auto\-setting of -\fIN\fR\&. +to set +\fIN\fR +automatically\&. +.sp +Setting the +MTR_PARALLEL +environment variable to +\fIN\fR +has the same effect as specifying +\fB\-\-parallel=\fR\fB\fIN\fR\fR\&. +.sp +The +MTR_MAX_PARALLEL +environment variable, if set, specifies the maximum number of parallel workers that can be spawned when the +\fB\-\-parallel=auto\fR +option is specified\&. If +\fB\-\-parallel=auto\fR +is not specified, +MTR_MAX_PARALLEL +variable has no effect\&. .RE .sp .RS 4 @@ -1612,8 +1579,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: port-base option -.\" port-base option: mysql-test-run.pl \fB\-\-port\-base=\fR\fB\fIP\fR\fR .sp Specify base of port numbers to be used; a block of 10 will be allocated\&. @@ -1640,8 +1605,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: print-testcases option -.\" print-testcases option: mysql-test-run.pl \fB\-\-print\-testcases\fR .sp Do not run any tests, but print details about all tests, in the order they would have been run\&. @@ -1655,8 +1618,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: ps-protocol option -.\" ps-protocol option: mysql-test-run.pl \fB\-\-ps\-protocol\fR .sp Pass the @@ -1673,8 +1634,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: record option -.\" record option: mysql-test-run.pl \fB\-\-record\fR .sp Pass the @@ -1691,8 +1650,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: reorder option -.\" reorder option: mysql-test-run.pl \fB\-\-reorder\fR .sp Reorder tests to minimize the number of server restarts needed\&. This is the default behavior\&. There is no guarantee that a particular set of tests will always end up in the same order\&. @@ -1706,8 +1663,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: repeat option -.\" repeat option: mysql-test-run.pl \fB\-\-repeat=\fR\fB\fIN\fR\fR .sp Run each test @@ -1723,8 +1678,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: report-features option -.\" report-features option: mysql-test-run.pl \fB\-\-report\-features\fR .sp Display the output of @@ -1741,8 +1694,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: report-times option -.\" report-times option: mysql-test-run.pl \fB\-\-report\-times\fR .sp At the end of the test run, write a summary of how much time was spent in various phases of execution\&. If you run with @@ -1765,8 +1716,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: retry option -.\" retry option: mysql-test-run.pl \fB\-\-retry=\fR\fB\fIN\fR\fR .sp If a test fails, it is retried up to a maximum of @@ -1792,8 +1741,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: retry-failure option -.\" retry-failure option: mysql-test-run.pl \fB\-\-retry\-failure=\fR\fB\fIN\fR\fR .sp Allow a failed and retried test to fail more than the default 2 times before giving it up\&. Setting it to 0 or 1 effectively turns off retries @@ -1807,9 +1754,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: shutdown-timeout option -.\" shutdown-timeout option: mysql-test-run.pl -\fB\-\-shutdown\-timeout=\fR\fB\fISECONDS\fR\fR +\fB\-\-shutdown\-timeout=\fR\fB\fIseconds\fR\fR .sp Max number of seconds to wait for servers to do controlled shutdown before killing them\&. Default is 10\&. .RE @@ -1822,8 +1767,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-combinations option -.\" skip-combinations option: mysql-test-run.pl \fB\-\-skip\-combinations\fR .sp Do not apply combinations; ignore combinations file or option\&. @@ -1837,11 +1780,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-ndbcluster option -.\" skip-ndbcluster option: mysql-test-run.pl \fB\-\-skip\-ndbcluster\fR, -.\" mysql-test-run.pl: skip-ndb option -.\" skip-ndb option: mysql-test-run.pl \fB\-\-skip\-ndb\fR .sp Do not start NDB Cluster; skip Cluster test cases\&. This option only has effect if you do have NDB, if not it will have no effect as it cannot run those tests anyway\&. @@ -1855,11 +1794,7 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-ndbcluster-slave option -.\" skip-ndbcluster-slave option: mysql-test-run.pl \fB\-\-skip\-ndbcluster\-slave\fR, -.\" mysql-test-run.pl: skip-ndb-slave option -.\" skip-ndb-slave option: mysql-test-run.pl \fB\-\-skip\-ndb\-slave\fR .sp Do not start an NDB Cluster slave\&. @@ -1873,8 +1808,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-rpl option -.\" skip-rpl option: mysql-test-run.pl \fB\-\-skip\-rpl\fR .sp Skip replication test cases\&. @@ -1888,8 +1821,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-ssl option -.\" skip-ssl option: mysql-test-run.pl \fB\-\-skip\-ssl\fR .sp Do not start @@ -1905,8 +1836,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-test option -.\" skip-test option: mysql-test-run.pl \fB\-\-skip\-test=\fR\fB\fIregex\fR\fR .sp Specify a regular expression to be applied to test case names\&. Cases with names that match the expression are skipped\&. tests to skip\&. @@ -1926,8 +1855,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: skip-test-list option -.\" skip-test-list option: mysql-test-run.pl \fB\-\-skip\-test\-list=\fR\fB\fIfile\fR\fR .sp Specify a file listing tests that should be skipped (disabled)\&. @@ -1963,8 +1890,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: sleep option -.\" sleep option: mysql-test-run.pl \fB\-\-sleep=\fR\fB\fIN\fR\fR .sp Pass @@ -1981,8 +1906,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: sp-protocol option -.\" sp-protocol option: mysql-test-run.pl \fB\-\-sp\-protocol\fR .sp Pass the @@ -1999,8 +1922,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: ssl option -.\" ssl option: mysql-test-run.pl \fB\-\-ssl\fR .sp If @@ -2023,8 +1944,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: start option -.\" start option: mysql-test-run.pl \fB\-\-start\fR .sp Initialize and start servers with the startup settings for the specified test case\&. You can use this option to start a server to which you can connect later\&. For example, after building a source distribution you can start a server and connect to it with the @@ -2059,8 +1978,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: start-and-exit option -.\" start-and-exit option: mysql-test-run.pl \fB\-\-start\-and\-exit\fR .sp This is similar to @@ -2077,8 +1994,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: start-dirty option -.\" start-dirty option: mysql-test-run.pl \fB\-\-start\-dirty\fR .sp This is similar to @@ -2093,8 +2008,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: start-from option -.\" start-from option: mysql-test-run.pl \fB\-\-start\-from=\fR\fB\fItest_name\fR\fR .sp \fBmysql\-test\-run\&.pl\fR @@ -2110,8 +2023,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: strace-client option -.\" strace-client option: mysql-test-run.pl \fB\-\-strace\-client\fR .sp Create @@ -2135,8 +2046,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: strace-server option -.\" strace-server option: mysql-test-run.pl \fB\-\-strace\-server\fR .sp Create @@ -2159,8 +2068,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: stress option -.\" stress option: mysql-test-run.pl \fB\-\-stress=\fR\fB\fIstress options\fR\fR .sp Start a server, but instead of running a test, run @@ -2183,8 +2090,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: suite option -.\" suite option: mysql-test-run.pl \fB\-\-suite=\fR\fB\fIsuite_name\fR\fR .sp Run the named test suite\&. The default name is @@ -2202,11 +2107,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: suite-timeout option -.\" suite-timeout option: mysql-test-run.pl \fB\-\-suite\-timeout=\fR\fB\fIminutes\fR\fR .sp -Specify the maximum test suite runtime\&. +Specify the maximum test suite runtime in minutes\&. .RE .sp .RS 4 @@ -2217,11 +2120,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: testcase-timeout option -.\" testcase-timeout option: mysql-test-run.pl -\fB\-\-testcase\-timeout\fR +\fB\-\-testcase\-timeout=\fR\fB\fIminutes\fR\fR .sp -Specify the maximum test case runtime\&. +Specify the maximum test case runtime in minutes\&. .RE .sp .RS 4 @@ -2232,8 +2133,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: timediff option -.\" timediff option: mysql-test-run.pl \fB\-\-timediff\fR .sp Adds to each test report for a test case, the total time in sconds and milliseconds passed since the preceding test ended\&. This option can only be used together with @@ -2248,8 +2147,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: timer option -.\" timer option: mysql-test-run.pl \fB\-\-timer\fR .sp Cause @@ -2266,8 +2163,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: timestamp option -.\" timestamp option: mysql-test-run.pl \fB\-\-timestamp\fR .sp Prints a timestamp before the test case name in each test report line, showing when the test ended\&. @@ -2281,8 +2176,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: tmpdir option -.\" tmpdir option: mysql-test-run.pl \fB\-\-tmpdir=\fR\fB\fIpath\fR\fR .sp The directory where temporary file are stored\&. The default location is @@ -2299,11 +2192,9 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: unit-tests option -.\" unit-tests option: mysql-test-run.pl \fB\-\-unit\-tests\fR .sp -Force running of unit tests, overriding default behaviour or setting of the +Force running of unit tests, overriding default behavior or setting of the MTR_UNIT_TESTS variable\&. .sp @@ -2318,8 +2209,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: unit-tests-report option -.\" unit-tests-report option: mysql-test-run.pl \fB\-\-unit\-tests\-report\fR .sp Extend the unit test run by also outputting the log from the test run, independently of whether it succeeded or not\&. This option implies @@ -2337,8 +2226,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: user option -.\" user option: mysql-test-run.pl \fB\-\-user=\fR\fB\fIuser_name\fR\fR .sp The MySQL user name to use when connecting to the server\&. @@ -2352,8 +2239,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: user-args option -.\" user-args option: mysql-test-run.pl \fB\-\-user\-args\fR .sp Drops all non\-essential command line arguments to the @@ -2375,8 +2260,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind option -.\" valgrind option: mysql-test-run.pl \fB\-\-valgrind\fR .sp Run @@ -2405,8 +2288,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind-clients option -.\" valgrind-clients option: mysql-test-run.pl \fB\-\-valgrind\-clients\fR .sp Run all clients started by @@ -2428,8 +2309,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind-mysqld option -.\" valgrind-mysqld option: mysql-test-run.pl \fB\-\-valgrind\-mysqld\fR .sp Run the @@ -2446,8 +2325,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind-mysqltest option -.\" valgrind-mysqltest option: mysql-test-run.pl \fB\-\-valgrind\-mysqltest\fR .sp Run @@ -2464,8 +2341,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind-options option -.\" valgrind-options option: mysql-test-run.pl \fB\-\-valgrind\-option=\fR\fB\fIstr\fR\fR .sp Extra options to pass to @@ -2480,8 +2355,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: valgrind-path option -.\" valgrind-path option: mysql-test-run.pl \fB\-\-valgrind\-path=\fR\fB\fIpath\fR\fR .sp Specify the path name to the @@ -2497,8 +2370,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: vardir option -.\" vardir option: mysql-test-run.pl \fB\-\-vardir=\fR\fB\fIpath\fR\fR .sp Specify the path where files generated during the test run are stored\&. The default location is @@ -2515,8 +2386,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: verbose option -.\" verbose option: mysql-test-run.pl \fB\-\-verbose\fR .sp Give more verbose output regarding test execution\&. Use the option twice to get even more output\&. Note that the output generated within each test case is not affected\&. @@ -2530,8 +2399,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: verbose-restart option -.\" verbose-restart option: mysql-test-run.pl \fB\-\-verbose\-restart\fR .sp Write when and why servers are restarted between test cases\&. @@ -2545,8 +2412,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: view-protocol option -.\" view-protocol option: mysql-test-run.pl \fB\-\-view\-protocol\fR .sp Pass the @@ -2563,8 +2428,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: vs-config option -.\" vs-config option: mysql-test-run.pl \fB\-\-vs\-config=\fR\fB\fIconfig_val\fR\fR .sp Specify the configuration used to build MySQL (for example, @@ -2580,8 +2443,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: wait-all option -.\" wait-all option: mysql-test-run.pl \fB\-\-wait\-all\fR .sp If @@ -2599,8 +2460,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: warnings option -.\" warnings option: mysql-test-run.pl \fB\-\-warnings\fR .sp Search the server log for errors or warning after each test and report any suspicious ones; if any are found, the test will be marked as failed\&. This is the default behavior, it may be turned off with @@ -2615,18 +2474,32 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql-test-run.pl: with-ndbcluster-only option -.\" with-ndbcluster-only option: mysql-test-run.pl \fB\-\-with\-ndbcluster\-only\fR .sp Run only test cases that have ndb in their name\&. .RE +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +.PP +The hostname resolves to 127\&.0\&.0\&.1 and not to the actual IP address\&. +.sp .5v +.RE .SH "COPYRIGHT" .br .PP -Copyright \(co 2006, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 2006, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_tzinfo_to_sql.1 mysql-5.6-5.6.33/man/mysql_tzinfo_to_sql.1 --- mysql-5.6-5.6.27/man/mysql_tzinfo_to_sql.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_tzinfo_to_sql.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_tzinfo_to_sql\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_TZINFO_TO_S" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_TZINFO_TO_S" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_tzinfo_to_sql -.\" time zone tables .SH "NAME" mysql_tzinfo_to_sql \- load the time zone tables .SH "SYNOPSIS" @@ -41,7 +39,7 @@ program loads the time zone tables in the mysql database\&. It is used on systems that have a -zoneinfo +\fIzoneinfo\fR database (the set of files describing time zones)\&. Examples of such systems are Linux, FreeBSD, Solaris, and OS X\&. One likely location for these files is the /usr/share/zoneinfo directory (/usr/share/lib/zoneinfo @@ -122,7 +120,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_upgrade.1 mysql-5.6-5.6.33/man/mysql_upgrade.1 --- mysql-5.6-5.6.27/man/mysql_upgrade.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_upgrade.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_upgrade\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_UPGRADE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_UPGRADE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,9 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_upgrade -.\" upgrading MySQL -.\" MySQL: upgrading .SH "NAME" mysql_upgrade \- check and upgrade MySQL tables .SH "SYNOPSIS" @@ -56,7 +53,7 @@ \fBmysql_upgrade\fR is included in the server RPM but requires the client RPM because the latter includes \fBmysqlcheck\fR\&. (See -Section\ \&2.5.5, \(lqInstalling MySQL on Linux Using RPM Packages\(rq\&.) +Section\ \&2.5.5, \(lqInstalling MySQL on Linux Using RPM Packages from Oracle\(rq\&.) .if n \{\ .sp .\} @@ -234,9 +231,6 @@ All checked and repaired tables are marked with the current MySQL version number\&. This ensures that next time you run \fBmysql_upgrade\fR with the same version of the server, it can tell whether there is any need to check or repair the table again\&. -.\" mysql_upgrade_info file: mysql_upgrade -.\" mysql_upgrade: mysql_upgrade_info file -.\" data directory: mysql_upgrade_info file .PP \fBmysql_upgrade\fR also saves the MySQL version number in a file named @@ -247,7 +241,7 @@ .PP \fBmysql_upgrade\fR does not upgrade the contents of the help tables\&. For upgrade instructions, see -Section\ \&5.1.10, \(lqServer-Side Help\(rq\&. +Section\ \&5.1.9, \(lqServer-Side Help\(rq\&. .PP By default, \fBmysql_upgrade\fR @@ -295,8 +289,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: help option -.\" help option: mysql_upgrade \fB\-\-help\fR .sp Display a short help message and exit\&. @@ -310,8 +302,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: basedir option -.\" basedir option: mysql_upgrade \fB\-\-basedir=\fR\fB\fIdir_name\fR\fR .sp The path to the MySQL installation directory\&. This option is accepted for backward compatibility but ignored\&. It is removed in MySQL 5\&.7\&. @@ -325,8 +315,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: character-sets-dir option -.\" character-sets-dir option: mysql_upgrade \fB\-\-character\-sets\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory where character sets are installed\&. See @@ -341,8 +329,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: compress option -.\" compress option: mysql_upgrade \fB\-\-compress\fR .sp Compress all information sent between the client and the server if both support compression\&. @@ -356,8 +342,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: datadir option -.\" datadir option: mysql_upgrade \fB\-\-datadir=\fR\fB\fIdir_name\fR\fR .sp The path to the data directory\&. This option is accepted for backward compatibility but ignored\&. It is removed in MySQL 5\&.7\&. @@ -371,8 +355,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: debug option -.\" debug option: mysql_upgrade \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .sp @@ -391,8 +373,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: debug-check option -.\" debug-check option: mysql_upgrade \fB\-\-debug\-check\fR .sp Print some debugging information when the program exits\&. @@ -406,8 +386,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: debug-info option -.\" debug-info option: mysql_upgrade \fB\-\-debug\-info\fR, \fB\-T\fR .sp @@ -422,8 +400,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: default-auth option -.\" default-auth option: mysql_upgrade \fB\-\-default\-auth=\fR\fB\fIplugin\fR\fR .sp A hint about the client\-side authentication plugin to use\&. See @@ -440,8 +416,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: default-character-set option -.\" default-character-set option: mysql_upgrade \fB\-\-default\-character\-set=\fR\fB\fIcharset_name\fR\fR .sp Use @@ -458,8 +432,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: defaults-extra-file option -.\" defaults-extra-file option: mysql_upgrade \fB\-\-defaults\-extra\-file=\fR\fB\fIfile_name\fR\fR .sp Read this option file after the global option file but (on Unix) before the user option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -475,8 +447,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: defaults-file option -.\" defaults-file option: mysql_upgrade \fB\-\-defaults\-file=\fR\fB\fIfile_name\fR\fR .sp Use only the given option file\&. If the file does not exist or is otherwise inaccessible, an error occurs\&. @@ -492,8 +462,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: defaults-group-suffix option -.\" defaults-group-suffix option: mysql_upgrade \fB\-\-defaults\-group\-suffix=\fR\fB\fIstr\fR\fR .sp Read not only the usual option groups, but also groups with the usual names and a suffix of @@ -522,8 +490,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: force option -.\" force option: mysql_upgrade \fB\-\-force\fR .sp Ignore the @@ -541,8 +507,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: host option -.\" host option: mysql_upgrade \fB\-\-host=\fR\fB\fIhost_name\fR\fR, \fB\-h \fR\fB\fIhost_name\fR\fR .sp @@ -557,8 +521,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: login-path option -.\" login-path option: mysql_upgrade \fB\-\-login\-path=\fR\fB\fIname\fR\fR .sp Read options from the named login path in the @@ -579,8 +541,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: no-defaults option -.\" no-defaults option: mysql_upgrade \fB\-\-no\-defaults\fR .sp Do not read any option files\&. If program startup fails due to reading unknown options from an option file, @@ -606,8 +566,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: password option -.\" password option: mysql_upgrade \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, \fB\-p[\fR\fB\fIpassword\fR\fR\fB]\fR .sp @@ -635,8 +593,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: pipe option -.\" pipe option: mysql_upgrade \fB\-\-pipe\fR, \fB\-W\fR .sp @@ -651,8 +607,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: plugin-dir option -.\" plugin-dir option: mysql_upgrade \fB\-\-plugin\-dir=\fR\fB\fIdir_name\fR\fR .sp The directory in which to look for plugins\&. Specify this option if the @@ -673,8 +627,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: port option -.\" port option: mysql_upgrade \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp @@ -689,8 +641,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: print-defaults option -.\" print-defaults option: mysql_upgrade \fB\-\-print\-defaults\fR .sp Print the program name and all options that it gets from option files\&. @@ -704,8 +654,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: protocol option -.\" protocol option: mysql_upgrade \fB\-\-protocol={TCP|SOCKET|PIPE|MEMORY}\fR .sp The connection protocol to use for connecting to the server\&. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want\&. For details on the permissible values, see @@ -720,8 +668,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: shared-memory-base-name option -.\" shared-memory-base-name option: mysql_upgrade \fB\-\-shared\-memory\-base\-name=\fR\fB\fIname\fR\fR .sp On Windows, the shared\-memory name to use, for connections made using shared memory to a local server\&. The default value is @@ -740,8 +686,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: socket option -.\" socket option: mysql_upgrade \fB\-\-socket=\fR\fB\fIpath\fR\fR, \fB\-S \fR\fB\fIpath\fR\fR .sp @@ -757,14 +701,12 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: SSL options -.\" SSL options: mysql_upgrade \fB\-\-ssl*\fR .sp Options that begin with \fB\-\-ssl\fR specify whether to connect to the server using SSL and indicate where to find SSL keys and certificates\&. See -Section\ \&6.3.10.4, \(lqSSL Command Options\(rq\&. +Section\ \&6.4.5, \(lqCommand Options for Secure Connections\(rq\&. .RE .sp .RS 4 @@ -775,8 +717,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: tmpdir option -.\" tmpdir option: mysql_upgrade \fB\-\-tmpdir=\fR\fB\fIdir_name\fR\fR, \fB\-t \fR\fB\fIdir_name\fR\fR .sp @@ -791,8 +731,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: upgrade-system-tables option -.\" upgrade-system-tables option: mysql_upgrade \fB\-\-upgrade\-system\-tables\fR, \fB\-s\fR .sp @@ -807,8 +745,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: user option -.\" user option: mysql_upgrade \fB\-\-user=\fR\fB\fIuser_name\fR\fR, \fB\-u \fR\fB\fIuser_name\fR\fR .sp @@ -824,8 +760,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: verbose option -.\" verbose option: mysql_upgrade \fB\-\-verbose\fR .sp Verbose mode\&. Print more information about what the program does\&. @@ -839,8 +773,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: version-check option -.\" version-check option: mysql_upgrade \fB\-\-version\-check\fR, \fB\-k\fR .sp @@ -862,8 +794,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_upgrade: write-binlog option -.\" write-binlog option: mysql_upgrade \fB\-\-write\-binlog\fR .sp Cause binary logging to be enabled while @@ -889,7 +819,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_waitpid.1 mysql-5.6-5.6.33/man/mysql_waitpid.1 --- mysql-5.6-5.6.27/man/mysql_waitpid.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_waitpid.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_waitpid\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_WAITPID\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_WAITPID\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_waitpid .SH "NAME" mysql_waitpid \- kill process and wait for its termination .SH "SYNOPSIS" @@ -88,8 +87,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_waitpid: help option -.\" help option: mysql_waitpid \fB\-\-help\fR, \fB\-?\fR, \fB\-I\fR @@ -105,8 +102,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_waitpid: verbose option -.\" verbose option: mysql_waitpid \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -121,8 +116,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" mysql_waitpid: version option -.\" version option: mysql_waitpid \fB\-\-version\fR, \fB\-V\fR .sp @@ -131,7 +124,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/mysql_zap.1 mysql-5.6-5.6.33/man/mysql_zap.1 --- mysql-5.6-5.6.27/man/mysql_zap.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/mysql_zap.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBmysql_zap\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBMYSQL_ZAP\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBMYSQL_ZAP\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" mysql_zap .SH "NAME" mysql_zap \- kill processes that match a pattern .SH "SYNOPSIS" @@ -127,7 +126,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_blob_tool.1 mysql-5.6-5.6.33/man/ndb_blob_tool.1 --- mysql-5.6-5.6.27/man/ndb_blob_tool.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_blob_tool.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_blob_tool\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_BLOB_TOOL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_BLOB_TOOL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_blob_tool .SH "NAME" ndb_blob_tool \- check and repair BLOB and TEXT columns of MySQL Cluster tables .SH "SYNOPSIS" @@ -94,72 +93,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.83.\ \& This table describes command-line options for the ndb_blob_tool program +.B Table\ \&18.84.\ \& This table describes command\-line options for the ndb_blob_tool program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---check-orphans -T}:T{ -Check for orphan blob parts -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---database=db_name, -.PP --d -T}:T{ -Database to find the table in. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---delete-orphans -T}:T{ -Delete orphan blob parts -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---dump-file=file -T}:T{ -Write orphan keys to specified file -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---verbose, -.PP --v -T}:T{ -Verbose output -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -171,8 +108,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_blob_tool: check-orphans option -.\" check-orphans option: ndb_blob_tool \fB\-\-check\-orphans\fR .TS allbox tab(:); @@ -209,8 +144,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_blob_tool: database option -.\" database option: ndb_blob_tool \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-d\fR .TS @@ -248,8 +181,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_blob_tool: delete-orphans option -.\" delete-orphans option: ndb_blob_tool \fB\-\-delete\-orphans\fR .TS allbox tab(:); @@ -286,8 +217,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_blob_tool: dump-file option -.\" dump-file option: ndb_blob_tool \fB\-\-dump\-file=\fR\fB\fIfile\fR\fR .TS allbox tab(:); @@ -325,8 +254,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_blob_tool: verbose option -.\" verbose option: ndb_blob_tool \fB\-\-verbose\fR .TS allbox tab(:); @@ -369,8 +296,8 @@ .nf USE test; CREATE TABLE btest ( - c0 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - c1 TEXT, + c0 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + c1 TEXT, c2 BLOB ) ENGINE=NDB; .fi @@ -450,7 +377,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb-common-options.1 mysql-5.6-5.6.33/man/ndb-common-options.1 --- mysql-5.6-5.6.27/man/ndb-common-options.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb-common-options.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: Options Common to MySQL Cluster Programs .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "OPTIONS COMMON TO MY" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "OPTIONS COMMON TO MY" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,12 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" MySQL Cluster: administration -.\" command-line options (MySQL Cluster) -.\" program options (MySQL Cluster) -.\" MySQL Cluster: ndbd -.\" MySQL Cluster: mgm -.\" MySQL Cluster: mgmd .SH "NAME" ndb-common-options \- MySQL Cluster Common Program Options .SH "DESCRIPTION" @@ -111,121 +105,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.99.\ \& This table describes command-line options common to all MySQL Cluster programs +.B Table\ \&18.100.\ \& This table describes command\-line options common to all MySQL Cluster programs .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---help, -.PP ---usage, -.PP --? -T}:T{ -Display help message and exit -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ndb-connectstring=connectstring, -.PP ---connect-string=connectstring, -.PP --c -T}:T{ -Set connection string for connecting to ndb_mgmd. Syntax: - [nodeid=;][host=][:]. - Overrides entries specified in NDB_CONNECTSTRING or my.cnf. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ndb-mgmd-host=host[:port] -T}:T{ -Set the host (and port, if desired) for connecting to management server -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ndb-nodeid=# -T}:T{ -Set node id for this node -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ndb-optimized-node-selection -T}:T{ -Select nodes for transactions in a more optimal way -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---character-sets-dir=dir_name -T}:T{ -Directory where character sets are installed -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---debug=options -T}:T{ -Enable output from debug calls. Can be used only for versions compiled - with debugging enabled -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---core-file -T}:T{ -Write core on errors (defaults to TRUE in debug builds) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---version, -.PP --V -T}:T{ -Output version information and exit -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .PP @@ -233,7 +116,7 @@ Section\ \&18.4, \(lqMySQL Cluster Programs\(rq\&. .PP See -Section\ \&18.3.4.2, \(lqMySQL Server Options for MySQL Cluster\(rq, for +Section\ \&18.3.3.8.1, \(lqMySQL Server Options for MySQL Cluster\(rq, for \fBmysqld\fR options relating to MySQL Cluster\&. .sp @@ -245,9 +128,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" help option (MySQL Cluster programs) -.\" usage option (MySQL Cluster programs) -.\" -? option (MySQL Cluster programs) \fB\-\-help\fR, \fB\-\-usage\fR, \fB\-?\fR @@ -278,8 +158,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" character-sets-dir option (MySQL Cluster programs) -.\" character-sets-dir option (MySQL Cluster programs) \fB\-\-character\-sets\-dir=\fR\fB\fIname\fR\fR .TS allbox tab(:); @@ -315,9 +193,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb-connectstring option (MySQL Cluster programs) -.\" connect-string option (MySQL Cluster programs) -.\" -c option (MySQL Cluster programs) \fB\-\-ndb\-connectstring=\fR\fB\fIconnection_string\fR\fR, \fB\-\-connect\-string=\fR\fB\fIconnection_string\fR\fR, \fB\-c \fR\fB\fIconnection_string\fR\fR @@ -364,7 +239,137 @@ .\} .sp For more information, see -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq\&. +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-\-connect\-retries=\fR\fB\fI#\fR\fR +.TS +allbox tab(:); +l l s s +l l s s +l l l s +^ l l s +^ l l s +^ l l s. +T{ +\fBIntroduced\fR +T}:T{ +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ +\fBCommand\-Line Format\fR +T}:T{ +\-\-connect\-retries=# +T} +T{ +\fBPermitted Values\fR (>= 5\&.6\&.28\-ndb\-7\&.4\&.9) +T}:T{ +\fBType\fR +T}:T{ +numeric +T} +:T{ +\fBDefault\fR +T}:T{ +12 +T} +:T{ +\fBMin Value\fR +T}:T{ +0 +T} +:T{ +\fBMax Value\fR +T}:T{ +4294967295 +T} +.TE +.sp 1 +This option specifies the number of times following the first attempt to retry a connection before giving up (the client always tries the connection at least once)\&. The length of time to wait per attempt is set using +\fB\-\-connect\-retry\-delay\fR\&. +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +When used with +\fBndb_mgm\fR, this option has 3 as its default\&. See +\fBndb_mgm\fR(1), for more information\&. +.sp .5v +.RE +This option was added in MySQL Cluster NDB 7\&.4\&.9\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-\-connect\-retry\-delay=\fR\fB\fI#\fR\fR +.TS +allbox tab(:); +l l s s +l l s s +l l l s +^ l l s +^ l l s +^ l l s. +T{ +\fBIntroduced\fR +T}:T{ +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ +\fBCommand\-Line Format\fR +T}:T{ +\-\-connect\-retry\-delay=# +T} +T{ +\fBPermitted Values\fR (>= 5\&.6\&.28\-ndb\-7\&.4\&.9) +T}:T{ +\fBType\fR +T}:T{ +numeric +T} +:T{ +\fBDefault\fR +T}:T{ +5 +T} +:T{ +\fBMin Value\fR +T}:T{ +0 +T} +:T{ +\fBMax Value\fR +T}:T{ +4294967295 +T} +.TE +.sp 1 +This option specifies the length of time to wait per attempt a connection before giving up\&. The number of times to try connecting is set by +\fB\-\-connect\-retries\fR\&. +.sp +This option was added in MySQL Cluster NDB 7\&.4\&.9\&. .RE .sp .RS 4 @@ -375,7 +380,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" core-file option (MySQL Cluster programs) \fB\-\-core\-file\fR .TS allbox tab(:); @@ -424,7 +428,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" debug option (MySQL Cluster programs) \fB\-\-debug[=\fR\fB\fIoptions\fR\fR\fB]\fR .TS allbox tab(:); @@ -463,7 +466,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb-mgmd-host option (MySQL Cluster programs) \fB\-\-ndb\-mgmd\-host=\fR\fB\fIhost\fR\fR\fB[:\fR\fB\fIport\fR\fR\fB]\fR .TS allbox tab(:); @@ -502,7 +504,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb-nodeid option (MySQL Cluster programs) \fB\-\-ndb\-nodeid=\fR\fB\fI#\fR\fR .TS allbox tab(:); @@ -541,7 +542,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb-optimized-node-selection option (MySQL Cluster) \fB\-\-ndb\-optimized\-node\-selection\fR .TS allbox tab(:); @@ -578,8 +578,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" version option (MySQL Cluster programs) -.\" -V option (MySQL Cluster programs) \fB\-\-version\fR, \fB\-V\fR .TS @@ -600,7 +598,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_config.1 mysql-5.6-5.6.33/man/ndb_config.1 --- mysql-5.6-5.6.27/man/ndb_config.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_config.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_config\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_CONFIG\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_CONFIG\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_config .SH "NAME" ndb_config \- extract MySQL Cluster configuration information .SH "SYNOPSIS" @@ -69,187 +68,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.84.\ \& This table describes command-line options for the ndb_config program +.B Table\ \&18.85.\ \& This table describes command\-line options for the ndb_config program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---nodes -T}:T{ -Print node information ([ndbd] or [ndbd default] section of cluster - configuration file) only. Cannot be used with --system or - --connections. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---connections -T}:T{ -Print connections information ([tcp], [tcp default], [sci], [sci - default], [shm], or [shm default] sections of cluster - configuration file) only. Cannot be used with --system or - --nodes. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---query=string, -.PP --q -T}:T{ -One or more query options (attributes) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---host=name -T}:T{ -Specify host -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---type=name -T}:T{ -Specify node type -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nodeid, -.PP ---id -T}:T{ -Get configuration of node with this ID -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---fields=string, -.PP --f -T}:T{ -Field separator -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---rows=string, -.PP --r -T}:T{ -Row separator -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---config-file=file_name -T}:T{ -Set the path to config.ini file -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---mycnf -T}:T{ -Read configuration data from my.cnf file -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP --c -T}:T{ -Short form for --ndb-connectstring -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---configinfo -T}:T{ -Dumps information about all NDB configuration parameters in text format - with default, maximum, and minimum values. Use with --xml to - obtain XML output. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---configinfo --xml -T}:T{ -Use --xml with --configinfo to obtain a dump of all NDB configuration - parameters in XML format with default, maximum, and minimum - values. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---system -T}:T{ -Print SYSTEM section information only (see ndb_config --configinfo - output). Cannot be used with --nodes or --connections. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---config_from_node=# -T}:T{ -Obtain configuration data from the node having this ID (must be a data - node). -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -261,8 +83,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: usage option -.\" usage option: ndb_config \fB\-\-usage\fR, \fB\-\-help\fR, or \fB\-?\fR @@ -295,8 +115,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: config_from_node option -.\" config_from_node option: ndb_config \fB\-\-config_from_node=#\fR .TS allbox tab(:); @@ -349,8 +167,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: version option -.\" version option: ndb_config \fB\-\-version\fR, \fB\-V\fR .TS @@ -376,8 +192,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: ndb-connectstring option -.\" ndb-connectstring option: ndb_config \fB\-\-ndb\-connectstring=\fR\fB\fIconnection_string\fR\fR, \fB\-c \fR\fB\fIconnection_string\fR\fR .TS @@ -411,7 +225,7 @@ .TE .sp 1 Specifies the connection string to use in connecting to the management server\&. The format for the connection string is the same as described in -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq, and defaults to +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq, and defaults to localhost:1186\&. .RE .sp @@ -423,8 +237,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: config-file option -.\" config-file option: ndb_config \fB\-\-config\-file=\fR\fB\fIpath\-to\-file\fR\fR .TS allbox tab(:); @@ -462,8 +274,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: mycnf option -.\" mycnf option: ndb_config \fB\-\-mycnf\fR .TS allbox tab(:); @@ -502,8 +312,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: query option -.\" query option: ndb_config \fB\-\-query=\fR\fB\fIquery\-options\fR\fR, \fB\-q\fR \fIquery\-options\fR @@ -531,7 +339,7 @@ .TE .sp 1 This is a comma\-delimited list of -query options\(emthat is, a list of one or more node attributes to be returned\&. These include +\fIquery options\fR\(emthat is, a list of one or more node attributes to be returned\&. These include id (node ID), type (node type\(emthat is, ndbd, @@ -539,8 +347,6 @@ ndb_mgmd), and any configuration parameters whose values are to be obtained\&. .sp For example, -.\" ndb_config: query option -.\" query option: ndb_config \fB\-\-query=id,type,indexmemory,datamemory\fR returns the node ID, node type, DataMemory, and @@ -571,8 +377,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: host option -.\" host option: ndb_config \fB\-\-host=\fR\fB\fIhostname\fR\fR .TS allbox tab(:); @@ -638,12 +442,8 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: id option -.\" id option: ndb_config \fB\-\-id=\fR\fB\fInode_id\fR\fR .sp -.\" ndb_config: nodeid option -.\" nodeid option: ndb_config \fB\-\-nodeid=\fR\fB\fInode_id\fR\fR .TS allbox tab(:); @@ -682,8 +482,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: nodes option -.\" nodes option: ndb_config \fB\-\-nodes\fR .TS allbox tab(:); @@ -716,7 +514,7 @@ or [ndbd default] section of the cluster configuration file (see -Section\ \&18.3.2.6, \(lqDefining MySQL Cluster Data Nodes\(rq)\&. +Section\ \&18.3.3.6, \(lqDefining MySQL Cluster Data Nodes\(rq)\&. .sp This option is mutually exclusive with \fB\-\-connections\fR @@ -732,8 +530,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: connections option -.\" connections option: ndb_config \fB\-\-connections\fR .TS allbox tab(:); @@ -771,9 +567,9 @@ [shm], or [shm default] sections of the cluster configuration file (see -Section\ \&18.3.2.8, \(lqMySQL Cluster TCP/IP Connections\(rq, -Section\ \&18.3.2.11, \(lqSCI Transport Connections in MySQL Cluster\(rq, and -Section\ \&18.3.2.10, \(lqMySQL Cluster Shared-Memory Connections\(rq, for more information)\&. +Section\ \&18.3.3.9, \(lqMySQL Cluster TCP/IP Connections\(rq, +Section\ \&18.3.3.12, \(lqSCI Transport Connections in MySQL Cluster\(rq, and +Section\ \&18.3.3.11, \(lqMySQL Cluster Shared-Memory Connections\(rq, for more information)\&. .sp This option is mutually exclusive with \fB\-\-nodes\fR @@ -789,8 +585,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: system option -.\" system option: ndb_config \fB\-\-system\fR .TS allbox tab(:); @@ -839,8 +633,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: type option -.\" type option: ndb_config \fB\-\-type=\fR\fB\fInode_type\fR\fR .TS allbox tab(:); @@ -895,8 +687,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: fields option -.\" fields option: ndb_config \fB\-\-fields=\fR\fB\fIdelimiter\fR\fR, \fB\-f\fR \fIdelimiter\fR @@ -957,8 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: rows option -.\" rows option: ndb_config \fB\-\-rows=\fR\fB\fIseparator\fR\fR, \fB\-r\fR \fIseparator\fR @@ -1017,8 +805,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_config: configinfo option -.\" configinfo option: ndb_config \fB\-\-configinfo\fR .sp The @@ -1116,8 +902,6 @@ .RE .\} .sp -.\" ndb_config: xml option -.\" xml option: ndb_config \fB\-\-configinfo\fR \fB\-\-xml\fR .TS @@ -1156,7 +940,7 @@ .\} .nf shell> \fBndb_config \-\-configinfo \-\-xml\fR -
@@ -1168,10 +952,10 @@ type="unsigned" default="0" min="0" max="4294967039"/>
- - \&... @@ -1226,7 +1010,7 @@ .RS 4 .\} .nf - .fi .if n \{\ @@ -1259,7 +1043,7 @@ .RS 4 .\} .nf - .fi .if n \{\ @@ -1385,7 +1169,7 @@ .RS 4 .\} .nf -shell> \fB\&./ndb_config \-\-config\-file=usr/local/mysql/cluster\-data/config\&.ini \e +shell> \fB\&./ndb_config \-\-config\-file=usr/local/mysql/cluster\-data/config\&.ini \e \-\-query=hostname,portnumber \-\-fields=: \-\-rows=, \-\-type=ndb_mgmd\fR 192\&.168\&.0\&.179:1186 .fi @@ -1470,7 +1254,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_cpcd.1 mysql-5.6-5.6.33/man/ndb_cpcd.1 --- mysql-5.6-5.6.27/man/ndb_cpcd.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_cpcd.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_cpcd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_CPCD\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_CPCD\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_cpcd .SH "NAME" ndb_cpcd \- automate testing of NDB (development use only) .SH "SYNOPSIS" @@ -39,7 +38,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndbd.8 mysql-5.6-5.6.33/man/ndbd.8 --- mysql-5.6-5.6.27/man/ndbd.8 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndbd.8 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndbd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDBD\FR" "8" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDBD\FR" "8" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndbd -.\" MySQL Cluster: ndbd -.\" MySQL Cluster: data nodes -.\" data nodes (MySQL Cluster) -.\" storage nodes - see data nodes, ndbd .SH "NAME" ndbd \- the MySQL Cluster data node daemon .SH "SYNOPSIS" @@ -45,10 +40,6 @@ In a MySQL Cluster, a set of \fBndbd\fR processes cooperate in handling data\&. These processes can execute on the same computer (host) or on different computers\&. The correspondences between data nodes and Cluster hosts is completely configurable\&. -.\" MySQL Cluster: administration -.\" MySQL Cluster: commands -.\" command options (MySQL Cluster): ndbd -.\" MySQL Cluster: ndbd process .PP The following table includes command options specific to the MySQL Cluster data node program \fBndbd\fR\&. Additional descriptions follow the table\&. For options common to most MySQL Cluster programs (including @@ -59,149 +50,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.79.\ \& This table describes command-line options for the ndbd program +.B Table\ \&18.80.\ \& This table describes command\-line options for the ndbd program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---initial -T}:T{ -Perform initial start of ndbd, including cleaning the file system. - Consult the documentation before using this option -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nostart, -.PP --n -T}:T{ -Don't start ndbd immediately; ndbd waits for command to start from - ndb_mgmd -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---daemon, -.PP --d -T}:T{ -Start ndbd as daemon (default); override with --nodaemon -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nodaemon -T}:T{ -Do not start ndbd as daemon; provided for testing purposes -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---foreground -T}:T{ -Run ndbd in foreground, provided for debugging purposes (implies - --nodaemon) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nowait-nodes=list -T}:T{ -Do not wait for these data nodes to start (takes comma-separated list of - node IDs). Also requires --ndb-nodeid to be used. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---initial-start -T}:T{ -Perform partial initial start (requires --nowait-nodes) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---bind-address=name -T}:T{ -Local bind address -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---install[=name] -T}:T{ -Used to install the data node process as a Windows service. Does not - apply on non-Windows platforms. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---remove[=name] -T}:T{ -Used to remove a data node process that was previously installed as a - Windows service. Does not apply on non-Windows platforms. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---connect-retries=# -T}:T{ -Number of times to try contacting the management server; set to -1 to - keep trying indefinitely -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---connect-delay=# -T}:T{ -Time to wait between attempts to contact a management server, in seconds -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .if n \{\ @@ -415,8 +267,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" initial option (ndbd) -.\" initial option (ndbmtd) \fB\-\-initial\fR .TS allbox tab(:); @@ -549,8 +399,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" initial-start option (ndbd) -.\" initial-start option (ndbmtd) \fB\-\-initial\-start\fR .TS allbox tab(:); @@ -624,8 +472,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" nowait-nodes option (ndbd) -.\" nowait-nodes option (ndbmtd) \fB\-\-nowait\-nodes=\fR\fB\fInode_id_1\fR\fR\fB[, \fR\fB\fInode_id_2\fR\fR\fB[, \&.\&.\&.]]\fR .TS allbox tab(:); @@ -675,10 +521,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" nostart option (ndbd) -.\" -n option (ndbd) -.\" nostart option (ndbmtd) -.\" -n option (ndbmtd) \fB\-\-nostart\fR, \fB\-n\fR .TS @@ -723,8 +565,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" install option (ndbd) -.\" install option (ndbmtd) \fB\-\-install[=\fR\fB\fIname\fR\fR\fB]\fR .TS allbox tab(:); @@ -793,8 +633,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" remove option (ndbd) -.\" remove option (ndbmtd) \fB\-\-remove[=\fR\fB\fIname\fR\fR\fB]\fR .TS allbox tab(:); @@ -844,8 +682,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" connect-retries option (ndbd) -.\" connect-retries option (ndbmtd) \fB\-\-connect\-retries=\fR\fB\fI#\fR\fR .TS allbox tab(:); @@ -874,7 +710,7 @@ :T{ \fBMin Value\fR T}:T{ -\-1 +0 T} :T{ \fBMax Value\fR @@ -883,9 +719,10 @@ T} .TE .sp 1 -Determines the number of times that the data node attempts to contact a management server when starting\&. Setting this option to \-1 causes the data node to keep trying to make contact indefinitely\&. The default is 12 attempts\&. The time to wait between attempts is controlled by the -\fB\-\-connect\-delay\fR -option\&. +Set the number of times to retry a connection before giving up; 0 means 1 attempt only (and no retries)\&. The default is 12 attempts\&. The time to wait between attempts is controlled by the +\fB\-\-connect\-retry\-delay\fR +option in MySQL NDB 7\&.4\&.9 and later (previously, this was +\fB\-\-connect\-delay\fR)\&. .RE .sp .RS 4 @@ -896,17 +733,21 @@ .sp -1 .IP \(bu 2.3 .\} -.\" connect-delay option (ndbd) -.\" connect-delay option (ndbmtd) \fB\-\-connect\-delay=\fR\fB\fI#\fR\fR .TS allbox tab(:); l l s s +l l s s l l l s ^ l l s ^ l l s ^ l l s. T{ +\fBDeprecated\fR +T}:T{ +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ \fBCommand\-Line Format\fR T}:T{ \-\-connect\-delay=# @@ -935,14 +776,74 @@ T} .TE .sp 1 +Determines the time to wait between attempts to contact a management server when starting (the number of attempts is controlled by the +\fB\-\-connect\-retries\fR +option)\&. The default is 5 seconds\&. +.sp +This option is deprecated in MySQL Cluster NDB 7\&.4\&.9, and is subject to removal in a future release of MySQL Cluster\&. Use +\fB\-\-connect\-retry\-delay\fR +instead\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-\-connect\-retry\-delay=\fR\fB\fI#\fR\fR +.TS +allbox tab(:); +l l s s +l l s s +l l l s +^ l l s +^ l l s +^ l l s. +T{ +\fBIntroduced\fR +T}:T{ +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ +\fBCommand\-Line Format\fR +T}:T{ +\-\-connect\-retry\-delay=# +T} +T{ +\fBPermitted Values\fR (>= 5\&.6\&.28\-ndb\-7\&.4\&.9) +T}:T{ +\fBType\fR +T}:T{ +numeric +T} +:T{ +\fBDefault\fR +T}:T{ +5 +T} +:T{ +\fBMin Value\fR +T}:T{ +0 +T} +:T{ +\fBMax Value\fR +T}:T{ +4294967295 +T} +.TE +.sp 1 Determines the time to wait between attempts to contact a management server when starting (the time between attempts is controlled by the \fB\-\-connect\-retries\fR -option)\&. The default is 5 attempts\&. +option)\&. The default is 5 seconds\&. .sp -This option was added in MySQL Cluster NDB 7\&.2\&.9\&. +This option was added in MySQL Cluster NDB 7\&.4\&.9, and is intended to take the place of the +\fB\-\-connect\-delay\fR +option, which is now deprecated and subject to removal in a future release of MySQL Cluster\&. .RE -.\" MySQL Cluster: log files -.\" log files (MySQL Cluster) .PP \fBndbd\fR generates a set of log files which are placed in the directory specified by @@ -966,8 +867,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" MySQL Cluster: error logs -.\" error logs (MySQL Cluster) ndb_\fInode_id\fR_error\&.log is a file containing records of all crashes which the referenced \fBndbd\fR @@ -1026,8 +925,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" MySQL Cluster: trace files -.\" trace files (MySQL Cluster) ndb_\fInode_id\fR_trace\&.log\&.\fItrace_id\fR is a trace file describing exactly what happened just before the error occurred\&. This information is useful for analysis by the MySQL Cluster development team\&. .sp @@ -1111,10 +1008,10 @@ .\} .PP See -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq, for additional information about this issue\&. +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq, for additional information about this issue\&. Options Common to MySQL Cluster Programs(1), describes other command\-line options which can be used with \fBndbd\fR\&. For information about data node configuration parameters, see -Section\ \&18.3.2.6, \(lqDefining MySQL Cluster Data Nodes\(rq\&. +Section\ \&18.3.3.6, \(lqDefining MySQL Cluster Data Nodes\(rq\&. .PP When \fBndbd\fR @@ -1142,7 +1039,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_delete_all.1 mysql-5.6-5.6.33/man/ndb_delete_all.1 --- mysql-5.6-5.6.27/man/ndb_delete_all.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_delete_all.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_delete_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_DELETE_ALL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_DELETE_ALL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_delete_all .SH "NAME" ndb_delete_all \- delete all rows from an NDB table .SH "SYNOPSIS" @@ -70,62 +69,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.85.\ \& This table describes command-line options for the ndb_delete_all program +.B Table\ \&18.86.\ \& This table describes command\-line options for the ndb_delete_all program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l. -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---transactional, -.PP --t -T}:T{ -Perform the delete in a single transaction (may run out of operations) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---tupscan -T}:T{ -Run tup scan -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---diskscan -T}:T{ -Run disk scan -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -137,8 +84,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_delete_all: transactional option -.\" transactional option: ndb_delete_all \fB\-\-transactional\fR, \fB\-t\fR .sp @@ -162,7 +107,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_desc.1 mysql-5.6-5.6.33/man/ndb_desc.1 --- mysql-5.6-5.6.27/man/ndb_desc.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_desc.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_desc\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_DESC\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_DESC\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_desc .SH "NAME" ndb_desc \- describe NDB tables .SH "SYNOPSIS" @@ -172,7 +171,7 @@ \-\- Attributes \-\- name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY NDB$TNODE Unsigned [64] PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY -\-\- Indexes \-\- +\-\- Indexes \-\- PRIMARY KEY(NDB$TNODE) \- UniqueHashIndex NDBT_ProgramExit: 0 \- OK .fi @@ -249,7 +248,7 @@ weight_gm INT(11) NOT NULL, PRIMARY KEY pk (id), UNIQUE KEY uk (name) -) TABLESPACE ts_1 STORAGE DISK +) TABLESPACE ts_1 STORAGE DISK ENGINE=NDB; INSERT INTO fish VALUES (\*(Aq\*(Aq,\*(Aqguppy\*(Aq, 35, 2), (\*(Aq\*(Aq,\*(Aqtuna\*(Aq, 2500, 150000), @@ -325,105 +324,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.86.\ \& This table describes command-line options for the ndb_desc program +.B Table\ \&18.87.\ \& This table describes command\-line options for the ndb_desc program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---blob-info, -.PP --b -T}:T{ -Include partition information for BLOB tables in output. Requires that - the -p option also be used -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of database containing table -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---extra-node-info, -.PP --n -T}:T{ -Include partition-to-data-node mappings in output. Requires that the -p - option also be used -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---extra-partition-info, -.PP --p -T}:T{ -Display information about partitions -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---retries=#, -.PP --r -T}:T{ -Number of times to retry the connection (once per second) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---table=tbl_name, -.PP --t -T}:T{ -Specify the table in which to find an index. When this option is used, - -p and -n have no effect and are ignored. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---unqualified, -.PP --u -T}:T{ -Use unqualified table names -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -435,8 +339,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: blob-info option -.\" blob-info option: ndb_desc \fB\-\-blob\-info\fR, \fB\-b\fR .sp @@ -459,8 +361,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: database option -.\" database option: ndb_desc \fB\-\-database=\fR\fB\fIdb_name\fR\fR, \fB\-d\fR .sp @@ -475,8 +375,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: extra-node-info option -.\" extra-node-info option: ndb_desc \fB\-\-extra\-node\-info\fR, \fB\-n\fR .sp @@ -495,8 +393,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: extra-partition-info option -.\" extra-partition-info option: ndb_desc \fB\-\-extra\-partition\-info\fR, \fB\-p\fR .sp @@ -511,8 +407,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: retries option -.\" retries option: ndb_desc \fB\-\-retries=\fR\fB\fI#\fR\fR, \fB\-r\fR .sp @@ -527,8 +421,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: table option -.\" table option: ndb_desc \fB\-\-table=\fR\fB\fItbl_name\fR\fR, \fB\-t\fR .sp @@ -543,8 +435,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_desc: unqualified option -.\" unqualified option: ndb_desc \fB\-\-unqualified\fR, \fB\-u\fR .sp @@ -553,7 +443,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndbd_redo_log_reader.1 mysql-5.6-5.6.33/man/ndbd_redo_log_reader.1 --- mysql-5.6-5.6.27/man/ndbd_redo_log_reader.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndbd_redo_log_reader.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndbd_redo_log_reader\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDBD_REDO_LOG_REA" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDBD_REDO_LOG_REA" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndbd_redo_log_reader .SH "NAME" ndbd_redo_log_reader \- check and print content of cluster redo log .SH "SYNOPSIS" @@ -55,48 +54,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.91.\ \& This table describes command-line options for the ndbd_redo_log_reader program +.B Table\ \&18.92.\ \& This table describes command\-line options for the ndbd_redo_log_reader program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l. -T{ -.PP --noprint -T}:T{ -Do not print records -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP --nocheck -T}:T{ -Do not check records for errors -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---help -T}:T{ -Print usage information -T}:T{ -.PP -ADDED: NDB 7.3.4 -T} +. .TE .sp 1 Usage @@ -231,7 +192,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_drop_index.1 mysql-5.6-5.6.33/man/ndb_drop_index.1 --- mysql-5.6-5.6.27/man/ndb_drop_index.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_drop_index.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_drop_index\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_DROP_INDEX\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_DROP_INDEX\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_drop_index .SH "NAME" ndb_drop_index \- drop index from an NDB table .SH "SYNOPSIS" @@ -68,30 +67,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.87.\ \& This table describes command-line options for the ndb_drop_index program +.B Table\ \&18.88.\ \& This table describes command\-line options for the ndb_drop_index program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l. -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .if n \{\ @@ -123,7 +102,7 @@ Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with \-A Welcome to the MySQL monitor\&. Commands end with ; or \eg\&. -Your MySQL connection id is 7 to server version: 5\&.6\&.26\-ndb\-7\&.3\&.11 +Your MySQL connection id is 7 to server version: 5\&.6\&.32\-ndb\-7\&.3\&.15 Type \*(Aqhelp;\*(Aq or \*(Aq\eh\*(Aq for help\&. Type \*(Aq\ec\*(Aq to clear the buffer\&. mysql> \fBSHOW TABLES;\fR +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ @@ -154,7 +133,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_drop_table.1 mysql-5.6-5.6.33/man/ndb_drop_table.1 --- mysql-5.6-5.6.27/man/ndb_drop_table.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_drop_table.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_drop_table\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_DROP_TABLE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_DROP_TABLE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_drop_table .SH "NAME" ndb_drop_table \- drop an NDB table .SH "SYNOPSIS" @@ -66,36 +65,16 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.88.\ \& This table describes command-line options for the ndb_drop_table program +.B Table\ \&18.89.\ \& This table describes command\-line options for the ndb_drop_table program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l. -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_error_reporter.1 mysql-5.6-5.6.33/man/ndb_error_reporter.1 --- mysql-5.6-5.6.27/man/ndb_error_reporter.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_error_reporter.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_error_reporter\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_ERROR_REPORTE" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_ERROR_REPORTE" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_error_reporter -.\" bugs: MySQL Cluster: reporting .SH "NAME" ndb_error_reporter \- NDB error\-reporting utility .SH "SYNOPSIS" @@ -58,59 +56,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.89.\ \& This table describes command-line options for the ndb_error_reporter program +.B Table\ \&18.90.\ \& This table describes command\-line options for the ndb_error_reporter program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l. -T{ -.PP ---connection-timeout=timeout -T}:T{ -Number of seconds to wait when connecting to nodes before timing out. -T}:T{ -.PP -ADDED: NDB 7.3.3 -T} -T{ -.PP ---dry-scp -T}:T{ -Disable scp with remote hosts; used only for testing. -T}:T{ -.PP -ADDED: NDB 7.3.3 -T} -T{ -.PP ---fs -T}:T{ -Include file system data in error report; can use a large amount of disk - space -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---skip-nodegroup=nodegroup_id -T}:T{ -Skip all nodes in the node group having this ID. -T}:T{ -.PP -ADDED: NDB 7.3.3 -T} +. .TE .sp 1 Usage @@ -133,7 +82,6 @@ \fIYYYYMMDDHHMMSS\fR is a datetime string\&. .PP -.\" ndb_error_reporter: options \fBndb_error_reporter\fR also accepts the options listed here: .sp @@ -145,7 +93,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" connection-timeout option (ndb_error_reporter) \fB\-\-connection\-timeout=\fR\fB\fItimeout\fR\fR .TS allbox tab(:); @@ -188,7 +135,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" dry-scp option (ndb_error_reporter) \fB\-\-dry\-scp\fR .TS allbox tab(:); @@ -233,7 +179,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" fs option (ndb_error_reporter) \fB\-\-fs\fR .TS allbox tab(:); @@ -274,7 +219,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" skip-nodegroup option (ndb_error_reporter) \fB\-\-skip\-nodegroup=\fR\fB\fInodegroup_id\fR\fR .TS allbox tab(:); @@ -311,7 +255,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_index_stat.1 mysql-5.6-5.6.33/man/ndb_index_stat.1 --- mysql-5.6-5.6.27/man/ndb_index_stat.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_index_stat.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_index_stat\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_INDEX_STAT\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_INDEX_STAT\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_index_stat .SH "NAME" ndb_index_stat \- NDB index statistics utility .SH "SYNOPSIS" @@ -67,8 +66,6 @@ in the test database: -.\" ndb_index_stat: interpreting output -.\" ndb_index_stat: example .sp .if n \{\ .RS 4 @@ -169,169 +166,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.90.\ \& This table describes command-line options for the ndb_index_stat program +.B Table\ \&18.91.\ \& This table describes command\-line options for the ndb_index_stat program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---database=name, -.PP --d -T}:T{ -Name of the database containing the table. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---delete -T}:T{ -Delete index statistics for the given table, stopping any auto-update - previously configured. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---update -T}:T{ -Update index statistics for the given table, restarting any auto-update - previously configured. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---dump -T}:T{ -Print the query cache. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---query=# -T}:T{ -Perform a number of random range queries on first key attr (must be int - unsigned). -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-drop -T}:T{ -Drop any statistics tables and events in NDB kernel (all statistics are - lost) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-create -T}:T{ -Create all statistics tables and events in NDB kernel, if none of them - already exist -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-create-if-not-exist -T}:T{ -Create any statistics tables and events in NDB kernel that do not - already exist. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-create-if-not-valid -T}:T{ -Create any statistics tables or events that do not already exist in the - NDB kernel. after dropping any that are invalid. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-check -T}:T{ -Verify that NDB system index statistics and event tables exist. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-skip-tables -T}:T{ -Do not apply sys-* options to tables. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---sys-skip-events -T}:T{ -Do not apply sys-* options to events. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---verbose, -.PP --v -T}:T{ -Turn on verbose output -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---loops=# -T}:T{ -Set the number of times to perform a given command. Default is 0. -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .PP @@ -346,8 +184,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" database option (ndb_index_stat) -.\" -d option (ndb_index_stat) \fB\-\-database=\fR\fB\fIname\fR\fR, \fB\-d \fR\fB\fIname\fR\fR .TS @@ -395,7 +231,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" delete option (ndb_index_stat) \fB\-\-delete\fR .TS allbox tab(:); @@ -442,7 +277,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" update option (ndb_index_stat) \fB\-\-update\fR .TS allbox tab(:); @@ -489,7 +323,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" dump option (ndb_index_stat) \fB\-\-dump\fR .TS allbox tab(:); @@ -536,7 +369,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" query option (ndb_index_stat) \fB\-\-query=\fR\fB\fI#\fR\fR .TS allbox tab(:); @@ -588,7 +420,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-drop option (ndb_index_stat) \fB\-\-sys\-drop\fR .TS allbox tab(:); @@ -636,7 +467,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-create option (ndb_index_stat) \fB\-\-sys\-create\fR .TS allbox tab(:); @@ -683,7 +513,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-create-if-not-exist option (ndb_index_stat) \fBsys\-create\-if\-not\-exist\fR .TS allbox tab(:); @@ -730,7 +559,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-create-if-not-valid option (ndb_index_stat) \fB\-\-sys\-create\-if\-not\-valid\fR .TS allbox tab(:); @@ -777,7 +605,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-check option (ndb_index_stat) \fB\-\-sys\-check\fR .TS allbox tab(:); @@ -824,7 +651,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-skip-tables option (ndb_index_stat) \fB\-\-sys\-skip\-tables\fR .TS allbox tab(:); @@ -873,7 +699,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" sys-skip-events option (ndb_index_stat) \fB\-\-sys\-skip\-events\fR .TS allbox tab(:); @@ -922,7 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" verbose option (ndb_index_stat) \fB\-\-verbose\fR .TS allbox tab(:); @@ -969,7 +793,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" loops option (ndb_index_stat) \fB\-\-loops=\fR\fB\fI#\fR\fR .TS allbox tab(:); @@ -1012,7 +835,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndbinfo_select_all.1 mysql-5.6-5.6.33/man/ndbinfo_select_all.1 --- mysql-5.6-5.6.27/man/ndbinfo_select_all.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndbinfo_select_all.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndbinfo_select_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDBINFO_SELECT_AL" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDBINFO_SELECT_AL" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndbinfo_select_all -.\" MySQL Cluster: ndbinfo_select_all .SH "NAME" ndbinfo_select_all \- select from ndbinfo tables .SH "SYNOPSIS" @@ -43,19 +41,17 @@ .PP Not all ndbinfo -tables can be accessed by this program\&. -ndbinfo_select_all -can access the -counters, -diskpagebuffer, -logbuffers, -logspaces, -nodes, -resources, -threadblocks, -threadstat, and -transporters -tables\&. +tables available in the +\fBmysql\fR +client can be read by this program\&. In addition, +\fBndbinfo_select_all\fR +can show information about some tables internal to +ndbinfo +which cannot be accessed using SQL, including the +tables +and +columns +metadata tables\&. .PP To select from one or more ndbinfo @@ -103,13 +99,11 @@ 8 0 0 1 268435456 0 0 8 0 0 2 268435456 0 0 8 0 0 3 268435456 0 0 -shell> +shell> .fi .if n \{\ .RE .\} -.sp -.\" command options (MySQL Cluster): ndbinfo_select_all .PP The following table includes options that are specific to \fBndbinfo_select_all\fR\&. Additional descriptions follow the table\&. For options common to most MySQL Cluster programs (including @@ -120,64 +114,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.80.\ \& This table describes command-line options for the ndbinfo_select_all program +.B Table\ \&18.81.\ \& This table describes command\-line options for the ndbinfo_select_all program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l. -T{ -.PP ---delay=# -T}:T{ -Set the delay in seconds between loops. Default is 5. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---loops=#, -.PP --l -T}:T{ -Set the number of times to perform the select. Default is 1. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---database=db_name, -.PP --d -T}:T{ -Name of the database where the table located. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---parallelism=#, -.PP --p -T}:T{ -Set the degree of parallelism. -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -189,7 +129,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" delay option (ndbinfo_select_all) \fB\-\-delay=\fR\fBseconds\fR .TS allbox tab(:); @@ -240,8 +179,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" loops option (ndbinfo_select_all) -.\" -l option (ndbinfo_select_all) \fB\-\-loops=\fR\fBnumber\fR, \fB\-l \fR\fB\fInumber\fR\fR .TS @@ -287,7 +224,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_mgm.1 mysql-5.6-5.6.33/man/ndb_mgm.1 --- mysql-5.6-5.6.27/man/ndb_mgm.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_mgm.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_mgm\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_MGM\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_MGM\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,13 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_mgm -.\" MySQL Cluster: ndb_mgm -.\" MySQL Cluster: management client (ndb_mgm) -.\" management client (MySQL Cluster) -.\" ndb_mgm -.\" MySQL Cluster: administration -.\" administration of MySQL Cluster .SH "NAME" ndb_mgm \- the MySQL Cluster management client .SH "SYNOPSIS" @@ -73,10 +66,6 @@ The default host name and port number are localhost and 1186, respectively\&. -.\" MySQL Cluster: administration -.\" MySQL Cluster: commands -.\" command options (MySQL Cluster): ndb_mgm -.\" MySQL Cluster: mgm process .PP The following table includes options that are specific to the MySQL Cluster management client program \fBndb_mgm\fR\&. Additional descriptions follow the table\&. For options common to most MySQL Cluster programs (including @@ -87,44 +76,76 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.82.\ \& This table describes command-line options for the ndb_mgm program +.B Table\ \&18.83.\ \& This table describes command\-line options for the ndb_mgm program .TS allbox tab(:); -lB lB lB. +. +.TE +.sp 1 +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-\-connect\-retries=\fR\fB\fI#\fR\fR +.TS +allbox tab(:); +l l s s +l l s s +l l l s +^ l l s +^ l l s +^ l l s. T{ -Format +\fBIntroduced\fR T}:T{ -Description +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ +\fBCommand\-Line Format\fR T}:T{ -Added or Removed +\-\-connect\-retries=# T} -.T& -l l l -l l l. T{ -.PP ---try-reconnect=#, -.PP --t +\fBPermitted Values\fR (>= 5\&.6\&.28\-ndb\-7\&.4\&.9) T}:T{ -Specify number of tries for connecting to ndb_mgmd (0 = infinite) +\fBType\fR T}:T{ -.PP -All MySQL 5.6 based releases +numeric T} -T{ -.PP ---execute=name, -.PP --e +:T{ +\fBDefault\fR T}:T{ -Execute command and exit +3 +T} +:T{ +\fBMin Value\fR T}:T{ -.PP -All MySQL 5.6 based releases +0 +T} +:T{ +\fBMax Value\fR +T}:T{ +4294967295 T} .TE .sp 1 +This option specifies the number of times following the first attempt to retry a connection before giving up (the client always tries the connection at least once)\&. The length of time to wait per attempt is set using +\fB\-\-connect\-retry\-delay\fR\&. +.sp +This option was added in MySQL Cluster NDB 7\&.4\&.9, and is synonymous with the +\fB\-\-try\-reconnect\fR +option, which is now deprecated\&. +.sp +The default for this option this option differs from its default when used with other +NDB +programs\&. See +Options Common to MySQL Cluster Programs(1), for more information\&. +.RE .sp .RS 4 .ie n \{\ @@ -134,8 +155,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" execute option (ndb_mgm) -.\" -e option (ndb_mgm) \fB\-\-execute=\fR\fBcommand\fR, \fB\-e \fR\fBcommand\fR .TS @@ -202,9 +221,17 @@ .TS allbox tab(:); l l s s +l l s s l l l s +^ l l s +^ l l s ^ l l s. T{ +\fBDeprecated\fR +T}:T{ +5\&.6\&.28\-ndb\-7\&.4\&.9 +T} +T{ \fBCommand\-Line Format\fR T}:T{ \-\-try\-reconnect=# @@ -221,11 +248,24 @@ T}:T{ 3 T} +:T{ +\fBMin Value\fR +T}:T{ +0 +T} +:T{ +\fBMax Value\fR +T}:T{ +4294967295 +T} .TE .sp 1 If the connection to the management server is broken, the node tries to reconnect to it every 5 seconds until it succeeds\&. By using this option, it is possible to limit the number of attempts to \fInumber\fR before giving up and reporting an error instead\&. +.sp +This option is deprecated in MySQL Cluster NDB 7\&.4\&.9 and later, and is superseded by +\fB\-\-connect\-retries\fR\&. .RE .PP Additional information about using @@ -235,7 +275,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_mgmd.8 mysql-5.6-5.6.33/man/ndb_mgmd.8 --- mysql-5.6-5.6.27/man/ndb_mgmd.8 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_mgmd.8 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_mgmd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_MGMD\FR" "8" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_MGMD\FR" "8" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_mgmd (MySQL Cluster process) -.\" MySQL Cluster: ndb_mgmd process -.\" MySQL Cluster: management nodes -.\" management nodes (MySQL Cluster) -.\" ndb_mgmd .SH "NAME" ndb_mgmd \- the MySQL Cluster management server daemon .SH "SYNOPSIS" @@ -40,10 +35,6 @@ .SH "DESCRIPTION" .PP The management server is the process that reads the cluster configuration file and distributes this information to all nodes in the cluster that request it\&. It also maintains a log of cluster activities\&. Management clients can connect to the management server and check the cluster\*(Aqs status\&. -.\" MySQL Cluster: administration -.\" MySQL Cluster: commands -.\" command options (MySQL Cluster): ndb_mgmd -.\" MySQL Cluster: mgmd process .PP The following table includes options that are specific to the MySQL Cluster management server program \fBndb_mgmd\fR\&. Additional descriptions follow the table\&. For options common to most MySQL Cluster programs (including @@ -54,197 +45,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.81.\ \& This table describes command-line options for the ndb_mgmd program +.B Table\ \&18.82.\ \& This table describes command\-line options for the ndb_mgmd program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---config-file=file, -.PP --f -T}:T{ -Specify the cluster configuration file; in NDB-6.4.0 and later, needs - --reload or --initial to override configuration cache if - present -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---configdir=directory, -.PP ---config-dir=directory -T}:T{ -Specify the cluster management server's configuration cache directory -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---bind-address=ip_address -T}:T{ -Local bind address -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---print-full-config, -.PP --P -T}:T{ -Print full configuration and exit -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---daemon, -.PP --d -T}:T{ -Run ndb_mgmd in daemon mode (default) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nodaemon -T}:T{ -Do not run ndb_mgmd as a daemon -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---interactive -T}:T{ -Run ndb_mgmd in interactive mode (not officially supported in - production; for testing purposes only) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---log-name=name -T}:T{ -A name to use when writing messages applying to this node in the cluster - log. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---no-nodeid-checks -T}:T{ -Do not provide any node id checks -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---mycnf -T}:T{ -Read cluster configuration data from the my.cnf file -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---reload -T}:T{ -Causes the management server to compare the configuration file with its - configuration cache -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---initial -T}:T{ -Causes the management server reload its configuration data from the - configuration file, bypassing the configuration cache -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nowait-nodes=list -T}:T{ -Do not wait for these management nodes when starting this management - server. Also requires --ndb-nodeid to be used. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---config-cache[=TRUE|FALSE] -T}:T{ -Enable the management server configuration cache; TRUE by default. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---install[=name] -T}:T{ -Used to install the management server process as a Windows service. Does - not apply on non-Windows platforms. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---remove[=name] -T}:T{ -Used to remove a management server process that was previously installed - as a Windows service, optionally specifying the name of the - service to be removed. Does not apply on non-Windows - platforms. -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -256,7 +60,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" bind-address option (ndb_mgmd) \fB\-\-bind\-address=\fR\fB\fIhost\fR\fR\fB[:\fR\fB\fIport\fR\fR\fB]\fR .TS allbox tab(:); @@ -298,7 +101,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" no-nodeid-checks option (ndb_mgmd) \fB\-\-no\-nodeid\-checks\fR .TS allbox tab(:); @@ -335,7 +137,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" configdir option (ndb_mgmd) \fB\-\-configdir=\fR\fB\fIdir_name\fR\fR .TS allbox tab(:); @@ -380,7 +181,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" config-cache option (ndb_mgmd) \fB\-\-config\-cache\fR .TS allbox tab(:); @@ -413,7 +213,7 @@ ON), can be used to disable the management server\*(Aqs configuration cache, so that it reads its configuration from config\&.ini every time it starts (see -Section\ \&18.3.2, \(lqMySQL Cluster Configuration Files\(rq)\&. You can do this by starting the +Section\ \&18.3.3, \(lqMySQL Cluster Configuration Files\(rq)\&. You can do this by starting the \fBndb_mgmd\fR process with any one of the following options: .sp @@ -530,9 +330,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" config-file option (ndb_mgmd) -.\" -f option (ndb_mgmd) -.\" -c option (ndb_mgmd) (OBSOLETE) \fB\-\-config\-file=\fR\fB\fIfilename\fR\fR, \fB\-f \fR\fB\fIfilename\fR\fR .TS @@ -575,7 +372,7 @@ \fBndb_mgmd\fR was started with \fB\-\-config\-cache=OFF\fR\&. See -Section\ \&18.3.2, \(lqMySQL Cluster Configuration Files\(rq, for more information\&. +Section\ \&18.3.3, \(lqMySQL Cluster Configuration Files\(rq, for more information\&. .sp Formerly, using this option together with \fB\-\-initial\fR @@ -590,8 +387,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_mgmd: mycnf option -.\" mycnf option: ndb_mgmd \fB\-\-mycnf\fR .TS allbox tab(:); @@ -630,8 +425,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" daemon option (ndb_mgmd) -.\" -d option (ndb_mgmd) \fB\-\-daemon\fR, \fB\-d\fR .TS @@ -675,7 +468,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" interactive option (ndb_mgmd) \fB\-\-interactive\fR .TS allbox tab(:); @@ -716,7 +508,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" initial option (ndb_mgmd) \fB\-\-initial\fR .TS allbox tab(:); @@ -743,7 +534,7 @@ .TE .sp 1 Configuration data is cached internally, rather than being read from the cluster global configuration file each time the management server is started (see -Section\ \&18.3.2, \(lqMySQL Cluster Configuration Files\(rq)\&. Using the +Section\ \&18.3.3, \(lqMySQL Cluster Configuration Files\(rq)\&. Using the \fB\-\-initial\fR option overrides this behavior, by forcing the management server to delete any existing cache files, and then to re\-read the configuration data from the cluster configuration file and to build a new cache\&. .sp @@ -781,7 +572,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" log-name option (ndb_mgmd) \fB\-\-log\-name=\fR\fB\fIname\fR\fR .TS allbox tab(:); @@ -818,7 +608,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" nodaemon option (ndb_mgmd) \fB\-\-nodaemon\fR .TS allbox tab(:); @@ -861,8 +650,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" print-full-config option (ndb_mgmd) -.\" -P option (ndb_mgmd) \fB\-\-print\-full\-config\fR, \fB\-P\fR .TS @@ -904,7 +691,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" reload option (ndb_mgmd) \fB\-\-reload\fR .TS allbox tab(:); @@ -931,7 +717,7 @@ .TE .sp 1 In MySQL Cluster NDB 7\&.3, configuration data is stored internally rather than being read from the cluster global configuration file each time the management server is started (see -Section\ \&18.3.2, \(lqMySQL Cluster Configuration Files\(rq)\&. Using this option forces the management server to check its internal data store against the cluster configuration file and to reload the configuration if it finds that the configuration file does not match the cache\&. Existing configuration cache files are preserved, but not used\&. +Section\ \&18.3.3, \(lqMySQL Cluster Configuration Files\(rq)\&. Using this option forces the management server to check its internal data store against the cluster configuration file and to reload the configuration if it finds that the configuration file does not match the cache\&. Existing configuration cache files are preserved, but not used\&. .sp This differs in two ways from the \fB\-\-initial\fR @@ -961,7 +747,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" nowait-nodes option (ndb_mgmd) \fB\-\-nowait\-nodes\fR .TS allbox tab(:); @@ -1077,7 +862,7 @@ The same is true with regard to the connection string used with any \fBmysqld\fR processes that you wish to start as MySQL Cluster SQL nodes connected to this cluster\&. See -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq, for more information\&. +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq, for more information\&. .sp When used with \fBndb_mgmd\fR, this option affects the behavior of the management node with regard to other management nodes only\&. Do not confuse it with the @@ -1111,7 +896,7 @@ It is not strictly necessary to specify a connection string when starting the management server\&. However, if you are using more than one management server, a connection string should be provided and each node in the cluster should specify its node ID explicitly\&. .PP See -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq, for information about using connection strings\&. +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq, for information about using connection strings\&. \fBndb_mgmd\fR(8), describes other options for \fBndb_mgmd\fR\&. .PP @@ -1133,9 +918,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" MySQL Cluster: configuration -.\" configuring MySQL Cluster -.\" config.ini (MySQL Cluster) config\&.ini is the configuration file for the cluster as a whole\&. This file is created by the user and read by the management server\&. Section\ \&18.3, \(lqConfiguration of MySQL Cluster\(rq, discusses how to set up this file\&. @@ -1198,7 +980,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" install option (ndb_mgmd) \fB\-\-install[=\fR\fB\fIname\fR\fR\fB]\fR .TS allbox tab(:); @@ -1263,7 +1044,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" remove option (ndb_mgmd) \fB\-\-remove[=\fR\fB\fIname\fR\fR\fB]\fR .TS allbox tab(:); @@ -1307,7 +1087,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndbmtd.8 mysql-5.6-5.6.33/man/ndbmtd.8 --- mysql-5.6-5.6.27/man/ndbmtd.8 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndbmtd.8 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndbmtd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDBMTD\FR" "8" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDBMTD\FR" "8" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndbmtd -.\" MySQL Cluster: ndbmtd -.\" MySQL Cluster: data nodes -.\" data nodes (MySQL Cluster) -.\" storage nodes - see data nodes, ndbd, ndbmtd .SH "NAME" ndbmtd \- the MySQL Cluster data node daemon (multi\-threaded version) .SH "SYNOPSIS" @@ -59,7 +54,7 @@ also apply to \fBndbmtd\fR\&. For more information about these options and parameters, see \fBndbd\fR(8), and -Section\ \&18.3.2.6, \(lqDefining MySQL Cluster Data Nodes\(rq, respectively\&. +Section\ \&18.3.3.6, \(lqDefining MySQL Cluster Data Nodes\(rq, respectively\&. .PP \fBndbmtd\fR is also file system\-compatible with @@ -124,11 +119,6 @@ \fBndbd\fR failures\&. These differences are discussed in more detail in the next few paragraphs\&. .RE -.\" ndbmtd: trace files -.\" trace files: ndbmtd -.\" MySQL Cluster: log files -.\" log files (MySQL Cluster): ndbmtd -.\" ndbmtd: trace files .PP Like \fBndbd\fR, @@ -203,7 +193,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_print_backup_file.1 mysql-5.6-5.6.33/man/ndb_print_backup_file.1 --- mysql-5.6-5.6.27/man/ndb_print_backup_file.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_print_backup_file.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_print_backup_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_PRINT_BACKUP_" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_PRINT_BACKUP_" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_print_backup_file .SH "NAME" ndb_print_backup_file \- print NDB backup file contents .SH "SYNOPSIS" @@ -73,7 +72,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_print_file.1 mysql-5.6-5.6.33/man/ndb_print_file.1 --- mysql-5.6-5.6.27/man/ndb_print_file.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_print_file.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_print_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_PRINT_FILE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_PRINT_FILE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_print_file .SH "NAME" ndb_print_file \- print NDB Disk Data file contents .SH "SYNOPSIS" @@ -107,7 +106,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_print_schema_file.1 mysql-5.6-5.6.33/man/ndb_print_schema_file.1 --- mysql-5.6-5.6.27/man/ndb_print_schema_file.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_print_schema_file.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_print_schema_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_PRINT_SCHEMA_" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_PRINT_SCHEMA_" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_print_schema_file .SH "NAME" ndb_print_schema_file \- print NDB schema file contents .SH "SYNOPSIS" @@ -60,14 +59,14 @@ (and unlike most of the other NDB utilities that are intended to be run on a management server host or to connect to a management server) -\fBndb_schema_backup_file\fR +\fBndb_print_schema_file\fR must be run on a cluster data node, since it accesses the data node file system directly\&. Because it does not make use of the management server, this utility can be used when the management server is not running, and even when the cluster has been completely shut down\&. Additional Options.PP None\&. .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_print_sys_file.1 mysql-5.6-5.6.33/man/ndb_print_sys_file.1 --- mysql-5.6-5.6.27/man/ndb_print_sys_file.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_print_sys_file.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_print_sys_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_PRINT_SYS_FIL" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_PRINT_SYS_FIL" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_print_sys_file .SH "NAME" ndb_print_sys_file \- print NDB system file contents .SH "SYNOPSIS" @@ -70,7 +69,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_restore.1 mysql-5.6-5.6.33/man/ndb_restore.1 --- mysql-5.6-5.6.27/man/ndb_restore.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_restore.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_restore\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_RESTORE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_RESTORE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,11 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" MySQL Cluster: backups -.\" backups: in MySQL Cluster -.\" MySQL Cluster: restoring backups -.\" restoring backups: in MySQL Cluster -.\" ndb_restore .SH "NAME" ndb_restore \- restore a MySQL Cluster backup .SH "SYNOPSIS" @@ -49,7 +44,6 @@ START BACKUP command used to create the backup (see Section\ \&18.5.3.2, \(lqUsing The MySQL Cluster Management Client to Create a Backup\(rq)\&. This is equal to the number of data nodes in the cluster at the time that the backup was created\&. -.\" single user mode (MySQL Cluster): and ndb_restore .if n \{\ .sp .\} @@ -78,507 +72,12 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.92.\ \& This table describes command-line options for the ndb_restore program +.B Table\ \&18.93.\ \& This table describes command\-line options for the ndb_restore program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---connect, -.PP --c -T}:T{ -Alias for --connectstring. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nodeid=#, -.PP --n -T}:T{ -Restore backup files to node with this ID -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---backupid=#, -.PP --b -T}:T{ -Restore from the backup with the given ID -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---restore_data, -.PP --r -T}:T{ -Restore table data and logs into NDB Cluster using the NDB API -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---restore_meta, -.PP --m -T}:T{ -Restore metadata to NDB Cluster using the NDB API -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---no-upgrade, -.PP --u -T}:T{ -Do not upgrade array type for varsize attributes which do not already - resize VAR data, and do not change column attributes -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---promote-attributes, -.PP --A -T}:T{ -Allow attributes to be promoted when restoring data from backup -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---preserve-trailing-spaces, -.PP --P -T}:T{ -Allow preservation of trailing spaces (including padding) when promoting - fixed-width string types to variable-width types -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---no-restore-disk-objects, -.PP --d -T}:T{ -Do not restore objects relating to Disk Data -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---restore_epoch, -.PP --e -T}:T{ -Restore epoch info into the status table. Convenient on a MySQL Cluster - replication slave for starting replication. The row in - mysql.ndb_apply_status with id 0 will be updated/inserted. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---skip-table-check, -.PP --s -T}:T{ -Skip table structure check during restoring of data -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---parallelism=#, -.PP --p -T}:T{ -Number of parallel transactions to use while restoring data -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---print -T}:T{ -Print metadata, data and log to stdout (equivalent to --print_meta - --print_data --print_log) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---print_meta -T}:T{ -Print metadata to stdout -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---print_data -T}:T{ -Print data to stdout -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---print_log -T}:T{ -Print to stdout -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---backup_path=dir_name -T}:T{ -Path to backup files directory -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---dont_ignore_systab_0, -.PP --f -T}:T{ -Do not ignore system table during restore. Experimental only; not for - production use -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ndb-nodegroup-map=map, -.PP --z -T}:T{ -Nodegroup map for NDBCLUSTER storage engine. Syntax: list of - (source_nodegroup, destination_nodegroup) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---fields-enclosed-by=char -T}:T{ -Fields are enclosed with the indicated character -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---fields-terminated-by=char -T}:T{ -Fields are terminated by the indicated character -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---fields-optionally-enclosed-by -T}:T{ -Fields are optionally enclosed with the indicated character -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---lines-terminated-by=char -T}:T{ -Lines are terminated by the indicated character -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---hex -T}:T{ -Print binary types in hexadecimal format -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---tab=dir_name, -.PP --T dir_name -T}:T{ -Creates a tab-separated .txt file for each table in the given path -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---append -T}:T{ -Append data to a tab-delimited file -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---progress-frequency=# -T}:T{ -Print status of restoration each given number of seconds -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---no-binlog -T}:T{ -If a mysqld is connected and using binary logging, do not log the - restored data -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---verbose=# -T}:T{ -Level of verbosity in output -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---include-databases=db-list -T}:T{ -List of one or more databases to restore (excludes those not named) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---exclude-databases=db-list -T}:T{ -List of one or more databases to exclude (includes those not named) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---include-tables=table-list -T}:T{ -List of one or more tables to restore (excludes those in same database - that are not named); each table reference must include the - database name -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---exclude-tables=table-list -T}:T{ -List of one or more tables to exclude (includes those in the same - database that are not named); each table reference must - include the database name -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---exclude-missing-columns -T}:T{ -Causes columns from the backup version of a table that are missing from - the version of the table in the database to be ignored. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---exclude-missing-tables -T}:T{ -Causes tables from the backup that are missing from the database to be - ignored. -T}:T{ -.PP -ADDED: NDB 7.3.7 -T} -T{ -.PP ---disable-indexes -T}:T{ -Causes indexes from a backup to be ignored; may decrease time needed to - restore data. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---rebuild-indexes -T}:T{ -Causes multi-threaded rebuilding of ordered indexes found in the backup. - Number of threads used is determined by setting - BuildIndexThreads parameter. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---skip-broken-objects -T}:T{ -Causes missing blob tables in the backup file to be ignored. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---skip-unknown-objects -T}:T{ -Causes schema objects not recognized by ndb_restore to be ignored when - restoring a backup made from a newer MySQL Cluster version to - an older version. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---rewrite-database=olddb,newdb -T}:T{ -Restores to a database with a different name than the original -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---lossy-conversions, -.PP --L -T}:T{ -Allow lossy conversions of column values (type demotions or changes in - sign) when restoring data from backup -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---restore-privilege-tables -T}:T{ -Restore MySQL privilege tables that were previously moved to NDB. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---exclude-intermediate-sql-tables[=TRUE|FALSE] -T}:T{ -If TRUE (the default), do not restore any intermediate tables (having - names prefixed with '#sql-') that were left over from copying - ALTER TABLE operations. -T}:T{ -.PP -ADDED: NDB 7.3.6 -T} +. .TE .sp 1 -.\" ndb_restore: typical and required options -.PP -Typical options for this utility are shown here: .PP Normally, when restoring from a MySQL Cluster backup, \fBndb_restore\fR @@ -591,6 +90,8 @@ \fB\-b\fR), and \fB\-\-backup_path\fR options\&. +.PP +Typical options for this utility are shown here: .sp .if n \{\ .RS 4 @@ -602,14 +103,36 @@ .if n \{\ .RE .\} +.sp +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +.PP +In MySQL Cluster NDB 7\&.3\&.11 and MySQL Cluster NDB 7\&.4\&.8 +\fIonly\fR, when +\fBndb_restore\fR +is used to restore any tables containing unique indexes, you must include +\fB\-\-disable\-indexes\fR +or +\fB\-\-rebuild\-indexes\fR\&. (Bug #57782, Bug #11764893) This is not a requirement in later versions\&. (Bug #22345748) +.sp .5v +.RE .PP -.\" restore_connect option (ndb_restore) The \fB\-c\fR option is used to specify a connection string which tells ndb_restore where to locate the cluster management server\&. (See -Section\ \&18.3.2.3, \(lqMySQL Cluster Connection Strings\(rq, for information on connection strings\&.) If this option is not used, then +Section\ \&18.3.3.3, \(lqMySQL Cluster Connection Strings\(rq, for information on connection strings\&.) If this option is not used, then \fBndb_restore\fR attempts to connect to a management server on localhost:1186\&. This utility acts as a cluster API node, and so requires a free connection @@ -627,7 +150,7 @@ section in config\&.ini that is not being used for a MySQL server or other application for this reason (see -Section\ \&18.3.2.7, \(lqDefining SQL and Other API Nodes in a MySQL Cluster\(rq)\&. +Section\ \&18.3.3.7, \(lqDefining SQL and Other API Nodes in a MySQL Cluster\(rq)\&. .PP You can verify that \fBndb_restore\fR @@ -647,7 +170,6 @@ .RE .\} .PP -.\" nodeid option (ndb_restore) The \fB\-\-nodeid\fR or @@ -664,7 +186,6 @@ \fB\-\-initial\fR prior to performing the restore\&.) .PP -.\" restore_skip-table-check option (ndb_restore) It is possible to restore data without restoring table metadata\&. The default behavior when doing this is for \fBndb_restore\fR to fail with an error if table data do not match the table schema; this can be overridden using the @@ -734,12 +255,9 @@ Different distribution key settings .RE .PP -.\" attribute promotion: ndb_restore -.\" ndb_restore: attribute promotion -.\" promote-attributes option (ndb_restore) \fBndb_restore\fR supports limited -attribute promotion +\fIattribute promotion\fR in much the same way that it is supported by MySQL replication; that is, data backed up from a column of a given type can generally be restored to a column using a \(lqlarger, similar\(rq type\&. For example, data from a @@ -834,8 +352,6 @@ \fBndb_restore\fR following a successful restoration\&. .PP -.\" ndb_restore: lossy-conversions option -.\" lossy-conversions option (ndb_restore) \fB\-\-lossy\-conversions\fR, \fB\-L\fR .TS @@ -873,7 +389,6 @@ \fBndb_restore\fR reports any truncation of data that it performs during lossy conversions once per attribute and column\&. .PP -.\" preserve-trailing-spaces option (ndb_restore) The \fB\-\-preserve\-trailing\-spaces\fR option (short form @@ -916,7 +431,6 @@ .sp .5v .RE .PP -.\" backupid option (ndb_restore) The \fB\-b\fR option is used to specify the ID or sequence number of the backup, and is the same number shown by the management client in the @@ -940,7 +454,6 @@ .sp .5v .RE .PP -.\" restore_epoch option (ndb_restore) \fB\-\-restore_epoch\fR (short form: \fB\-e\fR) adds (or restores) epoch information to the cluster replication status table\&. This is useful for starting replication on a MySQL Cluster replication slave\&. When this option is used, the row in the @@ -952,7 +465,6 @@ column is updated if it already exists; such a row is inserted if it does not already exist\&. (See Section\ \&18.6.9, \(lqMySQL Cluster Backups With MySQL Cluster Replication\(rq\&.) .PP -.\" restore_data option (ndb_restore) \fB\-\-restore_data\fR .PP This option causes @@ -961,7 +473,6 @@ NDB table data and logs\&. .PP -.\" restore_meta option (ndb_restore) \fB\-\-restore_meta\fR .PP This option causes @@ -970,8 +481,6 @@ NDB table metadata\&. Generally, you need only use this option when restoring the first data node of a cluster; additional data nodes can obtain the metadata from the first one\&. .PP -.\" restore-privilege-tables option (ndb_restore) -.\" ndb_restore: restore-privilege-tables option \fB\-\-restore\-privilege\-tables\fR .PP \fBndb_restore\fR @@ -984,8 +493,6 @@ before the backup was taken\&. For more information, see Section\ \&18.5.14, \(lqDistributed MySQL Privileges for MySQL Cluster\(rq\&. .PP -.\" backup_path option (ndb_restore) -.\" ndb_restore: backup_path option \fB\-\-backup_path\fR .PP The path to the backup directory is required; this is supplied to @@ -1046,8 +553,6 @@ \fBndb_restore\fR process\&. However, the data files must always be applied before the logs\&. .PP -.\" no-upgrade option (ndb_restore) -.\" ndb_restore: no-upgrade option \fB\-\-no\-upgrade\fR .PP When using @@ -1060,8 +565,6 @@ \fB\-u\fR) when running \fBndb_restore\fR\&. .PP -.\" print_data option (ndb_restore) -.\" ndb_restore: print_data option \fB\-\-print_data\fR .PP The @@ -1091,8 +594,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: tab option -.\" tab option (ndb_restore) \fB\-\-tab\fR, \fB\-T\fR .TS @@ -1129,8 +630,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: fields-enclosed-by option -.\" fields-enclosed-by option (ndb_restore) \fB\-\-fields\-enclosed\-by=\fR\fB\fIstring\fR\fR .TS allbox tab(:); @@ -1166,8 +665,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: fields-optionally-enclosed-by option -.\" fields-optionally-enclosed-by option (ndb_restore) \fB\-\-fields\-optionally\-enclosed\-by=\fR\fB\fIstring\fR\fR .TS allbox tab(:); @@ -1208,8 +705,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: fields-terminated-by option -.\" fields-terminated-by option (ndb_restore) \fB\-\-fields\-terminated\-by=\fR\fB\fIstring\fR\fR .TS allbox tab(:); @@ -1246,8 +741,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: hex option -.\" hex option (ndb_restore) \fB\-\-hex\fR .TS allbox tab(:); @@ -1270,8 +763,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: fields-terminated-by option -.\" fields-terminated-by option (ndb_restore) \fB\-\-fields\-terminated\-by=\fR\fB\fIstring\fR\fR .TS allbox tab(:); @@ -1308,8 +799,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_restore: append option -.\" append option (ndb_restore) \fB\-\-append\fR .TS allbox tab(:); @@ -1346,8 +835,6 @@ .sp .5v .RE .PP -.\" ndb_restore: print_meta option -.\" print_meta option (ndb_restore) \fB\-\-print_meta\fR .PP This option causes @@ -1355,8 +842,6 @@ to print all metadata to stdout\&. .PP -.\" ndb_restore: print_log option -.\" print_log option (ndb_restore) \fB\-\-print_log\fR .PP The @@ -1366,8 +851,6 @@ to output its log to stdout\&. .PP -.\" ndb_restore: print option -.\" print option (ndb_restore) \fB\-\-print\fR .PP Causes @@ -1402,8 +885,6 @@ .sp .5v .RE .PP -.\" ndb_restore: dont_ignore_systab_0 option -.\" dont_ignore_systab_0 option (ndb_restore) \fB\-\-dont_ignore_systab_0\fR .PP Normally, when restoring table data and metadata, @@ -1415,24 +896,18 @@ causes the system table to be restored\&. \fIThis option is intended for experimental and development use only, and is not recommended in a production environment\fR\&. .PP -.\" ndb_restore: ndb-nodegroup-map option -.\" ndb-nodegroup-map option (ndb_restore) \fB\-\-ndb\-nodegroup\-map\fR, \fB\-z\fR .PP This option can be used to restore a backup taken from one node group to a different node group\&. Its argument is a list of the form \fIsource_node_group\fR, \fItarget_node_group\fR\&. .PP -.\" ndb_restore: no-binlog option -.\" no-binlog option (ndb_restore) \fB\-\-no\-binlog\fR .PP This option prevents any connected SQL nodes from writing data restored by \fBndb_restore\fR to their binary logs\&. .PP -.\" ndb_restore: no-restore-disk-objects option -.\" no-restore-disk-objects option (ndb_restore) \fB\-\-no\-restore\-disk\-objects\fR, \fB\-d\fR .PP @@ -1441,25 +916,24 @@ from restoring any MySQL Cluster Disk Data objects, such as tablespaces and log file groups; see Section\ \&18.5.12, \(lqMySQL Cluster Disk Data Tables\(rq, for more information about these\&. .PP -.\" ndb_restore: parallelism option -.\" parallelism option (ndb_restore) \fB\-\-parallelism=#\fR, \fB\-p\fR .PP -Determines the maximum number of parallel transactions that +\fBndb_restore\fR +uses single\-row transactions to apply many rows concurrently\&. This parameter determines the number of parallel transactions (concurrent rows) that an instance of \fBndb_restore\fR tries to use\&. By default, this is 128; the minimum is 1, and the maximum is 1024\&. .PP -.\" ndb_restore: progress-frequency option -.\" progress-frequency option (ndb_restore) +The work of performing the inserts is parallelized across the threads in the data nodes involved\&. This mechanism is employed for restoring bulk data from the +\&.Data +file\(emthat is, the fuzzy snapshot of the data; it is not used for building or rebuilding indexes\&. The change log is applied serially; index drops and builds are DDL operations and handled separately\&. There is no thread\-level parallelism on the client side of the restore\&. +.PP \fB\-\-progress\-frequency=\fR\fB\fIN\fR\fR .PP Print a status report each \fIN\fR seconds while the backup is in progress\&. 0 (the default) causes no status reports to be printed\&. The maximum is 65535\&. .PP -.\" ndb_restore: verbose option -.\" verbose option (ndb_restore) \fB\-\-verbose=#\fR .PP Sets the level for the verbosity of the output\&. The minimum is 0; the maximum is 255\&. The default value is 1\&. @@ -1500,8 +974,6 @@ One or more tables from a single database .RE .PP -.\" ndb_restore: include-databases option -.\" include-databases option (ndb_restore) \fB\-\-include\-databases=\fR\fB\fIdb_name\fR\fR\fB[,\fR\fB\fIdb_name\fR\fR\fB][,\&.\&.\&.]\fR .TS allbox tab(:); @@ -1527,8 +999,6 @@ .TE .sp 1 .PP -.\" ndb_restore: include-tables option -.\" include-tables option (ndb_restore) \fB\-\-include\-tables=\fR\fB\fIdb_name\&.tbl_name\fR\fR\fB[,\fR\fB\fIdb_name\&.tbl_name\fR\fR\fB][,\&.\&.\&.]\fR .TS allbox tab(:); @@ -1649,8 +1119,6 @@ .PP (Again we have omitted other, possibly required, options in the example just shown\&.) .PP -.\" ndb_restore: exclude-databases option -.\" exclude-databases option (ndb_restore) \fB\-\-exclude\-databases=\fR\fB\fIdb_name\fR\fR\fB[,\fR\fB\fIdb_name\fR\fR\fB][,\&.\&.\&.]\fR .TS allbox tab(:); @@ -1676,8 +1144,6 @@ .TE .sp 1 .PP -.\" ndb_restore: exclude-tables option -.\" exclude-tables option (ndb_restore) \fB\-\-exclude\-tables=\fR\fB\fIdb_name\&.tbl_name\fR\fR\fB[,\fR\fB\fIdb_name\&.tbl_name\fR\fR\fB][,\&.\&.\&.]\fR .TS allbox tab(:); @@ -1891,8 +1357,6 @@ .RE .\} .PP -.\" ndb_restore: exclude-missing-columns option -.\" exclude-missing-columns option (ndb_restore) \fB\-\-exclude\-missing\-columns\fR .TS allbox tab(:); @@ -1911,8 +1375,6 @@ \fBndb_restore\fR ignores any columns missing from tables being restored as compared to the versions of those tables found in the backup\&. This option applies to all tables being restored\&. If you wish to apply this option only to selected tables or databases, you can use it in combination with one or more of the options described in the previous paragraph to do so, then restore data to the remaining tables using a complementary set of these options\&. .PP -.\" ndb_restore: exclude-missing-tables option -.\" exclude-missing-tables option (ndb_restore) \fB\-\-exclude\-missing\-tables\fR .TS allbox tab(:); @@ -1935,8 +1397,6 @@ \fBndb_restore\fR to ignore any tables from the backup that are not found in the target database\&. .PP -.\" ndb_restore: disable-indexes option -.\" disable-indexes option (ndb_restore) \fB\-\-disable\-indexes\fR .TS allbox tab(:); @@ -1952,8 +1412,6 @@ Disable restoration of indexes during restoration of the data from a native NDB backup\&. Afterwards, you can restore indexes for all tables at once with multi\-threaded building of indexes using \fB\-\-rebuild\-indexes\fR, which should be faster than rebuilding indexes concurrently for very large tables\&. .PP -.\" ndb_restore: rebuild-indexes option -.\" rebuild-indexes option (ndb_restore) \fB\-\-rebuild\-indexes\fR .TS allbox tab(:); @@ -1974,26 +1432,30 @@ \fBndb_restore\fR with this option is controlled by the BuildIndexThreads -data node configuration parameter\&. -.\" indexes: and ndb_restore +data node configuration parameter and the number of LDMs\&. .PP It is necessary to use this option only for the first run of \fBndb_restore\fR; this causes all ordered indexes to be rebuilt without using \fB\-\-rebuild\-indexes\fR again when restoring subsequent nodes\&. You should use this option prior to inserting new rows into the database; otherwise, it is possible for a row to be inserted that later causes a unique constraint violation when trying to rebuild the indexes\&. .PP +Building of ordered indices is parallelized with the number of LDMs by default\&. Offline index builds performed during node and system restarts can be made faster using the +BuildIndexThreads +data node configuration parameter; this parameter has no effect on dropping and rebuilding of indexes by +\fBndb_restore\fR, which is performed online\&. +.PP Rebuilding of unique indexes uses disk write bandwidth for redo logging and local checkpointing\&. An insufficient amount of this bandwith can lead to redo buffer overload or log overload errors\&. In such cases you can run \fBndb_restore\fR \fB\-\-rebuild\-indexes\fR -again; the process resumes at the point where the error occurred\&. You can also do this when you have encountered temporarary errors\&. You can repeat execution of +again; the process resumes at the point where the error occurred\&. You can also do this when you have encountered temporary errors\&. You can repeat execution of \fBndb_restore\fR \fB\-\-rebuild\-indexes\fR indefinitely; you may be able to stop such errors by reducing the value of DiskCheckpointSpeed -to provide additional disk bandwidth to redo logging\&. +to provide additional disk bandwidth to redo logging, or reducing the +\fB\-\-parallelism\fR\&. If the problem is insufficient space, you can increase the size of the redo log (FragmentLogFileSize +node configuration parameter), or you can increase the speed at which LCPs are performed (DiskCheckpointSpeed), in order to free space more quickly\&. .PP -.\" ndb_restore: skip-broken-objects option -.\" skip-broken-objects option (ndb_restore) \fB\-\-skip\-broken\-objects\fR .TS allbox tab(:); @@ -2014,8 +1476,6 @@ \fB\-\-skip\-broken\-objects\fR option works only in the case of missing blob parts tables\&. .PP -.\" ndb_restore: skip-unknown-objects option -.\" skip-unknown-objects option (ndb_restore) \fB\-\-skip\-unknown\-objects\fR .TS allbox tab(:); @@ -2034,8 +1494,6 @@ NDB backup\&. This can be used for restoring a backup made from a cluster running MySQL Cluster NDB 7\&.3 to a cluster running MySQL Cluster NDB 7\&.2\&. .PP -.\" ndb_restore: rewrite-database option -.\" rewrite-database option (ndb_restore) \fB\-\-rewrite\-database=\fR\fB\fIold_dbname\fR\fR\fB,\fR\fB\fInew_dbname\fR\fR .TS allbox tab(:); @@ -2127,8 +1585,6 @@ .sp .5v .RE .PP -.\" ndb_restore: exclude-intermediate-sql-tables option -.\" exclude-intermediate-sql-tables option (ndb_restore) \fB\-\-exclude\-intermediate\-sql\-tables[=TRUE|FALSE]\fR .TS allbox tab(:); @@ -2179,8 +1635,7 @@ \fB\-\-exclude\-intermediate\-sql\-tables\fR option was introduced in MySQL Cluster NDB 7\&.3\&.6\&. (Bug #17882305) .PP -\fBError reporting\fR. .\" ndb_restore: errors -\fBndb_restore\fR +\fBError reporting\fR. \fBndb_restore\fR reports both temporary and permanent errors\&. In the case of temporary errors, it may able to recover from them, and reports Restore successful, but encountered temporary error, please look at configuration in such cases\&. @@ -2208,7 +1663,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_select_all.1 mysql-5.6-5.6.33/man/ndb_select_all.1 --- mysql-5.6-5.6.27/man/ndb_select_all.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_select_all.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_select_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_SELECT_ALL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_SELECT_ALL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_select_all .SH "NAME" ndb_select_all \- print rows from an NDB table .SH "SYNOPSIS" @@ -61,177 +60,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.93.\ \& This table describes command-line options for the ndb_select_all program +.B Table\ \&18.94.\ \& This table describes command\-line options for the ndb_select_all program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---parallelism=#, -.PP --p -T}:T{ -Degree of parallelism -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---lock=#, -.PP --l -T}:T{ -Lock type -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---order=index, -.PP --o -T}:T{ -Sort resultset according to index whose name is supplied -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---descending, -.PP --z -T}:T{ -Sort resultset in descending order (requires order flag) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---header, -.PP --h -T}:T{ -Print header (set to 0|FALSE to disable headers in output) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---useHexFormat, -.PP --x -T}:T{ -Output numbers in hexadecimal format -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---delimiter=char, -.PP --D -T}:T{ -Set a column delimiter -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---disk -T}:T{ -Print disk references (useful only for Disk Data tables having - nonindexed columns) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---rowid -T}:T{ -Print rowid -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---gci -T}:T{ -Include GCI in output -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---gci64 -T}:T{ -Include GCI and row epoch in output -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---tup, -.PP --t -T}:T{ -Scan in tup order -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nodata -T}:T{ -Do not print table column data -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -243,7 +75,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: database option \fB\-\-database=\fR\fB\fIdbname\fR\fR, \fB\-d\fR \fIdbname\fR @@ -260,7 +91,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: parallelism option \fBparallelism=\fR\fB\fI#\fR\fR, \fB\-p\fR \fI#\fR @@ -276,8 +106,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: lock option -.\" lock option: ndb_select_all \fB\-\-lock=\fR\fB\fIlock_type\fR\fR, \fB\-l \fR\fB\fIlock_type\fR\fR .sp @@ -329,8 +157,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: order option -.\" order option: ndb_select_all \fB\-\-order=\fR\fB\fIindex_name\fR\fR, \fB\-o \fR\fB\fIindex_name\fR\fR .sp @@ -361,8 +187,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: descending option -.\" descending option: ndb_select_all \fB\-\-descending\fR, \fB\-z\fR .sp @@ -379,8 +203,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: header option -.\" header option: ndb_select_all \fB\-\-header=FALSE\fR .sp Excludes column headers from the output\&. @@ -394,8 +216,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: useHexFormat option -.\" useHexFormat option: ndb_select_all \fB\-\-useHexFormat\fR \fB\-x\fR .sp @@ -410,8 +230,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: delimiter option -.\" delimiter option: ndb_select_all \fB\-\-delimiter=\fR\fB\fIcharacter\fR\fR, \fB\-D \fR\fB\fIcharacter\fR\fR .sp @@ -430,8 +248,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: disk option -.\" disk option: ndb_select_all \fB\-\-disk\fR .sp Adds a disk reference column to the output\&. The column is nonempty only for Disk Data tables having nonindexed columns\&. @@ -445,8 +261,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: rowid option -.\" rowid option: ndb_select_all \fB\-\-rowid\fR .sp Adds a @@ -462,8 +276,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: gci option -.\" gci option: ndb_select_all \fB\-\-gci\fR .sp Adds a @@ -481,8 +293,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: gci64 option -.\" gci64 option: ndb_select_all \fB\-\-gci64\fR .sp Adds a @@ -498,8 +308,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: tupscan option -.\" tupscan option: ndb_select_all \fB\-\-tupscan\fR, \fB\-t\fR .sp @@ -514,8 +322,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_select_all: nodata option -.\" nodata option: ndb_select_all \fB\-\-nodata\fR .sp Causes any table data to be omitted\&. @@ -617,7 +423,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_select_count.1 mysql-5.6-5.6.33/man/ndb_select_count.1 --- mysql-5.6-5.6.27/man/ndb_select_count.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_select_count.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_select_count\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_SELECT_COUNT\" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_SELECT_COUNT\" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_select_count .SH "NAME" ndb_select_count \- print row counts for NDB tables .SH "SYNOPSIS" @@ -61,54 +60,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.94.\ \& This table describes command-line options for the ndb_select_count program +.B Table\ \&18.95.\ \& This table describes command\-line options for the ndb_select_count program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l. -T{ -.PP ---database=dbname, -.PP --d -T}:T{ -Name of the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---parallelism=#, -.PP --p -T}:T{ -Degree of parallelism -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---lock=#, -.PP --l -T}:T{ -Lock type -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .PP @@ -131,7 +86,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_setup.py.1 mysql-5.6-5.6.33/man/ndb_setup.py.1 --- mysql-5.6-5.6.27/man/ndb_setup.py.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_setup.py.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_setup.py\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_SETUP\&.PY\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_SETUP\&.PY\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,14 +27,12 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_setup.py .SH "NAME" ndb_setup.py \- Start browser\-based Auti\-Installer for MySQL Cluster .SH "SYNOPSIS" .HP \w'\fBndb_setup\&.py\ [\fR\fB\fIoptions\fR\fR\fB]\fR\ 'u \fBndb_setup\&.py [\fR\fB\fIoptions\fR\fR\fB]\fR .SH "DESCRIPTION" -.\" MySQL Cluster Auto-Installer: setup program .PP \fBndb_setup\&.py\fR starts the MySQL Cluster Auto\-Installer and opens the installer\*(Aqs Start page in the default Web browser\&. @@ -55,9 +53,6 @@ .if n \{\ .RE .\} -.sp -.\" setup.bat: MySQL Cluster (Windows) -.\" MySQL Cluster Auto-Installer: setup program (Windows) .PP Additionally, on Windows platforms only: .sp @@ -78,153 +73,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.95.\ \& This table describes command-line options for the ndb_setup.py program +.B Table\ \&18.96.\ \& This table describes command\-line options for the ndb_setup\&.py program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---browser-start-page=filename, -.PP --s -T}:T{ -Page that the web browser opens when starting. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---ca-certs-file=filename, -.PP --a -T}:T{ -File containing list of client certificates allowed to connect to the - server -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---cert-file=filename, -.PP --c -T}:T{ -File containing X509 certificate that identifies the server. (Default: - cfg.pem) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---debug-level=level, -.PP --d -T}:T{ -Python logging module debug level. One of DEBUG, INFO, WARNING - (default), ERROR, or CRITICAL. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---help, -.PP --h -T}:T{ -Print help message -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---key-file=file, -.PP --k -T}:T{ -Specify file containing private key (if not included in --cert-file) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---no-browser, -.PP --n -T}:T{ -Do not open the start page in a browser, merely start the tool -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---port=#, -.PP --p -T}:T{ -Specify the port used by the web server -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---server-log-file=file, -.PP -o -T}:T{ -Log requests to this file. Use '-' to force logging to stderr instead. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---server-name=name, -.PP --N -T}:T{ -The name of the server to connect with -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---use-https, -.PP --S -T}:T{ -Use secure (HTTPS) client-server connection -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 .sp @@ -236,8 +88,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: browser-start-page option -.\" browser-start-page option: ndb_setup.py \fB\-\-browser\-start\-page=\fR\fB\fIfile\fR\fR, \fB\-s\fR .TS @@ -276,8 +126,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: ca-certs-file option -.\" ca-certs-file option: ndb_setup.py \fB\-\-ca\-certs\-file=\fR\fB\fIfile\fR\fR, \fB\-a\fR .TS @@ -315,8 +163,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: cert-file option -.\" cert-file option: ndb_setup.py \fB\-\-cert\-file=\fR\fB\fIfile\fR\fR, \fB\-c\fR .TS @@ -355,8 +201,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: debug-level option -.\" debug-level option: ndb_setup.py \fB\-\-debug\-level=\fR\fB\fIlevel\fR\fR, \fB\-d\fR .TS @@ -367,6 +211,7 @@ ^ lt l s ^ ^ l s ^ ^ l s +^ ^ l s ^ ^ l s. T{ \fBCommand\-Line Format\fR @@ -388,6 +233,9 @@ :T{ \fBValid Values\fR T}:T{ +WARNING +T} +::T{ DEBUG T} ::T{ @@ -419,8 +267,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: help option -.\" help option: ndb_setup.py \fB\-\-help\fR, \fB\-h\fR .TS @@ -444,8 +290,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: key-file option -.\" key-file option: ndb_setup.py \fB\-\-key\-file=\fR\fB\fIfile\fR\fR, \fB\-d\fR .TS @@ -483,8 +327,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: no-browser option -.\" no-browser option: ndb_setup.py \fB\-\-no\-browser\fR, \fB\-n\fR .TS @@ -508,8 +350,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: port option -.\" port option: ndb_setup.py \fB\-\-port=\fR\fB\fI#\fR\fR, \fB\-p\fR .TS @@ -559,8 +399,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: server-log-file option -.\" server-log-file option: ndb_setup.py \fB\-\-server\-log\-file=\fR\fB\fIfile\fR\fR, \fB\-o\fR .TS @@ -569,7 +407,8 @@ l l s s l l l s ^ l l s -^ lt l s. +^ lt l s +^ ^ l s. T{ \fBCommand\-Line Format\fR T}:T{ @@ -595,6 +434,9 @@ :T{ \fBValid Values\fR T}:T{ +ndb_setup\&.log +T} +::T{ \- (Log to stderr) T} .TE @@ -614,8 +456,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: server-name option -.\" server-name option: ndb_setup.py \fB\-\-server\-name=\fR\fB\fIhost\fR\fR, \fB\-N\fR .TS @@ -654,8 +494,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_setup.py: use-https option -.\" use-https option: ndb_setup.py \fB\-\-use\-https\fR, \fB\-S\fR .TS @@ -673,7 +511,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_show_tables.1 mysql-5.6-5.6.33/man/ndb_show_tables.1 --- mysql-5.6-5.6.27/man/ndb_show_tables.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_show_tables.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_show_tables\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_SHOW_TABLES\F" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_SHOW_TABLES\F" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_show_tables .SH "NAME" ndb_show_tables \- display list of NDB tables .SH "SYNOPSIS" @@ -52,88 +51,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.96.\ \& This table describes command-line options for the ndb_show_tables program +.B Table\ \&18.97.\ \& This table describes command\-line options for the ndb_show_tables program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---database=string, -.PP --d -T}:T{ -Specifies the database in which the table is found -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---loops=#, -.PP --l -T}:T{ -Number of times to repeat output -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---type=#, -.PP --t -T}:T{ -Limit output to objects of this type -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---unqualified, -.PP --u -T}:T{ -Do not qualify table names -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---parsable, -.PP --p -T}:T{ -Return output suitable for MySQL LOAD DATA INFILE statement -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---show-temp-status -T}:T{ -Show table temporary flag -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 Usage @@ -156,8 +77,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: database option -.\" database option: ndb_show_tables \fB\-\-database\fR, \fB\-d\fR .sp @@ -176,8 +95,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: loops option -.\" loops option: ndb_show_tables \fB\-\-loops\fR, \fB\-l\fR .sp @@ -192,8 +109,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: parsable option -.\" parsable option: ndb_show_tables \fB\-\-parsable\fR, \fB\-p\fR .sp @@ -209,8 +124,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: show-temp-status option -.\" show-temp-status option: ndb_show_tables \fB\-\-show\-temp\-status\fR .sp If specified, this causes temporary tables to be displayed\&. @@ -224,8 +137,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: type option -.\" type option: ndb_show_tables \fB\-\-type\fR, \fB\-t\fR .sp @@ -277,8 +188,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_show_tables: unqualified option -.\" unqualified option: ndb_show_tables \fB\-\-unqualified\fR, \fB\-u\fR .sp @@ -311,7 +220,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_size.pl.1 mysql-5.6-5.6.33/man/ndb_size.pl.1 --- mysql-5.6-5.6.27/man/ndb_size.pl.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_size.pl.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_size.pl\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_SIZE\&.PL\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_SIZE\&.PL\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_size.pl .SH "NAME" ndb_size.pl \- NDBCLUSTER Size Requirement Estimator .SH "SYNOPSIS" @@ -102,130 +101,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.97.\ \& This table describes command-line options for the ndb_size.pl program +.B Table\ \&18.98.\ \& This table describes command\-line options for the ndb_size\&.pl program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---database=dbname -T}:T{ -The database or databases to examine; accepts a comma-delimited list; - the default is ALL (use all databases found on the server) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---hostname[:port] -T}:T{ -Specify host and optional port as host[:port] -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---socket=file_name -T}:T{ -Specify a socket to connect to -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---user=string -T}:T{ -Specify a MySQL user name -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---password=string -T}:T{ -Specify a MySQL user password -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---format=string -T}:T{ -Set output format (text or HTML) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---excludetables=tbl_list -T}:T{ -Skip any tables in a comma-separated list of tables -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---excludedbs=db_list -T}:T{ -Skip any databases in a comma-separated list of databases -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---savequeries=file -T}:T{ -Saves all queries to the database into the file specified -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---loadqueries=file -T}:T{ -Loads all queries from the file specified; does not connect to a - database -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---real_table_name=table -T}:T{ -Designates a table to handle unique index size calculations -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 Usage @@ -234,9 +113,9 @@ .RS 4 .\} .nf -perl ndb_size\&.pl [\-\-database={\fIdb_name\fR|ALL}] [\-\-hostname=\fIhost\fR[:\fIport\fR]] [\-\-socket=\fIsocket\fR] \e - [\-\-user=\fIuser\fR] [\-\-password=\fIpassword\fR] \e - [\-\-help|\-h] [\-\-format={html|text}] \e +perl ndb_size\&.pl [\-\-database={\fIdb_name\fR|ALL}] [\-\-hostname=\fIhost\fR[:\fIport\fR]] [\-\-socket=\fIsocket\fR] \e + [\-\-user=\fIuser\fR] [\-\-password=\fIpassword\fR] \e + [\-\-help|\-h] [\-\-format={html|text}] \e [\-\-loadqueries=\fIfile_name\fR] [\-\-savequeries=\fIfile_name\fR] .fi .if n \{\ @@ -299,7 +178,7 @@ 4\&.1 5\&.0 5\&.1 Fixed Overhead DM/Row 12 12 16 NULL Bytes/Row 4 4 4 - DataMemory/Row 96 96 48 + DataMemory/Row 96 96 48 (Includes overhead, bitmap and indexes) Varsize Overhead DM/Row 0 0 8 Varsize NULL Bytes/Row 0 0 4 @@ -397,7 +276,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/ndb_waiter.1 mysql-5.6-5.6.33/man/ndb_waiter.1 --- mysql-5.6-5.6.27/man/ndb_waiter.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/ndb_waiter.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBndb_waiter\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBNDB_WAITER\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBNDB_WAITER\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" ndb_waiter .SH "NAME" ndb_waiter \- wait for MySQL Cluster to reach a given status .SH "SYNOPSIS" @@ -142,85 +141,10 @@ .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&18.98.\ \& This table describes command-line options for the ndb_waiter program +.B Table\ \&18.99.\ \& This table describes command\-line options for the ndb_waiter program .TS allbox tab(:); -lB lB lB. -T{ -Format -T}:T{ -Description -T}:T{ -Added or Removed -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -.PP ---no-contact, -.PP --n -T}:T{ -Wait for cluster to reach NO CONTACT state -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---not-started -T}:T{ -Wait for cluster to reach NOT STARTED state -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---single-user -T}:T{ -Wait for cluster to enter single user mode -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---timeout=#, -.PP --t -T}:T{ -Wait this many seconds, then exit whether or not cluster has reached - desired state; default is 2 minutes (120 seconds) -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---nowait-nodes=list -T}:T{ -List of nodes not to be waited for. -T}:T{ -.PP -All MySQL 5.6 based releases -T} -T{ -.PP ---wait-nodes=list, -.PP --w -T}:T{ -List of nodes to be waited for. -T}:T{ -.PP -All MySQL 5.6 based releases -T} +. .TE .sp 1 Usage @@ -244,8 +168,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: no-contact option -.\" no-contact option: ndb_waiter \fB\-\-no\-contact\fR, \fB\-n\fR .sp @@ -266,8 +188,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: not-started option -.\" not-started option: ndb_waiter \fB\-\-not\-started\fR .sp Instead of waiting for the @@ -287,8 +207,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: timeout option -.\" timeout option: ndb_waiter \fB\-\-timeout=\fR\fB\fIseconds\fR\fR, \fB\-t \fR\fB\fIseconds\fR\fR .sp @@ -303,8 +221,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: single-user option -.\" single-user option: ndb_waiter \fB\-\-single\-user\fR .sp The program waits for the cluster to enter single user mode\&. @@ -318,8 +234,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: nowait-nodes option -.\" nowait-nodes option: ndb_waiter \fB\-\-nowait\-nodes=\fR\fB\fIlist\fR\fR .sp When this option is used, ndb_waiter does not wait for the nodes whose IDs are listed\&. The list is comma\-delimited; ranges can be indicated by dashes, as shown here: @@ -362,8 +276,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" ndb_waiter: wait-nodes option -.\" wait-nodes option: ndb_waiter \fB\-\-wait\-nodes=\fR\fB\fIlist\fR\fR, \fB\-w \fR\fB\fIlist\fR\fR .sp @@ -481,7 +393,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/perror.1 mysql-5.6-5.6.33/man/perror.1 --- mysql-5.6-5.6.27/man/perror.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/perror.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBperror\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBPERROR\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBPERROR\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,10 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" perror -.\" error messages: displaying -.\" errno -.\" Errcode .SH "NAME" perror \- explain error codes .SH "SYNOPSIS" @@ -115,8 +111,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" perror: help option -.\" help option: perror \fB\-\-help\fR, \fB\-\-info\fR, \fB\-I\fR, @@ -133,8 +127,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" perror: ndb option -.\" ndb option: perror \fB\-\-ndb\fR .sp Print the error message for a MySQL Cluster error code\&. @@ -148,8 +140,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" perror: silent option -.\" silent option: perror \fB\-\-silent\fR, \fB\-s\fR .sp @@ -164,8 +154,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" perror: verbose option -.\" verbose option: perror \fB\-\-verbose\fR, \fB\-v\fR .sp @@ -180,8 +168,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" perror: version option -.\" version option: perror \fB\-\-version\fR, \fB\-V\fR .sp @@ -190,7 +176,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/replace.1 mysql-5.6-5.6.33/man/replace.1 --- mysql-5.6-5.6.27/man/replace.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/replace.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBreplace\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBREPLACE\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBREPLACE\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,8 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" replace utility -.\" string replacement: replace utility .SH "NAME" replace \- a string\-replacement utility .SH "SYNOPSIS" @@ -169,7 +167,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/resolveip.1 mysql-5.6-5.6.33/man/resolveip.1 --- mysql-5.6-5.6.27/man/resolveip.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/resolveip.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBresolveip\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBRESOLVEIP\FR" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBRESOLVEIP\FR" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" resolveip .SH "NAME" resolveip \- resolve host name to IP address or vice versa .SH "SYNOPSIS" @@ -64,8 +63,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolveip: help option -.\" help option: resolveip \fB\-\-help\fR, \fB\-\-info\fR, \fB\-?\fR, @@ -82,8 +79,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolveip: silent option -.\" silent option: resolveip \fB\-\-silent\fR, \fB\-s\fR .sp @@ -98,8 +93,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolveip: version option -.\" version option: resolveip \fB\-\-version\fR, \fB\-V\fR .sp @@ -108,7 +101,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/man/resolve_stack_dump.1 mysql-5.6-5.6.33/man/resolve_stack_dump.1 --- mysql-5.6-5.6.27/man/resolve_stack_dump.1 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/man/resolve_stack_dump.1 2016-08-26 11:32:53.000000000 +0000 @@ -1,13 +1,13 @@ '\" t .\" Title: \fBresolve_stack_dump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 09/18/2015 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 08/25/2016 .\" Manual: MySQL Database System .\" Source: MySQL 5.6 .\" Language: English .\" -.TH "\FBRESOLVE_STACK_DUM" "1" "09/18/2015" "MySQL 5\&.6" "MySQL Database System" +.TH "\FBRESOLVE_STACK_DUM" "1" "08/25/2016" "MySQL 5\&.6" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -27,7 +27,6 @@ .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.\" resolve_stack_dump .SH "NAME" resolve_stack_dump \- resolve numeric stack trace dump to symbols .SH "SYNOPSIS" @@ -68,8 +67,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolve_stack_dump: help option -.\" help option: resolve_stack_dump \fB\-\-help\fR, \fB\-h\fR .sp @@ -84,8 +81,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolve_stack_dump: numeric-dump-file option -.\" numeric-dump-file option: resolve_stack_dump \fB\-\-numeric\-dump\-file=\fR\fB\fIfile_name\fR\fR, \fB\-n \fR\fB\fIfile_name\fR\fR .sp @@ -100,8 +95,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolve_stack_dump: symbols-file option -.\" symbols-file option: resolve_stack_dump \fB\-\-symbols\-file=\fR\fB\fIfile_name\fR\fR, \fB\-s \fR\fB\fIfile_name\fR\fR .sp @@ -116,8 +109,6 @@ .sp -1 .IP \(bu 2.3 .\} -.\" resolve_stack_dump: version option -.\" version option: resolve_stack_dump \fB\-\-version\fR, \fB\-V\fR .sp @@ -129,7 +120,7 @@ .SH "COPYRIGHT" .br .PP -Copyright \(co 1997, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright \(co 1997, 2016, Oracle and/or its affiliates. All rights reserved. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP diff -Nru mysql-5.6-5.6.27/mysql-test/collections/default.release.done mysql-5.6-5.6.33/mysql-test/collections/default.release.done --- mysql-5.6-5.6.27/mysql-test/collections/default.release.done 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/collections/default.release.done 2016-08-26 11:32:11.000000000 +0000 @@ -1 +1 @@ -/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/mysql-test/collections/default.release.in +/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/mysql-test/collections/default.release.in diff -Nru mysql-5.6-5.6.27/mysql-test/collections/README mysql-5.6-5.6.33/mysql-test/collections/README --- mysql-5.6-5.6.27/mysql-test/collections/README 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/collections/README 2016-08-26 11:22:35.000000000 +0000 @@ -1,11 +1,11 @@ This directory contains collections of test runs that we run during our integration and release testing. These files are not directly useful outside this context, but need to be part of the source repository -and are included for reference.Each file contains zero or more lines, +and are included for reference. Each file contains zero or more lines, with one invocation of mysql-test-run.pl on each. These invocations are written so that, with the assumption that perl is in your search path, -any collection can run as a shell script or a batch file, with the parent -mysql-test directory being the current working directory. +any collection can in principle run as a shell script or a batch file, +with the parent mysql-test directory being the current working directory. During integration testing, we choose the collection to run by following these steps: @@ -19,6 +19,9 @@ testing plus the extension as determined in step 1, we choose that collection. +2b) If we are running a valgrind test and there is a collection with + the chosen name and the suffix "-valgrind" we choose that instead. + 3) If the branch is unknown or we have removed all characters from it and still not found a matching collection, we choose the name "default" plus the extension determined in step 1. If there is no such file, @@ -38,3 +41,29 @@ the include lines are replaced with the contents of the referred file. Filename is local to the collections directory, and includes do not nest. + +Notes on some of the mysql-test-run.pl arguments and how they work in +our continous intergation test framework. These are mostly for those +writing or editing such files as they are specific to that setup. + +1) The --comment argument produces a header which is parsed by the log + analyzer to produce an entry for the result summary, seen as the + name of the test batch. The names should be unique. Also, avoid too + long names as it may clutter the presentation. + +2) Do not use --mem, use --vardir instead. Before the test is run, a + host specific ramdisk path is prepended to the vardir argument to + ensure that tests always run on ramdisk. This also works on Windows + or Mac OSX where --mem is not supported. + +3) The name of the --vardir directory must start with 'var' in order for + the test results to be correctly included in the result + tarballs. They should also be unique across the collection file to + avoid clashes. If --vardir is not specified, the --comment name will + be used with a prefix "var-". + +4) Any --parallel setting will be overridden by a host specific + setting (which may be modified by branch; e.g. some hosts may need a + lower setting for cluster). Most hosts use 8. It does not hurt to + add --parallel=auto but this will only have effect should we have + forgotten to set a parallel setting for a host. diff -Nru mysql-5.6-5.6.27/mysql-test/extra/binlog_tests/binlog_mysqlbinlog_row.inc mysql-5.6-5.6.33/mysql-test/extra/binlog_tests/binlog_mysqlbinlog_row.inc --- mysql-5.6-5.6.27/mysql-test/extra/binlog_tests/binlog_mysqlbinlog_row.inc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/binlog_tests/binlog_mysqlbinlog_row.inc 2016-08-26 11:22:35.000000000 +0000 @@ -476,6 +476,38 @@ UPDATE t1, t2 SET t1.a=10, t2.a=20; DROP TABLE t1,t2; + +# +# Bug#20836250 MYSQLBINLOG --VERBOSE FOR BINARY DATATYPE NOT SKIPPING ' +# (QUOTE) & \(BACKSLASH) +# +# Binary and Varbinary types in mysqlbinlog --verbose are displayed +# as string types. Single quote(0x27) and back slash (0x5c) +# should not be converted to it's string equalents (' and \ ) as +# it confuses users with bad binary data output. +# +CREATE TABLE t1(a BINARY(16), b VARBINARY(32)); +INSERT INTO t1 VALUES (0x275c275c3132,0x5c78276566); +UPDATE t1 SET a= 0x5c27; +DELETE FROM t1 where b=0x5c78276566; +DROP TABLE t1; + +# Since binlog content does not differntiate between binary and +# non-binary data types, even the data in string data types also +# will be affected by this patch. Now 'a''b' will now be seen +# in mysqlbinlog -v -v as 'a\x27b' instead 'a'b' and 'a\x5cb' +# instead of 'a\b'. + +CREATE TABLE t1(i INT, a CHAR(16), b VARCHAR(32)); +INSERT INTO t1 VALUES(1, 'a''b', 'a''b'); +INSERT INTO t1 VALUES(2, 'a\\b', 'a\\b'); +UPDATE t1 SET a='a\\b', b='a\\b' WHERE i=1; +UPDATE t1 SET a='a''b', b='a''b' WHERE i=2; +DELETE FROM t1 WHERE a='a''b' AND b='a''b'; +DELETE FROM t1 WHERE a='a\\b' AND b='a\\b'; +DROP TABLE t1; +# End of Testing for Bug#20836250 + flush logs; let $MYSQLD_DATADIR= `select @@datadir`; diff -Nru mysql-5.6-5.6.27/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test mysql-5.6-5.6.33/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test --- mysql-5.6-5.6.27/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test 2016-08-26 11:22:35.000000000 +0000 @@ -346,7 +346,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output")) - is not null; + is not null AS Loaded; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR eval select @a like "%#%error_code=0%ROLLBACK\\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR diff -Nru mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_generate_mts_gap.test mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_generate_mts_gap.test --- mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_generate_mts_gap.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_generate_mts_gap.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,47 @@ +# Following test first creates two databases (d1 and d2) and setup slave to use +# two parallel workers. The test case then insert on the slave a tuple that will +# block writes on d2 and generate gaps. + +--let $slave_stop_wait=5 + +--echo #### I. Initialize #### + +--source include/rpl_connection_slave.inc +--source include/stop_slave.inc +SET @save.innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout; +--eval set @@global.innodb_lock_wait_timeout=$slave_stop_wait + 1000 + +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +CREATE TABLE d2.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; + +--echo #### II. Prepare test scenario #### + +--source include/sync_slave_sql_with_master.inc +BEGIN; +INSERT INTO d2.t VALUES (2, 'Slave local'); # Hold T3 +INSERT INTO d1.t VALUES (3, 'Slave local'); # Hold T6 + +--source include/rpl_connection_master.inc +INSERT INTO d1.t VALUES (1, 'T1'); +INSERT INTO d2.t VALUES (1, 'T2'); +INSERT INTO d2.t VALUES (2, 'T3'); # This will be a gap when executed on slave +INSERT INTO d2.t VALUES (3, 'T4'); # This will be a gap when executed on slave +INSERT INTO d1.t VALUES (2, 'T5'); + +--source include/rpl_connection_slave1.inc +--let $table=d1.t +--let $count=2 +--source include/wait_until_rows_count.inc + +--echo # Now d1.t has two rows and d2.t has one row. + +# Wait for coordinator to populate worker's queues. +--let $show_statement= SHOW PROCESSLIST +--let $field= State +--let $condition= = 'Slave has read all relay log; waiting for the slave I/O thread to update it' +--source include/wait_show_condition.inc diff -Nru mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc --- mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,120 @@ +# CREATE FUNCTION USING func_or_trig_body PROVIDED BY MAIN TEST SCRIPT +--let $header=CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +--let $begin=BEGIN +--let $return=RETURN 0; +--let $end=END +--let $cmd=`select CONCAT("$header", "\n","$begin","\n", "$func_or_trig_body","\n", "$return", "\n","$end")` +--eval $cmd + +# USE THAT FUNCTION IN SELECT QUERY +--error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION +SELECT func1(); + +# USE THAT FUNCTION IN SELECT QUERY IN MULTI TRANSACTION STATEMENT +START TRANSACTION; +--error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION +SELECT func1(); +COMMIT; + +# iter 1 : INSERT/UPDATE/DELETE QUERY ON transaction table USING THAT FUNCTION +# iter 2 : INSERT/UPDATE/DELETE QUERY ON non transaction table USING THAT FUNCTION +--let $iter=1 +while ($iter <=2) +{ + if ($iter == 1) + { + --let $table=trans_table2 + } + if ($iter == 2) + { + --let $table=non_trans_table2 + } + --let $insert_cmd= INSERT INTO $table VALUES (func1()) + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $insert_cmd + + --let $update_cmd= UPDATE $table SET i=func1() + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $update_cmd + + --let $delete_cmd= DELETE FROM $table WHERE i=func1() + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $delete_cmd + + --inc $iter +} + +# DELETE THAT FUNCTION +DROP FUNCTION func1; + +# CREATE A TRIGGER USING func_or_trig_body PROVIDED BY MAIN TEST SCRIPT +# iter1: BEFORE INSERT ON transaction table +# iter2: AFTER INSERT ON transaction table +# iter3: BEFORE UPDATE ON transaction table +# iter4: AFTER UPDATE ON transaction table +# iter5: BEFORE DELETE ON transaction table +# iter6: AFTER DELETE ON transaction table +# iter7: BEFORE INSERT ON non transaction table +# iter8: AFTER INSERT ON non transaction table +# iter9: BEFORE UPDATE ON non transaction table +# iter10: AFTER UPDATE ON non transaction table +# iter11: BEFORE DELETE ON non transaction table +# iter12: AFTER DELETE ON non transaction table + +# And all 12 iterations should throw an error +--let $iter=1 +while ($iter <= 12) +{ + --let $header=CREATE TRIGGER trigger1 + --let $for_each_row= FOR EACH ROW + --let $begin=BEGIN + --let $end=END + + --let $table=trans_table2 + if ($iter >= 7) + { + --let $table=non_trans_table2 + } + + --let $before_or_after=BEFORE + if (`SELECT $iter IN (2, 4, 6, 8, 10, 12)`) + { + --let $before_or_after=AFTER + } + + --let $insert_or_update_or_delete=INSERT + if (`SELECT $iter IN (3, 4, 9, 10)`) + { + --let $insert_or_update_or_delete=UPDATE + } + if (`SELECT $iter IN (5, 6, 11, 12)`) + { + --let $insert_or_update_or_delete=DELETE + } + + --let $cmd=`select CONCAT("$header", "\n", "$before_or_after", " ", "$insert_or_update_or_delete", " ON ", "$table", " ", "$for_each_row", "\n", "$begin","\n", "$func_or_trig_body","\n", "$end")` + --eval $cmd + + if (`SELECT $iter IN (1, 2, 7, 8)`) + { + --let $insert_cmd= INSERT INTO $table VALUES (10) + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $insert_cmd + } + + if (`SELECT $iter IN (3, 4, 9, 10)`) + { + --let $update_cmd= UPDATE $table SET i=12 + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $update_cmd + } + + if (`SELECT $iter IN (5, 6, 11, 12)`) + { + --let $delete_cmd= DELETE FROM $table + --error ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE + --eval $delete_cmd + } + DROP TRIGGER trigger1; + --inc $iter +} diff -Nru mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_mts_relay_log_recovery.test mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_mts_relay_log_recovery.test --- mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_mts_relay_log_recovery.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_mts_relay_log_recovery.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,95 @@ +############################################################################### +# Bug#21507981: REPLICATION POSITION LOST AFTER CRASH ON MTS CONFIGURED SLAVE +# +# Problem: +# ======== +# Enable MTS along with crash-safe replication tables. Make sure that the server +# is busily inserting data with multiple threads in parallel. Shutdown mysqld +# uncleanly (kill -9 or power off server without notice). +# +# Now users are restarting the server with --relay-log-recovery=1 to recover the +# crashed slave. +# +# This results in following error: +# ================================ +# 2015-06-24 13:49:03 3895 [ERROR] --relay-log-recovery cannot +# be executed when the slave was stopped with an error or +# killed in MTS mode; consider using RESET SLAVE or restart +# the server with --relay-log-recovery = 0 followed by +# START SLAVE UNTIL SQL_AFTER_MTS_GAPS. +# +# i.e relay-log-recovery will not work in MTS mode. +############################################################################### +# Following test demonstrates that when gaps are generated due to MTS crash +# but not due to an error then recovery should be successful with +# --relay-log-recovery=1 option. +# +# ==== Usage ==== +# --let $skip_slave_start_var= BOOL [ TRUE / FALSE ] +# --source extra/rpl_tests/rpl_mts_relay_log_recovery.test +# +# Parameters: +# +# $skip_slave_start_var +# Boolean that specifies if 'skip_slave_start' server parameter should be +# TRUE or FALSE. +# +# Testing Method: +# =============== +# It first creates two databases (d1 and d2) and setup slave to use two parallel +# workers. The test case then insert on the slave a tuple that will block +# writes on d2 and generate gaps. Crash the slave server at this point and +# bring it back with --relay-log-recovery=1 and crash safe tables. Recovery +# should be successful. + +--source extra/rpl_tests/rpl_generate_mts_gap.test + +--source include/rpl_connection_slave.inc +CALL mtr.add_suppression("Recovery from master pos"); +# Kill the slave server +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect +let PID_FILE= `SELECT @@pid_file`; +perl; +use strict; +my $file= $ENV{'PID_FILE'} or die "Pid file not set"; +open(FILE, "$file") or die("Unable to open $file: $!\n"); +my $pid=0; +while () { + $pid = $_; +} +close(FILE); +kill 9, $pid; +EOF + +# Restart the slave server +--let $rpl_server_number= 2 +--let $rpl_server_parameters= --skip_slave_start=$skip_slave_start_var --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1 +--source include/rpl_start_server.inc + +--exec echo "After restart gaps should be filled." + +--let $assert_text= Table d1.t should contain 2 rows. +--let $assert_cond= [select count(*) from d1.t] = 2 +--source include/assert.inc + +--let $assert_text= Table d2.t should contain 3 rows. +--let $assert_cond= [select count(*) from d2.t] = 3 +--source include/assert.inc + +--source include/start_slave.inc + +# Check consistency +--source include/rpl_connection_master.inc +--source include/sync_slave_sql_with_master.inc +--let $diff_tables= master:d1.t, slave:d1.t +--source include/diff_tables.inc + +--let $diff_tables= master:d2.t, slave:d2.t +--source include/diff_tables.inc + +# +# Cleanup +# +--source include/rpl_connection_master.inc +DROP DATABASE d1; +DROP DATABASE d2; diff -Nru mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_stress_test.inc mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_stress_test.inc --- mysql-5.6-5.6.27/mysql-test/extra/rpl_tests/rpl_stress_test.inc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/extra/rpl_tests/rpl_stress_test.inc 2016-08-26 11:22:35.000000000 +0000 @@ -27,12 +27,15 @@ --connect(con$i,127.0.0.1,root,,test,$MASTER_MYPORT,) --inc $i } ---let $i= 1 -while ($i < $connections) +if ($error_simulation) { - --connection con$i - set session debug="+d,simulate_binlog_flush_error"; - --inc $i + --let $i= 1 + while ($i < $connections) + { + --connection con$i + set session debug="+d,simulate_binlog_flush_error"; + --inc $i + } } --enable_result_log --enable_query_log @@ -63,13 +66,15 @@ } --inc $j } - ---let $i= 1 -while ($i < $connections) +if ($error_simulation) { - --connection con$i - set session debug="-d,simulate_binlog_flush_error"; - --inc $i + --let $i= 1 + while ($i < $connections) + { + --connection con$i + set session debug="-d,simulate_binlog_flush_error"; + --inc $i + } } --enable_result_log --enable_query_log diff -Nru mysql-5.6-5.6.27/mysql-test/include/explain_utils.inc mysql-5.6-5.6.33/mysql-test/include/explain_utils.inc --- mysql-5.6-5.6.27/mysql-test/include/explain_utils.inc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/include/explain_utils.inc 2016-08-26 11:22:35.000000000 +0000 @@ -72,15 +72,11 @@ } } --eval EXPLAIN FORMAT=JSON $query; -if ($validation) { ---disable_query_log ---replace_result $MASTER_MYSOCK MASTER_MYSOCK +--disable_result_log --exec $MYSQL -S $MASTER_MYSOCK -u root -r test -e "EXPLAIN FORMAT=JSON $query;" > $MYSQLTEST_VARDIR/tmp/explain.json ---replace_regex /[-]*// /FILE.[\/\\:_\.0-9A-Za-z]*/Validation:/ ---exec python $MYSQL_TEST_DIR/suite/opt_trace/validate_json.py $MYSQLTEST_VARDIR/tmp/explain.json +--exec perl $MYSQL_TEST_DIR/suite/opt_trace/validate_json.pl $MYSQLTEST_VARDIR/tmp/explain.json --remove_file '$MYSQLTEST_VARDIR/tmp/explain.json' ---enable_query_log -} +--enable_result_log } if ($select) { @@ -107,15 +103,11 @@ } } --eval EXPLAIN FORMAT=JSON $select; -if ($validation) { ---disable_query_log ---replace_result $MASTER_MYSOCK MASTER_MYSOCK +--disable_result_log --exec $MYSQL -S $MASTER_MYSOCK -u root -r test -e "EXPLAIN FORMAT=JSON $select;" > $MYSQLTEST_VARDIR/tmp/explain.json ---replace_regex /[-]*// /FILE.[\/\\:_\.0-9A-Za-z]*/Validation:/ ---exec python $MYSQL_TEST_DIR/suite/opt_trace/validate_json.py $MYSQLTEST_VARDIR/tmp/explain.json +--exec perl $MYSQL_TEST_DIR/suite/opt_trace/validate_json.pl $MYSQLTEST_VARDIR/tmp/explain.json --remove_file '$MYSQLTEST_VARDIR/tmp/explain.json' ---enable_query_log -} +--enable_result_log } } diff -Nru mysql-5.6-5.6.27/mysql-test/include/plugin.defs mysql-5.6-5.6.33/mysql-test/include/plugin.defs --- mysql-5.6-5.6.27/mysql-test/include/plugin.defs 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/include/plugin.defs 2016-08-26 11:22:35.000000000 +0000 @@ -46,3 +46,4 @@ innodb_engine plugin/innodb_memcached/innodb_memcache INNODB_ENGINE validate_password plugin/password_validation VALIDATE_PASSWORD validate_password mysql_no_login plugin/mysql_no_login MYSQL_NO_LOGIN mysql_no_login +test_udf_services plugin/udf_services TESTUDFSERVICES diff -Nru mysql-5.6-5.6.27/mysql-test/include/python_with_json.inc mysql-5.6-5.6.33/mysql-test/include/python_with_json.inc --- mysql-5.6-5.6.27/mysql-test/include/python_with_json.inc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/include/python_with_json.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ ---disable_result_log -write_file $MYSQLTEST_VARDIR/tmp/explain.json; -{ - "table": - { - "id": 1, - "select_type": "SIMPLE", - "table_name": "t1", - "join_type": "index", - "key": "i1", - "key_length": "5", - "rows": 3, - "extra": - [ - "Using index" - ] - } -} -EOF ---require r/python_with_json.require ---replace_regex /[-]*// /FILE.[\/\\:_\.0-9A-Za-z]*/Validation:/ ---exec python $MYSQL_TEST_DIR/suite/opt_trace/validate_json.py $MYSQLTEST_VARDIR/tmp/explain.json ---remove_file '$MYSQLTEST_VARDIR/tmp/explain.json' ---enable_result_log - diff -Nru mysql-5.6-5.6.27/mysql-test/include/subquery_mat.inc mysql-5.6-5.6.33/mysql-test/include/subquery_mat.inc --- mysql-5.6-5.6.27/mysql-test/include/subquery_mat.inc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/include/subquery_mat.inc 2016-08-26 11:22:35.000000000 +0000 @@ -1457,6 +1457,8 @@ ALTER TABLE t1 MODIFY a VARCHAR(332) CHARACTER SET UTF8; --enable_warnings +ANALYZE TABLE t1; + # Now subquery materialization can be used, and result is still correct: eval EXPLAIN $query; eval $query; diff -Nru mysql-5.6-5.6.27/mysql-test/include/subquery_sj.inc mysql-5.6-5.6.33/mysql-test/include/subquery_sj.inc --- mysql-5.6-5.6.27/mysql-test/include/subquery_sj.inc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/include/subquery_sj.inc 2016-08-26 11:22:35.000000000 +0000 @@ -6603,3 +6603,80 @@ # New tests go here. --echo # End of 5.6 tests + +--echo # Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... + +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; + +let $query= +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 + FROM t1 + WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) + ) + FROM t2 + ) AS z; + +eval explain $query; +eval $query; + +DROP TABLE t1, t2; + +# A test case containing two outer references from different query blocks +# Debugging is needed to inspect correct transformation, unfortunately. + +CREATE TABLE t1(a INTEGER) engine=innodb; + +let $query= +SELECT (SELECT a + FROM t1 AS t2 + WHERE a IN (SELECT t1.a+t2.a + FROM t1 AS t3)) +FROM t1 AS t1; + +eval explain $query; +eval $query; + +DROP TABLE t1; + +--echo # End of test for Bug#21139722 + +--echo # +--echo # Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +--echo # + +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +let $query= +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a + FROM t1 + WHERE b) + FROM t2); +eval EXPLAIN $query; +eval $query; +DROP TABLE t1,t2; + +--echo # +--echo # Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +--echo # RESULTS IN 5.6 +--echo # + +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); + +let query= +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a + FROM t AS t2 + WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a + FROM t AS t3 + WHERE t3.b=1)); + +eval EXPLAIN extended $query; +eval $query; + +DROP TABLE t; diff -Nru mysql-5.6-5.6.27/mysql-test/lib/My/SysInfo.pm mysql-5.6-5.6.33/mysql-test/lib/My/SysInfo.pm --- mysql-5.6-5.6.27/mysql-test/lib/My/SysInfo.pm 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/lib/My/SysInfo.pm 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ # -*- cperl -*- -# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -103,6 +103,40 @@ return undef; } +sub _sysctl { + my ($self)= @_; + my $ncpu= `sysctl hw.ncpu 2> /dev/null`; + if ($ncpu eq '') { + return undef; + } + + my $cpuinfo= {}; + $ncpu =~ s/\D//g; + my $list = `sysctl machdep.cpu | grep machdep\.cpu\.[^.]*: 2> /dev/null`; + my @lines= split('\n', $list); + + foreach my $line (@lines) { + # Default value, the actual cpu values can be used to decrease this + # on slower cpus + $cpuinfo->{bogomips}= DEFAULT_BOGO_MIPS; + + my ($statistic, $value)= + $line=~ /machdep\.cpu\.(.*):\s+(.*)/; + $cpuinfo->{$statistic}= $value; + } + + for (1..$ncpu) { + my $temp_cpuinfo = $cpuinfo; + $temp_cpuinfo->{processor}= $_; + push(@{$self->{cpus}}, $temp_cpuinfo); + } + + # At least one cpu should have been found + # if this method worked + if ( $self->{cpus} ) { + return $self; + } +} sub _unamex { my ($self)= @_; @@ -123,6 +157,7 @@ ( \&_cpuinfo, \&_kstat, + \&_sysctl, \&_unamex, ); @@ -162,6 +197,9 @@ # Return the number of cpus found sub num_cpus { + if (IS_WINDOWS) { + return $ENV{NUMBER_OF_PROCESSORS} || 1; + } my ($self)= @_; return int(@{$self->{cpus}}) or confess "INTERNAL ERROR: No cpus in list"; diff -Nru mysql-5.6-5.6.27/mysql-test/mysql-test-run.pl mysql-5.6-5.6.33/mysql-test/mysql-test-run.pl --- mysql-5.6-5.6.27/mysql-test/mysql-test-run.pl 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/mysql-test-run.pl 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/perl # -*- cperl -*- -# Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -398,14 +398,16 @@ for my $limit (2000, 1500, 1000, 500){ $opt_parallel-- if ($sys_info->min_bogomips() < $limit); } - my $max_par= $ENV{MTR_MAX_PARALLEL} || 8; - $opt_parallel= $max_par if ($opt_parallel > $max_par); - $opt_parallel= $num_tests if ($opt_parallel > $num_tests); - $opt_parallel= 1 if (IS_WINDOWS and $sys_info->isvm()); + if(defined $ENV{MTR_MAX_PARALLEL}) { + my $max_par= $ENV{MTR_MAX_PARALLEL}; + $opt_parallel= $max_par if ($opt_parallel > $max_par); + } $opt_parallel= 1 if ($opt_parallel < 1); - mtr_report("Using parallel: $opt_parallel"); } + # Limit parallel workers to number of tests to avoid idle workers + $opt_parallel= $num_tests if ($num_tests > 0 and $opt_parallel > $num_tests); $ENV{MTR_PARALLEL} = $opt_parallel; + mtr_report("Using parallel: $opt_parallel"); if ($opt_parallel > 1 && ($opt_start_exit || $opt_stress)) { mtr_warning("Parallel cannot be used with --start-and-exit or --stress\n" . @@ -1784,9 +1786,13 @@ if ( lc($opt_build_thread) eq 'auto' ) { my $found_free = 0; $build_thread = 300; # Start attempts from here + + my $build_thread_upper = $build_thread + ($opt_parallel > 39 + ? $opt_parallel + int($opt_parallel / 4) + : 49); while (! $found_free) { - $build_thread= mtr_get_unique_id($build_thread, 349); + $build_thread= mtr_get_unique_id($build_thread, $build_thread_upper); if ( !defined $build_thread ) { mtr_error("Could not get a unique build thread id"); } @@ -5881,6 +5887,7 @@ $exe= "strace"; mtr_add_arg($args, "-o"); mtr_add_arg($args, "%s/log/mysqltest.strace", $opt_vardir); + mtr_add_arg($args, "-f"); mtr_add_arg($args, "$exe_mysqltest"); } @@ -6279,6 +6286,7 @@ mtr_add_arg($args, "-o"); mtr_add_arg($args, "%s/log/%s.strace", $opt_vardir, $type); + mtr_add_arg($args, "-f"); mtr_add_arg($args, $$exe); $$exe= "strace"; } diff -Nru mysql-5.6-5.6.27/mysql-test/r/alter_table.result mysql-5.6-5.6.33/mysql-test/r/alter_table.result --- mysql-5.6-5.6.27/mysql-test/r/alter_table.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/alter_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -2545,3 +2545,36 @@ Warnings: Warning 1287 '@@show_old_temporals' is deprecated and will be removed in a future release. DROP TABLE t1, t2; +# +# Bug#21345391: ALTER TABLE ... CONVERT TO CHARACTER SET NOT EFFECT +# AND REMAIN A TEMP TABLE +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE = INNODB CHARACTER SET gbk; +ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8, ALGORITHM = INPLACE; +# Without fix, the CHARSET SET for table remains gbk. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `fld1` int(11) NOT NULL, + PRIMARY KEY (`fld1`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +# Without fix, the temporary .frm file is not cleaned up. +DROP TABLE t1; +# Test cases added for coverage. +# Reports an error for tables containing datatypes supporting +# characters. +CREATE TABLE t1 (fld1 CHAR(10) PRIMARY KEY) ENGINE = INNODB CHARACTER SET gbk; +ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8, ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +DROP TABLE t1; +# ALTER TABLE, CHARACTER SET operation. +CREATE TABLE t1 (fld1 INT PRIMARY KEY, fld2 CHAR(10)) ENGINE = INNODB +CHARACTER SET gbk; +ALTER TABLE t1 CHARACTER SET UTF8, ALGORITHM = INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `fld1` int(11) NOT NULL, + `fld2` char(10) CHARACTER SET gbk DEFAULT NULL, + PRIMARY KEY (`fld1`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/connect_debug.result mysql-5.6-5.6.33/mysql-test/r/connect_debug.result --- mysql-5.6-5.6.27/mysql-test/r/connect_debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/connect_debug.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,49 @@ + +# -- Bug#20201006: Spamming show processlist prevents old connection +# -- threads from cleaning up. +SET @saved_max_connections = @@global.max_connections; +SET GLOBAL max_connections = 2; + +# -- Check that we allow only max_connections + 1 connections here +connect con_1, localhost, root; +connect con_2, localhost, root; +connect(localhost,root,,test,MYSQL_PORT,MYSQL_SOCK); +connect con_3, localhost, root; +ERROR HY000: Too many connections + +# -- Ensure we have max_connections + 1 connections. +SELECT count(*)= @@global.max_connections + 1 FROM information_schema.processlist; +count(*)= @@global.max_connections + 1 +1 + +# -- Take LOCK_thd_remove and close one connection then +# attempt new one [should fail]... +SET DEBUG_SYNC='fill_schema_processlist_after_copying_threads SIGNAL disconnect_connection WAIT_FOR continue'; +SELECT user FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY user;; +connection default; +SET DEBUG_SYNC='now WAIT_FOR disconnect_connection'; +disconnect con_1; +connect(localhost,root,,test,MYSQL_PORT,MYSQL_SOCK); +connect con_3, localhost, root; +ERROR HY000: Too many connections + +# -- Release the lock. Now new connection should go through +SET DEBUG_SYNC='now SIGNAL continue'; +connection con_2; +user +root +SET DEBUG_SYNC='RESET'; + +# -- Waiting for connection to close... +connect con_3, localhost, root; + +# -- Closing connections... +disconnect con_3; +disconnect con_2; +connection default; + +# -- Resetting variables... +SET GLOBAL max_connections= @saved_max_connections; + +# -- End of Bug#20201006. + diff -Nru mysql-5.6-5.6.27/mysql-test/r/enable_cleartext_plugin.result mysql-5.6-5.6.33/mysql-test/r/enable_cleartext_plugin.result --- mysql-5.6-5.6.27/mysql-test/r/enable_cleartext_plugin.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/enable_cleartext_plugin.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,39 @@ +# +# Bug #21235226 : THE --ENABLE-CLEARTEXT-PLUGIN IS NOT IMPLEMENTED +# IN ALL CLIENT PROGRAMS +# +CREATE DATABASE db21235226; +USE db21235226; +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (2); +SELECT * FROM t1; +a +1 +2 +CREATE USER uplain@localhost IDENTIFIED WITH 'cleartext_plugin_server' + AS 'cleartext_test'; +GRANT ALL PRIVILEGES ON *.* TO uplain@localhost; +Warning: Using a password on the command line interface can be insecure. +mysqldump: Got error: 2059: Authentication plugin 'mysql_clear_password' cannot be loaded: plugin not enabled when trying to connect +SELECT * FROM t1; +a +Warning: Using a password on the command line interface can be insecure. +mysqlimport: Error: 2059 Authentication plugin 'mysql_clear_password' cannot be loaded: plugin not enabled +SELECT * FROM t1; +a +1 +2 +Warning: Using a password on the command line interface can be insecure. +mysqlshow: Authentication plugin 'mysql_clear_password' cannot be loaded: plugin not enabled +Database: db21235226 ++--------+ +| Tables | ++--------+ +| t1 | ++--------+ +Warning: Using a password on the command line interface can be insecure. +mysqlcheck: Got error: 2059: Authentication plugin 'mysql_clear_password' cannot be loaded: plugin not enabled when trying to connect +db21235226.t1 OK +DROP TABLE t1; +DROP DATABASE db21235226; +DROP USER uplain@localhost; diff -Nru mysql-5.6-5.6.27/mysql-test/r/events_1.result mysql-5.6-5.6.33/mysql-test/r/events_1.result --- mysql-5.6-5.6.27/mysql-test/r/events_1.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/events_1.result 2016-08-26 11:22:35.000000000 +0000 @@ -114,7 +114,7 @@ drop event if exists event3; Warnings: Note 1305 Event event3 does not exist -create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); +create event event3 on schedule every 50 + 10 minute starts date_add(curdate(), interval 5 minute) ends date_add(curdate(), interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); select count(*) from t_event3; count(*) 0 diff -Nru mysql-5.6-5.6.27/mysql-test/r/explain.result mysql-5.6-5.6.33/mysql-test/r/explain.result --- mysql-5.6-5.6.27/mysql-test/r/explain.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/explain.result 2016-08-26 11:22:35.000000000 +0000 @@ -554,3 +554,18 @@ DROP TABLE t1, t2; # End WL#4897 End of 6.0 tests. +# +# Bug #18899860: EXPLAIN .. SELECT .. FOR UPDATE TAKES LOCKS +# +CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=INNODB; +INSERT INTO t1 VALUES (1),(2),(3); +START TRANSACTION; +EXPLAIN SELECT * FROM t1 WHERE c1 = 1 FOR UPDATE; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index +START TRANSACTION; +EXPLAIN SELECT * FROM t1 WHERE c1 = 1 FOR UPDATE; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index +DROP TABLE t1; +# End of test for Bug#18899860 diff -Nru mysql-5.6-5.6.27/mysql-test/r/fulltext.result mysql-5.6-5.6.33/mysql-test/r/fulltext.result --- mysql-5.6-5.6.27/mysql-test/r/fulltext.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/fulltext.result 2016-08-26 11:22:35.000000000 +0000 @@ -541,7 +541,7 @@ DROP TABLE t1; CREATE TABLE t1(a TEXT); SELECT GROUP_CONCAT(a) AS st FROM t1 HAVING MATCH(st) AGAINST('test' IN BOOLEAN MODE); -ERROR HY000: Incorrect arguments to AGAINST +ERROR HY000: Incorrect arguments to MATCH DROP TABLE t1; CREATE TABLE t1(a VARCHAR(64), FULLTEXT(a)); INSERT INTO t1 VALUES('awrd bwrd cwrd'),('awrd bwrd cwrd'),('awrd bwrd cwrd'); diff -Nru mysql-5.6-5.6.27/mysql-test/r/func_math.result mysql-5.6-5.6.33/mysql-test/r/func_math.result --- mysql-5.6-5.6.27/mysql-test/r/func_math.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/func_math.result 2016-08-26 11:22:35.000000000 +0000 @@ -636,9 +636,9 @@ CREATE TABLE t1(a BIGINT, b BIGINT UNSIGNED); INSERT INTO t1 VALUES(-9223372036854775808, 9223372036854775809); SELECT -a FROM t1; -ERROR 22003: BIGINT value is out of range in '-('-9223372036854775808')' +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)' SELECT -b FROM t1; -ERROR 22003: BIGINT value is out of range in '-('9223372036854775809')' +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)' DROP TABLE t1; SET @a:=999999999999999999999999999999999999999999999999999999999999999999999999999999999; SELECT @a + @a; diff -Nru mysql-5.6-5.6.27/mysql-test/r/func_str.result mysql-5.6-5.6.33/mysql-test/r/func_str.result --- mysql-5.6-5.6.27/mysql-test/r/func_str.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/func_str.result 2016-08-26 11:22:35.000000000 +0000 @@ -4514,5 +4514,15 @@ 2 public data: DROP TABLE t1; # +# Bug#22888420 CONCAT_WS: ASSERTION FAILED: !S.USES_BUFFER_OWNED_BY(THIS) +# +do concat('a',concat_ws('a', 0x2859, 'a' , +trim(period_add('a',1) from (1&'')) +) +); +Warnings: +Warning 1292 Truncated incorrect INTEGER value: '' +Warning 1292 Truncated incorrect INTEGER value: 'a' +# # End of 5.6 tests # diff -Nru mysql-5.6-5.6.27/mysql-test/r/group_min_max.result mysql-5.6-5.6.33/mysql-test/r/group_min_max.result --- mysql-5.6-5.6.27/mysql-test/r/group_min_max.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/group_min_max.result 2016-08-26 11:22:35.000000000 +0000 @@ -2046,7 +2046,7 @@ BB EXPLAIN SELECT a FROM t1 WHERE a='AA' GROUP BY a; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ref PRIMARY PRIMARY 7 const 3 Using where; Using index +1 SIMPLE t1 range PRIMARY PRIMARY 7 NULL 1 Using where; Using index for group-by EXPLAIN SELECT a FROM t1 WHERE a='BB' GROUP BY a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref PRIMARY PRIMARY 7 const 1 Using where; Using index @@ -2444,7 +2444,7 @@ 3 13 explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a; id select_type table type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 ref PRIMARY,index PRIMARY 4 const 15 100.00 Using index; Using temporary +1 SIMPLE t1 range PRIMARY,index PRIMARY 4 NULL 3 100.00 Using where; Using index for group-by; Using temporary Warnings: Note 1003 /* select#1 */ select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a` drop table t1; @@ -3138,3 +3138,33 @@ SET optimizer_trace=DEFAULT; SET end_markers_in_json=DEFAULT; DROP TABLE t; +# +# Bug#18109609: LOOSE INDEX SCAN IS NOT USED WHEN IT SHOULD +# +CREATE TABLE t1 ( +id INT AUTO_INCREMENT PRIMARY KEY, +c1 INT, +c2 INT, +KEY(c1,c2)); +INSERT INTO t1(c1,c2) VALUES +(1, 1), (1,2), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (4,3), +(4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (4,11), (4,12), (4,13), +(4,14), (4,15), (4,16), (4,17), (4,18), (4,19), (4,20),(5,5); +EXPLAIN SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range c1 c1 5 NULL 7 Using where; Using index for group-by +FLUSH STATUS; +SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1; +MAX(c2) c1 +20 4 +SHOW SESSION STATUS LIKE 'Handler_read%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 3 +Handler_read_last 1 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 0 +DROP TABLE t1; +# End of test for Bug#18109609 diff -Nru mysql-5.6-5.6.27/mysql-test/r/insert.result mysql-5.6-5.6.33/mysql-test/r/insert.result --- mysql-5.6-5.6.27/mysql-test/r/insert.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/insert.result 2016-08-26 11:22:35.000000000 +0000 @@ -712,3 +712,56 @@ INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; ERROR 42000: Column 'a' specified twice DROP TABLE t1; +# +# BUG#22037930: INSERT IGNORE FAILS TO IGNORE +# FOREIGN KEY CONSTRAINT +# Setup. +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB; +CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1)) +ENGINE=INNODB; +INSERT INTO t1 VALUES(0); +INSERT INTO t2 VALUES(0); +# Without fix, an error is reported. +INSERT IGNORE INTO t2 VALUES(1); +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0; +Warnings: +Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +# Test for multi update. +UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3; +Warnings: +Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +# Reports an error since IGNORE is not used. +INSERT INTO t2 VALUES(1); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t2 SET fld2=20 WHERE fld2=0; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1 SET fld1=20 WHERE fld1=0; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +DROP TABLE t2, t1; +# +# BUG#22037930: INSERT IGNORE FAILS TO IGNORE FOREIGN +# KEY CONSTRAINT +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= INNODB; +CREATE TABLE t2 (fld1 VARCHAR(10), fld2 INT NOT NULL, +CONSTRAINT fk FOREIGN KEY (fld2) REFERENCES t1(fld1)) ENGINE= INNODB; +# Without patch, reports incorrect error. +INSERT INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +REPLACE INTO t2 VALUES('abc', 2); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +INSERT IGNORE INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +DROP TABLE t2, t1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/loaddata.result mysql-5.6-5.6.33/mysql-test/r/loaddata.result --- mysql-5.6-5.6.27/mysql-test/r/loaddata.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/loaddata.result 2016-08-26 11:22:35.000000000 +0000 @@ -507,7 +507,7 @@ # Bug#11765139 58069: LOAD DATA INFILE: VALGRIND REPORTS INVALID MEMORY READS AND WRITES WITH U # CREATE TABLE t1(f1 INT); -SELECT 0xE1BB30 INTO OUTFILE 't1.dat'; +SELECT 0xE1C330 INTO OUTFILE 't1.dat'; LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8; DROP TABLE t1; # @@ -532,3 +532,27 @@ Got one of the listed errors SET @@sql_mode= @old_mode; DROP TABLE t1; + +# +# Bug#23080148 - Backport of Bug#20683959. +# Bug#20683959 LOAD DATA INFILE IGNORES A SPECIFIC ROW SILENTLY +# UNDER DB CHARSET IS UTF8. +# +CREATE DATABASE d1 CHARSET latin1; +USE d1; +CREATE TABLE t1 (val TEXT); +LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1; +SELECT COUNT(*) FROM t1; +COUNT(*) +1 +SELECT HEX(val) FROM t1; +HEX(val) +C38322525420406E696F757A656368756E3A20E98198E2889AF58081AEE7B99DE4B88AE383A3E7B99DE69690F58087B3E7B9A7EFBDA8E7B99DEFBDB3E7B99DE78999E880B3E7B8BAEFBDAAE7B9A7E89699E296A1E7B8BAE4BBA3EFBD8CE7B8BAEFBDA9E7B8B2E2889AE38184E7B99DEFBDB3E7B99DE4B88AE383A3E7B99DE69690F58087B3E7B9A7EFBDA8E7B99DEFBDB3E7B99DE5B3A8EFBD84E8ABA0EFBDA8E89C89F580948EE599AAE7B8BAEFBDAAE7B8BAE9A198EFBDA9EFBDB1E7B9A7E581B5E289A0E7B8BAEFBDBEE7B9A7E9A194EFBDA9E882B4EFBDA5EFBDB5E980A7F5808B96E28693E99EABE38287E58F99E7B8BAE58AB1E28691E7B8BAF5808B9AE7828AE98095EFBDB1E7B8BAEFBDAFE7B8B2E288ABE6A89FE89EB3E6BA98F58081ADE88EA0EFBDBAE98095E6BA98F58081AEE89D93EFBDBAE8AD9BEFBDACE980A7F5808B96E28693E7B8BAF580918EE288AAE7B8BAE4B88AEFBC9EE7B8BAE4B99DE28691E7B8BAF5808B96EFBCA0E88DB3E6A68AEFBDB9EFBDB3E981B2E5B3A8E296A1E7B8BAE7A4BCE7828AE88DB3E6A68AEFBDB0EFBDBDE7B8BAA0E7B8BAE88B93EFBDBEE5B899EFBC9E +CREATE DATABASE d2 CHARSET utf8; +USE d2; +CREATE TABLE t1 (val TEXT); +LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1; +ERROR HY000: Invalid utf8 character string: 'Ã"RT @niouzechun: \9058\221A' +DROP TABLE d1.t1, d2.t1; +DROP DATABASE d1; +DROP DATABASE d2; diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysqlbinlog.result mysql-5.6-5.6.33/mysql-test/r/mysqlbinlog.result --- mysql-5.6-5.6.27/mysql-test/r/mysqlbinlog.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysqlbinlog.result 2016-08-26 11:22:35.000000000 +0000 @@ -731,9 +731,8 @@ FLUSH LOGS; SELECT (@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog")) -IS NOT NULL; -(@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog")) -IS NOT NULL +IS NOT NULL AS Loaded; +Loaded 1 *** Unsigned server_id 4294967295 is found: 1 *** SET @@global.server_id= 1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysql_client_test_qcache.result mysql-5.6-5.6.33/mysql-test/r/mysql_client_test_qcache.result --- mysql-5.6-5.6.27/mysql-test/r/mysql_client_test_qcache.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysql_client_test_qcache.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,14 @@ +# Bug#22559575 "the statement (1) has no open cursor" pops sometimes with +# prepared+query_cache +# +# Create relevent tables and call C API test cases +# Setup +select VARIABLE_VALUE into @qcache_hit_val1 from +information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Qcache_hits'; + +#Run C_API test case +select VARIABLE_VALUE into @qcache_hit_val2 from +information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Qcache_hits'; +SELECT @qcache_hit_val2 - @qcache_hit_val1; +@qcache_hit_val2 - @qcache_hit_val1 +1 diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysql_config_editor.result mysql-5.6-5.6.33/mysql-test/r/mysql_config_editor.result --- mysql-5.6-5.6.27/mysql-test/r/mysql_config_editor.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysql_config_editor.result 2016-08-26 11:22:35.000000000 +0000 @@ -100,7 +100,7 @@ ############################################## # Tests for mysql_config_editor's help command ############################################## -Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysql_plugin.result mysql-5.6-5.6.33/mysql-test/r/mysql_plugin.result --- mysql-5.6-5.6.27/mysql-test/r/mysql_plugin.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysql_plugin.result 2016-08-26 11:22:35.000000000 +0000 @@ -105,7 +105,7 @@ # Show the help. # mysql_plugin Ver V.V.VV Distrib XX.XX.XX -Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. Enable or disable plugins. diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysqltest.result mysql-5.6-5.6.33/mysql-test/r/mysqltest.result --- mysql-5.6-5.6.27/mysql-test/r/mysqltest.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysqltest.result 2016-08-26 11:22:35.000000000 +0000 @@ -244,6 +244,12 @@ mysqltest: At line 1: Invalid argument to error: '999e9' - the errno may only consist of digits[0-9] mysqltest: At line 1: Invalid argument to error: '9b' - the errno may only consist of digits[0-9] mysqltest: At line 1: Too many errorcodes specified +CREATE TABLE t1 (a INT); +CREATE TABLE t1 (a INT); +ERROR 42S01: Table 't1' already exists +CREATE TABLE t1 (a INT); +ERROR 42S01: Table 't1' already exists +DROP TABLE t1; MySQL "MySQL" MySQL: The world''s most popular open source database diff -Nru mysql-5.6-5.6.27/mysql-test/r/mysql_upgrade.result mysql-5.6-5.6.33/mysql-test/r/mysql_upgrade.result --- mysql-5.6-5.6.27/mysql-test/r/mysql_upgrade.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/mysql_upgrade.result 2016-08-26 11:22:35.000000000 +0000 @@ -115,7 +115,7 @@ Run mysql_upgrade with a non existing server socket Warning: Using a password on the command line interface can be insecure. mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect -FATAL ERROR: Upgrade failed +FATAL ERROR: Error during call to mysql_check for fixing the db/tables names on mysql db set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE'; Warnings: Warning 1681 'NO_ZERO_DATE' is deprecated and will be removed in a future release. @@ -502,5 +502,12 @@ DROP USER B20023823_def@localhost; DROP USER B20023823_41hash@localhost; DROP USER B20023823_16hash@localhost; +# +# Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR +# +Run mysql_upgrade with unauthorized access +Warning: Using a password on the command line interface can be insecure. +Error: Failed while fetching Server version! Could be due to unauthorized access. +FATAL ERROR: Upgrade failed End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/r/partition_innodb.result mysql-5.6-5.6.33/mysql-test/r/partition_innodb.result --- mysql-5.6-5.6.27/mysql-test/r/partition_innodb.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/partition_innodb.result 2016-08-26 11:22:35.000000000 +0000 @@ -769,3 +769,109 @@ COUNT(*) 1 DROP TABLE t1; +# +# Bug#20160327 OPTIMIZE TABLE REMOVES THE DATA DIRECTORY IN PARTITIONS +# +CREATE TABLE `t1` ( +`f1` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, +`f2` MEDIUMTEXT NOT NULL, +`f3` CHAR(100) NOT NULL, +`f4` TINYINT(1) unsigned NOT NULL, +PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1 +PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, +PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +t1#p#p1.ibd +ALTER TABLE t1 OPTIMIZE PARTITION p0; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +t1#p#p1.ibd +ALTER TABLE t1 OPTIMIZE PARTITION p1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +t1#p#p1.ibd +ALTER TABLE t1 REBUILD PARTITION ALL; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +t1#p#p1.ibd +ALTER TABLE t1 ADD extracol VARCHAR(32) NULL; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(10) unsigned NOT NULL AUTO_INCREMENT, + `f2` mediumtext NOT NULL, + `f3` char(100) NOT NULL, + `f4` tinyint(1) unsigned NOT NULL, + `extracol` varchar(32) DEFAULT NULL, + PRIMARY KEY (`f1`,`f4`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (`f4`) +(PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ +t1#p#p1.ibd +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/partition_open_files_limit.result mysql-5.6-5.6.33/mysql-test/r/partition_open_files_limit.result --- mysql-5.6-5.6.27/mysql-test/r/partition_open_files_limit.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/partition_open_files_limit.result 2016-08-26 11:22:35.000000000 +0000 @@ -1,3 +1,11 @@ +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); +CALL mtr.add_suppression("Warning: you must raise the value of "); +CALL mtr.add_suppression(" InnoDB: Warning: too many (.*) files stay open"); +CALL mtr.add_suppression(" while the maximum"); +CALL mtr.add_suppression("InnoDB: allowed value would be 1."); +CALL mtr.add_suppression("InnoDB: You may need to raise the value of"); +CALL mtr.add_suppression(" innodb_open_files in"); +CALL mtr.add_suppression("InnoDB: my.cnf."); DROP TABLE IF EXISTS `t1`; # Bug#46922: crash when adding partitions and open_files_limit is reached CREATE TABLE t1 (a INT PRIMARY KEY) diff -Nru mysql-5.6-5.6.27/mysql-test/r/sp-prelocking.result mysql-5.6-5.6.33/mysql-test/r/sp-prelocking.result --- mysql-5.6-5.6.27/mysql-test/r/sp-prelocking.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/sp-prelocking.result 2016-08-26 11:22:35.000000000 +0000 @@ -320,3 +320,34 @@ DROP TRIGGER t1_ai; DROP TABLE t1, t2; End of 5.0 tests +# +# Bug#21142859: FUNCTION UPDATING A VIEW FAILS TO FIND TABLE THAT ACTUALLY EXISTS +# +CREATE TABLE t1 SELECT 1 AS fld1, 'A' AS fld2; +CREATE TABLE t2 (fld3 INT, fld4 CHAR(1)); +CREATE VIEW v1 AS SELECT * FROM t1; +CREATE TRIGGER t1_au AFTER UPDATE ON t1 +FOR EACH ROW INSERT INTO t2 VALUES (new.fld1, new.fld2); +CREATE FUNCTION f1() RETURNS INT +BEGIN +UPDATE v1 SET fld2='B' WHERE fld1=1; +RETURN row_count(); +END ! +# Without the patch, an error was getting reported. +SELECT f1(); +f1() +1 +DROP FUNCTION f1; +DROP VIEW v1; +DROP TABLE t1,t2; +# +# Bug #16672723 "CAN'T FIND TEMPORARY TABLE". +# +CREATE FUNCTION f1() RETURNS INT RETURN 1; +CREATE TEMPORARY TABLE tmp1(a INT); +PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t"; +# The below statement failed before the fix. +EXECUTE stmt1; +DROP TEMPORARY TABLES tmp1, tmp2; +DEALLOCATE PREPARE stmt1; +DROP FUNCTION f1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/sp.result mysql-5.6-5.6.33/mysql-test/r/sp.result --- mysql-5.6-5.6.27/mysql-test/r/sp.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/sp.result 2016-08-26 11:22:35.000000000 +0000 @@ -4305,57 +4305,57 @@ test.t2 repair status OK test.t3 repair status OK test.v1 repair Error 'test.v1' is not BASE TABLE -test.v1 repair error Corrupt +test.v1 repair status Operation failed Table Op Msg_type Msg_text test.t1 optimize status OK test.t2 optimize status OK test.t3 optimize status OK test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed Table Op Msg_type Msg_text test.t1 analyze status Table is already up to date test.t2 analyze status Table is already up to date test.t3 analyze status Table is already up to date test.v1 analyze Error 'test.v1' is not BASE TABLE -test.v1 analyze error Corrupt +test.v1 analyze status Operation failed call bug13012()| Table Op Msg_type Msg_text test.t1 repair status OK test.t2 repair status OK test.t3 repair status OK test.v1 repair Error 'test.v1' is not BASE TABLE -test.v1 repair error Corrupt +test.v1 repair status Operation failed Table Op Msg_type Msg_text test.t1 optimize status OK test.t2 optimize status OK test.t3 optimize status OK test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed Table Op Msg_type Msg_text test.t1 analyze status Table is already up to date test.t2 analyze status Table is already up to date test.t3 analyze status Table is already up to date test.v1 analyze Error 'test.v1' is not BASE TABLE -test.v1 analyze error Corrupt +test.v1 analyze status Operation failed call bug13012()| Table Op Msg_type Msg_text test.t1 repair status OK test.t2 repair status OK test.t3 repair status OK test.v1 repair Error 'test.v1' is not BASE TABLE -test.v1 repair error Corrupt +test.v1 repair status Operation failed Table Op Msg_type Msg_text test.t1 optimize status OK test.t2 optimize status OK test.t3 optimize status OK test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed Table Op Msg_type Msg_text test.t1 analyze status Table is already up to date test.t2 analyze status Table is already up to date test.t3 analyze status Table is already up to date test.v1 analyze Error 'test.v1' is not BASE TABLE -test.v1 analyze error Corrupt +test.v1 analyze status Operation failed drop procedure bug13012| drop view v1| select * from t1 order by data| diff -Nru mysql-5.6-5.6.27/mysql-test/r/ssl_ca.result mysql-5.6-5.6.33/mysql-test/r/ssl_ca.result --- mysql-5.6-5.6.27/mysql-test/r/ssl_ca.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/ssl_ca.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,24 @@ +# +# Bug#21920657: SSL-CA FAILS SILENTLY IF THE PATH CANNOT BE FOUND +# +# try to connect with wrong '--ssl-ca' path : should fail +ERROR 2026 (HY000): SSL connection error: SSL_CTX_set_default_verify_paths failed +# try to connect with correct '--ssl-ca' path : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# +# Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +# PATH SUBSTITUTION +# +# try to connect with '--ssl-ca' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# try to connect with '--ssl-key' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# try to connect with '--ssl-cert' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA diff -Nru mysql-5.6-5.6.27/mysql-test/r/ssl_crl.result mysql-5.6-5.6.33/mysql-test/r/ssl_crl.result --- mysql-5.6-5.6.27/mysql-test/r/ssl_crl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/ssl_crl.result 2016-08-26 11:22:35.000000000 +0000 @@ -21,3 +21,15 @@ ssl_crlpath ssl_key MYSQL_TEST_DIR/std_data/crl-server-key.pem # try logging in with a certificate in the server's --ssl-crl : should fail +# +# Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +# PATH SUBSTITUTION +# +# try to connect with '--ssl-crl' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# try to connect with '--ssl-crlpath' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA diff -Nru mysql-5.6-5.6.27/mysql-test/r/ssl_mode_no_ssl.result mysql-5.6-5.6.33/mysql-test/r/ssl_mode_no_ssl.result --- mysql-5.6-5.6.27/mysql-test/r/ssl_mode_no_ssl.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/ssl_mode_no_ssl.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,23 @@ +# negative client tests +# mysql +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +# mysqldump +mysqldump: Got error: 2026: --ssl-mode=REQUIRED option forbids non SSL connections when trying to connect +# mysqladmin +Warning: Using a password on the command line interface can be insecure. +mysqladmin: error: '--ssl-mode=REQUIRED option forbids non SSL connections' +# mysqlcheck +mysqlcheck: Got error: 2026: --ssl-mode=REQUIRED option forbids non SSL connections when trying to connect +# mysqlimport +mysqlimport: Error: 2026 --ssl-mode=REQUIRED option forbids non SSL connections +# mysqlshow +mysqlshow: --ssl-mode=REQUIRED option forbids non SSL connections +# mysqlslap +mysqlslap: Error when connecting to server: --ssl-mode=REQUIRED option forbids non SSL connections +# mysqltest +mysqltest: Could not open connection 'default': 2026 --ssl-mode=REQUIRED option forbids non SSL connections + +End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/r/ssl_mode.result mysql-5.6-5.6.33/mysql-test/r/ssl_mode.result --- mysql-5.6-5.6.27/mysql-test/r/ssl_mode.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/ssl_mode.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,45 @@ +# positive client tests +# mysql +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(0); +# mysqldump +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0); +# mysqladmin +Warning: Using a password on the command line interface can be insecure. +mysqld is alive +# mysqlcheck +test.t1 OK +# mysqlimport +CREATE TABLE words(a VARCHAR(255)); +test.words: Records: 70 Deleted: 0 Skipped: 0 Warnings: 0 +DROP TABLE words; +# mysqlshow +Database: test ++--------+ +| Tables | ++--------+ +| t1 | ++--------+ +# mysqlslap +# mysqltest +Output from mysqltest-x.inc +DROP TABLE t1; +# negative client tests +# mysql +Unknown value to --ssl-mode: ''. Use --ssl-mode=REQUIRED +Unknown value to --ssl-mode: 'DERIUQER'. Use --ssl-mode=REQUIRED +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections + +End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_mat_all.result mysql-5.6-5.6.33/mysql-test/r/subquery_mat_all.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_mat_all.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_mat_all.result 2016-08-26 11:22:35.000000000 +0000 @@ -1912,14 +1912,17 @@ COUNT(*) 0 ALTER TABLE t1 MODIFY a VARCHAR(332) CHARACTER SET UTF8; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK EXPLAIN SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( SELECT t2.a FROM t1 as t2 ); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 1 Using where -2 SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +1 PRIMARY t1 ALL NULL NULL NULL NULL 32 Using where +2 SUBQUERY t2 ALL NULL NULL NULL NULL 32 NULL SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_mat_none.result mysql-5.6-5.6.33/mysql-test/r/subquery_mat_none.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_mat_none.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_mat_none.result 2016-08-26 11:22:35.000000000 +0000 @@ -1898,14 +1898,17 @@ COUNT(*) 0 ALTER TABLE t1 MODIFY a VARCHAR(332) CHARACTER SET UTF8; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK EXPLAIN SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( SELECT t2.a FROM t1 as t2 ); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 1 Using where -2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +1 PRIMARY t1 ALL NULL NULL NULL NULL 32 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 32 Using where SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_mat.result mysql-5.6-5.6.33/mysql-test/r/subquery_mat.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_mat.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_mat.result 2016-08-26 11:22:35.000000000 +0000 @@ -1899,14 +1899,17 @@ COUNT(*) 0 ALTER TABLE t1 MODIFY a VARCHAR(332) CHARACTER SET UTF8; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK EXPLAIN SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( SELECT t2.a FROM t1 as t2 ); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 1 Using where -2 SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +1 PRIMARY t1 ALL NULL NULL NULL NULL 32 Using where +2 SUBQUERY t2 ALL NULL NULL NULL NULL 32 NULL SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10698,5 +10698,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10689,5 +10689,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10690,5 +10690,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_all.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_all.result 2016-08-26 11:22:35.000000000 +0000 @@ -10683,4 +10683,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10560,5 +10560,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Start temporary; End temporary +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10560,5 +10560,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10561,5 +10561,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_dupsweed.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_dupsweed.result 2016-08-26 11:22:35.000000000 +0000 @@ -10555,4 +10555,100 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10545,6 +10545,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; # # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10522,6 +10522,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1); Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; # # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10523,6 +10523,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1); Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; # # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_firstmatch.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_firstmatch.result 2016-08-26 11:22:35.000000000 +0000 @@ -10521,6 +10521,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 FirstMatch(t2); Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1); Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; # # Bug#51457 Firstmatch semijoin strategy gives wrong results for # certain query plans diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10561,5 +10561,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Start temporary; End temporary +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 NULL +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10561,5 +10561,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10562,5 +10562,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_loosescan.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_loosescan.result 2016-08-26 11:22:35.000000000 +0000 @@ -10556,4 +10556,100 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Start temporary +1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; End temporary; Using join buffer (Block Nested Loop) +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t1`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t1`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10771,5 +10771,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Start temporary; End temporary +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10787,5 +10787,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10788,5 +10788,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_nosj.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_nosj.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat_nosj.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat_nosj.result 2016-08-26 11:22:35.000000000 +0000 @@ -10542,4 +10542,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using where +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` where (`test`.`t1`.`a`,`test`.`t1`.`a` in ( (/* select#2 */ select `test`.`t2`.`a` from `test`.`t` `t2` where (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true))))) ), (`test`.`t1`.`a` in on where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_mat.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_mat.result 2016-08-26 11:22:35.000000000 +0000 @@ -10786,4 +10786,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where; Start temporary +2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 End temporary; Using join buffer (Block Nested Loop) +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 PRIMARY eq_ref 5 test.t1.a 1 100.00 NULL +2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((``.`a` = `test`.`t1`.`a`) and (not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true)))))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bka_nixbnl.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bka_nixbnl.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bka_nixbnl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bka_nixbnl.result 2016-08-26 11:22:35.000000000 +0000 @@ -10547,5 +10547,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using where +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` where (`test`.`t1`.`a`,(/* select#2 */ select 1 from `test`.`t` `t2` where ((not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true))))) and ((`test`.`t1`.`a`) = `test`.`t2`.`a`)))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bka.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bka.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bka.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bka.result 2016-08-26 11:22:35.000000000 +0000 @@ -10552,5 +10552,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using where +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` where (`test`.`t1`.`a`,(/* select#2 */ select 1 from `test`.`t` `t2` where ((not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true))))) and ((`test`.`t1`.`a`) = `test`.`t2`.`a`)))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bkaunique.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bkaunique.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none_bkaunique.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none_bkaunique.result 2016-08-26 11:22:35.000000000 +0000 @@ -10553,5 +10553,102 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using where +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` where (`test`.`t1`.`a`,(/* select#2 */ select 1 from `test`.`t` `t2` where ((not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true))))) and ((`test`.`t1`.`a`) = `test`.`t2`.`a`)))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none.result mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none.result --- mysql-5.6-5.6.27/mysql-test/r/subquery_sj_none.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/subquery_sj_none.result 2016-08-26 11:22:35.000000000 +0000 @@ -10551,4 +10551,101 @@ # End of test for Bug#21184091 set @@optimizer_switch=@old_opt_switch; # End of 5.6 tests +# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ... +CREATE TABLE t1(a INTEGER) engine=innodb; +CREATE TABLE t2(b INTEGER) engine=innodb; +explain SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 NULL +2 DERIVED t2 ALL NULL NULL NULL NULL 1 NULL +3 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 1 Using where +5 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +4 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 NULL +SELECT 1 +FROM (SELECT 1 IN (SELECT 1 +FROM t1 +WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2) +) +FROM t2 +) AS z; +1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INTEGER) engine=innodb; +explain SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 1 NULL +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using where +SELECT (SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +FROM t1 AS t1; +(SELECT a +FROM t1 AS t2 +WHERE a IN (SELECT t1.a+t2.a +FROM t1 AS t3)) +DROP TABLE t1; +# End of test for Bug#21139722 +# +# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a)); +CREATE TABLE t2 (c INT PRIMARY KEY); +EXPLAIN SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT 1 +FROM t1 +WHERE 1 IN (SELECT (c IS NULL) IN (SELECT a +FROM t1 +WHERE b) +FROM t2); +1 +DROP TABLE t1,t2; +# +# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT +# RESULTS IN 5.6 +# +CREATE TABLE t(a INT,b INT); +INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1); +EXPLAIN extended SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where +3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` where (`test`.`t1`.`a`,(/* select#2 */ select 1 from `test`.`t` `t2` where ((not((concat(`test`.`t2`.`a`,''),(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and (outer_field_is_not_null, (((concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or isnull(`test`.`t3`.`a`)), true)) having (outer_field_is_not_null, (`test`.`t3`.`a`), true))))) and ((`test`.`t1`.`a`) = `test`.`t2`.`a`)))) +SELECT * +FROM t AS t1 +WHERE t1.a IN (SELECT t2.a +FROM t AS t2 +WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a +FROM t AS t3 +WHERE t3.b=1)); +a b +DROP TABLE t; set optimizer_switch=default; diff -Nru mysql-5.6-5.6.27/mysql-test/r/table_open_cache_functionality.result mysql-5.6-5.6.33/mysql-test/r/table_open_cache_functionality.result --- mysql-5.6-5.6.27/mysql-test/r/table_open_cache_functionality.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/table_open_cache_functionality.result 2016-08-26 11:22:35.000000000 +0000 @@ -1,3 +1,11 @@ +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); +CALL mtr.add_suppression("Warning: you must raise the value of "); +CALL mtr.add_suppression(" InnoDB: Warning: too many (.*) files stay open"); +CALL mtr.add_suppression(" while the maximum"); +CALL mtr.add_suppression("InnoDB: allowed value would be 1."); +CALL mtr.add_suppression("InnoDB: You may need to raise the value of"); +CALL mtr.add_suppression(" innodb_open_files in"); +CALL mtr.add_suppression("InnoDB: my.cnf."); '#________________________VAR_05_table_open_cache__________________#' echo '##' --echo '#---------------------WL6372_VAR_5_01----------------------#' diff -Nru mysql-5.6-5.6.27/mysql-test/r/udf_services.result mysql-5.6-5.6.33/mysql-test/r/udf_services.result --- mysql-5.6-5.6.27/mysql-test/r/udf_services.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/udf_services.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,15 @@ +# +# Bug #20085672: CRYPTIC ERROR WHEN FAILING TO UNLOAD A DYNAMIC LIBRARY +# +# Install the plugin +INSTALL PLUGIN test_udf_services SONAME 'TESTUDFSERVICES'; +# Define the function +CREATE FUNCTION test_udf_services_udf RETURNS INT +SONAME "TESTUDFSERVICES"; +# Uninstall the plugin +UNINSTALL PLUGIN test_udf_services; +# Install the plugin again. Should not fail +INSTALL PLUGIN test_udf_services SONAME 'TESTUDFSERVICES'; +# Cleanup +DROP FUNCTION test_udf_services_udf; +UNINSTALL PLUGIN test_udf_services; diff -Nru mysql-5.6-5.6.27/mysql-test/r/validate_password_plugin.result mysql-5.6-5.6.33/mysql-test/r/validate_password_plugin.result --- mysql-5.6-5.6.27/mysql-test/r/validate_password_plugin.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/validate_password_plugin.result 2016-08-26 11:22:35.000000000 +0000 @@ -222,6 +222,18 @@ # cleanup DROP USER 'user1'@'localhost', 'user2'@'localhost'; SET @@global.validate_password_policy=DEFAULT; +# +# Bug#21616496: CREATE USER ACCEPTS PLUGIN AND PASSWORD HASH, +# BUT IGNORES THE PASSWORD HASH +# +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password'; +ERROR HY000: Your password does not satisfy the current policy requirements +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_old_password'; +ERROR HY000: Your password does not satisfy the current policy requirements +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; +ERROR HY000: Your password does not satisfy the current policy requirements +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_old_password' AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; +ERROR HY000: Your password does not satisfy the current policy requirements # clean up after the test UNINSTALL PLUGIN validate_password; End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/r/variables-win.result mysql-5.6-5.6.33/mysql-test/r/variables-win.result --- mysql-5.6-5.6.27/mysql-test/r/variables-win.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/variables-win.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,11 @@ +# +# Bug #23747899: @@basedir sysvar value not normalized if set through +# the command line/ini file +# There should be no slashes in @@basedir and just backslashes +# since it's normalized +SELECT +LOCATE('/', @@basedir) <> 0 AS have_slashes, +LOCATE('\\', @@basedir) <> 0 AS have_backslashes; +have_slashes have_backslashes +0 1 +End of the 5.6 tests diff -Nru mysql-5.6-5.6.27/mysql-test/r/view.result mysql-5.6-5.6.33/mysql-test/r/view.result --- mysql-5.6-5.6.27/mysql-test/r/view.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/view.result 2016-08-26 11:22:35.000000000 +0000 @@ -2402,28 +2402,28 @@ OPTIMIZE TABLE v1; Table Op Msg_type Msg_text test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed ANALYZE TABLE v1; Table Op Msg_type Msg_text test.v1 analyze Error 'test.v1' is not BASE TABLE -test.v1 analyze error Corrupt +test.v1 analyze status Operation failed REPAIR TABLE v1; Table Op Msg_type Msg_text test.v1 repair Error 'test.v1' is not BASE TABLE -test.v1 repair error Corrupt +test.v1 repair status Operation failed DROP TABLE t1; OPTIMIZE TABLE v1; Table Op Msg_type Msg_text test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed ANALYZE TABLE v1; Table Op Msg_type Msg_text test.v1 analyze Error 'test.v1' is not BASE TABLE -test.v1 analyze error Corrupt +test.v1 analyze status Operation failed REPAIR TABLE v1; Table Op Msg_type Msg_text test.v1 repair Error 'test.v1' is not BASE TABLE -test.v1 repair error Corrupt +test.v1 repair status Operation failed DROP VIEW v1; create definer = current_user() sql security invoker view v1 as select 1; show create view v1; diff -Nru mysql-5.6-5.6.27/mysql-test/r/xml.result mysql-5.6-5.6.33/mysql-test/r/xml.result --- mysql-5.6-5.6.27/mysql-test/r/xml.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/r/xml.result 2016-08-26 11:22:35.000000000 +0000 @@ -1164,3 +1164,21 @@ # # End of 5.5 tests # +# +# Bug#13358486 WEIGHT_STRING = MY_STRNXFRM_UNICODE: +# ASSERTION `SRC' FAILED +# +set names utf8; +do weight_string(extractvalue('','/*/a') level 1 reverse); +do char((weight_string(extractvalue((''),('tX')) level 7 desc)) using cp852); +set names default; +# +# Bug#22552615 EXTRACTVALUE RETURNS NULL WHEN NO MATCHING +# TEXT NODE IS FOUND FOR THE EXPRESSION +# +set @x = 'HOLA'; +set @y = 'Default Value'; +select ExtractValue( @x, '/MESSAGE/DATA2' ) into @y; +select @y; +@y + diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/bug20683959loaddata.txt mysql-5.6-5.6.33/mysql-test/std_data/bug20683959loaddata.txt --- mysql-5.6-5.6.27/mysql-test/std_data/bug20683959loaddata.txt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/bug20683959loaddata.txt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +Ã"RT @niouzechun: é˜âˆšõ€®ç¹ä¸Šãƒ£ç¹æ–õ€‡³ç¹§ï½¨ç¹ï½³ç¹ç‰™è€³ç¸ºï½ªç¹§è–™â–¡ç¸ºä»£ï½Œç¸ºï½©ç¸²âˆšã„ç¹ï½³ç¹ä¸Šãƒ£ç¹æ–õ€‡³ç¹§ï½¨ç¹ï½³ç¹å³¨ï½„諠ィ蜉õ€”Žå™ªç¸ºï½ªç¸ºé¡˜ï½©ï½±ç¹§åµâ‰ ç¸ºï½¾ç¹§é¡”ゥ肴・オ逧õ€‹–↓鞫ょå™ç¸ºåŠ±â†‘縺õ€‹šç‚Šé€•ï½±ç¸ºï½¯ç¸²âˆ«æ¨Ÿèž³æº˜õ€­èŽ ï½ºé€•æº˜õ€®è“コ譛ャ逧õ€‹–↓縺õ€‘Žâˆªç¸ºä¸Šï¼žç¸ºä¹â†‘縺õ€‹–ï¼ è³æ¦Šï½¹ï½³é²å³¨â–¡ç¸ºç¤¼ç‚Šè³æ¦Šï½°ï½½ç¸º ç¸ºè‹“セ帙> diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/ca-cert-verify.pem mysql-5.6-5.6.33/mysql-test/std_data/ca-cert-verify.pem --- mysql-5.6-5.6.27/mysql-test/std_data/ca-cert-verify.pem 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/ca-cert-verify.pem 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWzCCAkOgAwIBAgIJAO/QdKLEDQdXMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNV +BAYTAklOMREwDwYDVQQIDAhLYXJuYXRrYTESMBAGA1UEBwwJQmFuZ2Fsb3JlMQ4w +DAYDVQQKDAVNeVNRTDAeFw0xNjAxMDUxMDA1MDhaFw0yNTExMTMxMDA1MDhaMEQx +CzAJBgNVBAYTAklOMREwDwYDVQQIDAhLYXJuYXRrYTESMBAGA1UEBwwJQmFuZ2Fs +b3JlMQ4wDAYDVQQKDAVNeVNRTDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKdOCuS2CzfBTJ2x8SAzY0J7cYJfNJvMDF1cvANnhkIhtnkWt/HZ5DJ9NxeX +q5h7FJLAi4gddqdk/tvQJw0V6gZepJr/mKVnMPivF5+oHPc9ZJQMX6B3FBNwWylm +ACd5GKx8I/H/MXyuhQTcoV//Ab+2pI8RHeYbBsm3lHH+tX7bRU6mUFjneqMpiCkb +JHt6BWZiWR10O6pMuGQ9+dDdsLhEV1fj3CctEPwW6rs4IZzD8xl5n+8cy7qu6eYH +Wt/snwsTzkrufeMRqTtqelxON9eoQwYOR1oH3vNEVlcbuoJAvaWOqBROUBdf12SP +TYSdP9nlRh7lTKQOywN4kYt6LqUCAwEAAaNQME4wHQYDVR0OBBYEFJ4c9tKaUU0P +EjBq5G207jjXI7RAMB8GA1UdIwQYMBaAFJ4c9tKaUU0PEjBq5G207jjXI7RAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABRnUyj21oFi0SGJg/K5+8Lc +4n6OwVU/NgLOysIB0baIP/Rqeaze59xG/v9FPQgBlWcJK3RabOywx5bxAxdcus+1 +yp5j4h37Qq1/qkgqmevvdSAPa0OBQbLb+58/naV+ywUpCYZ6flLdCMH3fXuDSlSq +qrCznextjojtWbnzrBmCmJmXWGd2gSaJDvb90ZZp/Elt3vN1sgjW0M/JEkb4MJ1r +6nfD/FHr2lUwBHm2yk7Blovx7x4d/Ip3pglk63cNO/Rn0SBTdoVDS2LB9du3Phq2 +TZiL3NrRMGUNwmdaavyrJxaPq5D+Sfa4LYP3MMYD4KhLogNzIl299n5joyizlJw= +-----END CERTIFICATE----- diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/server-cert-verify-fail.pem mysql-5.6-5.6.33/mysql-test/std_data/server-cert-verify-fail.pem --- mysql-5.6-5.6.27/mysql-test/std_data/server-cert-verify-fail.pem 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/server-cert-verify-fail.pem 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDJzCCAg8CAQEwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCSU4xETAPBgNV +BAgMCEthcm5hdGthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDjAMBgNVBAoMBU15U1FM +MB4XDTE2MDEwNTEwMDgyN1oXDTI1MTExMzEwMDgyN1owbzELMAkGA1UEBhMCSU4x +EjAQBgNVBAgMCTpLYXJuYXRrYTETMBEGA1UEBwwKOkJhbmdhbG9yZTEPMA0GA1UE +CgwGOk15U1FMMRcwFQYDVQQLDA4vQ049bG9jYWxob3N0LzENMAsGA1UEAwwEZmFp +bDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3wnWuJodzZYq9TAJRm +HU7995FA3TEWdUinYTgGP79aTVQ4M9aeINlB6whWXOI8seh9Ja7C6kMzqOgYbgCl +WlDPAVJWktFYeWXOLxbpzh1KWkS6jBkWT02t7H7JcYbil7xjlJUxLz4UOOUDUDIP +6yqdA9VE3osESttjzj57Zm2xPqzbIHVJfORn7EexH4pryS7439p6i4XtfL31NJ8V +07M3j3a8GqbcEqXYvcUCrLnywDQ1igP817b6ta52nbgYWiqdn0mJs535UJ/p/rSl +D4Ae/6G3BSEY7whir6xY6vsd4KJ6w+wRCHnY0ky6OdDJVJLH1iqh7si7P3RBGkxw +Y7MCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAggbw1jj2b7H5KDdeGJGIoOGkQAcs +GNSJussCfdk7qnzYXKmjyNppC86jjaOrXona5f+SNCuujdu86Tv8V69EH57k4lUc +DW7J4AD3vUb/tBzB0tsI/76Z4gm1XoCsnCGGpWd8GQAg/QNn/ZfJB2Vb/9ObN6rH +0HV7ouB6OGZSsb71+grKiN6mDyB1lZynCGvqBxOCKFISfcRbCNFHo/pONlHaNGPE +vjDH1bPZbEHj8owYgkdcQe0a8EbJYeQfm6fH8V8bmUcG7N60DrCnq4l1qwwVkh1S +7RpIDgrWkU+esIIdYZIIbtDxQP1Sm7kUh++7b+bcHnyw3KtDVSCw7MIedA== +-----END CERTIFICATE----- diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/server-cert-verify-pass.pem mysql-5.6-5.6.33/mysql-test/std_data/server-cert-verify-pass.pem --- mysql-5.6-5.6.27/mysql-test/std_data/server-cert-verify-pass.pem 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/server-cert-verify-pass.pem 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDEzCCAfsCAQEwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCSU4xETAPBgNV +BAgMCEthcm5hdGthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDjAMBgNVBAoMBU15U1FM +MB4XDTE2MDEwNTEwMDU1OVoXDTI1MTExMzEwMDU1OVowWzELMAkGA1UEBhMCSU4x +EjAQBgNVBAgMCTpLYXJuYXRrYTETMBEGA1UEBwwKOkJhbmdhbG9yZTEPMA0GA1UE +CgwGOk15U1FMMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQDAmkbUwDe+nrqL8A8uwlIZk74HHCDjUAWrskKF9leEIQsB +5exFZ8JEo1u6mdR4laQWsxizGdTPqIEidkDyyEMh4+joHgyQEPD/G3rFVW8yEFHb +42O04O96BEPFXNPDRuX3MxI+lGbYDjxTS/WhVub4/3SqLjC28FJmEUXIHA0/A+c5 +hlYXK0u+aPAqXxHIjBgB4BxxHXZKqecmvR3LhXoVmhJmndsVfKajB27nDKc8/OTI +H2SXb6h3nRPDXRfwB/C5i+004tEsVeIgkYshcCgLSyDdeVieUP2pm3EAmDSjmtLF +6CgY/EBSfH+JCKFUk75bA4k8CCGzBfIeOcsKHwgFAgMBAAEwDQYJKoZIhvcNAQEL +BQADggEBAInDuHtDkeT6dkWmRJCP56c4xiQqib2QuYUuMSrAhf07xlLHc6iHnD2X +hCWCrja6uwF90DnPjeouKMAUe5txq/uKA8/Y/NfXN6nPiAeHLI0qnTv7Mr9TQ8zU +DNDwRz6onlI2cS4GhrwAnlpiaxu7AjMUWHtfBFGFrgn3PawjDQpsBZNcxw1QsLc0 +E0hFrWLOd0vDETEhoRge88N7a0jqK0Rd9cvRWnvjI+IsjQMLZzKufivIHPzI9K+9 +Wtp8iRHcaBr5DpsBjgsO7dqVRbsNyaWsdHdLt+CQSGXpv7P6fq3K6nJFTBeIgSfS +gflrHVKYZRkKDDDpX4yHNdnIqrvy4RU= +-----END CERTIFICATE----- diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/server-key-verify-fail.pem mysql-5.6-5.6.33/mysql-test/std_data/server-key-verify-fail.pem --- mysql-5.6-5.6.27/mysql-test/std_data/server-key-verify-fail.pem 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/server-key-verify-fail.pem 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAvfCda4mh3Nlir1MAlGYdTv33kUDdMRZ1SKdhOAY/v1pNVDgz +1p4g2UHrCFZc4jyx6H0lrsLqQzOo6BhuAKVaUM8BUlaS0Vh5Zc4vFunOHUpaRLqM +GRZPTa3sfslxhuKXvGOUlTEvPhQ45QNQMg/rKp0D1UTeiwRK22POPntmbbE+rNsg +dUl85GfsR7EfimvJLvjf2nqLhe18vfU0nxXTszePdrwaptwSpdi9xQKsufLANDWK +A/zXtvq1rnaduBhaKp2fSYmznflQn+n+tKUPgB7/obcFIRjvCGKvrFjq+x3gonrD +7BEIedjSTLo50MlUksfWKqHuyLs/dEEaTHBjswIDAQABAoIBAQCSUyNzDPydXvsf +hhoUOParPAvU4tuETYDdD9Vdi7Lgf3jDQOjulbNIq/ec3KuBvrBwIrk9APvn+YxO +AUP9S2Vgi5jBDeDdVgNv4n90b3pSJk2UVQJI8V72wN5Ibnf/KeErSKvWo6V5daq/ +AuZtKsZIdd3WFtA62HuyuBjTGc23Alj1C0EKnN0Rx1uBwDvx/OVQ266Us/x8jJqW +ZxIOfcvfNzBQEa5hAzbQCReVaC+rBLRAcMM2yGP7aDa+8cRkwuVlSqpX8CXBdLoU +PqmU49etcW72Rb1AFt9WgEu1Oh9UYbHFSB+FEbO8IGcGBsuYHf9zkxQyjpy/iKyT +H5dTu7YBAoGBAOWqEGepZVrfB+P6X18n3vbJhgYmF0sa0mCmwkFYgk36yNqsZ8at +lQjm5mbn4wjEKHIcQ/T1taq73W471M+PxMnn0WTwoG5jsyarZGgy6/95YXiyZtQe +qgA4P3aKkCteRP22DjG7uxmm9Hoqx8Z31vfRTLAHN1IEHPHHkg/J3gPTAoGBANO4 +aqKeY4vcDvVkvxVbADrw++tZGwA+RuxfO4HKKru59VdA2PsAxhXwb3Dfejwj7hYW +yE9edHjGpMr1+dpf8YJYs7qjajHe1HxBOYqQGHycIdw+Gv56R4HpaS9eW3x8l/Pi +b4xnAodv2qIriACOe7br+rll4wKX46Wt64zdvpShAoGAT0r3HQM0Vjp4u/J+qRjX +9za+yjKuiiS5i9snaG5JlujGHhG2Rrc5pHgsBk17alRnbnZp1BJdZZQ1MFEB+aO2 +mssp1YLqsRJFEU3NfdhO+MaMq6JUtFnd8fN5ndDbU83ZXgtUPUGGqKWm9OL+VHyd +wLQHmSL0q6F16Ngxirf0qjcCgYEAtSmiJVA+gdhk/FmeoBlkEwtNpM50Kjsf2PaM +Jrzk4Al5A5Y7lFvPI8q+sOio4XklKsWH1VJPe2EOdZUQnGlocE6SS+u03MN9Mm1l +XUl7inTXDGwgEQx0z5b4KE4nHlhGdauWI5+pLFbrz8RL9Z32AkneGnIyU2/AnW46 +lijQAMECgYEAmgp/88ndIw49RCtMhYhtXQ87AsEAP6kzXQyKppDkn0os+xI5igIL +i/UDxB33hx3yjrUZwoGDV9MwlMhZNX5Tf5bwjPmmh1NR6KdEpPt5AkklX4s6uil2 +Bxl1P5l1jl/PbEYtv5LDZKIPANWRzViMSIWqjUWlbdqE7/vjx+Oo+cc= +-----END RSA PRIVATE KEY----- diff -Nru mysql-5.6-5.6.27/mysql-test/std_data/server-key-verify-pass.pem mysql-5.6-5.6.33/mysql-test/std_data/server-key-verify-pass.pem --- mysql-5.6-5.6.27/mysql-test/std_data/server-key-verify-pass.pem 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/std_data/server-key-verify-pass.pem 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwJpG1MA3vp66i/APLsJSGZO+Bxwg41AFq7JChfZXhCELAeXs +RWfCRKNbupnUeJWkFrMYsxnUz6iBInZA8shDIePo6B4MkBDw/xt6xVVvMhBR2+Nj +tODvegRDxVzTw0bl9zMSPpRm2A48U0v1oVbm+P90qi4wtvBSZhFFyBwNPwPnOYZW +FytLvmjwKl8RyIwYAeAccR12SqnnJr0dy4V6FZoSZp3bFXymowdu5wynPPzkyB9k +l2+od50Tw10X8AfwuYvtNOLRLFXiIJGLIXAoC0sg3XlYnlD9qZtxAJg0o5rSxego +GPxAUnx/iQihVJO+WwOJPAghswXyHjnLCh8IBQIDAQABAoIBAHPQUSc9LkgBSks7 +XuXPE28t1+aOk3gcdkx4NGg5aQaal/PcPea+LaL4WAAs4AZidPjxWLjZn43+1SfT +09opcbS/Rx3Mc+FtTn0YGQrwBJ0mExMV+K6bU2Ubi2TyHKQfzciHfUEEG5Nve/ba +hikuCFVRxuVOQRzABcw6NqvNsmlg892lfw6/+RDwMBcz7ocwzmiOUoIxgjyFo9G4 +aJvRmHLij5892H6qveik+A/Xr+8leGQHiQET2wW/F9MFP5ypIT7aeE6remeZH7fG +f4/Zfei/TE4xK2ElNR/91byzeKIVY4vjtTndAiBuqpfYuICb40MC02LNW5Oe6VN2 +3mQ6EgECgYEA7O4ndBnbs/00gyTGyNg6I+3wRTibhNH4R8RZFJiLfKRKOlUiLhUo ++bQeO4bCQ6YY++TYDvMEXTlA3jow9R9Mj2AWc6bNmQmJd/065QyFHftywT66I+V4 +rz1ohSJyHXcv4DxqNk3o3Vb4N8GFjZKcodSgTv2Lk+9ipDYFcQiZop0CgYEA0BrF +SIyLTnjoVht/7RbIGEqhMQUiz5mx7qQ1TPB+YTG77G2xXJNg5d6S7WT4LN+cqbxN +YdndIbW4NdV7bH7FlG9q7jfkuZ+AY2BPU047tcDeyO0HYYEhVY+EyZqHci/26mvt +JrawdqS5HQS1y/rKfytm7YBGTvqoNZHvOHc6aokCgYEAxcjlbJkte+pyzMuFmiJP +HrFBczeXM+BoJ9j0GCpjvvAS+vEYsGl/pDvFRSHwx7I/hv/5kTkzOnNSAHGJbwbq +zYGEHJVxakC43k6pvI2gDnBa0pD/qHmmLnvP5dvkcU6Oy90DOUP+kc9JNJo7V/y8 +/qdWD7q+qwcaTETAdCSexE0CgYA/DN1Y7bwHOnqqHArWOmDFe1b7EyNI4rgWJYpA +lVy09eyJ5XInKj/hZV3+rujCL723b2XCj89/tx7osJWEeaRDJL6xDh4uXzT25uch +xkIw/w6Asc/aqtT+p00EB92hqwaUX76qTA+K4r1zHUo3UvSnMu8sZgDnTOpJ0L05 +zmXUgQKBgDT+IFrAzOty4B0mJncTCC/TulpW704bEZwNJfQSdtiBQr/vqoXygBQc +bHfpncpSfhzHB5lhRUv02TqXgl53D70nM7JD5nx98WYTTBxsbvxPlt4gBRZkfgq5 +tHKclAArc1SbfW5Z8oYyl7h33LQJK116QSyiIIGieH5VXNPwnqUs +-----END RSA PRIVATE KEY----- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/auth_sec/r/cert_verify.result mysql-5.6-5.6.33/mysql-test/suite/auth_sec/r/cert_verify.result --- mysql-5.6-5.6.27/mysql-test/suite/auth_sec/r/cert_verify.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/auth_sec/r/cert_verify.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,5 @@ +#T1: Host name (/CN=localhost/) as OU name in the server certificate, server certificate verification should fail. +#T2: Host name (localhost) as common name in the server certificate, server certificate verification should pass. +Variable_name Value +Ssl_version TLS_VERSION +# restart server using restart diff -Nru mysql-5.6-5.6.27/mysql-test/suite/auth_sec/t/cert_verify.test mysql-5.6-5.6.33/mysql-test/suite/auth_sec/t/cert_verify.test --- mysql-5.6-5.6.27/mysql-test/suite/auth_sec/t/cert_verify.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/auth_sec/t/cert_verify.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,45 @@ +# Want to skip this test from Valgrind execution +--source include/no_valgrind_without_big.inc +# This test should work in embedded server after we fix mysqltest +-- source include/not_embedded.inc +-- source include/have_ssl_communication.inc +# Save the initial number of concurrent sessions +--source include/count_sessions.inc + +let $ssl_verify_fail_path = --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-key=$MYSQL_TEST_DIR/std_data/server-key-verify-fail.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert-verify-fail.pem; +let $ssl_verify_pass_path = --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-key=$MYSQL_TEST_DIR/std_data/server-key-verify-pass.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert-verify-pass.pem; + +let $tls_default= TLSv1; + +--echo #T1: Host name (/CN=localhost/) as OU name in the server certificate, server certificate verification should fail. +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--exec echo "restart:" $ssl_verify_fail_path > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +--error 1 +--exec $MYSQL --protocol=tcp --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-verify-server-cert -e "SHOW STATUS like 'Ssl_version'" + +--echo #T2: Host name (localhost) as common name in the server certificate, server certificate verification should pass. +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--exec echo "restart:" $ssl_verify_pass_path > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +--replace_result $tls_default TLS_VERSION +--exec $MYSQL --protocol=tcp --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-verify-server-cert -e "SHOW STATUS like 'Ssl_version'" + +--echo # restart server using restart +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--exec echo "restart: " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_database.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_database.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_database.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_database.result 2016-08-26 11:22:35.000000000 +0000 @@ -205,7 +205,7 @@ master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ FLUSH STATUS; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_dmls_on_tmp_tables_readonly.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_dmls_on_tmp_tables_readonly.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_dmls_on_tmp_tables_readonly.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_dmls_on_tmp_tables_readonly.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,58 @@ +DROP TABLE IF EXISTS t1 ; +# READ_ONLY does nothing to SUPER users +# so we use a non-SUPER one: +GRANT CREATE, SELECT, DROP ON *.* TO test@localhost; +connect con1,localhost,test,,test; +connection default; +SET GLOBAL READ_ONLY=1; +connection con1; +CREATE TEMPORARY TABLE t1 (a INT) ENGINE=INNODB; +# Test INSERTS with autocommit being off and on. +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +INSERT INTO t1 VALUES (20); +# Test UPDATES with autocommit being off and on. +BEGIN; +UPDATE t1 SET a=30 WHERE a=10; +COMMIT; +UPDATE t1 SET a=40 WHERE a=20; +connection default; +SET GLOBAL READ_ONLY=0; +# Test scenario where global read_only is enabled in the middle of transaction. +# Test INSERT operations on temporary tables, INSERTs should be successful even +# when global read_only is enabled. +connection con1; +BEGIN; +INSERT INTO t1 VALUES(50); +connection default; +SET GLOBAL READ_ONLY=1; +connection con1; +SELECT @@GLOBAL.READ_ONLY; +@@GLOBAL.READ_ONLY +1 +COMMIT; +connection default; +SET GLOBAL READ_ONLY=0; +# Test UPDATE operations on temporary tables, UPDATEs should be successful even +# when global read_only is enabled. +connection con1; +BEGIN; +UPDATE t1 SET a=60 WHERE a=50; +connection default; +SET GLOBAL READ_ONLY=1; +connection con1; +SELECT @@GLOBAL.READ_ONLY; +@@GLOBAL.READ_ONLY +1 +COMMIT; +SELECT * FROM t1; +a +30 +40 +60 +# Clean up +connection default; +SET GLOBAL READ_ONLY=0; +disconnect con1; +DROP USER test@localhost; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_enforce_gtid_consistency.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_enforce_gtid_consistency.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_enforce_gtid_consistency.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_enforce_gtid_consistency.result 2016-08-26 11:22:35.000000000 +0000 @@ -51,11 +51,11 @@ DROP TEMPORARY TABLE t1; BEGIN; CREATE TEMPORARY TABLE t1 (a INT) ENGINE = InnoDB; -ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. COMMIT; SET AUTOCOMMIT = 0; CREATE TEMPORARY TABLE t1 (a INT) ENGINE = InnoDB; -ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. SET AUTOCOMMIT = 1; CREATE TEMPORARY TABLE t1 (a INT) ENGINE = InnoDB; BEGIN; @@ -67,11 +67,11 @@ ALTER TABLE t1 ADD COLUMN (d INT); BEGIN; DROP TEMPORARY TABLE t1; -ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. COMMIT; SET AUTOCOMMIT = 0; DROP TEMPORARY TABLE t1; -ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. COMMIT; SET AUTOCOMMIT = 1; DROP TEMPORARY TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_error_action.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_error_action.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_error_action.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_error_action.result 2016-08-26 11:22:35.000000000 +0000 @@ -6,28 +6,30 @@ call mtr.add_suppression("Could not use .*"); call mtr.add_suppression("Can't generate a unique log-filename master-bin"); call mtr.add_suppression("The server was unable to create a new log file *"); -call mtr.add_suppression("An error occured during flushing cache to file."); +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("An error occurred during sync stage of the commit"); call mtr.add_suppression("Either disk is full or file system is read only"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); RESET MASTER; Test case1 SET GLOBAL binlog_error_action= ABORT_SERVER; flush logs; -ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while rotating the binlog. Aborting the server +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while rotating the binlog. Aborting the server. Test case2 SET SESSION debug="+d,fault_injection_updating_index"; SET GLOBAL binlog_error_action= ABORT_SERVER; flush logs; -ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server. Test case3 SET SESSION debug="+d,simulate_disk_full_on_open_binlog"; SET GLOBAL binlog_error_action= ABORT_SERVER; flush logs; -ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server. Test case4 SET SESSION debug="+d,fault_injection_init_name"; SET GLOBAL binlog_error_action= ABORT_SERVER; flush logs; -ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while opening the binlog. Aborting the server. Test case5 flush logs; ERROR HY000: File 'master-bin.index' not found (Errcode: 13 - Permission denied) @@ -61,20 +63,7 @@ t2 DROP TABLE t2; SET SESSION debug="-d,fault_injection_init_name"; -Test case9 -CREATE TABLE t1(i INT); -SET SESSION debug="+d,simulate_error_during_flush_cache_to_file"; -SET GLOBAL binlog_error_action= ABORT_SERVER; -INSERT INTO t1 VALUES (1); -ERROR HY000: Binary logging not possible. Message: An error occured during flushing cache to file. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server -include/assert.inc [Count of elements in t1 should be 0.] -SET SESSION debug="+d,simulate_error_during_flush_cache_to_file"; -SET GLOBAL binlog_error_action= IGNORE_ERROR; -INSERT INTO t1 VALUES (2); -include/assert.inc [Count of elements in t1 should be 1.] -DROP table t1; -SET SESSION debug="-d,simulate_error_during_flush_cache_to_file"; -"Test case10" +Test case09 CREATE TABLE t1 (a INT) ENGINE=InnoDB; SET SESSION debug='+d,error_unique_log_filename'; FLUSH LOGS; @@ -84,11 +73,99 @@ SET SESSION debug=""; SHOW BINARY LOGS; ERROR HY000: You are not using binary logging -"Test case11" +Test case10 CREATE TABLE t1 (a INT) ENGINE=InnoDB; SET GLOBAL binlog_error_action=ABORT_SERVER; SET SESSION debug='+d,error_unique_log_filename'; FLUSH LOGS; -ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while rotating the binlog. Aborting the server +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only while rotating the binlog. Aborting the server. DROP TABLE t1; -SET SESSION debug=""; +Test case11 +RESET MASTER; +CREATE TABLE t1(i INT); +SET SESSION debug = "+d,simulate_error_during_flush_cache_to_file"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +INSERT INTO t1 VALUES (1); +ERROR HY000: Binary logging not possible. Message: An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server. +include/assert.inc [Count of elements in t1 should be 0.] +include/assert.inc [Query is not binlogged as expected.] +RESET MASTER; +SET SESSION debug ="+d,simulate_error_during_flush_cache_to_file"; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +INSERT INTO t1 VALUES (2); +include/assert.inc [Count of elements in t1 should be 1.] +include/assert.inc [Query is not binlogged as expected.] +DROP TABLE t1; +RESET MASTER; +Test case12 +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +INSERT INTO t1 VALUES (1); +ERROR HY000: Binary logging not possible. Message: An error occurred during sync stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server. +DELETE FROM t1; +RESET MASTER; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +SET GLOBAL binlog_error_action = IGNORE_ERROR; +INSERT INTO t1 VALUES (2); +include/assert.inc [Count of elements in t1 should be 1.] +DROP table t1; +SET SESSION debug = "-d,simulate_error_during_sync_binlog_file"; +RESET MASTER; +Test case13 +CREATE TABLE t1(i INT); +SET SESSION debug = "+d,simulate_do_write_cache_failure"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +INSERT INTO t1 VALUES (1); +ERROR HY000: Binary logging not possible. Message: An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server. +include/assert.inc [Count of elements in t1 should be 0.] +include/assert.inc [Query is not binlogged as expected.] +RESET MASTER; +SET SESSION debug = "+d,simulate_do_write_cache_failure"; +SET GLOBAL binlog_error_action = IGNORE_ERROR; +INSERT INTO t1 VALUES (2); +include/assert.inc [Count of elements in t1 should be 1.] +DROP table t1; +RESET MASTER; +Test case14 +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +SET DEBUG_SYNC = "waiting_to_enter_flush_stage SIGNAL about_to_enter_flush_stage WAIT_FOR binlog_closed"; +INSERT INTO t1 values (1);; +SET DEBUG_SYNC = "now wait_for about_to_enter_flush_stage"; +SET DEBUG_SYNC = "after_binlog_closed_due_to_error SIGNAL binlog_closed"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +INSERT INTO t2 values (2);; +DROP table t1, t2; +Test case15 +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL binlog_about_to_be_closed WAIT_FOR in_the_middle_of_flush_stage"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +INSERT INTO t1 values (1);; +SET DEBUG_SYNC = "now wait_for binlog_about_to_be_closed"; +SET DEBUG_SYNC = "waiting_in_the_middle_of_flush_stage SIGNAL in_the_middle_of_flush_stage"; +INSERT INTO t2 values (2);; +DROP table t1, t2; +Test case16 +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL binlog_about_to_be_closed WAIT_FOR another_group_encountered_flush_error"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +INSERT INTO t1 values (1);; +SET DEBUG_SYNC = "now wait_for binlog_about_to_be_closed"; +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL another_group_encountered_flush_error"; +SET SESSION debug ="+d,simulate_error_during_flush_cache_to_file"; +INSERT INTO t2 values (2);; +Matching lines are: +--TIME-- [ERROR] An error occurred during flush_or_sync stage stage of the commit. 'binlog_error_action' is set to 'IGNORE_ERROR'. Hence turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. + +Occurrences of the An error occurred during in the input file : 1 +DROP table t1, t2; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_exhausted.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_exhausted.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_exhausted.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_exhausted.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); +SET GLOBAL binlog_error_action=IGNORE_ERROR; +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +RESET MASTER; +SET GLOBAL gtid_purged = CONCAT(@@GLOBAL.server_uuid, ':1-9223372036854775805'); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +ERROR HY000: Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new server_uuid. +include/assert.inc [Count of elements in t1 should be 2.] +RESET MASTER; +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +RESET MASTER; +SET GLOBAL gtid_purged = CONCAT(@@GLOBAL.server_uuid, ':1-9223372036854775805'); +INSERT INTO t1 VALUES (1); +SET GLOBAL binlog_error_action=ABORT_SERVER; +INSERT INTO t1 VALUES (2); +ERROR HY000: Binary logging not possible. Message: An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server. +RESET MASTER; +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_innodb.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_innodb.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_innodb.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_innodb.result 2016-08-26 11:22:35.000000000 +0000 @@ -2711,7 +2711,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3239,7 +3239,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3335,7 +3335,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3703,7 +3703,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_myisam.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_myisam.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_myisam.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row_myisam.result 2016-08-26 11:22:35.000000000 +0000 @@ -2715,7 +2715,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3249,7 +3249,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3347,7 +3347,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3721,7 +3721,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_gtid_mysqlbinlog_row.result 2016-08-26 11:22:35.000000000 +0000 @@ -358,6 +358,19 @@ INSERT INTO t2 SET b=1; UPDATE t1, t2 SET t1.a=10, t2.a=20; DROP TABLE t1,t2; +CREATE TABLE t1(a BINARY(16), b VARBINARY(32)); +INSERT INTO t1 VALUES (0x275c275c3132,0x5c78276566); +UPDATE t1 SET a= 0x5c27; +DELETE FROM t1 where b=0x5c78276566; +DROP TABLE t1; +CREATE TABLE t1(i INT, a CHAR(16), b VARCHAR(32)); +INSERT INTO t1 VALUES(1, 'a''b', 'a''b'); +INSERT INTO t1 VALUES(2, 'a\\b', 'a\\b'); +UPDATE t1 SET a='a\\b', b='a\\b' WHERE i=1; +UPDATE t1 SET a='a''b', b='a''b' WHERE i=2; +DELETE FROM t1 WHERE a='a''b' AND b='a''b'; +DELETE FROM t1 WHERE a='a\\b' AND b='a\\b'; +DROP TABLE t1; flush logs; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; @@ -5393,6 +5406,244 @@ SET TIMESTAMP=1000000000/*!*/; DROP TABLE `t1`,`t2` /* generated by server */ /*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +CREATE TABLE t1(a BINARY(16), b VARBINARY(32)) +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1='\x27\x5c\x27\x5c12' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1='\x27\x5c\x27\x5c12' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1='\x5c\x27' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1='\x5c\x27' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +DROP TABLE `t1` /* generated by server */ +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +CREATE TABLE t1(i INT, a CHAR(16), b VARCHAR(32)) +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # GTID [commit=yes] +SET @@SESSION.GTID_NEXT= 'GTID'/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +DROP TABLE `t1` /* generated by server */ +/*!*/; SET @@SESSION.GTID_NEXT= 'GTID' /* added by mysqlbinlog */ /*!*/; # at # #010909 4:46:40 server id 1 end_log_pos # CRC32 # Rotate to master-bin.000002 pos: 4 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_index.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_index.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_index.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_index.result 2016-08-26 11:22:35.000000000 +0000 @@ -324,5 +324,65 @@ master-bin.000018 # master-bin.000019 # master-bin.000020 # +# Test case11: Bug #20381055SERVER CRASHES IF INDEX FILE IS OPENED BY +SET SESSION debug="d,force_index_file_delete_failure"; +call mtr.add_suppression("Failed to delete the existing index file"); +call mtr.add_suppression("failed to move crash safe index file to index file"); +call mtr.add_suppression("failed to update the index file"); +PURGE BINARY LOGS TO 'master-bin.000014';; +ERROR HY000: I/O error reading log index file +# Test the index file is complete, although is not purged successfully. +# Also this will indicate that binary logging is not disabled. +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +FLUSH LOGS; +ERROR HY000: Can't open file: 'master-bin.000021' (errno: 1 - Operation not permitted) +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +master-bin.000021 # +CREATE TABLE t1(i INT); +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +SET SESSION debug="+d,force_index_file_delete_failure"; +SET SESSION debug="+d,force_rotate"; +INSERT INTO t1 VALUES (12); +ERROR HY000: Can't open file: 'master-bin.000022' (errno: 1 - Operation not permitted) +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +master-bin.000021 # +master-bin.000022 # +DROP TABLE t1; +# Test case11: Ends SET SESSION debug=""; End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_innodb_row.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_innodb_row.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_innodb_row.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_innodb_row.result 2016-08-26 11:22:35.000000000 +0000 @@ -57,7 +57,7 @@ ############################################### include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */ ############################################### # # Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_killed.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_killed.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_killed.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_killed.result 2016-08-26 11:22:35.000000000 +0000 @@ -100,9 +100,8 @@ *** a proof the query is binlogged with an error *** select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null +is not null AS Loaded; +Loaded 1 select 0 /* must return 0 to mean the killed update is in */; 0 @@ -138,9 +137,8 @@ master-bin.000001 # Query # # COMMIT select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null +is not null AS Loaded; +Loaded 1 select 0 /* must return 0 to mean the killed delete is in */; 0 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_killed_simulate.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_killed_simulate.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_killed_simulate.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_killed_simulate.result 2016-08-26 11:22:35.000000000 +0000 @@ -5,9 +5,8 @@ update t1 set a=2 /* will be "killed" after work has been done */; select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null +is not null AS Loaded; +Loaded 1 select 1 /* must return 1 as query completed before got killed*/; 1 @@ -24,9 +23,8 @@ master-bin.000001 # Query # # COMMIT select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null +is not null AS Loaded; +Loaded 1 select 0 /* must return 0 to mean the killed query is in */; 0 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result 2016-08-26 11:22:35.000000000 +0000 @@ -2696,7 +2696,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3215,7 +3215,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3308,7 +3308,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3667,7 +3667,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result 2016-08-26 11:22:35.000000000 +0000 @@ -2700,7 +2700,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3225,7 +3225,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3320,7 +3320,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ @@ -3685,7 +3685,7 @@ ### @61='' /* VARSTRING(0) meta=0 nullable=1 is_null=0 */ ### @62='b' /* VARSTRING(1) meta=1 nullable=1 is_null=0 */ ### @63='ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' /* VARSTRING(255) meta=255 nullable=1 is_null=0 */ -### @64=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ +### @64='\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27\x27' /* VARSTRING(261) meta=261 nullable=1 is_null=0 */ ### @65='tinyblob' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @66='tinytext' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ ### @67='\x00t\x00i\x00n\x00y\x00t\x00e\x00x\x00t\x00-\x00u\x00c\x00s\x002' /* TINYBLOB/TINYTEXT meta=1 nullable=1 is_null=0 */ diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result 2016-08-26 11:22:35.000000000 +0000 @@ -358,6 +358,19 @@ INSERT INTO t2 SET b=1; UPDATE t1, t2 SET t1.a=10, t2.a=20; DROP TABLE t1,t2; +CREATE TABLE t1(a BINARY(16), b VARBINARY(32)); +INSERT INTO t1 VALUES (0x275c275c3132,0x5c78276566); +UPDATE t1 SET a= 0x5c27; +DELETE FROM t1 where b=0x5c78276566; +DROP TABLE t1; +CREATE TABLE t1(i INT, a CHAR(16), b VARCHAR(32)); +INSERT INTO t1 VALUES(1, 'a''b', 'a''b'); +INSERT INTO t1 VALUES(2, 'a\\b', 'a\\b'); +UPDATE t1 SET a='a\\b', b='a\\b' WHERE i=1; +UPDATE t1 SET a='a''b', b='a''b' WHERE i=2; +DELETE FROM t1 WHERE a='a''b' AND b='a''b'; +DELETE FROM t1 WHERE a='a\\b' AND b='a\\b'; +DROP TABLE t1; flush logs; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; @@ -4398,6 +4411,205 @@ DROP TABLE `t1`,`t2` /* generated by server */ /*!*/; # at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +CREATE TABLE t1(a BINARY(16), b VARBINARY(32)) +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1='\x27\x5c\x27\x5c12' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1='\x27\x5c\x27\x5c12' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1='\x5c\x27' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1='\x5c\x27' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @2='\x5cx\x27ef' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +DROP TABLE `t1` /* generated by server */ +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +CREATE TABLE t1(i INT, a CHAR(16), b VARCHAR(32)) +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Write_rows: table id # flags: STMT_END_F +### INSERT INTO `test`.`t1` +### SET +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Update_rows: table id # flags: STMT_END_F +### UPDATE `test`.`t1` +### WHERE +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +### SET +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1=2 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x27b' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x27b' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +BEGIN +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Table_map: `test`.`t1` mapped to number # +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Delete_rows: table id # flags: STMT_END_F +### DELETE FROM `test`.`t1` +### WHERE +### @1=1 /* INT meta=0 nullable=1 is_null=0 */ +### @2='a\x5cb' /* STRING(16) meta=65040 nullable=1 is_null=0 */ +### @3='a\x5cb' /* VARSTRING(32) meta=32 nullable=1 is_null=0 */ +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +COMMIT +/*!*/; +# at # +#010909 4:46:40 server id 1 end_log_pos # CRC32 # Query thread_id=# exec_time=# error_code=0 +SET TIMESTAMP=1000000000/*!*/; +DROP TABLE `t1` /* generated by server */ +/*!*/; +# at # #010909 4:46:40 server id 1 end_log_pos # CRC32 # Rotate to master-bin.000002 pos: 4 DELIMITER ; # End of log file diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_rotate_bgc_sync.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_rotate_bgc_sync.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_rotate_bgc_sync.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_rotate_bgc_sync.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,42 @@ +SET @saved_binlog_error_action= @@GLOBAL.binlog_error_action; +SET GLOBAL binlog_error_action= ABORT_SERVER; +SET @saved_sync_binlog= @@GLOBAL.sync_binlog; +SET GLOBAL sync_binlog= 2; +[connection conn1] +CREATE TABLE t1 (c1 INT) ENGINE=MyISAM; +SET DEBUG_SYNC= 'before_sync_binlog_file SIGNAL holding_before_bgc_sync_binlog_file WAIT_FOR continue_bgc_sync_binlog_file'; +INSERT INTO t1 VALUES (1); +[connection conn2] +SET DEBUG_SYNC= 'NOW WAIT_FOR holding_before_bgc_sync_binlog_file'; +SET DEBUG_SYNC= 'before_rotate_binlog_file SIGNAL holding_before_rotate_binlog_file WAIT_FOR continue_rotate_binlog_file'; +FLUSH LOGS; +[connection default] +SET DEBUG_SYNC= 'now WAIT_FOR holding_before_rotate_binlog_file'; +SET DEBUG_SYNC= 'now SIGNAL continue_bgc_sync_binlog_file'; +SET DEBUG_SYNC= 'before_rotate_binlog_file CLEAR'; +SET DEBUG_SYNC = 'now SIGNAL continue_rotate_binlog_file'; +[connection conn1] +[connection conn2] +[connection default] +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; +[connection conn1] +CREATE TABLE t1 (c1 INT) ENGINE=InnoDB; +SET DEBUG_SYNC= 'before_sync_binlog_file SIGNAL holding_before_bgc_sync_binlog_file WAIT_FOR continue_bgc_sync_binlog_file'; +INSERT INTO t1 VALUES (1); +[connection conn2] +SET DEBUG_SYNC= 'NOW WAIT_FOR holding_before_bgc_sync_binlog_file'; +SET DEBUG_SYNC= 'before_rotate_binlog_file SIGNAL holding_before_rotate_binlog_file WAIT_FOR continue_rotate_binlog_file'; +FLUSH LOGS; +[connection default] +SET DEBUG_SYNC= 'now WAIT_FOR holding_before_rotate_binlog_file'; +SET DEBUG_SYNC= 'now SIGNAL continue_bgc_sync_binlog_file'; +SET DEBUG_SYNC= 'before_rotate_binlog_file CLEAR'; +SET DEBUG_SYNC = 'now SIGNAL continue_rotate_binlog_file'; +[connection conn1] +[connection conn2] +[connection default] +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; +SET GLOBAL binlog_error_action= @saved_binlog_error_action; +SET GLOBAL sync_binlog= @saved_sync_binlog; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_binlog.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_binlog.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_binlog.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_binlog.result 2016-08-26 11:22:35.000000000 +0000 @@ -559,7 +559,7 @@ COERCIBILITY(s1) d3; DROP TEMPORARY TABLE tmp1; END -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `bug39182`.`tmp1` /* generated by server */ +master-bin.000001 # Query # # use `bug39182`; DROP TEMPORARY TABLE IF EXISTS `tmp1` /* generated by server */ DROP PROCEDURE p1; DROP TABLE t1; DROP DATABASE bug39182; @@ -632,7 +632,7 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` ( `a` int(11) DEFAULT NULL -) +) ENGINE=InnoDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F @@ -673,7 +673,7 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` ( `a` int(11) DEFAULT NULL -) +) ENGINE=InnoDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F @@ -686,7 +686,7 @@ master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1`,`t2`,`t3` /* generated by server */ master-bin.000001 # Query # # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam master-bin.000001 # Query # # BEGIN diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result 2016-08-26 11:22:35.000000000 +0000 @@ -27,11 +27,11 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # CREATE DATABASE `drop-temp+table-test` master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TABLE t(c1 int) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp1`,`drop-temp+table-test`.`tmp` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp3` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp2` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp1`,`tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp3` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp2` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `tmp2`,`t` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1` diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2016-08-26 11:22:35.000000000 +0000 @@ -425,7 +425,7 @@ master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ reset master; create table t1 (a int) engine=innodb; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_sql_mode.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_sql_mode.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_sql_mode.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_sql_mode.result 2016-08-26 11:22:35.000000000 +0000 @@ -24,9 +24,8 @@ Check Result select (@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug39526.binlog")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug39526.binlog")) -is not null +is not null AS Loaded; +Loaded 1 *** String sql_mode=0 is found: 0 *** Clean Up diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result 2016-08-26 11:22:35.000000000 +0000 @@ -34,11 +34,11 @@ master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp2(c1 int) master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp3(c1 int) master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TABLE t(c1 int) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp1`,`drop-temp+table-test`.`tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp1`,`tmp` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE `tmp3` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `drop-temp+table-test`.`tmp2` /* generated by server */ +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp2` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `tmp2`,`t` /* generated by server */ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1` diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result --- mysql-5.6-5.6.27/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2016-08-26 11:22:35.000000000 +0000 @@ -442,9 +442,8 @@ flush logs; select (@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output")) -is not null; -(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output")) -is not null +is not null AS Loaded; +Loaded 1 select @a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_dmls_on_tmp_tables_readonly.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_dmls_on_tmp_tables_readonly.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_dmls_on_tmp_tables_readonly.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_dmls_on_tmp_tables_readonly.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,90 @@ +# ==== Purpose ==== +# +# Check that DMLs are allowed on temporary tables, when server is in read only +# mode and binary log is enabled with binlog-format being stmt/mixed mode. +# +# ==== Implementation ==== +# +# Start the server with binary log being enabled. Mark the server as read only. +# Create a non-SUPER user and let the user to create a temporary table and +# perform DML operations on that temporary table. DMLs should not be blocked +# with a 'server read-only mode' error. +# +# ==== References ==== +# +# Bug#12818255: READ-ONLY OPTION DOES NOT ALLOW INSERTS/UPDATES ON TEMPORARY +# TABLES +# Bug#14294223: CHANGES NOT ALLOWED TO TEMPORARY TABLES ON READ-ONLY SERVERS +############################################################################### +--source include/have_log_bin.inc +--disable_warnings +DROP TABLE IF EXISTS t1 ; +--enable_warnings + +--enable_connect_log +--echo # READ_ONLY does nothing to SUPER users +--echo # so we use a non-SUPER one: +GRANT CREATE, SELECT, DROP ON *.* TO test@localhost; + +connect (con1,localhost,test,,test); + +connection default; +SET GLOBAL READ_ONLY=1; + +connection con1; +CREATE TEMPORARY TABLE t1 (a INT) ENGINE=INNODB; + +--echo # Test INSERTS with autocommit being off and on. +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +INSERT INTO t1 VALUES (20); + +--echo # Test UPDATES with autocommit being off and on. +BEGIN; +UPDATE t1 SET a=30 WHERE a=10; +COMMIT; +UPDATE t1 SET a=40 WHERE a=20; + +connection default; +SET GLOBAL READ_ONLY=0; + +--echo # Test scenario where global read_only is enabled in the middle of transaction. +--echo # Test INSERT operations on temporary tables, INSERTs should be successful even +--echo # when global read_only is enabled. +connection con1; +BEGIN; +INSERT INTO t1 VALUES(50); + +connection default; +SET GLOBAL READ_ONLY=1; + +connection con1; +SELECT @@GLOBAL.READ_ONLY; +COMMIT; + +connection default; +SET GLOBAL READ_ONLY=0; + +--echo # Test UPDATE operations on temporary tables, UPDATEs should be successful even +--echo # when global read_only is enabled. +connection con1; +BEGIN; +UPDATE t1 SET a=60 WHERE a=50; + +connection default; +SET GLOBAL READ_ONLY=1; + +connection con1; +SELECT @@GLOBAL.READ_ONLY; +COMMIT; + +SELECT * FROM t1; + +--echo # Clean up +connection default; +SET GLOBAL READ_ONLY=0; + +disconnect con1; +DROP USER test@localhost; +--disable_connect_log diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_error_action-master.opt mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_error_action-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_error_action-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_error_action-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--no-console --skip-core-file --log-error=$MYSQLTEST_VARDIR/tmp/binlog_error_action.err diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_error_action.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_error_action.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_error_action.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_error_action.test 2016-08-26 11:22:35.000000000 +0000 @@ -22,6 +22,7 @@ # Don't test this under valgrind, memory leaks will occur --source include/not_valgrind.inc --source include/have_debug.inc +--source include/have_debug_sync.inc # Avoid CrashReporter popup on Mac --source include/not_crashrep.inc @@ -33,8 +34,10 @@ call mtr.add_suppression("Could not use .*"); call mtr.add_suppression("Can't generate a unique log-filename master-bin"); call mtr.add_suppression("The server was unable to create a new log file *"); -call mtr.add_suppression("An error occured during flushing cache to file."); +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("An error occurred during sync stage of the commit"); call mtr.add_suppression("Either disk is full or file system is read only"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); let $old=`select @@debug`; RESET MASTER; @@ -136,35 +139,6 @@ SET SESSION debug="-d,fault_injection_init_name"; --source include/restart_mysqld.inc ---echo Test case9 -CREATE TABLE t1(i INT); -# Simulate error during flushing cache to file and test the behaviour -# when binlog_error_action is set to ABORT_SERVER/IGNORE_ERROR. -SET SESSION debug="+d,simulate_error_during_flush_cache_to_file"; -SET GLOBAL binlog_error_action= ABORT_SERVER; ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---error ER_BINLOG_LOGGING_IMPOSSIBLE -INSERT INTO t1 VALUES (1); ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---enable_reconnect ---source include/wait_until_connected_again.inc - ---let $assert_cond= COUNT(*) = 0 FROM t1; ---let $assert_text= Count of elements in t1 should be 0. ---source include/assert.inc - -SET SESSION debug="+d,simulate_error_during_flush_cache_to_file"; -SET GLOBAL binlog_error_action= IGNORE_ERROR; -INSERT INTO t1 VALUES (2); - ---let $assert_cond= COUNT(*) = 1 FROM t1; ---let $assert_text= Count of elements in t1 should be 1. ---source include/assert.inc - -DROP table t1; -SET SESSION debug="-d,simulate_error_during_flush_cache_to_file"; ---source include/restart_mysqld.inc - ############################################################################### # Bug#20805298: BINLOG_ERROR_ACTION DOESN'T HANDLE SOME # FAILURES DURING BINLOG ROTATION @@ -183,7 +157,7 @@ # the # server aborts when creation of new binarylog file name fails. ############################################################################### -echo "Test case10"; +--echo Test case09 # Test error scenario with binlog_error_action=IGNORE_ERROR CREATE TABLE t1 (a INT) ENGINE=InnoDB; SET SESSION debug='+d,error_unique_log_filename'; @@ -196,7 +170,7 @@ SHOW BINARY LOGS; --source include/restart_mysqld.inc -echo "Test case11"; +--echo Test case10 # Test error scenario with binlog_error_action=ABORT_SERVER CREATE TABLE t1 (a INT) ENGINE=InnoDB; @@ -210,5 +184,306 @@ --source include/wait_until_connected_again.inc DROP TABLE t1; +############################################################################### +# BUG#16666407BINLOG WRITE ERRORS SILENTLY IGNORED +# BUG#20938915 2PC SUCCEEDS EVEN THOUGH BINLOG FLUSH/SYNC FAILS +############################################################################### + +############################ +--echo Test case11 +############################ + +# Simulate error during flushing cache to file and test the behaviour +# when binlog_error_action is set to ABORT_SERVER/IGNORE_ERROR. + +# Case 11.1 (binlog_error_action = ABORT_SERVER) +--source include/shutdown_mysqld.inc +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_error_action.err +--source include/start_mysqld.inc +RESET MASTER; + +CREATE TABLE t1(i INT); +--let $log_pos_before = query_get_value("SHOW BINARY LOGS", File_size, 1) +SET SESSION debug = "+d,simulate_error_during_flush_cache_to_file"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +# Check that flush error causing server to abort and client gets +# ER_BINLOG_LOGGING_IMPOSSIBLE when binlog_error_action= 'ABORT_SERVER'. +--error ER_BINLOG_LOGGING_IMPOSSIBLE +INSERT INTO t1 VALUES (1); +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +# Check that error present in error log +--let SEARCH_FILE = $MYSQLTEST_VARDIR/tmp/binlog_error_action.err +--let SEARCH_PATTERN = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. +--source include/search_pattern_in_file.inc + +# Check that transaction is not committed +--let $assert_cond= COUNT(*) = 0 FROM t1; +--let $assert_text= Count of elements in t1 should be 0. +--source include/assert.inc + +# Check that transaction is not binlogged as well +--let $log_pos_after = query_get_value("SHOW BINARY LOGS", File_size, 1) +--let $assert_cond = $log_pos_before = $log_pos_after +--let $assert_text = Query is not binlogged as expected. +--source include/assert.inc + +# Case 11.2 (binlog_error_action = IGNORE_ERROR) +RESET MASTER; +--let $log_pos_before = query_get_value("SHOW BINARY LOGS", File_size, 1) +SET SESSION debug ="+d,simulate_error_during_flush_cache_to_file"; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +INSERT INTO t1 VALUES (2); + +# Check that transaction is committed +--let $assert_cond = COUNT(*) = 1 FROM t1; +--let $assert_text = Count of elements in t1 should be 1. +--source include/assert.inc + +# Restart so that binary log is enabled again and we can do the below test +--source include/restart_mysqld.inc + +# Check that transaction is not binlogged +--let $log_pos_after = query_get_value("SHOW BINARY LOGS", File_size, 1) +--let $assert_cond = $log_pos_before = $log_pos_after +--let $assert_text = Query is not binlogged as expected. +--source include/assert.inc + +# Check that error present in error log +--let SEARCH_FILE = $MYSQLTEST_VARDIR/tmp/binlog_error_action.err +--let SEARCH_PATTERN = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'IGNORE_ERROR'. +--source include/search_pattern_in_file.inc + # Cleanup -eval SET SESSION debug="$old"; +DROP TABLE t1; +RESET MASTER; + +############################ +--echo Test case12 +############################ + +# Simulate error during syncing binlog file and test the behaviour +# when binlog_error_action is set to ABORT_SERVER/IGNORE_ERROR. +# Set sync_binlog=1 just to make sure that logic enters into sync phase. + +# Case 12.1 (binlog_error_action = ABORT_SERVER) +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +# Check that sync error causing server to abort and client gets +# ER_BINLOG_LOGGING_IMPOSSIBLE when binlog_error_action= 'ABORT_SERVER'. +--error ER_BINLOG_LOGGING_IMPOSSIBLE +INSERT INTO t1 VALUES (1); + +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +# Cleanup +DELETE FROM t1; +RESET MASTER; + +# Case 12.2 (binlog_error_action = IGNORE_ERROR) +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +SET GLOBAL binlog_error_action = IGNORE_ERROR; +INSERT INTO t1 VALUES (2); + +# Check that transaction is committed +--let $assert_cond = COUNT(*) = 1 FROM t1; +--let $assert_text = Count of elements in t1 should be 1. +--source include/assert.inc + +# Cleanup +DROP table t1; +SET SESSION debug = "-d,simulate_error_during_sync_binlog_file"; +--source include/restart_mysqld.inc +RESET MASTER; + +############################ +--echo Test case13 +############################ + +# Simulate error during flushing events to binlog cache and test the behaviour +# when binlog_error_action is set to ABORT_SERVER/IGNORE_ERROR. + +# Case 13.1 (binlog_error_action = ABORT_SERVER) +CREATE TABLE t1(i INT); +--let $log_pos_before = query_get_value("SHOW BINARY LOGS", File_size, 1) +SET SESSION debug = "+d,simulate_do_write_cache_failure"; +SET GLOBAL binlog_error_action = ABORT_SERVER; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +# Check that write cache error is causing server to abort and client gets +# ER_BINLOG_LOGGING_IMPOSSIBLE when binlog_error_action= 'ABORT_SERVER'. +--error ER_BINLOG_LOGGING_IMPOSSIBLE +INSERT INTO t1 VALUES (1); +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +# Check that transaction is not committed +--let $assert_cond = COUNT(*) = 0 FROM t1; +--let $assert_text = Count of elements in t1 should be 0. +--source include/assert.inc + +# Check that transaction is not binlogged as well +--let $log_pos_after = query_get_value("SHOW BINARY LOGS", File_size, 1) +--let $assert_cond = $log_pos_before = $log_pos_after +--let $assert_text = Query is not binlogged as expected. +--source include/assert.inc + +# Cleanup +RESET MASTER; + +# Case 13.2 (binlog_error_action = IGNORE_ERROR) +SET SESSION debug = "+d,simulate_do_write_cache_failure"; +SET GLOBAL binlog_error_action = IGNORE_ERROR; +INSERT INTO t1 VALUES (2); + +# Check that transaction is committed (binlog check cannot be done +# as we would have written STOP_EVENT in the binlog while closing +# it) +--let $assert_cond = COUNT(*) = 1 FROM t1; +--let $assert_text = Count of elements in t1 should be 1. +--source include/assert.inc + +# Cleanup +DROP table t1; +--source include/restart_mysqld.inc +RESET MASTER; + +############################ +--echo Test case14 +############################ + +# Simulating a situation when a transaction is about to +# enter ordered_commit and another transaction closed +# binary log due to an error. + +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +connect(con1,localhost,root,,); +connect(con2,localhost,root,,); + +--connection con1 +SET DEBUG_SYNC = "waiting_to_enter_flush_stage SIGNAL about_to_enter_flush_stage WAIT_FOR binlog_closed"; +--send INSERT INTO t1 values (1); + +--connection default +SET DEBUG_SYNC = "now wait_for about_to_enter_flush_stage"; + +--connection con2 +SET DEBUG_SYNC = "after_binlog_closed_due_to_error SIGNAL binlog_closed"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +--send INSERT INTO t2 values (2); + +--connection con1 +--reap +--connection con2 +--reap + +# Cleanup +--disconnect con1 +--disconnect con2 + +--connection default +DROP table t1, t2; +--source include/restart_mysqld.inc + +############################ +--echo Test case15 +############################ + +# Simulating a situation when a transaction is about to +# close binary log due to a sync error (about to acquire lock_log) +# and another transaction in the middle of flush stage (holding +# lock_log. + +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +connect(con1,localhost,root,,); +connect(con2,localhost,root,,); + +--connection con1 +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL binlog_about_to_be_closed WAIT_FOR in_the_middle_of_flush_stage"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +--send INSERT INTO t1 values (1); + +--connection default +SET DEBUG_SYNC = "now wait_for binlog_about_to_be_closed"; + +--connection con2 +SET DEBUG_SYNC = "waiting_in_the_middle_of_flush_stage SIGNAL in_the_middle_of_flush_stage"; +--send INSERT INTO t2 values (2); + +--connection con1 +--reap +--connection con2 +--reap + +# Claenup +--disconnect con1 +--disconnect con2 + +--connection default +DROP table t1, t2; +--source include/shutdown_mysqld.inc +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_error_action.err +--source include/start_mysqld.inc + +############################ +--echo Test case16 +############################ + +# Simulating a situation where two binlog groups encounter +# errors (one flush error, one sync error) at the same time +# and both of them try to close the binary log. + +SET GLOBAL binlog_error_action = IGNORE_ERROR; +SET GLOBAL sync_binlog = 1; +CREATE TABLE t1(i INT); +CREATE TABLE t2(i INT); +connect(con1,localhost,root,,); +connect(con2,localhost,root,,); + +--connection con1 +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL binlog_about_to_be_closed WAIT_FOR another_group_encountered_flush_error"; +SET SESSION debug = "+d,simulate_error_during_sync_binlog_file"; +--send INSERT INTO t1 values (1); + +--connection default +SET DEBUG_SYNC = "now wait_for binlog_about_to_be_closed"; + +--connection con2 +SET DEBUG_SYNC = "before_binlog_closed_due_to_error SIGNAL another_group_encountered_flush_error"; +SET SESSION debug ="+d,simulate_error_during_flush_cache_to_file"; +--send INSERT INTO t2 values (2); + +--connection con1 +--reap +--connection con2 +--reap +--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]+/--TIME--/ /flush|sync stage/flush_or_sync stage/ +--let GREP_FILE=$MYSQLTEST_VARDIR/tmp/binlog_error_action.err +--let GREP_PATTERN=An error occurred during +--source extra/rpl_tests/grep_pattern.inc + +# Claenup +--disconnect con1 +--disconnect con2 + +--connection default +DROP table t1, t2; +--source include/restart_mysqld.inc + diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_gtid_exhausted-master.opt mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_gtid_exhausted-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_gtid_exhausted-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_gtid_exhausted-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--skip-core-file diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_gtid_exhausted.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_gtid_exhausted.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_gtid_exhausted.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_gtid_exhausted.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,64 @@ +############################################################################### +# Bug#21276561: FAILURE TO GENERATE GTID LEADS TO INCONSISTENCY +# +# Problem: +# ======= +# If generating a GTID for a transaction fails, the transaction is not written +# to the binary log but still gets committed, which potentially leads to +# master/slave data inconsistency. +# +# Test: +# ===== +# Simulate a scenario such that generation of GTID number reaches its maximum +# value and the new GTID cannot be generated because of that. Verify that this +# fatal error case is appropriately handled as per the binlog_error_action +# value specified by user. +############################################################################### +--source include/have_innodb.inc +--source include/have_gtid.inc +# This test case is binlog_format agnostic +--source include/have_binlog_format_statement.inc +# Don't test this under valgrind, memory leaks will occur +--source include/not_valgrind.inc + +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); + +#Test case 1: +SET GLOBAL binlog_error_action=IGNORE_ERROR; +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +# @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty. +# Hence execute RESET MASTER. +RESET MASTER; +SET GLOBAL gtid_purged = CONCAT(@@GLOBAL.server_uuid, ':1-9223372036854775805'); +INSERT INTO t1 VALUES (1); +--error ER_GNO_EXHAUSTED +INSERT INTO t1 VALUES (2); + +# Check that transaction is committed +--let $assert_cond = COUNT(*) = 2 FROM t1; +--let $assert_text = Count of elements in t1 should be 2. +--source include/assert.inc +--source include/restart_mysqld.inc + +RESET MASTER; +DROP TABLE t1; + +#Test case 2: +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +# @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty. +# Hence execute RESET MASTER. +RESET MASTER; +SET GLOBAL gtid_purged = CONCAT(@@GLOBAL.server_uuid, ':1-9223372036854775805'); +INSERT INTO t1 VALUES (1); +SET GLOBAL binlog_error_action=ABORT_SERVER; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--error ER_BINLOG_LOGGING_IMPOSSIBLE +INSERT INTO t1 VALUES (2); + +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +RESET MASTER; +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_index.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_index.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_index.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_index.test 2016-08-26 11:22:35.000000000 +0000 @@ -417,6 +417,61 @@ file_exists $MYSQLD_DATADIR/master-bin.000013; file_exists $MYSQLD_DATADIR/master-bin.000014; -eval SET SESSION debug="$old"; +-- echo # Test case11: Bug #20381055SERVER CRASHES IF INDEX FILE IS OPENED BY + # OTHER APPLICATION AND PURGE IS ISSUED. + # This test case test the server behaviour if index file cannot be + # deleted. +SET SESSION debug="d,force_index_file_delete_failure"; + +# Add supressions +call mtr.add_suppression("Failed to delete the existing index file"); +call mtr.add_suppression("failed to move crash safe index file to index file"); +call mtr.add_suppression("failed to update the index file"); + +# When index file cannot be recreated during purge binary logs command, +# it should throw error but it should not disable binary logging. +-- error ER_IO_ERR_LOG_INDEX_READ +-- eval PURGE BINARY LOGS TO 'master-bin.000014'; + +-- echo # Test the index file is complete, although is not purged successfully. +-- echo # Also this will indicate that binary logging is not disabled. +-- source include/show_binary_logs.inc +file_exists $MYSQLD_DATADIR/master-bin.000012; +file_exists $MYSQLD_DATADIR/master-bin.000013; +file_exists $MYSQLD_DATADIR/master-bin.000014; +# When index file cannot be recreated during FLUSH LOGS command, +# it should throw error and binary logging should be disabled. +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +# normalize strerror message for solaris10-sparc-64bit as long as errno is OK +--replace_regex /\.[\\\/]master/master/ /errno: 1 - .*\)/errno: 1 - Operation not permitted)/ +--error ER_CANT_OPEN_FILE +FLUSH LOGS; + +--error ER_NO_BINARY_LOGGING +SHOW BINARY LOGS; +--source include/restart_mysqld.inc +-- source include/show_binary_logs.inc +CREATE TABLE t1(i INT); +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +SET SESSION debug="+d,force_index_file_delete_failure"; +SET SESSION debug="+d,force_rotate"; + +# When index file cannot be recreated during DML command which +# is trying to rotate the binary log, it should throw error and +# binary logging should be disabled. +# normalize strerror message for solaris10-sparc-64bit as long as errno is OK +--replace_regex /\.[\\\/]master/master/ /errno: 1 - .*\)/errno: 1 - Operation not permitted)/ +--error ER_CANT_OPEN_FILE +INSERT INTO t1 VALUES (12); + +--error ER_NO_BINARY_LOGGING +SHOW BINARY LOGS; + +--source include/restart_mysqld.inc +-- source include/show_binary_logs.inc +DROP TABLE t1; +-- echo # Test case11: Ends + +eval SET SESSION debug="$old"; --echo End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_killed_simulate.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_killed_simulate.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_killed_simulate.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_killed_simulate.test 2016-08-26 11:22:35.000000000 +0000 @@ -26,7 +26,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; +is not null AS Loaded; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR let $error_code= `select @a like "%#%error_code=0%" /* must return 1 */`; eval select $error_code /* must return 1 as query completed before got killed*/; @@ -57,7 +57,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; +is not null AS Loaded; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`; eval select $error_code /* must return 0 to mean the killed query is in */; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_killed.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_killed.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_killed.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_killed.test 2016-08-26 11:22:35.000000000 +0000 @@ -303,7 +303,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; +is not null AS Loaded; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`; eval select $error_code /* must return 0 to mean the killed update is in */; @@ -361,7 +361,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; +is not null AS Loaded; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`; eval select $error_code /* must return 0 to mean the killed delete is in */; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_rotate_bgc_sync.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_rotate_bgc_sync.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_rotate_bgc_sync.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_rotate_bgc_sync.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,108 @@ +# ==== Purpose ==== +# +# This test will try to rotate the binary log of the server while binary log +# group commit sync stage tries to sync the recently flushed binary log group. +# +# As binary log group commit releases the binary log's LOCK_log right after +# finishing the flush stage and entering the sync stage, the rotate procedure +# (executed by MYSQL_BIN_LOG::new_file_impl) will be able take LOCK_log, but +# it will delay the binary log rotation until the amount of prepared +# transactions not yet committed be zero or the binary log group commit sync +# stage has finished. +# +# ==== Related Bugs and Worklogs ==== +# +# BUG#22245619 SERVER ABORT AFTER SYNC STAGE OF THE COMMIT FAILS +# + +# This test case is binary log format agnostic +--source include/have_binlog_format_row.inc +--source include/have_debug_sync.inc + +# Set the options to hit the issue +SET @saved_binlog_error_action= @@GLOBAL.binlog_error_action; +SET GLOBAL binlog_error_action= ABORT_SERVER; +SET @saved_sync_binlog= @@GLOBAL.sync_binlog; +SET GLOBAL sync_binlog= 2; + +# Create two additional connections +# conn1 will do the binary log group commit +# conn2 will rotate the binary log +# the default connection will coordinate the test case activity +--connect(conn1,localhost,root,,test) +--connect(conn2,localhost,root,,test) + +--let $engine= MyISAM + +while ($engine) +{ + --let $rpl_connection_name= conn1 + --source include/rpl_connection.inc + # Create a new table + --eval CREATE TABLE t1 (c1 INT) ENGINE=$engine + + # Make the server to hold before syncing the binary log group + SET DEBUG_SYNC= 'before_sync_binlog_file SIGNAL holding_before_bgc_sync_binlog_file WAIT_FOR continue_bgc_sync_binlog_file'; + --send INSERT INTO t1 VALUES (1) + + --let $rpl_connection_name= conn2 + --source include/rpl_connection.inc + # Wait until it reached the sync binary log group + SET DEBUG_SYNC= 'NOW WAIT_FOR holding_before_bgc_sync_binlog_file'; + + # Make the server to hold while rotating the binary log + # It can hold in two places: + # a) waiting before all flushed transactions with Xid to be committed; + # b) after closing the old and before opening the new binary log file; + # + # The debug sync will happen at (a) if there are transactions for a + # transactional storage engine or at (b) if there are no transactions + # for a transactional storage engine in the group to be committed. + SET DEBUG_SYNC= 'before_rotate_binlog_file SIGNAL holding_before_rotate_binlog_file WAIT_FOR continue_rotate_binlog_file'; + # Rotate the binary log + --send FLUSH LOGS + + # Wait until the server reaches the debug sync point while rotating the + # binary log + --let $rpl_connection_name= default + --source include/rpl_connection.inc + SET DEBUG_SYNC= 'now WAIT_FOR holding_before_rotate_binlog_file'; + + # Let the binary log group commit to sync and continue + SET DEBUG_SYNC= 'now SIGNAL continue_bgc_sync_binlog_file'; + # Clear the binary log rotate debug sync point to avoid it to stop twice + SET DEBUG_SYNC= 'before_rotate_binlog_file CLEAR'; + # Let the binary log rotate to continue + SET DEBUG_SYNC = 'now SIGNAL continue_rotate_binlog_file'; + + --let $rpl_connection_name= conn1 + --source include/rpl_connection.inc + --reap + + --let $rpl_connection_name= conn2 + --source include/rpl_connection.inc + --reap + + --let $rpl_connection_name= default + --source include/rpl_connection.inc + + # Cleanup + DROP TABLE t1; + SET DEBUG_SYNC= 'RESET'; + + if ($engine == InnoDB) + { + --let $engine= + } + if ($engine == MyISAM) + { + --let $engine= InnoDB + } +} + +# Disconnect the additional connections +--disconnect conn1 +--disconnect conn2 + +SET GLOBAL binlog_error_action= @saved_binlog_error_action; +SET GLOBAL sync_binlog= @saved_sync_binlog; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_sql_mode.test mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_sql_mode.test --- mysql-5.6-5.6.27/mysql-test/suite/binlog/t/binlog_sql_mode.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/binlog/t/binlog_sql_mode.test 2016-08-26 11:22:35.000000000 +0000 @@ -56,7 +56,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug39526.binlog")) -is not null; +is not null AS Loaded; let $s_mode_unsigned= `select @a like "%@@session.sql_mode=0%" /* must return 0 */`; echo *** String sql_mode=0 is found: $s_mode_unsigned ***; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/engines/funcs/r/up_multi_db_table.result mysql-5.6-5.6.33/mysql-test/suite/engines/funcs/r/up_multi_db_table.result --- mysql-5.6-5.6.27/mysql-test/suite/engines/funcs/r/up_multi_db_table.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/engines/funcs/r/up_multi_db_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -10,7 +10,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -44,7 +44,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -78,7 +78,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -112,7 +112,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -146,7 +146,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIn d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -180,7 +180,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -214,7 +214,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -248,7 +248,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -282,7 +282,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -316,7 +316,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -350,7 +350,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 @@ -384,7 +384,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; c1 c2 1 30 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/engines/funcs/t/up_multi_db_table.test mysql-5.6-5.6.33/mysql-test/suite/engines/funcs/t/up_multi_db_table.test --- mysql-5.6-5.6.27/mysql-test/suite/engines/funcs/t/up_multi_db_table.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/engines/funcs/t/up_multi_db_table.test 2016-08-26 11:22:35.000000000 +0000 @@ -12,7 +12,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -28,7 +28,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -44,7 +44,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -60,7 +60,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -76,7 +76,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIn d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -92,7 +92,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -108,7 +108,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -124,7 +124,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -140,7 +140,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -156,7 +156,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -172,7 +172,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; @@ -188,7 +188,7 @@ INSERT INTO d1.t1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5); INSERT INTO d2.t2 VALUES(11,1),(12,1),(13,1),(14,2),(15,6); INSERT INTO d3.t3 VALUES(21,11),(22,11),(23,13),(24,14),(25,15); -UPDATE IGNORE d1.t1, d2.t2, d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; +UPDATE IGNORE d1.t1 STRAIGHT_JOIN d2.t2 STRAIGHT_JOIN d3.t3 SET d1.t1.c2=30, d2.t2.c2=40, d3.t3.c2=50 WHERE d1.t1.c1=d2.t2.c2 AND d2.t2.c1=d3.t3.c2; SELECT * FROM d1.t1 ORDER BY c1; SELECT * FROM d2.t2 ORDER BY c1; SELECT * FROM d3.t3 ORDER BY c1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/include/import.inc mysql-5.6-5.6.33/mysql-test/suite/innodb/include/import.inc --- mysql-5.6-5.6.27/mysql-test/suite/innodb/include/import.inc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/include/import.inc 2016-08-26 11:22:35.000000000 +0000 @@ -3,19 +3,38 @@ let $MYSQLD_DATADIR = `SELECT @@datadir`; -FLUSH TABLES t1 FOR EXPORT; +if(!$source_db) { + let $source_db = test; +} + +if(!$dest_db) { + let $dest_db = test; +} ---copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/t1.cfg_back ---copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/t1.ibd_back +eval FLUSH TABLES $source_db.t1 FOR EXPORT; -UNLOCK TABLES; -ALTER TABLE t1 DISCARD TABLESPACE; - ---move_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/test/t1.cfg ---move_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/test/t1.ibd +--copy_file $MYSQLD_DATADIR/$source_db/t1.cfg $MYSQLD_DATADIR/t1.cfg_back +--copy_file $MYSQLD_DATADIR/$source_db/t1.ibd $MYSQLD_DATADIR/t1.ibd_back -ALTER TABLE t1 IMPORT TABLESPACE; +UNLOCK TABLES; -CHECK TABLE t1; -SHOW CREATE TABLE t1; -SELECT * FROM t1; +if($source_db != $dest_db) { + eval USE $dest_db; + let $create1 = query_get_value(SHOW CREATE TABLE $source_db.t1, Create Table, 1); + eval $create1; +} + +eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE; + +--move_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg +--move_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd + +eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE; + +eval CHECK TABLE $dest_db.t1; +eval SHOW CREATE TABLE $dest_db.t1; +eval SELECT * FROM $dest_db.t1; + +if($source_db != $dest_db) { + eval DROP TABLE $dest_db.t1; +} diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/alter_rename_existing.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/alter_rename_existing.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/alter_rename_existing.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/alter_rename_existing.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,96 @@ +# +# Show what happens during ALTER TABLE when an existing file +# exists in the target location. +# +# Bug #19218794: IF TABLESPACE EXISTS, CAN'T CREATE TABLE, +# BUT CAN ALTER ENGINE=INNODB +# +CREATE TABLE t1 (a SERIAL, b CHAR(10)) ENGINE=Memory; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +# +# Create a file called MYSQLD_DATADIR/test/t1.ibd +# Directory listing of test/*.ibd +# +t1.ibd +ALTER TABLE t1 ENGINE = InnoDB; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 - Tablespace already exists) +# +# Move the file to InnoDB as t2 +# +ALTER TABLE t1 RENAME TO t2, ENGINE = INNODB; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(10) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT * from t2; +a b +1 one +2 two +3 three +ALTER TABLE t2 RENAME TO t1; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 - Tablespace already exists) +# +# Create another t1, but in the system tablespace. +# +SET GLOBAL innodb_file_per_table=OFF; +CREATE TABLE t1 (a SERIAL, b CHAR(20)) ENGINE=InnoDB; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(20) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 1 +# +# ALTER TABLE from system tablespace to system tablespace +# +ALTER TABLE t1 ADD COLUMN c INT, ALGORITHM=INPLACE; +ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY; +# +# Try to move t1 from the system tablespace to a file-per-table +# while a blocking t1.ibd file exists. +# +SET GLOBAL innodb_file_per_table=ON; +ALTER TABLE t1 ADD COLUMN e1 INT, ALGORITHM=INPLACE; +ERROR HY000: Tablespace for table 'test/t1' exists. Please DISCARD the tablespace before IMPORT. +ALTER TABLE t1 ADD COLUMN e2 INT, ALGORITHM=COPY; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 - Tablespace already exists) +# +# Delete the blocking file called MYSQLD_DATADIR/test/t1.ibd +# Move t1 to file-per-table using ALGORITHM=INPLACE with no blocking t1.ibd. +# +ALTER TABLE t1 ADD COLUMN e INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(20) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + `d` int(11) DEFAULT NULL, + `e` int(11) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 0 +DROP TABLE t1; +# +# Rename t2.ibd to t1.ibd. +# +ALTER TABLE t2 RENAME TO t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 0 +SELECT * from t1; +a b +1 one +2 two +3 three +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/analyze_table.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/analyze_table.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/analyze_table.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/analyze_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +CREATE PROCEDURE populate_t1() +BEGIN +DECLARE i int DEFAULT 1; +START TRANSACTION; +WHILE (i <= 1000000) DO +INSERT INTO t1 VALUES (i, i, CONCAT('a', i)); +SET i = i + 1; +END WHILE; +COMMIT; +END| +CREATE TABLE t1( +class INT, +id INT, +title VARCHAR(100) +) ENGINE=InnoDB; +SELECT COUNT(*) FROM t1; +COUNT(*) +1000000 +SET GLOBAL innodb_stats_persistent_sample_pages=2000; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +DROP TABLE t1; +DROP PROCEDURE populate_t1; +SET GLOBAL innodb_stats_persistent_sample_pages=default; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/create-index.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/create-index.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/create-index.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/create-index.result 2016-08-26 11:22:35.000000000 +0000 @@ -7,3 +7,24 @@ create unique index index_t1 on t1(f1(4)); ERROR 23000: Duplicate entry 'w' for key 'index_t1' drop table t1; +# +#BUG#21326304 INNODB ONLINE ATER TABLE ENDS IN CRASH ON DISK FULL +# +CREATE TABLE t1(f1 CHAR(255) NOT NULL, f2 CHAR(255) NOT NULL, f3 +CHAR(255) NOT NULL, f4 CHAR(255) NOT NULL, f5 CHAR(255) NOT NULL,f6 +CHAR(255) NOT NULL, f7 CHAR(255) NOT NULL, f8 CHAR(255) NOT NULL,f9 +CHAR(255) NOT NULL, f10 CHAR(255) NOT NULL, f11 CHAR(255) NOT NULL,f12 +CHAR(255) NOT NULL, f13 CHAR(255) NOT NULL, f14 CHAR(255) NOT NULL,f15 +CHAR(255) NOT NULL, f16 CHAR(255) NOT NULL, f17 CHAR(255) NOT NULL,f18 +CHAR(255) NOT NULL)ENGINE=INNODB; +INSERT INTO t1 +VALUES('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r'); +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +SET SESSION debug="+d,disk_is_full"; +ALTER TABLE t1 FORCE, ALGORITHM=INPLACE; +ERROR HY000: The table 't1' is full +SET SESSION debug="-d,disk_is_full"; +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/create_isl_with_direct.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/create_isl_with_direct.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/create_isl_with_direct.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/create_isl_with_direct.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,10 @@ +SHOW VARIABLES LIKE 'innodb_flush_method'; +Variable_name Value +innodb_flush_method O_DIRECT +CREATE TABLE t1 (x INT) ENGINE=INNODB, DATA DIRECTORY='MYSQL_TMP_DIR'; +# Contents of tmp/test directory containing .ibd file +t1.ibd +# Contents of the 'test' database directory containing .isl and .frm files +t1.frm +t1.isl +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/flush-hang.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/flush-hang.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/flush-hang.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/flush-hang.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,36 @@ +# +#Bug #21133329 HANGING "SYSTEM LOCK" WHEN EXECUTING "FLUSH TABLE ... FOR EXPORT" +# +CREATE TABLE t1 ( +c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c2 BIGINT, +c3 VARCHAR(2048), +c4 VARCHAR(2048), +INDEX idx1(c2), +INDEX idx2(c3(512)), +INDEX idx3(c4(512))) Engine=InnoDB; +CREATE TABLE t2 ( f1 int PRIMARY KEY) engine=innodb; +SET GLOBAL INNODB_PURGE_STOP_NOW=ON; +SET GLOBAL innodb_disable_background_merge=ON; +SET GLOBAL innodb_stats_persistent=OFF; +show variables like '%innodb_stats_persistent%'; +Variable_name Value +innodb_stats_persistent OFF +innodb_stats_persistent_sample_pages 20 +INSERT INTO t1(c2, c3, c4) VALUES +(1, REPEAT('a', 2048), REPEAT('a', 2048)), +(2, REPEAT('b', 2048), REPEAT('b', 2048)), +(3, REPEAT('c', 2048), REPEAT('c', 2048)), +(4, REPEAT('d', 2048), REPEAT('d', 2048)); +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +FLUSH TABLES t2 FOR EXPORT; +UNLOCK TABLES; +SET GLOBAL innodb_disable_background_merge=OFF; +SET GLOBAL INNODB_PURGE_RUN_NOW=ON; +SET GLOBAL innodb_stats_persistent=ON; +DROP TABLE t1,t2; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/import.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/import.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/import.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/import.result 2016-08-26 11:22:35.000000000 +0000 @@ -9,14 +9,14 @@ ALTER TABLE t1 ADD INDEX ind3(c2, c3, c1(20)); INSERT INTO t1 VALUES ('Test Data -1', 'Test Data -2', 'Test Data -3'); # Test with 2ndary index having prefix -FLUSH TABLES t1 FOR EXPORT; +FLUSH TABLES test.t1 FOR EXPORT; UNLOCK TABLES; -ALTER TABLE t1 DISCARD TABLESPACE; -ALTER TABLE t1 IMPORT TABLESPACE; -CHECK TABLE t1; +ALTER TABLE test.t1 DISCARD TABLESPACE; +ALTER TABLE test.t1 IMPORT TABLESPACE; +CHECK TABLE test.t1; Table Op Msg_type Msg_text test.t1 check status OK -SHOW CREATE TABLE t1; +SHOW CREATE TABLE test.t1; Table Create Table t1 CREATE TABLE `t1` ( `c1` varchar(32) NOT NULL DEFAULT '', @@ -27,19 +27,19 @@ KEY `ind2` (`c3`,`c1`(10),`c2`), KEY `ind3` (`c2`,`c3`,`c1`(20)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -SELECT * FROM t1; +SELECT * FROM test.t1; c1 c2 c3 Test Data -1 Test Data -2 Test Data -3 # Test with PK & 2ndary index with prefix ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c1(5), c2(10), c3(20)); -FLUSH TABLES t1 FOR EXPORT; +FLUSH TABLES test.t1 FOR EXPORT; UNLOCK TABLES; -ALTER TABLE t1 DISCARD TABLESPACE; -ALTER TABLE t1 IMPORT TABLESPACE; -CHECK TABLE t1; +ALTER TABLE test.t1 DISCARD TABLESPACE; +ALTER TABLE test.t1 IMPORT TABLESPACE; +CHECK TABLE test.t1; Table Op Msg_type Msg_text test.t1 check status OK -SHOW CREATE TABLE t1; +SHOW CREATE TABLE test.t1; Table Create Table t1 CREATE TABLE `t1` ( `c1` varchar(32) NOT NULL DEFAULT '', @@ -50,7 +50,7 @@ KEY `ind2` (`c3`,`c1`(10),`c2`), KEY `ind3` (`c2`,`c3`,`c1`(20)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -SELECT * FROM t1; +SELECT * FROM test.t1; c1 c2 c3 Test Data -1 Test Data -2 Test Data -3 DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/import_update_stats.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/import_update_stats.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/import_update_stats.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/import_update_stats.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,69 @@ +SET @old_innodb_file_per_table = @@innodb_file_per_table; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1 ( +col_1 CHAR (255), +col_2 VARCHAR (255) +) ENGINE = InnoDB; +CREATE INDEX idx1 ON t1(col_1); +CREATE INDEX idx2 ON t1(col_2); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 0 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 0 NULL NULL YES BTREE +INSERT INTO t1 VALUES ("col1_00001", "col2_00001"), ("col1_00002", "col2_00002"); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 2 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 2 NULL NULL YES BTREE +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 2 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 2 NULL NULL YES BTREE +FLUSH TABLES t1 FOR EXPORT; +backup: t1 +UNLOCK TABLES; +DROP TABLE t1; +CREATE TABLE t1 ( +col_1 CHAR (255), +col_2 VARCHAR (255) +) ENGINE = InnoDB; +CREATE INDEX idx1 ON t1(col_1); +CREATE INDEX idx2 ON t1(col_2); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 0 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 0 NULL NULL YES BTREE +INSERT INTO t1 VALUES ("col1_00001", "col2_00001"); +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 1 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 1 NULL NULL YES BTREE +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 1 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 1 NULL NULL YES BTREE +ALTER TABLE t1 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +ALTER TABLE t1 IMPORT TABLESPACE; +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 2 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 2 NULL NULL YES BTREE +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SHOW INDEXES FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 idx1 1 col_1 A 2 NULL NULL YES BTREE +t1 1 idx2 1 col_2 A 2 NULL NULL YES BTREE +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-alter-debug.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-alter-debug.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-alter-debug.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-alter-debug.result 2016-08-26 11:22:35.000000000 +0000 @@ -24,3 +24,31 @@ CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `â‘ ` (`c2`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 DROP TABLE t1ć, â‘ ; +# +# Bug #21364096 THE BOGUS DUPLICATE KEY ERROR IN ONLINE DDL +# WITH INCORRECT KEY NAME +create table t1 (id int auto_increment primary key, a int, unique key uk(a)) +engine = innodb; +insert into t1 select 1, 1; +insert into t1 select 2, 2; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL s1 WAIT_FOR s2'; +alter table t1 add b int, ALGORITHM=inplace; +/* connection con1 */ +SET DEBUG_SYNC = 'now WAIT_FOR s1'; +insert into t1 select NULL, 1; +ERROR 23000: Duplicate entry '1' for key 'uk' +SET DEBUG_SYNC = 'now SIGNAL s2'; +/* connection default */ +/* reap */ alter table t1 add b int, ALGORITHM=inplace; +ERROR 23000: Duplicate entry '1' for key 'uk' +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL s1 WAIT_FOR s2'; +alter table t1 add b int, ALGORITHM=inplace;; +/* connection con1 */ +set DEBUG_SYNC = 'now WAIT_FOR s1'; +update t1 set a=1 where id=2; +ERROR 23000: Duplicate entry '1' for key 'uk' +SET DEBUG_SYNC = 'now SIGNAL s2'; +/* connection default */ +/* reap */ alter table t1 add b int, ALGORITHM=inplace; +ERROR 23000: Duplicate entry '1' for key 'uk' +drop table t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-alter.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-alter.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-alter.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-alter.result 2016-08-26 11:22:35.000000000 +0000 @@ -790,3 +790,73 @@ Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1, parent; +# +#BUG#21514135 SCHEMA MISMATCH ERROR WHEN IMPORTING TABLESPACE AFTER +#DROPPING AN INDEX +# +CREATE DATABASE source_db; +CREATE DATABASE dest_db; +CREATE TABLE source_db.t1 ( +id int(11) NOT NULL, +age int(11) DEFAULT NULL, +name varchar(20), +PRIMARY KEY (id), +KEY index1 (age) +) ENGINE=InnoDB; +ALTER TABLE source_db.t1 DROP INDEX index1, ADD INDEX index2(name, age), algorithm=inplace; +FLUSH TABLES source_db.t1 FOR EXPORT; +UNLOCK TABLES; +USE dest_db; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index2` (`name`,`age`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +ALTER TABLE dest_db.t1 DISCARD TABLESPACE; +ALTER TABLE dest_db.t1 IMPORT TABLESPACE; +CHECK TABLE dest_db.t1; +Table Op Msg_type Msg_text +dest_db.t1 check status OK +SHOW CREATE TABLE dest_db.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index2` (`name`,`age`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * FROM dest_db.t1; +id age name +DROP TABLE dest_db.t1; +ALTER TABLE source_db.t1 DROP INDEX index2, algorithm=inplace; +FLUSH TABLES source_db.t1 FOR EXPORT; +UNLOCK TABLES; +USE dest_db; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +ALTER TABLE dest_db.t1 DISCARD TABLESPACE; +ALTER TABLE dest_db.t1 IMPORT TABLESPACE; +CHECK TABLE dest_db.t1; +Table Op Msg_type Msg_text +dest_db.t1 check status OK +SHOW CREATE TABLE dest_db.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * FROM dest_db.t1; +id age name +DROP TABLE dest_db.t1; +DROP TABLE source_db.t1; +DROP DATABASE source_db; +DROP DATABASE dest_db; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_bug54044.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_bug54044.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_bug54044.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_bug54044.result 2016-08-26 11:22:35.000000000 +0000 @@ -6,7 +6,8 @@ `IF(NULL IS NOT NULL, NULL, NULL)` binary(0) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 DROP TABLE table_54044; -CREATE TABLE tmp ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL; +CREATE TABLE tmp ENGINE = INNODB +AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL; SHOW CREATE TABLE tmp; Table Create Table tmp CREATE TABLE `tmp` ( diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_deadlock_with_autoinc.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_deadlock_with_autoinc.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_deadlock_with_autoinc.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_deadlock_with_autoinc.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,12 @@ +# +# Bug #21983865 UNEXPECTED DEADLOCK WITH INNODB_AUTOINC_LOCK_MODE=0 +# +create table t1(f1 int not null auto_increment primary key) engine=innodb; +# Hold autoinc_lock on table t1 from connection con1 +set debug_sync='ib_after_row_insert SIGNAL others WAIT_FOR continue_others'; +insert into t1 values(NULL); +# Create 40 connections and make it to wait for autoinc_lock on table t1. +# Release the auto_inc lock on table t1 for connection con1 +set debug_sync='now SIGNAL continue_others'; +# Now all 40 connections can finish the insert operation on t1. +drop table t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_file_limit_check.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_file_limit_check.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb_file_limit_check.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb_file_limit_check.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,8 @@ +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); +CREATE TABLE t1 (a INT)ENGINE=INNODB PARTITION BY HASH(a) PARTITIONS 1024; +SELECT 1 UNION SELECT * FROM t1 UNION SELECT * FROM t1 UNION +SELECT * FROM t1 UNION SELECT * FROM t1 UNION SELECT * FROM +t1; +1 +1 +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-index-debug.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-index-debug.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-index-debug.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-index-debug.result 2016-08-26 11:22:35.000000000 +0000 @@ -37,3 +37,32 @@ set global innodb_file_per_table=1; set global innodb_file_format=Antelope; set global innodb_file_format_max=Antelope; +# +# Bug #21762319 ADDING INDEXES ON EMPTY TABLE IS SLOW +# WITH LARGE INNODB_SORT_BUFFER_SIZE. +call mtr.add_suppression("InnoDB: Cannot create temporary merge file"); +create table t480(a serial)engine=innodb; +insert into t480 +values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(), +(),(),(),(),(),(),(),(); +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +create table t1(f1 int auto_increment not null, +f2 char(200) not null, f3 char(200) not null, +f4 char(200) not null,primary key(f1))engine=innodb; +insert into t1 select NULL,'aaa','bbb','ccc' from t480; +insert into t1 select NULL,'aaaa','bbbb','cccc' from t480; +insert into t1 select NULL,'aaaaa','bbbbb','ccccc' from t480; +insert into t1 select NULL,'aaaaaa','bbbbbb','cccccc' from t480; +insert into t1 select NULL,'aaaaaaa','bbbbbbb','ccccccc' from t480; +insert into t1 select NULL,'aaaaaaaa','bbbbbbbb','cccccccc' from t480; +select count(*) from t1; +count(*) +2880 +SET DEBUG = '+d,innobase_tmpfile_creation_failure'; +alter table t1 force, algorithm=inplace; +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET DEBUG = '-d,innobase_tmpfile_creation_failure'; +drop table t1, t480; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-index-online-norebuild.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-index-online-norebuild.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/innodb-index-online-norebuild.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/innodb-index-online-norebuild.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,26 @@ +# INPLACE ALTER WITH INPLACE_IGNORE FLAG AND CHANGE CREATE OPTION +# CHANGE THE COLUMN DEFAULT (INPLACE_IGNORE) +# AND TABLE CHARSET(CHANGE CREATE) +CREATE TABLE t1( +id INT PRIMARY KEY, +f1 INT NOT NULL DEFAULT 0)ENGINE=INNODB; +INSERT INTO t1 VALUES(1, 2); +ALTER TABLE t1 MODIFY COLUMN f1 INT NOT NULL DEFAULT 0, +DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; +DROP TABLE t1; +# CHANGE THE STORAGE TYPE OF COLUMN(INPLACE IGNORE) +# AND TABLE CHARSET(CHANGE CREATE) +CREATE TABLE t1( +id INT STORAGE DISK)ENGINE=INNODB; +INSERT INTO t1 values(1); +ALTER TABLE t1 MODIFY COLUMN id INT STORAGE MEMORY, +DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; +DROP TABLE t1; +# RENAME THE TABLE(INPLACE IGNORE) +# AND CHANGE TABLE CHARSET(CHANGE CREATE) +CREATE TABLE t1( +f1 INT NOT NULL, +f2 INT NOT NULL)ENGINE=INNODB; +INSERT INTO t1 VALUES(1, 2); +ALTER TABLE t1 RENAME t2, DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; +DROP TABLE t2; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/monitor.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/monitor.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/monitor.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/monitor.result 2016-08-26 11:22:35.000000000 +0000 @@ -547,3 +547,52 @@ set global innodb_monitor_disable = default; set global innodb_monitor_reset = default; set global innodb_monitor_reset_all = default; +# +# Bug#22576241 SETTING INNODB_MONITOR_ENABLE TO ALL DOES NOT ENABLE ALL +# MONITORS +# +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf 0 +SET GLOBAL innodb_monitor_enable='module_buffer_page'; +INSERT INTO t1 VALUES (1), (2), (3), (4); +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf NNNN +SET GLOBAL innodb_monitor_disable='module_buffer_page'; +SET GLOBAL innodb_monitor_reset_all='module_buffer_page'; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf 0 +SET GLOBAL innodb_monitor_enable='%'; +INSERT INTO t1 VALUES (5), (6), (7), (8); +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf NNNN +SET GLOBAL innodb_monitor_disable='%'; +SET GLOBAL innodb_monitor_reset_all='%'; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf 0 +SET GLOBAL innodb_monitor_enable='ALL'; +INSERT INTO t1 VALUES (9), (10), (11), (12); +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; +NAME COUNT +buffer_page_written_index_leaf NNNN +SET GLOBAL innodb_monitor_enable=default; +SET GLOBAL innodb_monitor_disable=default; +SET GLOBAL innodb_monitor_reset_all=default; +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/r/tmpdir.result mysql-5.6-5.6.33/mysql-test/suite/innodb/r/tmpdir.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb/r/tmpdir.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/r/tmpdir.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,51 @@ +# +# Bug #19183565 CREATE DYNAMIC INNODB_TMPDIR VARIABLE TO CONTROL +# WHERE INNODB WRITES TEMP FILES +# +# If innodb_tmpdir is NULL or "", temporary file will be created in +# server configuration variable location(--tmpdir) +create table t1(a int primary key)engine=innodb; +show session variables like 'innodb_tmpdir'; +Variable_name Value +innodb_tmpdir +alter table t1 add column b int not null; +set global innodb_tmpdir=NULL; +# Connection con1 +show session variables like 'innodb_tmpdir'; +Variable_name Value +innodb_tmpdir +alter table t1 add key(b); +drop table t1; +# innodb_tmpdir with invalid path. +create table t1(a int primary key)engine=innodb; +set global innodb_tmpdir='wrong_value'; +ERROR 42000: Variable 'innodb_tmpdir' can't be set to the value of 'wrong_value' +show warnings; +Level Code Message +Warning 1210 InnoDB: Path doesn't exist. +Error 1231 Variable 'innodb_tmpdir' can't be set to the value of 'wrong_value' +drop table t1; +# innodb_tmpdir with mysql data directory path. +create table t1(a text, b text, fulltext(a,b))engine=innodb; +insert into t1 values('test1', 'test2'); +insert into t1 values('text1', 'text2'); +set global innodb_tmpdir = @@global.datadir; +ERROR 42000: Variable 'innodb_tmpdir' can't be set to the value of 'MYSQL_DATADIR' +show warnings; +Level Code Message +Warning 1210 InnoDB: Path Location should not be same as mysql data directory location. +Error 1231 DATADIR/data/' +drop table t1; +# innodb_tmpdir with valid location. +create table t1(a text, b text, fulltext(a,b))engine=innodb; +insert into t1 values('test1', 'test2'); +insert into t1 values('text1', 'text2'); +set @tmpdir = @@global.tmpdir; +set global innodb_tmpdir = @tmpdir; +show session variables like 'innodb_tmpdir'; +Variable_name Value +innodb_tmpdir +# Connection con3 +alter table t1 add fulltext(b); +set global innodb_tmpdir=NULL; +drop table t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/alter_rename_existing.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/alter_rename_existing.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/alter_rename_existing.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/alter_rename_existing.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,93 @@ +--echo # +--echo # Show what happens during ALTER TABLE when an existing file +--echo # exists in the target location. +--echo # +--echo # Bug #19218794: IF TABLESPACE EXISTS, CAN'T CREATE TABLE, +--echo # BUT CAN ALTER ENGINE=INNODB +--echo # + +--source include/have_innodb.inc + +--disable_query_log +LET $MYSQLD_DATADIR = `select @@datadir`; +SET @old_innodb_file_per_table = @@innodb_file_per_table; +--enable_query_log + +CREATE TABLE t1 (a SERIAL, b CHAR(10)) ENGINE=Memory; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); + +--echo # +--echo # Create a file called MYSQLD_DATADIR/test/t1.ibd +--exec echo "This is not t1.ibd" > $MYSQLD_DATADIR/test/t1.ibd + +--echo # Directory listing of test/*.ibd +--echo # +--list_files $MYSQLD_DATADIR/test/ *.ibd + +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t1 ENGINE = InnoDB; + +--echo # +--echo # Move the file to InnoDB as t2 +--echo # +ALTER TABLE t1 RENAME TO t2, ENGINE = INNODB; +SHOW CREATE TABLE t2; +SELECT * from t2; + +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t2 RENAME TO t1; + +--echo # +--echo # Create another t1, but in the system tablespace. +--echo # +SET GLOBAL innodb_file_per_table=OFF; +CREATE TABLE t1 (a SERIAL, b CHAR(20)) ENGINE=InnoDB; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +SHOW CREATE TABLE t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; + +--echo # +--echo # ALTER TABLE from system tablespace to system tablespace +--echo # +ALTER TABLE t1 ADD COLUMN c INT, ALGORITHM=INPLACE; +ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY; + +--echo # +--echo # Try to move t1 from the system tablespace to a file-per-table +--echo # while a blocking t1.ibd file exists. +--echo # +SET GLOBAL innodb_file_per_table=ON; +--replace_regex /$MYSQLD_DATADIR/MYSQLD_DATADIR/ +--error ER_TABLESPACE_EXISTS +ALTER TABLE t1 ADD COLUMN e1 INT, ALGORITHM=INPLACE; +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t1 ADD COLUMN e2 INT, ALGORITHM=COPY; + +--echo # +--echo # Delete the blocking file called MYSQLD_DATADIR/test/t1.ibd +--remove_file $MYSQLD_DATADIR/test/t1.ibd + +--echo # Move t1 to file-per-table using ALGORITHM=INPLACE with no blocking t1.ibd. +--echo # +ALTER TABLE t1 ADD COLUMN e INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; + +DROP TABLE t1; + +--echo # +--echo # Rename t2.ibd to t1.ibd. +--echo # +ALTER TABLE t2 RENAME TO t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +SELECT * from t1; + +DROP TABLE t1; + +--disable_query_log +call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot rename '.*' to '.*' for space ID .* because the target file exists. Remove the target file and try again"); +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +--enable_query_log diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/analyze_table.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/analyze_table.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/analyze_table.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/analyze_table.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,42 @@ +# +# BUG#22385442 - INNODB: DIFFICULT TO FIND FREE BLOCKS IN THE BUFFER POOL +# + +--source include/have_innodb.inc +--source include/big_test.inc + +DELIMITER |; +CREATE PROCEDURE populate_t1() +BEGIN + DECLARE i int DEFAULT 1; + + START TRANSACTION; + WHILE (i <= 1000000) DO + INSERT INTO t1 VALUES (i, i, CONCAT('a', i)); + SET i = i + 1; + END WHILE; + COMMIT; +END| +DELIMITER ;| + +CREATE TABLE t1( + class INT, + id INT, + title VARCHAR(100) +) ENGINE=InnoDB; + +-- disable_query_log +CALL populate_t1(); +-- enable_query_log + +SELECT COUNT(*) FROM t1; + +SET GLOBAL innodb_stats_persistent_sample_pages=2000; + +ANALYZE TABLE t1; + +DROP TABLE t1; + +DROP PROCEDURE populate_t1; + +SET GLOBAL innodb_stats_persistent_sample_pages=default; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create-index.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create-index.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create-index.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create-index.test 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,6 @@ +--source include/have_debug.inc --source include/have_innodb.inc +--source include/have_innodb_16k.inc --echo # --echo # Bug #18010711 UNIQUE PREFIX INDEX ON BINARY COLUMN: FAILING @@ -9,3 +11,31 @@ --error ER_DUP_ENTRY create unique index index_t1 on t1(f1(4)); drop table t1; + +--echo # +--echo #BUG#21326304 INNODB ONLINE ATER TABLE ENDS IN CRASH ON DISK FULL +--echo # +CREATE TABLE t1(f1 CHAR(255) NOT NULL, f2 CHAR(255) NOT NULL, f3 +CHAR(255) NOT NULL, f4 CHAR(255) NOT NULL, f5 CHAR(255) NOT NULL,f6 +CHAR(255) NOT NULL, f7 CHAR(255) NOT NULL, f8 CHAR(255) NOT NULL,f9 +CHAR(255) NOT NULL, f10 CHAR(255) NOT NULL, f11 CHAR(255) NOT NULL,f12 +CHAR(255) NOT NULL, f13 CHAR(255) NOT NULL, f14 CHAR(255) NOT NULL,f15 +CHAR(255) NOT NULL, f16 CHAR(255) NOT NULL, f17 CHAR(255) NOT NULL,f18 +CHAR(255) NOT NULL)ENGINE=INNODB; + +INSERT INTO t1 +VALUES('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r'); + +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; + +SET SESSION debug="+d,disk_is_full"; + +--error ER_RECORD_FILE_FULL +ALTER TABLE t1 FORCE, ALGORITHM=INPLACE; + +SET SESSION debug="-d,disk_is_full"; + +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create_isl_with_direct-master.opt mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create_isl_with_direct-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create_isl_with_direct-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create_isl_with_direct-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--innodb_flush_method=O_DIRECT diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create_isl_with_direct.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create_isl_with_direct.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/create_isl_with_direct.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/create_isl_with_direct.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,27 @@ +--source include/not_embedded.inc +--source include/have_innodb.inc +--source include/not_windows.inc + +--disable_query_log +CALL mtr.add_suppression("\\[Warning\\] InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs, see MySQL Bug#26662."); + +# The below mtr suppression to avoid failure in solaris platform. +CALL mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to set DIRECTIO_ON on file.*"); +--enable_query_log + +SHOW VARIABLES LIKE 'innodb_flush_method'; + +let MYSQLD_DATADIR=`SELECT @@datadir`; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR + +# Create a table with explicit data directory option. +EVAL CREATE TABLE t1 (x INT) ENGINE=INNODB, DATA DIRECTORY='$MYSQL_TMP_DIR'; + +--echo # Contents of tmp/test directory containing .ibd file +--list_files $MYSQL_TMP_DIR/test + +--echo # Contents of the 'test' database directory containing .isl and .frm files +--list_files $MYSQLD_DATADIR/test + +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/flush-hang.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/flush-hang.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/flush-hang.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/flush-hang.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,50 @@ + +--echo # +--echo #Bug #21133329 HANGING "SYSTEM LOCK" WHEN EXECUTING "FLUSH TABLE ... FOR EXPORT" +--echo # + +--source include/not_embedded.inc +--source include/have_debug.inc +--source include/have_innodb.inc + +CREATE TABLE t1 ( + c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + c2 BIGINT, + c3 VARCHAR(2048), + c4 VARCHAR(2048), + INDEX idx1(c2), + INDEX idx2(c3(512)), + INDEX idx3(c4(512))) Engine=InnoDB; + +CREATE TABLE t2 ( f1 int PRIMARY KEY) engine=innodb; + +# Stop purge so that it doesn't remove the delete marked entries. +SET GLOBAL INNODB_PURGE_STOP_NOW=ON; + +# Disable change buffer merge from the master thread, additionally +# enable aggressive flushing so that more changes are buffered. +SET GLOBAL innodb_disable_background_merge=ON; +SET GLOBAL innodb_stats_persistent=OFF; +show variables like '%innodb_stats_persistent%'; + +INSERT INTO t1(c2, c3, c4) VALUES + (1, REPEAT('a', 2048), REPEAT('a', 2048)), + (2, REPEAT('b', 2048), REPEAT('b', 2048)), + (3, REPEAT('c', 2048), REPEAT('c', 2048)), + (4, REPEAT('d', 2048), REPEAT('d', 2048)); + +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; +INSERT INTO t1(c2, c3, c4) SELECT c2, c3, c4 FROM t1; + +FLUSH TABLES t2 FOR EXPORT; +UNLOCK TABLES; + +SET GLOBAL innodb_disable_background_merge=OFF; +SET GLOBAL INNODB_PURGE_RUN_NOW=ON; +SET GLOBAL innodb_stats_persistent=ON; + +DROP TABLE t1,t2; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/import_update_stats.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/import_update_stats.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/import_update_stats.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/import_update_stats.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,78 @@ +# +# BUG#20125349 - PERSISTANT STATS IS NOT UPDATED WHEN TTS IS IMPORTED. +# + +--source include/not_embedded.inc +--source include/have_innodb.inc + +let MYSQLD_DATADIR =`SELECT @@datadir`; +SET @old_innodb_file_per_table = @@innodb_file_per_table; + +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; + +CREATE TABLE t1 ( + col_1 CHAR (255), + col_2 VARCHAR (255) +) ENGINE = InnoDB; + +CREATE INDEX idx1 ON t1(col_1); +CREATE INDEX idx2 ON t1(col_2); + +SHOW INDEXES FROM t1; + +INSERT INTO t1 VALUES ("col1_00001", "col2_00001"), ("col1_00002", "col2_00002"); + +SHOW INDEXES FROM t1; + +ANALYZE TABLE t1; +SHOW INDEXES FROM t1; + +FLUSH TABLES t1 FOR EXPORT; +perl; +do 'include/innodb-util.inc'; +ib_backup_tablespaces("test", "t1"); +EOF + +UNLOCK TABLES; + +DROP TABLE t1; + +CREATE TABLE t1 ( + col_1 CHAR (255), + col_2 VARCHAR (255) +) ENGINE = InnoDB; + +CREATE INDEX idx1 ON t1(col_1); +CREATE INDEX idx2 ON t1(col_2); + +SHOW INDEXES FROM t1; + +INSERT INTO t1 VALUES ("col1_00001", "col2_00001"); + +SHOW INDEXES FROM t1; + +ANALYZE TABLE t1; +SHOW INDEXES FROM t1; + +ALTER TABLE t1 DISCARD TABLESPACE; + +perl; +do 'include/innodb-util.inc'; +ib_discard_tablespaces("test", "t1"); +ib_restore_tablespaces("test", "t1"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; + +SHOW INDEXES FROM t1; + +ANALYZE TABLE t1; +SHOW INDEXES FROM t1; + +DROP TABLE t1; + +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; + +--remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*.ibd +--remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*.cfg diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-alter-debug.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-alter-debug.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-alter-debug.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-alter-debug.test 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,8 @@ --source include/have_innodb.inc --source include/have_debug.inc +--source include/have_debug_sync.inc + +--source include/count_sessions.inc SET NAMES utf8; @@ -26,3 +29,49 @@ SHOW CREATE TABLE t1ć; DROP TABLE t1ć, â‘ ; + +--echo # +--echo # Bug #21364096 THE BOGUS DUPLICATE KEY ERROR IN ONLINE DDL +--echo # WITH INCORRECT KEY NAME + +create table t1 (id int auto_increment primary key, a int, unique key uk(a)) +engine = innodb; +insert into t1 select 1, 1; +insert into t1 select 2, 2; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL s1 WAIT_FOR s2'; +--send alter table t1 add b int, ALGORITHM=inplace + +--echo /* connection con1 */ +connect (con1,localhost,root,,); +SET DEBUG_SYNC = 'now WAIT_FOR s1'; +--error ER_DUP_ENTRY +insert into t1 select NULL, 1; +SET DEBUG_SYNC = 'now SIGNAL s2'; + +--echo /* connection default */ +connection default; +--echo /* reap */ alter table t1 add b int, ALGORITHM=inplace; +--error ER_DUP_ENTRY +--reap + +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL s1 WAIT_FOR s2'; +--send alter table t1 add b int, ALGORITHM=inplace; + +--echo /* connection con1 */ +connection con1; +set DEBUG_SYNC = 'now WAIT_FOR s1'; +--error ER_DUP_ENTRY +update t1 set a=1 where id=2; +SET DEBUG_SYNC = 'now SIGNAL s2'; +disconnect con1; + +--echo /* connection default */ +connection default; +--echo /* reap */ alter table t1 add b int, ALGORITHM=inplace; +--error ER_DUP_ENTRY +--reap + +drop table t1; + +# Wait till all disconnects are completed +--source include/wait_until_count_sessions.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-alter.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-alter.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-alter.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-alter.test 2016-08-26 11:22:35.000000000 +0000 @@ -449,3 +449,36 @@ CHECK TABLE t1; DROP TABLE t1, parent; + +--echo # +--echo #BUG#21514135 SCHEMA MISMATCH ERROR WHEN IMPORTING TABLESPACE AFTER +--echo #DROPPING AN INDEX +--echo # +let $source_db = source_db; +let $dest_db = dest_db; + +eval CREATE DATABASE $source_db; +eval CREATE DATABASE $dest_db; + +eval CREATE TABLE $source_db.t1 ( + id int(11) NOT NULL, + age int(11) DEFAULT NULL, + name varchar(20), + PRIMARY KEY (id), + KEY index1 (age) + ) ENGINE=InnoDB; + +eval ALTER TABLE $source_db.t1 DROP INDEX index1, ADD INDEX index2(name, age), algorithm=inplace; + +--source suite/innodb/include/import.inc + +eval ALTER TABLE $source_db.t1 DROP INDEX index2, algorithm=inplace; + +--source suite/innodb/include/import.inc + +eval DROP TABLE $source_db.t1; +eval DROP DATABASE $source_db; +eval DROP DATABASE $dest_db; + + + diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_bug54044.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_bug54044.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_bug54044.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_bug54044.test 2016-08-26 11:22:35.000000000 +0000 @@ -10,10 +10,9 @@ SHOW CREATE TABLE table_54044; DROP TABLE table_54044; -# These 'create table' operations should fail because of -# using NULL datatype +# This 'create table' should pass since it uses a Field_string of size 0. -CREATE TABLE tmp ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL; +CREATE TABLE tmp ENGINE = INNODB + AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL; SHOW CREATE TABLE tmp; DROP TABLE tmp; - diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc-master.opt mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--innodb-autoinc-lock-mode=0 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_deadlock_with_autoinc.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,47 @@ +--source include/have_debug.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source include/count_sessions.inc + +--echo # +--echo # Bug #21983865 UNEXPECTED DEADLOCK WITH INNODB_AUTOINC_LOCK_MODE=0 +--echo # + +create table t1(f1 int not null auto_increment primary key) engine=innodb; + +--echo # Hold autoinc_lock on table t1 from connection con1 +connect (con1, localhost, root); +set debug_sync='ib_after_row_insert SIGNAL others WAIT_FOR continue_others'; +--send insert into t1 values(NULL) + +connection default; +--echo # Create 40 connections and make it to wait for autoinc_lock on table t1. +--disable_query_log +set debug_sync='now WAIT_FOR others'; +let $1=2; +while ($1 < 40) { + connect (con$1,localhost,root); + --send insert into t1 values(NULL) + inc $1; + connection default; +} + +connect (con40,localhost,root); +--enable_query_log +--echo # Release the auto_inc lock on table t1 for connection con1 +set debug_sync='now SIGNAL continue_others'; + +--echo # Now all 40 connections can finish the insert operation on t1. +let $1=1; +connection default; +disconnect con40; +while ($1 < 40) { + connection con$1; + --reap + connection default; + disconnect con$1; + inc $1; +} + +drop table t1; +--source include/wait_until_count_sessions.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_file_limit_check-master.opt mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_file_limit_check-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_file_limit_check-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_file_limit_check-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--no-console --log-error=$MYSQLTEST_VARDIR/tmp/innodb_file_limit.err diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_file_limit_check.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_file_limit_check.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb_file_limit_check.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb_file_limit_check.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,31 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/big_test.inc + +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); + +CREATE TABLE t1 (a INT)ENGINE=INNODB PARTITION BY HASH(a) PARTITIONS 1024; + +let $innodb_file_limit= `SELECT @@open_files_limit`; +inc $innodb_file_limit; + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server 10 +--source include/wait_until_disconnected.inc +--enable_reconnect + +--exec echo "restart: --innodb_open_files=$innodb_file_limit --no-console --log-error=$MYSQLTEST_VARDIR/tmp/innodb_file_limit.err" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +--enable_reconnect +--source include/wait_until_connected_again.inc +--disable_reconnect + +let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/innodb_file_limit.err; +let SEARCH_PATTERN= innodb_open_files should not be greater than the open_files_limit.; +--source include/search_pattern_in_file.inc + +SELECT 1 UNION SELECT * FROM t1 UNION SELECT * FROM t1 UNION +SELECT * FROM t1 UNION SELECT * FROM t1 UNION SELECT * FROM +t1; + +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-debug-master.opt mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-debug-master.opt --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-debug-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-debug-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--innodb-sort-buffer-size=64k diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-debug.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-debug.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-debug.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-debug.test 2016-08-26 11:22:35.000000000 +0000 @@ -48,3 +48,36 @@ eval set global innodb_file_per_table=$per_table; eval set global innodb_file_format=$format; eval set global innodb_file_format_max=$format; + +--echo # +--echo # Bug #21762319 ADDING INDEXES ON EMPTY TABLE IS SLOW +--echo # WITH LARGE INNODB_SORT_BUFFER_SIZE. + +call mtr.add_suppression("InnoDB: Cannot create temporary merge file"); + +# Table with large data which is greater than sort buffer + +create table t480(a serial)engine=innodb; +insert into t480 +values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(), +(),(),(),(),(),(),(),(); +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +create table t1(f1 int auto_increment not null, + f2 char(200) not null, f3 char(200) not null, + f4 char(200) not null,primary key(f1))engine=innodb; +insert into t1 select NULL,'aaa','bbb','ccc' from t480; +insert into t1 select NULL,'aaaa','bbbb','cccc' from t480; +insert into t1 select NULL,'aaaaa','bbbbb','ccccc' from t480; +insert into t1 select NULL,'aaaaaa','bbbbbb','cccccc' from t480; +insert into t1 select NULL,'aaaaaaa','bbbbbbb','ccccccc' from t480; +insert into t1 select NULL,'aaaaaaaa','bbbbbbbb','cccccccc' from t480; +select count(*) from t1; + +SET DEBUG = '+d,innobase_tmpfile_creation_failure'; +--error ER_OUT_OF_RESOURCES +alter table t1 force, algorithm=inplace; +SET DEBUG = '-d,innobase_tmpfile_creation_failure'; +drop table t1, t480; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-online-norebuild.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-online-norebuild.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/innodb-index-online-norebuild.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/innodb-index-online-norebuild.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,68 @@ +--echo # INPLACE ALTER WITH INPLACE_IGNORE FLAG AND CHANGE CREATE OPTION + +--echo # CHANGE THE COLUMN DEFAULT (INPLACE_IGNORE) +--echo # AND TABLE CHARSET(CHANGE CREATE) + +CREATE TABLE t1( + id INT PRIMARY KEY, + f1 INT NOT NULL DEFAULT 0)ENGINE=INNODB; + +INSERT INTO t1 VALUES(1, 2); + +let id_before_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t1"`; + +ALTER TABLE t1 MODIFY COLUMN f1 INT NOT NULL DEFAULT 0, + DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; + +let id_after_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t1"`; + +if ($id_before_alter != $id_after_alter) +{ + --echo "Table rebuild happened"; +} + +DROP TABLE t1; + +--echo # CHANGE THE STORAGE TYPE OF COLUMN(INPLACE IGNORE) +--echo # AND TABLE CHARSET(CHANGE CREATE) + +CREATE TABLE t1( + id INT STORAGE DISK)ENGINE=INNODB; + +INSERT INTO t1 values(1); + +let id_before_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t1"`; + +ALTER TABLE t1 MODIFY COLUMN id INT STORAGE MEMORY, + DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; + +let id_after_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t1"`; + +if ($id_before_alter != $id_after_alter) +{ + --echo "Table rebuild happened"; +} + +DROP TABLE t1; + +--echo # RENAME THE TABLE(INPLACE IGNORE) +--echo # AND CHANGE TABLE CHARSET(CHANGE CREATE) + +CREATE TABLE t1( + f1 INT NOT NULL, + f2 INT NOT NULL)ENGINE=INNODB; + +INSERT INTO t1 VALUES(1, 2); + +let id_before_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t1"`; + +ALTER TABLE t1 RENAME t2, DEFAULT CHARSET=latin1, ALGORITHM=INPLACE; + +let id_after_alter =`SELECT table_id FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name="test/t2"`; + +if ($id_before_alter != $id_after_alter) +{ + --echo "Table rebuild happened"; +} + +DROP TABLE t2; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/monitor.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/monitor.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/monitor.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/monitor.test 2016-08-26 11:22:35.000000000 +0000 @@ -385,3 +385,56 @@ set global innodb_monitor_reset = default; set global innodb_monitor_reset_all = default; -- enable_warnings + +--echo # +--echo # Bug#22576241 SETTING INNODB_MONITOR_ENABLE TO ALL DOES NOT ENABLE ALL +--echo # MONITORS +--echo # +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; + +let $innodb_monitor_enable = `SELECT @@innodb_monitor_enable`; + +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +SET GLOBAL innodb_monitor_enable='module_buffer_page'; +INSERT INTO t1 VALUES (1), (2), (3), (4); FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +SET GLOBAL innodb_monitor_disable='module_buffer_page'; +SET GLOBAL innodb_monitor_reset_all='module_buffer_page'; +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +SET GLOBAL innodb_monitor_enable='%'; +INSERT INTO t1 VALUES (5), (6), (7), (8); FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +SET GLOBAL innodb_monitor_disable='%'; +SET GLOBAL innodb_monitor_reset_all='%'; +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +SET GLOBAL innodb_monitor_enable='ALL'; +INSERT INTO t1 VALUES (9), (10), (11), (12); FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +--replace_regex /[1-9]/NNNN/ +SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME +LIKE 'buffer_page_written_index_leaf'; + +--disable_warnings +SET GLOBAL innodb_monitor_enable=default; +SET GLOBAL innodb_monitor_disable=default; +SET GLOBAL innodb_monitor_reset_all=default; +--enable_warnings + +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb/t/tmpdir.test mysql-5.6-5.6.33/mysql-test/suite/innodb/t/tmpdir.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb/t/tmpdir.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb/t/tmpdir.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,63 @@ +--source include/have_innodb.inc +--source include/count_sessions.inc + +--echo # +--echo # Bug #19183565 CREATE DYNAMIC INNODB_TMPDIR VARIABLE TO CONTROL +--echo # WHERE INNODB WRITES TEMP FILES +--echo # + +--echo # If innodb_tmpdir is NULL or "", temporary file will be created in +--echo # server configuration variable location(--tmpdir) + +create table t1(a int primary key)engine=innodb; +show session variables like 'innodb_tmpdir'; +alter table t1 add column b int not null; +set global innodb_tmpdir=NULL; +--echo # Connection con1 +connect (con1,localhost,root); +show session variables like 'innodb_tmpdir'; +alter table t1 add key(b); +connection default; +disconnect con1; +drop table t1; + +--echo # innodb_tmpdir with invalid path. + +create table t1(a int primary key)engine=innodb; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_tmpdir='wrong_value'; +show warnings; +drop table t1; + + +--echo # innodb_tmpdir with mysql data directory path. + +let $MYSQLD_DATADIR= `select @@datadir`; +create table t1(a text, b text, fulltext(a,b))engine=innodb; +insert into t1 values('test1', 'test2'); +insert into t1 values('text1', 'text2'); +--replace_result $MYSQLD_DATADIR MYSQL_DATADIR +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_tmpdir = @@global.datadir; +--replace_regex /.*mysqld.1/DATADIR/ +show warnings; +drop table t1; + +--echo # innodb_tmpdir with valid location. +let $MYSQL_TMP_DIR= `select @@tmpdir`; +create table t1(a text, b text, fulltext(a,b))engine=innodb; +insert into t1 values('test1', 'test2'); +insert into t1 values('text1', 'text2'); +set @tmpdir = @@global.tmpdir; +set global innodb_tmpdir = @tmpdir; +show session variables like 'innodb_tmpdir'; +--echo # Connection con3 +connect (con3,localhost,root); +# Following alter using innodb_tmpdir as a path to create temporary files +alter table t1 add fulltext(b); +disconnect con3; +connection default; +set global innodb_tmpdir=NULL; +drop table t1; + +--source include/wait_until_count_sessions.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/fulltext.result mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/fulltext.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/fulltext.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/fulltext.result 2016-08-26 11:22:35.000000000 +0000 @@ -498,7 +498,7 @@ DROP TABLE t1; CREATE TABLE t1(a TEXT) ENGINE = InnoDB; SELECT GROUP_CONCAT(a) AS st FROM t1 HAVING MATCH(st) AGAINST('test' IN BOOLEAN MODE); -ERROR HY000: Incorrect arguments to AGAINST +ERROR HY000: Incorrect arguments to MATCH DROP TABLE t1; CREATE TABLE t1(a VARCHAR(64), FULLTEXT(a)) ENGINE = InnoDB; INSERT INTO t1 VALUES('awrd bwrd cwrd'),('awrd bwrd cwrd'),('awrd bwrd cwrd'); diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result 2016-08-26 11:22:35.000000000 +0000 @@ -257,3 +257,31 @@ AGAINST ('"more test proximity"' IN BOOLEAN MODE); id title body drop table articles; +# +# Bug #22679185 INVALID INNODB FTS DOC ID DURING INSERT +# +create table t1 (f1 int not null primary key, f2 varchar(100), +FTS_DOC_ID bigint(20) unsigned not null, +unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), +fulltext key (f2))engine=innodb; +insert into t1 values(1, "This is the first record", 20000); +insert into t1 values(2, "This is the second record", 40000); +select FTS_DOC_ID from t1; +FTS_DOC_ID +20000 +40000 +drop table t1; +create table t1 (f1 int not null primary key, f2 varchar(100), +FTS_DOC_ID bigint(20) unsigned not null auto_increment, +unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), +fulltext key (f2))engine=innodb, auto_increment=100000; +set auto_increment_increment = 65535; +insert into t1(f1, f2) values(1, "This is the first record"); +insert into t1(f1, f2) values(2, "This is the second record"); +insert into t1(f1, f2) values(3, "This is the third record"); +select FTS_DOC_ID from t1; +FTS_DOC_ID +131071 +196606 +262141 +drop table t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/sync_block.result mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/sync_block.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/sync_block.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/sync_block.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,67 @@ +SET @old_log_output = @@global.log_output; +SET @old_slow_query_log = @@global.slow_query_log; +SET @old_general_log = @@global.general_log; +SET @old_long_query_time = @@global.long_query_time; +SET @old_binlog_order_commits = @@global.binlog_order_commits; +SET GLOBAL log_output = 'TABLE'; +SET GLOBAL general_log = 1; +SET GLOBAL slow_query_log = 1; +SET GLOBAL long_query_time = 1; +SET GLOBAL binlog_order_commits = 1; +# Case 1: Sync blocks DML(insert) on the same table. +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +SET GLOBAL debug="+d,fts_instrument_sync_debug,fts_instrument_sync_sleep"; +SET DEBUG_SYNC= 'fts_sync_begin SIGNAL begin WAIT_FOR continue'; +INSERT INTO t1(title) VALUES('mysql database'); +SET DEBUG_SYNC= 'now WAIT_FOR begin'; +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +SET DEBUG_SYNC= 'now SIGNAL continue'; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +/* conneciton con2 */ SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +FTS_DOC_ID title +# make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +SLEEP(2) +0 +# slow log results should only contain INSERT INTO t1. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; +sql_text +INSERT INTO t1(title) VALUES('mysql database') +SET GLOBAL debug="-d,fts_instrument_sync_debug,fts_instrument_sync_sleep"; +TRUNCATE TABLE mysql.slow_log; +DROP TABLE t1; +# Case 2: Sync blocks DML(insert) on other tables. +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +CREATE TABLE t2(id INT); +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_sync_sleep"; +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL begin WAIT_FOR continue'; +INSERT INTO t1(title) VALUES('mysql database'); +SET DEBUG_SYNC= 'now WAIT_FOR begin'; +INSERT INTO t2 VALUES(1); +SET DEBUG_SYNC= 'now SIGNAL continue'; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +/* conneciton con2 */ INSERT INTO t2 VALUES(1); +# make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +SLEEP(2) +0 +# slow log results should be empty here. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; +sql_text +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_sync_sleep"; +TRUNCATE TABLE mysql.slow_log; +DROP TABLE t1,t2; +# Restore slow log settings. +SET GLOBAL log_output = @old_log_output; +SET GLOBAL general_log = @old_general_log; +SET GLOBAL slow_query_log = @old_slow_query_log; +SET GLOBAL long_query_time = @old_long_query_time; +SET GLOBAL binlog_order_commits = @old_binlog_order_commits; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/sync.result mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/sync.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/r/sync.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/r/sync.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,132 @@ +# Case 1: Test select and insert(row in both disk and cache) +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +INSERT INTO t1(title) VALUES('mysql'); +INSERT INTO t1(title) VALUES('database'); +SET SESSION debug="+d,fts_instrument_sync_debug"; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR selected'; +INSERT INTO t1(title) VALUES('mysql database'); +SET DEBUG_SYNC= 'now WAIT_FOR written'; +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +database 2 3 2 2 0 +database 2 3 2 3 6 +mysql 1 3 2 1 0 +mysql 1 3 2 3 0 +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +SET GLOBAL innodb_ft_aux_table=default; +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +FTS_DOC_ID title +1 mysql +2 database +SET DEBUG_SYNC= 'now SIGNAL selected'; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +SET SESSION debug="-d,fts_instrument_sync_debug"; +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +database 2 3 2 2 0 +database 2 3 2 3 6 +mysql 1 3 2 1 0 +mysql 1 3 2 3 0 +SET GLOBAL innodb_ft_aux_table=default; +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +FTS_DOC_ID title +3 mysql database +1 mysql +2 database +DROP TABLE t1; +# Case 2: Test insert and insert(sync) +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +INSERT INTO t1(title) VALUES('mysql'); +INSERT INTO t1(title) VALUES('database'); +SET SESSION debug="+d,fts_instrument_sync_debug"; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR inserted'; +INSERT INTO t1(title) VALUES('mysql database'); +SET DEBUG_SYNC= 'now WAIT_FOR written'; +INSERT INTO t1(title) VALUES('mysql database'); +SET DEBUG_SYNC= 'now SIGNAL inserted'; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +SET SESSION debug="-d,fts_instrument_sync_debug"; +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +database 2 3 2 2 0 +database 2 3 2 3 6 +database 4 4 1 4 6 +mysql 1 4 3 1 0 +mysql 1 4 3 3 0 +mysql 1 4 3 4 0 +SET GLOBAL innodb_ft_aux_table=default; +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +FTS_DOC_ID title +3 mysql database +4 mysql database +1 mysql +2 database +DROP TABLE t1; +# Case 3: Test insert crash recovery +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +INSERT INTO t1(title) VALUES('database'); +SET SESSION debug="+d,fts_instrument_sync_debug,fts_write_node_crash"; +INSERT INTO t1(title) VALUES('mysql'); +ERROR HY000: Lost connection to MySQL server during query +After restart +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database'); +FTS_DOC_ID title +1 database +SET SESSION debug="+d,fts_instrument_sync_debug"; +INSERT INTO t1(title) VALUES('mysql'); +SET SESSION debug="-d,fts_instrument_sync_debug"; +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database'); +FTS_DOC_ID title +1 database +2 mysql +DROP TABLE t1; +# Case 4: Test sync commit & rollback in background +CREATE TABLE t1( +id INT AUTO_INCREMENT, +title VARCHAR(100), +FULLTEXT(title), +PRIMARY KEY(id)) ENGINE=InnoDB; +SET SESSION debug="+d,fts_instrument_sync"; +INSERT INTO t1(title) VALUES('mysql'); +SET SESSION debug="-d,fts_instrument_sync"; +SET GLOBAL debug="+d,fts_instrument_sync,fts_instrument_sync_interrupted"; +INSERT INTO t1(title) VALUES('database'); +SET GLOBAL debug="-d,fts_instrument_sync,fts_instrument_sync_interrupted"; +SET SESSION debug="+d,fts_instrument_sync_debug"; +INSERT INTO t1(title) VALUES('good'); +SET SESSION debug="-d,fts_instrument_sync_debug"; +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +database 2 2 1 2 0 +good 3 3 1 3 0 +mysql 1 1 1 1 0 +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +SET GLOBAL innodb_ft_aux_table=default; +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database good'); +id title +1 mysql +2 database +3 good +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test 2016-08-26 11:22:35.000000000 +0000 @@ -221,3 +221,30 @@ AGAINST ('"more test proximity"' IN BOOLEAN MODE); drop table articles; + +--echo # +--echo # Bug #22679185 INVALID INNODB FTS DOC ID DURING INSERT +--echo # + +create table t1 (f1 int not null primary key, f2 varchar(100), + FTS_DOC_ID bigint(20) unsigned not null, + unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), + fulltext key (f2))engine=innodb; + +insert into t1 values(1, "This is the first record", 20000); +insert into t1 values(2, "This is the second record", 40000); +select FTS_DOC_ID from t1; +drop table t1; + + +create table t1 (f1 int not null primary key, f2 varchar(100), + FTS_DOC_ID bigint(20) unsigned not null auto_increment, + unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), + fulltext key (f2))engine=innodb, auto_increment=100000; + +set auto_increment_increment = 65535; +insert into t1(f1, f2) values(1, "This is the first record"); +insert into t1(f1, f2) values(2, "This is the second record"); +insert into t1(f1, f2) values(3, "This is the third record"); +select FTS_DOC_ID from t1; +drop table t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/sync_block.test mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/sync_block.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/sync_block.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/sync_block.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,125 @@ +# +# BUG#22516559 MYSQL INSTANCE STALLS WHEN SYNCING FTS INDEX +# + +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/have_log_bin.inc +--source include/count_sessions.inc + +SET @old_log_output = @@global.log_output; +SET @old_slow_query_log = @@global.slow_query_log; +SET @old_general_log = @@global.general_log; +SET @old_long_query_time = @@global.long_query_time; +SET @old_binlog_order_commits = @@global.binlog_order_commits; + +SET GLOBAL log_output = 'TABLE'; +SET GLOBAL general_log = 1; +SET GLOBAL slow_query_log = 1; +SET GLOBAL long_query_time = 1; +SET GLOBAL binlog_order_commits = 1; + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +connection default; + +--echo # Case 1: Sync blocks DML(insert) on the same table. +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +connection con1; + +SET GLOBAL debug="+d,fts_instrument_sync_debug,fts_instrument_sync_sleep"; + +SET DEBUG_SYNC= 'fts_sync_begin SIGNAL begin WAIT_FOR continue'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection con2; + +SET DEBUG_SYNC= 'now WAIT_FOR begin'; + +send SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); + +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +connection con2; +--echo /* conneciton con2 */ SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +--reap + +connection default; +-- echo # make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +-- echo # slow log results should only contain INSERT INTO t1. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; + +SET GLOBAL debug="-d,fts_instrument_sync_debug,fts_instrument_sync_sleep"; +TRUNCATE TABLE mysql.slow_log; + +DROP TABLE t1; + +--echo # Case 2: Sync blocks DML(insert) on other tables. +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +CREATE TABLE t2(id INT); + +connection con1; + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_sync_sleep"; + +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL begin WAIT_FOR continue'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection con2; + +SET DEBUG_SYNC= 'now WAIT_FOR begin'; + +send INSERT INTO t2 VALUES(1); + +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +connection con2; +--echo /* conneciton con2 */ INSERT INTO t2 VALUES(1); +--reap + +connection default; +-- echo # make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +-- echo # slow log results should be empty here. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_sync_sleep"; +TRUNCATE TABLE mysql.slow_log; + +DROP TABLE t1,t2; + +disconnect con1; +disconnect con2; + +--source include/wait_until_count_sessions.inc + +-- echo # Restore slow log settings. +SET GLOBAL log_output = @old_log_output; +SET GLOBAL general_log = @old_general_log; +SET GLOBAL slow_query_log = @old_slow_query_log; +SET GLOBAL long_query_time = @old_long_query_time; +SET GLOBAL binlog_order_commits = @old_binlog_order_commits; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/sync.test mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/sync.test --- mysql-5.6-5.6.27/mysql-test/suite/innodb_fts/t/sync.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_fts/t/sync.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,170 @@ +# +# BUG#22516559 MYSQL INSTANCE STALLS WHEN SYNCING FTS INDEX +# + +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source include/not_valgrind.inc +--source include/not_embedded.inc +--source include/not_crashrep.inc +--source include/count_sessions.inc + +connect (con1,localhost,root,,); +connection default; + +--echo # Case 1: Test select and insert(row in both disk and cache) +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +INSERT INTO t1(title) VALUES('mysql'); +INSERT INTO t1(title) VALUES('database'); + +connection con1; + +SET SESSION debug="+d,fts_instrument_sync_debug"; + +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR selected'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection default; + +SET DEBUG_SYNC= 'now WAIT_FOR written'; + +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +SET GLOBAL innodb_ft_aux_table=default; + +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); + +SET DEBUG_SYNC= 'now SIGNAL selected'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +SET SESSION debug="-d,fts_instrument_sync_debug"; + +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +SET GLOBAL innodb_ft_aux_table=default; + +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); + +connection default; + +DROP TABLE t1; + +--echo # Case 2: Test insert and insert(sync) +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +INSERT INTO t1(title) VALUES('mysql'); +INSERT INTO t1(title) VALUES('database'); + +connection con1; + +SET SESSION debug="+d,fts_instrument_sync_debug"; + +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR inserted'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection default; + +SET DEBUG_SYNC= 'now WAIT_FOR written'; + +INSERT INTO t1(title) VALUES('mysql database'); + +SET DEBUG_SYNC= 'now SIGNAL inserted'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +SET SESSION debug="-d,fts_instrument_sync_debug"; + +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +SET GLOBAL innodb_ft_aux_table=default; + +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); + +connection default; +disconnect con1; + +DROP TABLE t1; + +--echo # Case 3: Test insert crash recovery +--let $_expect_file_name=$MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect + +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +INSERT INTO t1(title) VALUES('database'); + +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +SET SESSION debug="+d,fts_instrument_sync_debug,fts_write_node_crash"; + +--error 2013 +INSERT INTO t1(title) VALUES('mysql'); + +--source include/start_mysqld.inc + +-- echo After restart +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database'); + +SET SESSION debug="+d,fts_instrument_sync_debug"; + +INSERT INTO t1(title) VALUES('mysql'); + +SET SESSION debug="-d,fts_instrument_sync_debug"; + +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database'); + +DROP TABLE t1; + +--echo # Case 4: Test sync commit & rollback in background +CREATE TABLE t1( + id INT AUTO_INCREMENT, + title VARCHAR(100), + FULLTEXT(title), + PRIMARY KEY(id)) ENGINE=InnoDB; + +SET SESSION debug="+d,fts_instrument_sync"; +INSERT INTO t1(title) VALUES('mysql'); +SET SESSION debug="-d,fts_instrument_sync"; + +--source include/restart_mysqld.inc + +SET GLOBAL debug="+d,fts_instrument_sync,fts_instrument_sync_interrupted"; +INSERT INTO t1(title) VALUES('database'); +SET GLOBAL debug="-d,fts_instrument_sync,fts_instrument_sync_interrupted"; + +SET SESSION debug="+d,fts_instrument_sync_debug"; +INSERT INTO t1(title) VALUES('good'); +SET SESSION debug="-d,fts_instrument_sync_debug"; + +SET GLOBAL innodb_ft_aux_table="test/t1"; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; +SET GLOBAL innodb_ft_aux_table=default; + +SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database good'); + +DROP TABLE t1; + +--source include/wait_until_count_sessions.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/innodb_zip/r/innodb_wl6347_comp_indx_stat.result mysql-5.6-5.6.33/mysql-test/suite/innodb_zip/r/innodb_wl6347_comp_indx_stat.result --- mysql-5.6-5.6.27/mysql-test/suite/innodb_zip/r/innodb_wl6347_comp_indx_stat.result 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/innodb_zip/r/innodb_wl6347_comp_indx_stat.result 2016-08-26 11:22:35.000000000 +0000 @@ -267,7 +267,7 @@ AND table_name='tab5' AND database_name='test' AND index_name like 'idx%' ; compress_stat 1 -The size of the tab5.ibd file: 2097152 +The size of the tab5.ibd file: 5242880 # fetch the compressed page and check the stats =============== Fetch Records @@ -293,7 +293,7 @@ AND table_name='tab5' AND database_name='test' AND index_name like 'idx%' ; compress_stat 1 -The size of the tab5.ibd file: 2097152 +The size of the tab5.ibd file: 5242880 # fetch the compressed same page once again and check the stats # the stat figures should be same as above query =============== @@ -320,7 +320,7 @@ AND table_name='tab5' AND database_name='test' AND index_name like 'idx%' ; compress_stat 1 -The size of the tab5.ibd file: 2097152 +The size of the tab5.ibd file: 5242880 # Restarting server # set the flag on (default off) SET GLOBAL innodb_cmp_per_index_enabled=ON; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/opt_trace/r/range_no_prot.result mysql-5.6-5.6.33/mysql-test/suite/opt_trace/r/range_no_prot.result --- mysql-5.6-5.6.27/mysql-test/suite/opt_trace/r/range_no_prot.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/opt_trace/r/range_no_prot.result 2016-08-26 11:22:35.000000000 +0000 @@ -3442,8 +3442,8 @@ "index": "cola", "index_scan_cost": 11.231, "cumulated_index_scan_cost": 11.231, - "disk_sweep_cost": 309.15, - "cumulated_total_cost": 320.38, + "disk_sweep_cost": 278.58, + "cumulated_total_cost": 289.81, "usable": true, "matching_rows_now": 533, "isect_covering_with_this_index": false, @@ -3453,8 +3453,8 @@ "index": "colb", "index_scan_cost": 11.231, "cumulated_index_scan_cost": 22.462, - "disk_sweep_cost": 30.898, - "cumulated_total_cost": 53.359, + "disk_sweep_cost": 28.152, + "cumulated_total_cost": 50.613, "usable": true, "matching_rows_now": 32.639, "isect_covering_with_this_index": false, @@ -3466,7 +3466,7 @@ "cause": "no_clustered_pk_index" } /* clustered_pk */, "rows": 32, - "cost": 53.359, + "cost": 50.613, "covering": false, "chosen": true } /* analyzing_roworder_intersect */ @@ -3475,7 +3475,7 @@ "range_access_plan": { "type": "index_roworder_intersect", "rows": 32, - "cost": 53.359, + "cost": 50.613, "covering": false, "clustered_pk_scan": false, "intersect_of": [ @@ -3498,7 +3498,7 @@ ] /* intersect_of */ } /* range_access_plan */, "rows_for_plan": 32, - "cost_for_plan": 53.359, + "cost_for_plan": 50.613, "chosen": true } /* chosen_range_access_summary */ } /* range_analysis */ @@ -3530,12 +3530,12 @@ { "access_type": "range", "rows": 24, - "cost": 59.759, + "cost": 57.013, "chosen": true } ] /* considered_access_paths */ } /* best_access_path */, - "cost_for_plan": 59.759, + "cost_for_plan": 57.013, "rows_for_plan": 24, "chosen": true } @@ -5519,8 +5519,8 @@ "index": "v_idx", "index_scan_cost": 1, "cumulated_index_scan_cost": 1, - "disk_sweep_cost": 1, - "cumulated_total_cost": 2, + "disk_sweep_cost": 0.9031, + "cumulated_total_cost": 1.9031, "usable": true, "matching_rows_now": 1, "isect_covering_with_this_index": false, diff -Nru mysql-5.6-5.6.27/mysql-test/suite/opt_trace/r/range_ps_prot.result mysql-5.6-5.6.33/mysql-test/suite/opt_trace/r/range_ps_prot.result --- mysql-5.6-5.6.27/mysql-test/suite/opt_trace/r/range_ps_prot.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/opt_trace/r/range_ps_prot.result 2016-08-26 11:22:35.000000000 +0000 @@ -3442,8 +3442,8 @@ "index": "cola", "index_scan_cost": 11.231, "cumulated_index_scan_cost": 11.231, - "disk_sweep_cost": 309.15, - "cumulated_total_cost": 320.38, + "disk_sweep_cost": 278.58, + "cumulated_total_cost": 289.81, "usable": true, "matching_rows_now": 533, "isect_covering_with_this_index": false, @@ -3453,8 +3453,8 @@ "index": "colb", "index_scan_cost": 11.231, "cumulated_index_scan_cost": 22.462, - "disk_sweep_cost": 30.898, - "cumulated_total_cost": 53.359, + "disk_sweep_cost": 28.152, + "cumulated_total_cost": 50.613, "usable": true, "matching_rows_now": 32.639, "isect_covering_with_this_index": false, @@ -3466,7 +3466,7 @@ "cause": "no_clustered_pk_index" } /* clustered_pk */, "rows": 32, - "cost": 53.359, + "cost": 50.613, "covering": false, "chosen": true } /* analyzing_roworder_intersect */ @@ -3475,7 +3475,7 @@ "range_access_plan": { "type": "index_roworder_intersect", "rows": 32, - "cost": 53.359, + "cost": 50.613, "covering": false, "clustered_pk_scan": false, "intersect_of": [ @@ -3498,7 +3498,7 @@ ] /* intersect_of */ } /* range_access_plan */, "rows_for_plan": 32, - "cost_for_plan": 53.359, + "cost_for_plan": 50.613, "chosen": true } /* chosen_range_access_summary */ } /* range_analysis */ @@ -3530,12 +3530,12 @@ { "access_type": "range", "rows": 24, - "cost": 59.759, + "cost": 57.013, "chosen": true } ] /* considered_access_paths */ } /* best_access_path */, - "cost_for_plan": 59.759, + "cost_for_plan": 57.013, "rows_for_plan": 24, "chosen": true } @@ -5519,8 +5519,8 @@ "index": "v_idx", "index_scan_cost": 1, "cumulated_index_scan_cost": 1, - "disk_sweep_cost": 1, - "cumulated_total_cost": 2, + "disk_sweep_cost": 0.9031, + "cumulated_total_cost": 1.9031, "usable": true, "matching_rows_now": 1, "isect_covering_with_this_index": false, diff -Nru mysql-5.6-5.6.27/mysql-test/suite/opt_trace/validate_json.pl mysql-5.6-5.6.33/mysql-test/suite/opt_trace/validate_json.pl --- mysql-5.6-5.6.27/mysql-test/suite/opt_trace/validate_json.pl 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/opt_trace/validate_json.pl 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,159 @@ +#!/usr/bin/perl +use strict; +use JSON; +use File::Spec::Functions qw/ canonpath /; +my $usage = "This is from WL#5257 \"first API for optimizer trace\". + +Usage: + %s [-q] + + -q quiet mode: only display errors and warnings. + +It will verify that all optimizer traces of files (usually a_file +is a .result or .reject file which contains +SELECT * FROM OPTIMIZER_TRACE; ) are JSON-compliant, and that +they contain no duplicates keys. +Exit code is 0 if all ok."; +my $retcode = 0; +my @ignored; +my @input = @ARGV; + +# Filter out "-q" options +@input = grep {!/-q/} @input; + +if (!@input) +{ + print "$usage\n"; + exit 1; +} + +# If command line contains at least one "-q" option, it is quiet mode +my $quiet= scalar(@input) <= scalar(@ARGV) -1; +# On Windows, command line arguments specified using wildcards need to be evaluated. +# On Unix too if the arguments are passed with single quotes. +my $need_parse = grep(/\*/,@input); +if ($need_parse) +{ + my $platform_independent_dir; + $platform_independent_dir= canonpath "@input"; + @input= glob "$platform_independent_dir"; +} + +foreach my $input_file (@input) +{ + handle_one_file($input_file); + print "\n"; +} + +if ( @ignored ) +{ + print STDERR "These files have been ignored:\n"; + foreach my $ig ( @ignored ) + { + print "$ig\n"; + } + print "\n"; +} +if ( $retcode ) +{ + print STDERR "There are errors\n"; +} + +else +{ + print "\n"; + print "ALL OK\n"; +} + +exit $retcode; + +sub handle_one_file { + + my ( $input_file ) = @_; + if ( $input_file =~ /^.*(ctype_.*|mysqldump)\.result/ ) + { + push @ignored ,$input_file; + return; + } + print "FILE $input_file\n"; + print "\n"; + open(DATA,"<$input_file") or die "Can't open file"; + my @lines = ; + close(DATA); + my $first_trace_line = 0; + my $trace_line = 0; + my @trace = undef; + label_to: foreach my $i ( @lines ) + { + $trace_line = $trace_line + 1; + if (( grep(/^.*(\t)?{\n/,$i) ) and ( $first_trace_line == 0 )) + { + @trace = undef; + $first_trace_line = $trace_line; + push @trace, "{\n"; + next label_to; + } + if (( $i =~ /^}/ ) and ( $first_trace_line != 0)) + { + push @trace, "}"; + check($first_trace_line,@trace); + $first_trace_line = 0; + } + if ( $first_trace_line != 0 ) + { + # Eliminate /* */ from end_marker=on (not valid JSON) + $i =~ s/\/\*.*\*\// /g; + push @trace, $i; + } + + } +} + + +sub check { + + my ( $first_trace_line, @trace ) = @_; + my $string = join("", @trace); + my $parsed; + eval { $parsed = decode_json($string); }; + unless ( $parsed ) + { + print "Parse error at line: $first_trace_line\n"; + my $error = $@; + print "Error: $@\n"; + # If there is a character position specified, put a mark ('&') in front of this character + if ($error =~ /invalid character.*at character offset (\d+)/) + { + substr($string,$1,0) = "&"; + print "$string\n"; + } + else + { + print "$string\n"; + } + $retcode = 1; + print "\n"; + return; + } + # Detect non-unique keys in one object, by counting + # number of quote symbols ("): the json module outputs only + # one of the non-unique keys, making the number of " + # smaller compared to the input string. + + my $before = $string =~ tr/'"'//; + my $re_json; + $re_json= to_json($parsed); + my $after = $re_json =~ tr/'"'//; + if ( $before != $after ) + { + print "Non-unique keys at line $first_trace_line ( $before vs $after )\n"; + print "$string\n"; + $retcode = 1; + print "\n"; + return; + } + if ( !$quiet ) + { + print "OK at line $first_trace_line\n"; + } +} diff -Nru mysql-5.6-5.6.27/mysql-test/suite/opt_trace/validate_json.py mysql-5.6-5.6.33/mysql-test/suite/opt_trace/validate_json.py --- mysql-5.6-5.6.27/mysql-test/suite/opt_trace/validate_json.py 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/opt_trace/validate_json.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -#! /usr/bin/python - -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - -import sys - -usage = """ -This is from WL#5257 "first API for optimizer trace". - -Usage: - %s [-q] - - -q quiet mode: only display errors and warnings. - -It will verify that all optimizer traces of files (usually a_file -is a .result or .reject file which contains -SELECT * FROM OPTIMIZER_TRACE; ) are JSON-compliant, and that -they contain no duplicates keys. -Exit code is 0 if all ok. -""" % sys.argv[0] - -input_files = filter(lambda x: x != '-q', sys.argv[1:]) # filter out "-q" options - -if not input_files: - print usage - sys.exit(1) - -quiet = len(input_files) < len(sys.argv) - 1 # command line contains at least one "-q" option - -import json, re - -trace_start_re = re.compile(r"^.*(\t)?{\n") -trace_end_re = re.compile(r"^}") -ignorable_re = re.compile(r"^.*(ctype_.*|mysqldump)\.result") - -def check(trace, first_trace_line): - global retcode - s = "".join(trace) - try: - parsed = json.loads(s) - except: - print "parse error at line", first_trace_line - error = str(sys.exc_info()) - print error - # if there is a character position specified, put a mark ('&') - # in front of this character - matchobj = re.search(r"ValueError\('Invalid control character at: line \d+ column \d+ \(char (\d+)\)'", error) - if matchobj: - first_error_char = int(matchobj.group(1)) - print s[:first_error_char] + "&" + s[first_error_char:] - else: - print s - retcode = 1 - print - return - # detect non-unique keys in one object, by counting - # number of quote symbols ("'): the json module outputs only - # one of the non-unique keys, making the number of " and ' - # smaller compared to the input string. - before = s.count('"') + s.count("'") - str_parsed = str(parsed) - after = str_parsed.count('"') + str_parsed.count("'") - if (before != after): - print "non-unique keys at line %d (%d vs %d)" % (first_trace_line, before, after) - print s - retcode = 1 - print - return - if not quiet: - print "ok at line", first_trace_line - -def handle_one_file(name): - if ignorable_re.match(name): - ignored.append(name) - return - print "FILE %s" % name - print - all = open(name).readlines() - first_trace_line = trace_line = 0 - trace = None - for l in all: - trace_line += 1 - if trace_start_re.match(l) and first_trace_line == 0: - trace = [] - first_trace_line = trace_line - trace.append("{\n") - continue - if trace_end_re.match(l): - assert first_trace_line != 0 - trace.append("}") # eliminate any following columns of table (MISSING_PRIVILEGES etc) - check(trace, first_trace_line) - first_trace_line = 0 - if first_trace_line != 0: - # eliminate /* */ from end_marker=on (not valid JSON) - no_comment = re.sub("/\*.*\*/", "", l) - trace.append(no_comment) - -retcode=0 -ignored=[] -for f in input_files: - handle_one_file(f) - print -if ignored: - print >>sys.stderr, "Those files have been ignored", ignored -print -if retcode: - print >>sys.stderr, "THERE ARE ERRORS" -else: - print "ALL OK" -sys.exit(retcode) diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/aggregate.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/aggregate.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/aggregate.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/aggregate.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -"General cleanup" -drop table if exists t1; -update performance_schema.setup_instruments set enabled = 'NO'; -update performance_schema.setup_consumers set enabled = 'NO'; -truncate table performance_schema.file_summary_by_event_name; -truncate table performance_schema.file_summary_by_instance; -truncate table performance_schema.socket_summary_by_event_name; -truncate table performance_schema.socket_summary_by_instance; -truncate table performance_schema.events_waits_summary_global_by_event_name; -truncate table performance_schema.events_waits_summary_by_instance; -truncate table performance_schema.events_waits_summary_by_thread_by_event_name; -update performance_schema.setup_consumers set enabled = 'YES'; -update performance_schema.setup_instruments -set enabled = 'YES', timed = 'YES'; -create table t1 ( -id INT PRIMARY KEY, -b CHAR(100) DEFAULT 'initial value') -ENGINE=MyISAM; -insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8); -update performance_schema.setup_instruments SET enabled = 'NO'; -update performance_schema.setup_consumers set enabled = 'NO'; -set @dump_all=FALSE; -"Verifying file aggregate consistency" -SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_READ <> SUM(i.COUNT_READ)) -OR @dump_all; -EVENT_NAME COUNT_READ SUM(i.COUNT_READ) -SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE)) -OR @dump_all; -EVENT_NAME COUNT_WRITE SUM(i.COUNT_WRITE) -SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ) -FROM performance_schema.socket_summary_by_event_name AS e -JOIN performance_schema.socket_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_READ <> SUM(i.COUNT_READ)) -OR @dump_all; -EVENT_NAME COUNT_READ SUM(i.COUNT_READ) -SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE) -FROM performance_schema.socket_summary_by_event_name AS e -JOIN performance_schema.socket_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE)) -OR @dump_all; -EVENT_NAME COUNT_WRITE SUM(i.COUNT_WRITE) -SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ)) -OR @dump_all; -EVENT_NAME SUM_NUMBER_OF_BYTES_READ SUM(i.SUM_NUMBER_OF_BYTES_READ) -SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE)) -OR @dump_all; -EVENT_NAME SUM_NUMBER_OF_BYTES_WRITE SUM(i.SUM_NUMBER_OF_BYTES_WRITE) -"Verifying waits aggregate consistency (instance)" -SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT)) -OR @dump_all; -EVENT_NAME SUM_TIMER_WAIT SUM(i.SUM_TIMER_WAIT) -SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT)) -AND (MIN(i.MIN_TIMER_WAIT) != 0) -OR @dump_all; -EVENT_NAME MIN_TIMER_WAIT MIN(i.MIN_TIMER_WAIT) -SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT)) -OR @dump_all; -EVENT_NAME MAX_TIMER_WAIT MAX(i.MAX_TIMER_WAIT) -"Verifying waits aggregate consistency (thread)" -SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT)) -OR @dump_all; -EVENT_NAME SUM_TIMER_WAIT SUM(t.SUM_TIMER_WAIT) -SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT)) -AND (MIN(t.MIN_TIMER_WAIT) != 0) -OR @dump_all; -EVENT_NAME MIN_TIMER_WAIT MIN(t.MIN_TIMER_WAIT) -SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT)) -OR @dump_all; -EVENT_NAME MAX_TIMER_WAIT MAX(t.MAX_TIMER_WAIT) -update performance_schema.setup_consumers set enabled = 'YES'; -update performance_schema.setup_instruments -set enabled = 'YES', timed = 'YES'; -drop table test.t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/dml_setup_instruments.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/dml_setup_instruments.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/dml_setup_instruments.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/dml_setup_instruments.result 2016-08-26 11:22:35.000000000 +0000 @@ -36,6 +36,7 @@ 'wait/synch/cond/sql/DEBUG_SYNC::cond') order by name limit 10; NAME ENABLED TIMED +wait/synch/cond/sql/COND_connection_count YES YES wait/synch/cond/sql/COND_flush_thread_cache YES YES wait/synch/cond/sql/COND_manager YES YES wait/synch/cond/sql/COND_queue_state YES YES @@ -45,7 +46,6 @@ wait/synch/cond/sql/Delayed_insert::cond YES YES wait/synch/cond/sql/Delayed_insert::cond_client YES YES wait/synch/cond/sql/Event_scheduler::COND_state YES YES -wait/synch/cond/sql/Gtid_state YES YES select * from performance_schema.setup_instruments where name='Wait'; select * from performance_schema.setup_instruments diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/misc.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/misc.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/misc.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/misc.result 2016-08-26 11:22:35.000000000 +0000 @@ -107,3 +107,14 @@ performance_schema.events_statements_history_long where errors > 0; mysql_errno returned_sqlstate message_text errors warnings 1146 42S02 Table 'test.t1' doesn't exist 1 0 +use performance_schema; +truncate performance_schema.events_statements_history; +select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AS A; +A +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +select _utf8mb4 'òðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑ' as B; +B +ваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑваÑÑ +select count(*) from events_statements_history where sql_text like "%..."; +count(*) +2 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/sizing_low.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/sizing_low.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/sizing_low.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/sizing_low.result 2016-08-26 11:22:35.000000000 +0000 @@ -67,3 +67,4 @@ Performance_schema_thread_classes_lost 0 Performance_schema_thread_instances_lost 0 Performance_schema_users_lost 0 +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/table_name.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/table_name.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/table_name.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/table_name.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,156 @@ + +# +# TEST 1: Normal tables prefixed with "#sql" and "sql". +# +USE test; +CREATE TABLE `#sql_1` (a int, b text); +INSERT INTO `#sql_1` VALUES(1,'one'); + +CREATE TABLE `sql_1` (a int, b text); +INSERT INTO `sql_1` VALUES(1,'one'); + +# Verify that the tables are treated as normal tables . + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name +TABLE test #sql_1 +TABLE test sql_1 + +# Drop the tables, verify that the table objects are removed. + +DROP TABLE `#sql_1`; +DROP TABLE `sql_1`; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 2: Temporary tables, no special prefix. +# +CREATE TEMPORARY TABLE sql_temp2_myisam (a int, b text) ENGINE=MYISAM; +INSERT INTO sql_temp2_myisam VALUES(1,'one'); + +CREATE TEMPORARY TABLE sql_temp2_innodb (a int, b text) ENGINE=INNODB; +INSERT INTO sql_temp2_innodb VALUES(1,'one'); + +# Confirm that the temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the tables, verify that the table objects are not created. + +DROP TABLE sql_temp2_myisam; +DROP TABLE sql_temp2_innodb; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 3: Temporary tables with the "#sql" prefix. +# +CREATE TEMPORARY TABLE `#sql_temp3_myisam` (a int, b text) ENGINE=MYISAM; +CHECK TABLE `#sql_temp3_myisam`; +Table Op Msg_type Msg_text +test.#sql_temp3_myisam check status OK +INSERT INTO `#sql_temp3_myisam` VALUES(1,'one'); + +CREATE TEMPORARY TABLE `#sql_temp3_innodb` (a int, b text) ENGINE=INNODB; +CHECK TABLE `#sql_temp3_innodb`; +Table Op Msg_type Msg_text +test.#sql_temp3_innodb check status OK +INSERT INTO `#sql_temp3_innodb` VALUES(1,'one'); + +# Confirm that the temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the temporary tables. + +DROP TABLE `#sql_temp3_myisam`; +DROP TABLE `#sql_temp3_innodb`; + +# Confirm that the temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 4: Special case: MyISAM temporary tables are recreated as non-temporary +# when they are truncated. +# +CREATE TEMPORARY TABLE `sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `sql_temp4_myisam` VALUES(1,'one'); + +CREATE TEMPORARY TABLE `#sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `#sql_temp4_myisam` VALUES(1,'one'); + +# Confirm that the MyISAM temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary. + +TRUNCATE TABLE `sql_temp4_myisam`; +TRUNCATE TABLE `#sql_temp4_myisam`; + +# Confirm that the recreated MyISAM tables are still regarded as temporary and ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the recreated MyISAM tables; + +DROP TABLE `sql_temp4_myisam`; +DROP TABLE `#sql_temp4_myisam`; + +# Confirm that the recreated temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 5: Generate temporary tables with ALTER MyISAM table. +# +USE test; +CREATE TABLE t1 (a int) ENGINE=MYISAM; +INSERT INTO t1 VALUES (1), (2), (3); +ALTER TABLE t1 ADD COLUMN (b int); + +# Confirm that the recreated temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the MyISAM table + +DROP TABLE t1; + +# Confirm that no tables remain; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/view_table_io.result mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/view_table_io.result --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/r/view_table_io.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/r/view_table_io.result 2016-08-26 11:22:35.000000000 +0000 @@ -52,7 +52,7 @@ optimize table test.v1; Table Op Msg_type Msg_text test.v1 optimize Error 'test.v1' is not BASE TABLE -test.v1 optimize error Corrupt +test.v1 optimize status Operation failed insert into marker set a = 1; select * from test.v1; a b diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/aggregate.test mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/aggregate.test --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/aggregate.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/aggregate.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,191 +0,0 @@ -# Tests for PERFORMANCE_SCHEMA -# Verify that statistics aggregated by different criteria are consistent. - ---source include/not_embedded.inc ---source include/have_perfschema.inc ---source include/have_QC_Disabled.inc - ---echo "General cleanup" - ---disable_warnings -drop table if exists t1; ---enable_warnings - -update performance_schema.setup_instruments set enabled = 'NO'; -update performance_schema.setup_consumers set enabled = 'NO'; - -# Cleanup statistics -truncate table performance_schema.file_summary_by_event_name; -truncate table performance_schema.file_summary_by_instance; -truncate table performance_schema.socket_summary_by_event_name; -truncate table performance_schema.socket_summary_by_instance; -truncate table performance_schema.events_waits_summary_global_by_event_name; -truncate table performance_schema.events_waits_summary_by_instance; -truncate table performance_schema.events_waits_summary_by_thread_by_event_name; - -# Start recording data -update performance_schema.setup_consumers set enabled = 'YES'; -update performance_schema.setup_instruments - set enabled = 'YES', timed = 'YES'; - - -create table t1 ( - id INT PRIMARY KEY, - b CHAR(100) DEFAULT 'initial value') - ENGINE=MyISAM; - -insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8); - -# Stop recording data, so the select below don't add noise. -update performance_schema.setup_instruments SET enabled = 'NO'; -# Disable all consumers, for long standing waits -update performance_schema.setup_consumers set enabled = 'NO'; - -# Helper to debug -set @dump_all=FALSE; - -# Note that in general: -# - COUNT/SUM/MAX(file_summary_by_event_name) >= -# COUNT/SUM/MAX(file_summary_by_instance). -# - MIN(file_summary_by_event_name) <= -# MIN(file_summary_by_instance). -# There will be equality only when file instances are not removed, -# aka when a file is not deleted from the file system, -# because doing so removes a row in file_summary_by_instance. - -# Likewise: -# - COUNT/SUM/MAX(events_waits_summary_global_by_event_name) >= -# COUNT/SUM/MAX(events_waits_summary_by_instance) -# - MIN(events_waits_summary_global_by_event_name) <= -# MIN(events_waits_summary_by_instance) -# There will be equality only when an instrument instance -# is not removed, which is next to impossible to predictably guarantee -# in the server. -# For example, a MyISAM table removed from the table cache -# will cause a mysql_mutex_destroy on myisam/MYISAM_SHARE::intern_lock. -# Another example, a thread terminating will cause a mysql_mutex_destroy -# on sql/LOCK_delete -# Both cause a row to be deleted from events_waits_summary_by_instance. - -# Likewise: -# - COUNT/SUM/MAX(events_waits_summary_global_by_event_name) >= -# COUNT/SUM/MAX(events_waits_summary_by_thread_by_event_name) -# - MIN(events_waits_summary_global_by_event_name) <= -# MIN(events_waits_summary_by_thread_by_event_name) -# There will be equality only when no thread is removed, -# that is if no thread disconnects, or no sub thread (for example insert -# delayed) ever completes. -# A thread completing will cause rows in -# events_waits_summary_by_thread_by_event_name to be removed. - ---echo "Verifying file aggregate consistency" - -# Since the code generating the load in this test does: -# - create table -# - insert -# - does not cause temporary tables to be used -# we can test for equality here for file aggregates. - -# If any of these queries returns data, the test failed. - -SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_READ <> SUM(i.COUNT_READ)) -OR @dump_all; - -SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE)) -OR @dump_all; - -SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ) -FROM performance_schema.socket_summary_by_event_name AS e -JOIN performance_schema.socket_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_READ <> SUM(i.COUNT_READ)) -OR @dump_all; - -SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE) -FROM performance_schema.socket_summary_by_event_name AS e -JOIN performance_schema.socket_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE)) -OR @dump_all; - -SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ)) -OR @dump_all; - -SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE) -FROM performance_schema.file_summary_by_event_name AS e -JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE)) -OR @dump_all; - ---echo "Verifying waits aggregate consistency (instance)" - -SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT)) -OR @dump_all; - -SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT)) -AND (MIN(i.MIN_TIMER_WAIT) != 0) -OR @dump_all; - -SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT)) -OR @dump_all; - ---echo "Verifying waits aggregate consistency (thread)" - -SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT)) -OR @dump_all; - -SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT)) -AND (MIN(t.MIN_TIMER_WAIT) != 0) -OR @dump_all; - -SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT) -FROM performance_schema.events_waits_summary_global_by_event_name AS e -JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t -USING (EVENT_NAME) -GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT)) -OR @dump_all; - - -# Cleanup - -update performance_schema.setup_consumers set enabled = 'YES'; -update performance_schema.setup_instruments - set enabled = 'YES', timed = 'YES'; - -drop table test.t1; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/misc.test mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/misc.test --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/misc.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/misc.test 2016-08-26 11:22:35.000000000 +0000 @@ -3,6 +3,7 @@ --source include/not_embedded.inc --source include/have_perfschema.inc +--source include/no_protocol.inc # # Bug#12790483 OBJECTS_SUMMARY_GLOBAL_BY_TYPE AND RENAME TABLE @@ -188,3 +189,20 @@ --echo select mysql_errno, returned_sqlstate, message_text, errors, warnings from performance_schema.events_statements_history_long where errors > 0; + +# +# Bug#20519832 - TRUNCATED SQL_TEXT values are not suffixed with '...' +# +# Verify that truncated SQL statements are suffixed with '...' + +use performance_schema; +truncate performance_schema.events_statements_history; + +# Should truncate at 1024 bytes (1024 characters) +select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AS A; + +# Should truncate at 1024 bytes (487 characters) + +select _utf8mb4 'òðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑòðÑÂÑ' as B; + +select count(*) from events_statements_history where sql_text like "%..."; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/sizing_low.test mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/sizing_low.test --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/sizing_low.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/sizing_low.test 2016-08-26 11:22:35.000000000 +0000 @@ -7,3 +7,4 @@ --source ../include/sizing_auto.inc +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); diff -Nru mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/table_name.test mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/table_name.test --- mysql-5.6-5.6.27/mysql-test/suite/perfschema/t/table_name.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/perfschema/t/table_name.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,164 @@ +# +# Performance Schema +# +# Verify that the Performance Schema correctly identifies normal and temporary +# tables with non-standard names. + +# The server uses the table name prefix "#sql" for temporary and intermediate +# tables, however user-defined tables having the "#sql" prefix are also permitted. +# Independent of the table name, temporary or intermediate tables always have the +# "#sql" prefix in the filename. (For non-temporary tables starting with "#", +# the "#" is encoded to @0023 in the filename.) +# +# Given the ambiguity with temporary table names, the Performance Schema identifies +# temporary tables tables either by the table category or by the filename. +# +--source include/have_perfschema.inc +--source include/not_embedded.inc + +--echo +--echo # +--echo # TEST 1: Normal tables prefixed with "#sql" and "sql". +--echo # +USE test; +CREATE TABLE `#sql_1` (a int, b text); +# INSERT forces path through get_table_share() +INSERT INTO `#sql_1` VALUES(1,'one'); +--echo +CREATE TABLE `sql_1` (a int, b text); +INSERT INTO `sql_1` VALUES(1,'one'); +--echo +--echo # Verify that the tables are treated as normal tables . +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the tables, verify that the table objects are removed. +--echo +DROP TABLE `#sql_1`; +DROP TABLE `sql_1`; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 2: Temporary tables, no special prefix. +--echo # +CREATE TEMPORARY TABLE sql_temp2_myisam (a int, b text) ENGINE=MYISAM; +INSERT INTO sql_temp2_myisam VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE sql_temp2_innodb (a int, b text) ENGINE=INNODB; +INSERT INTO sql_temp2_innodb VALUES(1,'one'); +--echo +--echo # Confirm that the temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the tables, verify that the table objects are not created. +--echo +DROP TABLE sql_temp2_myisam; +DROP TABLE sql_temp2_innodb; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 3: Temporary tables with the "#sql" prefix. +--echo # +CREATE TEMPORARY TABLE `#sql_temp3_myisam` (a int, b text) ENGINE=MYISAM; +CHECK TABLE `#sql_temp3_myisam`; +INSERT INTO `#sql_temp3_myisam` VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE `#sql_temp3_innodb` (a int, b text) ENGINE=INNODB; +CHECK TABLE `#sql_temp3_innodb`; +INSERT INTO `#sql_temp3_innodb` VALUES(1,'one'); +--echo +--echo # Confirm that the temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the temporary tables. +--echo +DROP TABLE `#sql_temp3_myisam`; +DROP TABLE `#sql_temp3_innodb`; +--echo +--echo # Confirm that the temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 4: Special case: MyISAM temporary tables are recreated as non-temporary +--echo # when they are truncated. +--echo # +CREATE TEMPORARY TABLE `sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `sql_temp4_myisam` VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE `#sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `#sql_temp4_myisam` VALUES(1,'one'); +--echo +--echo # Confirm that the MyISAM temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary. +--echo +TRUNCATE TABLE `sql_temp4_myisam`; +TRUNCATE TABLE `#sql_temp4_myisam`; +--echo +--echo # Confirm that the recreated MyISAM tables are still regarded as temporary and ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the recreated MyISAM tables; +--echo +DROP TABLE `sql_temp4_myisam`; +DROP TABLE `#sql_temp4_myisam`; +--echo +--echo # Confirm that the recreated temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 5: Generate temporary tables with ALTER MyISAM table. +--echo # +USE test; +CREATE TABLE t1 (a int) ENGINE=MYISAM; +INSERT INTO t1 VALUES (1), (2), (3); +# Force a path throug mysql_alter_table() and ha_create_table(). +ALTER TABLE t1 ADD COLUMN (b int); +--echo +--echo # Confirm that the recreated temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the MyISAM table +--echo +DROP TABLE t1; + +--echo +--echo # Confirm that no tables remain; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_autogen_query_multi_byte_char.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_autogen_query_multi_byte_char.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_autogen_query_multi_byte_char.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_autogen_query_multi_byte_char.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,32 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +Test case 1:- table name with one character latin name. +SET @s:=CONCAT("CREATE TABLE `",REPEAT(CHAR(131),1),"` (a INT)"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("INSERT INTO `",REPEAT(CHAR(131),1),"` VALUES (1)"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("DROP TABLE `",REPEAT(CHAR(131),1), "`"); +PREPARE STMT FROM @s; +EXECUTE stmt; +Test case 2:- table name and database names with one character latin name. +SET @s:=CONCAT("CREATE DATABASE `",REPEAT(CHAR(131),1),"`"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("CREATE TABLE `",REPEAT(CHAR(131),1),"`.`",REPEAT(CHAR(131),1),"` (a INT)"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("INSERT INTO `",REPEAT(CHAR(131),1),"`.`",REPEAT(CHAR(131),1),"` VALUES (1)"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("DROP TABLE `",REPEAT(CHAR(131),1),"`.`",REPEAT(CHAR(131),1), "`"); +PREPARE STMT FROM @s; +EXECUTE stmt; +SET @s:=CONCAT("DROP DATABASE `",REPEAT(CHAR(131),1),"`"); +PREPARE STMT FROM @s; +EXECUTE stmt; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_autoinc_lock_style.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_autoinc_lock_style.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_autoinc_lock_style.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_autoinc_lock_style.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,15 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t (i INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; +include/sync_slave_sql_with_master.inc +SET @save_debug=@@debug; +SET GLOBAL DEBUG='+d,die_if_autoinc_old_lock_style_used'; +[connection master] +INSERT INTO t VALUES (1); +DROP TABLE t; +include/sync_slave_sql_with_master.inc +SET GLOBAL DEBUG=@save_debug; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_binlog_failed_drop_table.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_binlog_failed_drop_table.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_binlog_failed_drop_table.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_binlog_failed_drop_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,23 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE DATABASE `db1`; +USE `db1`; +CREATE TABLE `t1` (`ID` bigint(20) primary key) ENGINE=InnoDB; +CREATE TABLE `t2` ( `ID` bigint(20) NOT NULL AUTO_INCREMENT, `DIVISION_ID` bigint(20) DEFAULT NULL, PRIMARY KEY (`ID`), KEY `FK_TABLE1_DIVISION_1` (`DIVISION_ID`), CONSTRAINT `FK_TABLE1_DIVISION_1` FOREIGN KEY (`DIVISION_ID`) REFERENCES `t1` (`ID`) ON DELETE CASCADE ) ENGINE=InnoDB; +CREATE TABLE `t3` (`ID` bigint(20) primary key) ENGINE=InnoDB; +DROP TABLE IF EXISTS `db1`.`t1`; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails +include/assert.inc [Drop with single table should not be written to the binary log if the query execution fails] +DROP TABLE `t3`, `t1`, `t2`; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `db1`; DROP TABLE `t3`,`t1`,`t2` /* generated by server */ +include/sync_slave_sql_with_master.inc +Cleanup +[connection master] +DROP DATABASE `db1`; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_bug33931.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_bug33931.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_bug33931.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_bug33931.result 2016-08-26 11:22:35.000000000 +0000 @@ -14,6 +14,7 @@ start slave; include/wait_for_slave_sql_error.inc [errno=1593] Last_SQL_Error = 'Failed during slave thread initialization' +include/wait_for_slave_io_to_stop.inc SET GLOBAL debug=""; RESET SLAVE; include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_drop_temp_tbl_with_rewrite_db.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_drop_temp_tbl_with_rewrite_db.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_drop_temp_tbl_with_rewrite_db.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_drop_temp_tbl_with_rewrite_db.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,43 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +CREATE DATABASE new_test; +[connection master] +use test; +CREATE TEMPORARY TABLE t1(id int); +include/sync_slave_sql_with_master.inc +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # CREATE DATABASE new_test +slave-bin.000001 # Query # # use `new_test`; CREATE TEMPORARY TABLE t1(id int) +SHOW STATUS LIKE 'Slave_open_temp_tables'; +Variable_name Value +Slave_open_temp_tables 1 +[connection master] +use test; +DROP TEMPORARY TABLE IF EXISTS t1; +include/sync_slave_sql_with_master.inc +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # CREATE DATABASE new_test +slave-bin.000001 # Query # # use `new_test`; CREATE TEMPORARY TABLE t1(id int) +slave-bin.000001 # Query # # use `new_test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */ +SHOW STATUS LIKE 'Slave_open_temp_tables'; +Variable_name Value +Slave_open_temp_tables 0 +[connection master] +use test; +CREATE TEMPORARY TABLE t1(id int); +include/sync_slave_sql_with_master.inc +SHOW STATUS LIKE 'Slave_open_temp_tables'; +Variable_name Value +Slave_open_temp_tables 1 +[connection slave] +SHOW STATUS LIKE 'Slave_open_temp_tables'; +Variable_name Value +Slave_open_temp_tables 0 +DROP DATABASE new_test; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_dump_thread_kill.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_dump_thread_kill.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_dump_thread_kill.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_dump_thread_kill.result 2016-08-26 11:22:35.000000000 +0000 @@ -7,9 +7,11 @@ INSERT INTO t1 VALUES (1); FLUSH LOGS; SET GLOBAL DEBUG='+d,simulate_dump_thread_kill'; -include/start_slave.inc +SET GLOBAL DEBUG='+d,simulate_no_master_reconnect'; +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_stop.inc SET GLOBAL DEBUG='-d,simulate_dump_thread_kill'; -include/stop_slave.inc +SET GLOBAL DEBUG='-d,simulate_no_master_reconnect'; include/start_slave.inc include/sync_slave_sql_with_master.inc include/diff_tables.inc [master:t1,slave:t1] diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_events.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_events.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_events.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_events.result 2016-08-26 11:22:35.000000000 +0000 @@ -169,4 +169,34 @@ DROP EVENT event44331_3; DROP EVENT event44331_4; include/sync_slave_sql_with_master.inc +CREATE EVENT event1 ON SCHEDULE EVERY 100 SECOND STARTS '2000-01-01 00:00:00' +ON COMPLETION PRESERVE ENABLE DO +BEGIN +SET @dummy = 100; +END\\ +CREATE PROCEDURE proc1() +BEGIN +DECLARE dummy INT UNSIGNED; +SET dummy = 100; +ALTER EVENT EVENT1 ON SCHEDULE EVERY dummy SECOND +STARTS '2000-01-01 00:00:00' ENABLE; +END \\ +CALL proc1(); +include/sync_slave_sql_with_master.inc +DROP EVENT event1; +DROP PROCEDURE proc1; +call mtr.add_suppression("Unsafe statement written to the binary log"); +set @secs=100; +CREATE EVENT EVENT_WITH_SYSDATE_AND_VARIABLES +ON SCHEDULE EVERY @secs MINUTE STARTS sysdate() +ON COMPLETION PRESERVE +DO BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +SELECT CONCAT('SAMPLE MSG'); +END | +ALTER EVENT EVENT_WITH_SYSDATE_AND_VARIABLES +ON SCHEDULE +EVERY @secs HOUR +STARTS sysdate() | +DROP EVENT EVENT_WITH_SYSDATE_AND_VARIABLES | include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_group_commit_deadlock.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_group_commit_deadlock.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_group_commit_deadlock.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_group_commit_deadlock.result 2016-08-26 11:22:35.000000000 +0000 @@ -12,24 +12,12 @@ # Build connections to master server # Stress test that execute massive queries on every connection include/sync_slave_sql_with_master.inc -# Enable diff_table test -# Test tables with InnoDB engine when enableing diff_table +# Disable diff_table test +# Test tables with InnoDB engine when disabling diff_table # and simulating flush error include/sync_slave_sql_with_master.inc # Build connections to master server # Stress test that execute massive queries on every connection include/sync_slave_sql_with_master.inc -# Test if the results are consistent on master and slave -include/diff_tables.inc [master:t1, slave:t1] -include/diff_tables.inc [master:t2, slave:t2] -include/diff_tables.inc [master:t3, slave:t3] -include/diff_tables.inc [master:t4, slave:t4] -include/diff_tables.inc [master:t5, slave:t5] -include/diff_tables.inc [master:t6, slave:t6] -include/diff_tables.inc [master:t7, slave:t7] -include/diff_tables.inc [master:t8, slave:t8] -include/diff_tables.inc [master:t9, slave:t9] -include/diff_tables.inc [master:t10, slave:t10] -include/sync_slave_sql_with_master.inc SET @@GLOBAL.MAX_BINLOG_SIZE= @max_binlog_size_save; include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_gtid_stress_failover.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_gtid_stress_failover.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_gtid_stress_failover.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_gtid_stress_failover.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -==== Configure ==== -==== Initialize ==== -include/rpl_init.inc [topology=1->2->3->4->5->1] -include/rpl_sync.inc -include/rpl_reset.inc -==== Test ==== -==== Sync ==== -Reap all sent queries. -include/rpl_stop_slaves.inc -include/rpl_change_topology.inc [new topology=1->2->3->4->5->1] -include/rpl_start_slaves.inc -include/rpl_sync.inc -==== Check result ==== -Check that GTID_EXECUTED is equal on all servers. -Check that database state is equal on all servers. -include/diff_servers.inc [servers=1 2 3 4 5 ] -==== Clean up ==== -include/rpl_sync.inc -include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_gtid_temp_table.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_gtid_temp_table.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_gtid_temp_table.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_gtid_temp_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,1220 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE trans_table1 (i INT) ENGINE=INNODB; +INSERT INTO trans_table1 VALUES (1); +CREATE TABLE trans_table2 (i INT) ENGINE=INNODB; +INSERT INTO trans_table2 VALUES (1); +CREATE TABLE non_trans_table1 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table1 VALUES (1); +CREATE TABLE non_trans_table2 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table2 VALUES (1); +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +RETURN 0; +END; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +START TRANSACTION; +SELECT func1(); +ERROR HY000: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions. +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM trans_table2 WHERE i=func1(); +Got one of the listed errors +INSERT INTO non_trans_table2 VALUES (func1()); +Got one of the listed errors +UPDATE non_trans_table2 SET i=func1(); +Got one of the listed errors +DELETE FROM non_trans_table2 WHERE i=func1(); +Got one of the listed errors +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +Got one of the listed errors +DROP TRIGGER trigger1; +include/diff_tables.inc [master:trans_table1, slave:trans_table1] +include/diff_tables.inc [master:trans_table2, slave:trans_table2] +include/diff_tables.inc [master:non_trans_table1, slave:non_trans_table1] +include/diff_tables.inc [master:non_trans_table2, slave:non_trans_table2] +DROP TABLE trans_table1, trans_table2; +DROP TABLE non_trans_table1, non_trans_table2; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_killed_ddl.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_killed_ddl.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_killed_ddl.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_killed_ddl.result 2016-08-26 11:22:35.000000000 +0000 @@ -60,6 +60,10 @@ CREATE DATABASE d2; source include/kill_query.inc; include/rpl_diff.inc +ALTER DATABASE d1 +DEFAULT CHARACTER SET = 'utf8'; +source include/kill_query.inc; +include/rpl_diff.inc DROP DATABASE d1; source include/kill_query.inc; include/rpl_diff.inc @@ -87,6 +91,9 @@ DROP FUNCTION f1; source include/kill_query.inc; include/rpl_diff.inc +DROP FUNCTION IF EXISTS f2; +source include/kill_query.inc; +include/rpl_diff.inc CREATE PROCEDURE p2 (OUT rows INT) BEGIN SELECT COUNT(*) INTO rows FROM t2; @@ -100,6 +107,9 @@ DROP PROCEDURE p1; source include/kill_query.inc; include/rpl_diff.inc +DROP PROCEDURE IF EXISTS p2; +source include/kill_query.inc; +include/rpl_diff.inc CREATE TABLE t2 (b int); source include/kill_query.inc; include/rpl_diff.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -91,7 +91,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-Xe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-Xe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TXe-Temp'; @@ -110,7 +110,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-TXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-TXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-NXe-Temp'; @@ -129,7 +129,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-NXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-NXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TN-Temp'; @@ -281,7 +281,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -304,8 +304,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -358,7 +358,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -381,8 +381,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -440,7 +440,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) @@ -462,13 +462,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO nt_xx_1() VALUES (1) master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) @@ -783,7 +783,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -809,8 +809,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -870,7 +870,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -896,8 +896,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -956,7 +956,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -978,13 +978,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO nt_xx_1() VALUES (1) master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp N Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result 2016-08-26 11:22:35.000000000 +0000 @@ -490,7 +490,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`new_tt_xx` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `new_tt_xx` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -12423,12 +12423,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -12489,12 +12489,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -12541,12 +12541,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -12599,12 +12599,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -12645,12 +12645,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -12703,12 +12703,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mix_missing_data_on_slave.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mix_missing_data_on_slave.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mix_missing_data_on_slave.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mix_missing_data_on_slave.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +include/rpl_init.inc [topology=1->2->3] +Server 1 +CREATE TABLE `t1` ( +`id` bigint unsigned NOT NULL auto_increment, +`val` varchar(255), +PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +INSERT INTO t1 (val) VALUES (REPEAT('a', 255)); +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +Syncing all three servers +include/rpl_sync.inc +Verifying 't1' table contents on all three servers through diff tables. +include/diff_tables.inc [server_1:t1, server_2:t1, server_3:t1] +DROP TABLE t1; +include/rpl_sync.inc +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mts_relay_log_post_crash_recovery.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mts_relay_log_post_crash_recovery.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mts_relay_log_post_crash_recovery.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mts_relay_log_post_crash_recovery.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,82 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### I. Initialize #### +[connection slave] +include/stop_slave.inc +SET @save.innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout; +set @@global.innodb_lock_wait_timeout=5 + 1000; +include/start_slave.inc +[connection master] +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +CREATE TABLE d2.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +#### II. Prepare test scenario #### +include/sync_slave_sql_with_master.inc +BEGIN; +INSERT INTO d2.t VALUES (2, 'Slave local'); +INSERT INTO d1.t VALUES (3, 'Slave local'); +[connection master] +INSERT INTO d1.t VALUES (1, 'T1'); +INSERT INTO d2.t VALUES (1, 'T2'); +INSERT INTO d2.t VALUES (2, 'T3'); +INSERT INTO d2.t VALUES (3, 'T4'); +INSERT INTO d1.t VALUES (2, 'T5'); +[connection slave1] +# Now d1.t has two rows and d2.t has one row. +[connection slave] +CALL mtr.add_suppression("Recovery from master pos"); +include/rpl_start_server.inc [server_number=2 parameters: --skip_slave_start=FALSE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +After restart gaps should be filled. +include/assert.inc [Table d1.t should contain 2 rows.] +include/assert.inc [Table d2.t should contain 3 rows.] +include/start_slave.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +[connection master] +DROP DATABASE d1; +DROP DATABASE d2; +#### I. Initialize #### +[connection slave] +include/stop_slave.inc +SET @save.innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout; +set @@global.innodb_lock_wait_timeout=5 + 1000; +include/start_slave.inc +[connection master] +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +CREATE TABLE d2.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +#### II. Prepare test scenario #### +include/sync_slave_sql_with_master.inc +BEGIN; +INSERT INTO d2.t VALUES (2, 'Slave local'); +INSERT INTO d1.t VALUES (3, 'Slave local'); +[connection master] +INSERT INTO d1.t VALUES (1, 'T1'); +INSERT INTO d2.t VALUES (1, 'T2'); +INSERT INTO d2.t VALUES (2, 'T3'); +INSERT INTO d2.t VALUES (3, 'T4'); +INSERT INTO d1.t VALUES (2, 'T5'); +[connection slave1] +# Now d1.t has two rows and d2.t has one row. +[connection slave] +CALL mtr.add_suppression("Recovery from master pos"); +include/rpl_start_server.inc [server_number=2 parameters: --skip_slave_start=TRUE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +After restart gaps should be filled. +include/assert.inc [Table d1.t should contain 2 rows.] +include/assert.inc [Table d2.t should contain 3 rows.] +include/start_slave.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +[connection master] +DROP DATABASE d1; +DROP DATABASE d2; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mts_relay_log_recovery_on_error.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mts_relay_log_recovery_on_error.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_mts_relay_log_recovery_on_error.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_mts_relay_log_recovery_on_error.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,60 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +call mtr.add_suppression("Duplicate entry*"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +call mtr.add_suppression("Failed to initialize the master info structure"); +call mtr.add_suppression("Slave failed to initialize relay log info*"); +call mtr.add_suppression("MTS recovery: automatic recovery failed.*"); +call mtr.add_suppression("Recovery from master pos"); +#### I. Initialize #### +[connection slave] +include/stop_slave.inc +SET @save.innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout; +set @@global.innodb_lock_wait_timeout=5 + 1000; +include/start_slave.inc +[connection master] +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +CREATE TABLE d2.t (a INT PRIMARY KEY, name text) ENGINE=INNODB; +#### II. Prepare test scenario #### +include/sync_slave_sql_with_master.inc +BEGIN; +INSERT INTO d2.t VALUES (2, 'Slave local'); +INSERT INTO d1.t VALUES (3, 'Slave local'); +[connection master] +INSERT INTO d1.t VALUES (1, 'T1'); +INSERT INTO d2.t VALUES (1, 'T2'); +INSERT INTO d2.t VALUES (2, 'T3'); +INSERT INTO d2.t VALUES (3, 'T4'); +INSERT INTO d1.t VALUES (2, 'T5'); +[connection slave1] +# Now d1.t has two rows and d2.t has one row. +[connection slave] +COMMIT; +include/wait_for_slave_sql_error.inc [errno=1062] +include/rpl_restart_server.inc [server_number=2 parameters: --skip_slave_start=TRUE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +[connection slave] +Relay log recovery should fail as MTS stopped due to an error +START SLAVE; +ERROR HY000: Slave failed to initialize relay log info structure from the repository +Eliminate the cause of MTS error +DELETE FROM d2.t WHERE a=2; +DELETE FROM d1.t WHERE a=3; +include/rpl_restart_server.inc [server_number=2 parameters: --skip_slave_start=TRUE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +MTS recovery should be successful. Check that gaps are filled. +include/assert.inc [Table d1.t should contain 2 rows.] +include/assert.inc [Table d2.t should contain 3 rows.] +include/start_slave.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +[connection master] +DROP DATABASE d1; +DROP DATABASE d2; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -12795,12 +12795,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -12861,12 +12861,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -12913,12 +12913,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -12971,12 +12971,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -13017,12 +13017,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -13075,12 +13075,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -14631,12 +14631,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -14681,12 +14681,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -14721,12 +14721,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -14772,12 +14772,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -14808,12 +14808,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -14859,12 +14859,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -11825,12 +11825,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -11891,12 +11891,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -11943,12 +11943,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -12001,12 +12001,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -12047,12 +12047,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -12105,12 +12105,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_parallel_change_master.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_parallel_change_master.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_parallel_change_master.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_parallel_change_master.result 2016-08-26 11:22:35.000000000 +0000 @@ -46,7 +46,7 @@ SELECT @@global.relay_log_recovery as 'must be ON'; must be ON 1 -call mtr.add_suppression("--relay-log-recovery cannot be executed when the slave was stopped with an error or killed in MTS mode; consider using RESET SLAVE or restart the server with --relay-log-recovery = 0"); +call mtr.add_suppression("MTS recovery: automatic recovery failed.*"); call mtr.add_suppression("Failed to initialize the master info structure"); call mtr.add_suppression("It is not possible to change the type of the relay log repository because there are workers repositories with possible execution gaps. The value of --relay_log_info_repository is altered to one of the found Worker repositories"); include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start] diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_parallel_worker_error.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_parallel_worker_error.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_parallel_worker_error.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_parallel_worker_error.result 2016-08-26 11:22:35.000000000 +0000 @@ -13,4 +13,8 @@ include/sync_slave_sql_with_master.inc DROP TABLE t; include/sync_slave_sql_with_master.inc +Matching lines are: +--TIME-- [Warning] Slave SQL: ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables or DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: ER_MTS_INCONSISTENT_DATA + +Occurrences of the The slave coordinator and worker threads are stopped in the input file : 1 include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -66,7 +66,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-N-Temp'; @@ -74,7 +74,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-N-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-N-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-Xe-Temp'; @@ -91,7 +91,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-Xe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-Xe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TXe-Temp'; @@ -100,7 +100,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-TXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-TXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-If-TXe-Temp'; @@ -110,7 +110,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-TXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-TXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-NXe-Temp'; @@ -119,7 +119,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-NXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-NXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-If-NXe-Temp'; @@ -129,7 +129,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-NXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-NXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TN-Temp'; @@ -137,8 +137,8 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-TN-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-TN-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TT-Temp'; @@ -146,7 +146,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-TT-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-TT-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-NN-Temp'; @@ -154,7 +154,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-NN-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-NN-Temp << -e-e-e-e-e-e-e-e-e-e-e- @@ -172,7 +172,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-T-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -193,8 +193,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-T-Temp N Drop-Temp-T-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -207,7 +207,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -226,14 +226,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -291,7 +291,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -316,8 +316,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -333,7 +333,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -356,8 +356,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TXe-Temp N Drop-Temp-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -374,7 +374,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -399,8 +399,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -414,7 +414,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -435,14 +435,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -461,7 +461,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -484,14 +484,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -508,12 +508,12 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -528,20 +528,20 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp N Drop-Temp-TN-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -556,7 +556,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_tmp_2` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -576,7 +576,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_tmp_2` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp N Drop-Temp-TT-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -589,7 +589,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -607,7 +607,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -631,7 +631,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -659,7 +659,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -683,7 +683,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -716,7 +716,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-T-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -740,8 +740,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-T-Temp N Drop-Temp-T-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -756,7 +756,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-N-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -774,14 +774,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-N-Temp N Drop-Temp-N-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -830,7 +830,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -858,8 +858,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -877,7 +877,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -903,8 +903,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TXe-Temp N Drop-Temp-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -923,7 +923,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -951,8 +951,8 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -968,7 +968,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -988,14 +988,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NXe-Temp N Drop-Temp-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1012,7 +1012,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1034,14 +1034,14 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp N Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1056,12 +1056,12 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1079,20 +1079,20 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp N Drop-Temp-TN-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1109,7 +1109,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1132,7 +1132,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp N Drop-Temp-TT-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1147,7 +1147,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NN-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1164,7 +1164,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -1187,7 +1187,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -1214,7 +1214,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -1237,7 +1237,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.nt_xx_1) @@ -1356,8 +1356,8 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-N-TN-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `nt_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-N-TN-Temp << -e-e-e-e-e-e-e-e-e-e-e- @@ -1366,8 +1366,8 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-TN-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-TN-Temp << -e-e-e-e-e-e-e-e-e-e-e- @@ -1547,8 +1547,8 @@ master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Xid # # COMMIT /* XID */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `nt_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-N-TN-Temp << -e-e-e-e-e-e-e-e-e-e-e- @@ -1563,8 +1563,8 @@ master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Xid # # COMMIT /* XID */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-TN-Temp << -e-e-e-e-e-e-e-e-e-e-e- ######################################################################### @@ -1582,9 +1582,9 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-N-Temp Create-N-Temp Drop-Temp-N-Temp Drop-Temp-N-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-N-Temp Create-N-Temp Drop-Temp-N-Temp Drop-Temp-N-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp'; @@ -1595,9 +1595,9 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp << -e-e-e-e-e-e-e-e-e-e-e- @@ -1616,13 +1616,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1) @@ -1641,9 +1641,9 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -1664,9 +1664,9 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Ne C << -e-e-e-e-e-e-e-e-e-e-e- @@ -1683,9 +1683,9 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e- @@ -1706,9 +1706,9 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig C << -e-e-e-e-e-e-e-e-e-e-e- @@ -1731,13 +1731,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-N-Temp Create-N-Temp Drop-Temp-N-Temp Drop-Temp-N-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1755,9 +1755,9 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1782,9 +1782,9 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Ne R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1804,9 +1804,9 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e- @@ -1831,9 +1831,9 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_drop.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_drop.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_drop.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_drop.result 2016-08-26 11:22:35.000000000 +0000 @@ -47,8 +47,8 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a int) master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t2` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ SHOW TABLES; Tables_in_test diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_img_sanity.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_img_sanity.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_img_sanity.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_img_sanity.result 2016-08-26 11:22:35.000000000 +0000 @@ -639,6 +639,73 @@ include/wait_for_slave_sql_error.inc [errno=1032] DROP TABLE t; include/rpl_reset.inc +CON: 'master', IMG: 'FULL', RESTART SLAVE: 'N' +SET SESSION binlog_row_image= 'FULL'; +SET GLOBAL binlog_row_image= 'FULL'; +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image FULL +CON: 'slave', IMG: 'FULL', RESTART SLAVE: 'Y' +SET SESSION binlog_row_image= 'FULL'; +SET GLOBAL binlog_row_image= 'FULL'; +include/stop_slave.inc +include/start_slave.inc +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image FULL +CREATE TABLE t1(id INT PRIMARY KEY, a INT) ENGINE = INNODB; +include/sync_slave_sql_with_master.inc +INSERT INTO t1 (id, a) VALUES (1, 1); +"Case: FULL - EXPLAIN output should not display Using temporary" +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY PRIMARY 4 const 1 Using where +UPDATE t1 SET a=a+1 WHERE id < 2; +CON: 'master', IMG: 'NOBLOB', RESTART SLAVE: 'N' +SET SESSION binlog_row_image= 'NOBLOB'; +SET GLOBAL binlog_row_image= 'NOBLOB'; +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image NOBLOB +CON: 'slave', IMG: 'NOBLOB', RESTART SLAVE: 'Y' +SET SESSION binlog_row_image= 'NOBLOB'; +SET GLOBAL binlog_row_image= 'NOBLOB'; +include/stop_slave.inc +include/start_slave.inc +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image NOBLOB +"Case: NOBLOB - EXPLAIN output should not display Using temporary" +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY PRIMARY 4 const 1 Using where +UPDATE t1 SET a=a+1 WHERE id < 2; +CON: 'master', IMG: 'MINIMAL', RESTART SLAVE: 'N' +SET SESSION binlog_row_image= 'MINIMAL'; +SET GLOBAL binlog_row_image= 'MINIMAL'; +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image MINIMAL +CON: 'slave', IMG: 'MINIMAL', RESTART SLAVE: 'Y' +SET SESSION binlog_row_image= 'MINIMAL'; +SET GLOBAL binlog_row_image= 'MINIMAL'; +include/stop_slave.inc +include/start_slave.inc +FLUSH TABLES; +SHOW VARIABLES LIKE 'binlog_row_image'; +Variable_name Value +binlog_row_image MINIMAL +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY PRIMARY 4 const 1 Using where +UPDATE t1 SET a=a+1 WHERE id < 2; +DROP TABLE t1; +include/sync_slave_sql_with_master.inc SET GLOBAL binlog_row_image= @old_binlog_row_image; SET SESSION binlog_row_image= @old_binlog_row_image; SET GLOBAL binlog_row_image= @old_binlog_row_image; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result 2016-08-26 11:22:35.000000000 +0000 @@ -523,7 +523,7 @@ master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.tt_1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`new_tt_xx` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `new_tt_xx` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_merge_engine.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_merge_engine.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_merge_engine.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_merge_engine.result 2016-08-26 11:22:35.000000000 +0000 @@ -7,8 +7,9 @@ CREATE TABLE t2 (a int) ENGINE=MyISAM; INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t2 VALUES (4), (5), (6); -CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; -ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1; +ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TABLE t1_merge LIKE tt1_merge; include/sync_slave_sql_with_master.inc include/diff_tables.inc [master:test.t1, slave:test.t1] include/diff_tables.inc [master:test.t2, slave:test.t2] diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -14631,12 +14631,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -14681,12 +14681,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -14721,12 +14721,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -14772,12 +14772,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -14808,12 +14808,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -14859,12 +14859,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_slave_skip_error_all.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_slave_skip_error_all.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_row_slave_skip_error_all.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_row_slave_skip_error_all.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,46 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t (name VARCHAR(25) DEFAULT NULL) ENGINE=InnoDB; +include/sync_slave_sql_with_master.inc +call mtr.add_suppression("Slave SQL.*Error executing row event: .Table .test.t. doesn.t exist., Error_code: 1146"); +call mtr.add_suppression("Slave SQL.*Column 0 of table .test.t. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +call mtr.add_suppression("Got error 1 during COMMIT"); +ALTER TABLE t CHANGE name name VARCHAR(255); +[connection master] +INSERT INTO t VALUE ('Amy'); +# Sync should be successful. Slave should not stop with an error +# ER_SLAVE_CONVERSION_FAILED. It should be up and running in spite +# of errors as we have set slave_skip_error=all. +include/sync_slave_sql_with_master.inc +DROP TABLE t; +[connection master] +UPDATE t SET name='New'; +# Sync should be successful. Slave should not stop with an error +# ER_NO_SUCH_TABLE. It should be up and running in spite of errors +# as we have set slave_skip_error=all. +include/sync_slave_sql_with_master.inc +# Enable a debug point to simulate failure during rows event cleanup. +SET @@GLOBAL.DEBUG= 'd,simulate_rows_event_cleanup_failure'; +[connection master] +UPDATE t SET name='Old'; +[connection slave] +# Since this is not an ignored error slave should stop. We only ignore the +# errors that are generated during the execution of an event. The other errors +# that are generated during commit/rollback failure, which takes place during cleanup +# cannot be ignored. +include/wait_for_slave_sql_error.inc [errno=1180] +==== Clean up ==== +SET @@GLOBAL.DEBUG= '$debug_saved'; +include/stop_slave_io.inc +RESET MASTER; +RESET SLAVE; +include/start_slave.inc +[connection master] +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE t; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_server_uuid.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_server_uuid.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_server_uuid.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_server_uuid.result 2016-08-26 11:22:35.000000000 +0000 @@ -9,7 +9,7 @@ CALL mtr.add_suppression("Master's UUID has changed, although this should not happen unless you have changed it manually"); CALL mtr.add_suppression("Slave I/O: SET @master_heartbeat_period to master failed with error: Lost connection to MySQL server during query"); CALL mtr.add_suppression("Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error"); -CALL mtr.add_suppression("A slave with the same server_uuid as this slave has connected to the master"); +CALL mtr.add_suppression("A slave with the same server_uuid/server_id as this slave has connected to the master"); include/sync_slave_sql_with_master.inc # Case 1: diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_sql_thread_error.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_sql_thread_error.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_sql_thread_error.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_sql_thread_error.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,17 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +CALL mtr.add_suppression("Relay log read failure"); +SET @save_debug=@@GLOBAL.debug; +SET GLOBAL debug="d,force_sql_thread_error"; +START SLAVE SQL_THREAD; +include/wait_for_slave_sql_to_stop.inc +SET GLOBAL debug=@save_debug; +include/start_slave.inc +[connection master] +CREATE TABLE t1(i INT); +DROP TABLE t1; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result 2016-08-26 11:22:35.000000000 +0000 @@ -91,7 +91,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-Xe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-Xe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TXe-Temp'; @@ -110,7 +110,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-TXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-TXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-NXe-Temp'; @@ -129,7 +129,7 @@ -b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-If-NXe-Temp << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-If-NXe-Temp << -e-e-e-e-e-e-e-e-e-e-e- SET @commands= 'Drop-Temp-TN-Temp'; @@ -281,7 +281,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -304,8 +304,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -358,7 +358,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -381,8 +381,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp C << -e-e-e-e-e-e-e-e-e-e-e- @@ -440,7 +440,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) @@ -462,13 +462,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO nt_xx_1() VALUES (1) master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) @@ -783,7 +783,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -809,8 +809,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-Xe-Temp N Drop-Temp-If-Xe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -870,7 +870,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -896,8 +896,8 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_2`,`test`.`tt_1` /* generated by server */ -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_2`,`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # ROLLBACK -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-TXe-Temp N Drop-Temp-If-TXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -956,7 +956,7 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- @@ -978,13 +978,13 @@ include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_2`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_2`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO nt_xx_1() VALUES (1) master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`nt_tmp_1`,`test`.`tt_1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `nt_tmp_1`,`tt_1` /* generated by server */ master-bin.000001 # Query # # COMMIT -e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-If-NXe-Temp N Drop-Temp-If-NXe-Temp R << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result 2016-08-26 11:22:35.000000000 +0000 @@ -489,7 +489,7 @@ Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (8) -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`new_tt_xx` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `new_tt_xx` /* generated by server */ master-bin.000001 # Xid # # COMMIT /* XID */ -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e- diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result 2016-08-26 11:22:35.000000000 +0000 @@ -11886,12 +11886,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_11; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_11` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_11` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T Sn T CT Rn R] @@ -11952,12 +11952,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_12; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_12` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_12` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B T CT T R] @@ -12004,12 +12004,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_13; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_13` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_13` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B tN CT T R] @@ -12062,12 +12062,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_14; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_14` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_14` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B CT T R] @@ -12108,12 +12108,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_15; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_15` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_15` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- rpl_mixing_engines.inc [commands=B N CT T R] @@ -12166,12 +12166,12 @@ DROP TEMPORARY TABLE IF EXISTS tt_xx_16; include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- -b-b-b-b-b-b-b-b-b-b-b- >> drop-CT << -b-b-b-b-b-b-b-b-b-b-b- include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `tt_xx_16` /* generated by server */ -e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e- ################################################################################### diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stop_slave_threads_error.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stop_slave_threads_error.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_stop_slave_threads_error.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_stop_slave_threads_error.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(i INT); +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave_io.inc +include/start_slave_io.inc +Pattern "Lost connection to MySQL server during query" not found +include/stop_slave_sql.inc +include/start_slave_sql.inc +Pattern "Lost connection to MySQL server during query" not found +include/stop_slave.inc +include/start_slave.inc +Pattern "Lost connection to MySQL server during query" not found +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result 2016-08-26 11:22:35.000000000 +0000 @@ -62,13 +62,13 @@ slave-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 AFTER DELETE ON t2 FOR EACH ROW INSERT INTO t3 () VALUES () slave-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE t1_tmp (i1 int) slave-bin.000001 # Query # # use `test`; ALTER TABLE t1_tmp ADD COLUMN b INT -slave-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t1_tmp` /* generated by server */ +slave-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1_tmp` /* generated by server */ slave-bin.000001 # Query # # use `test`; DROP TABLE `t2` /* generated by server */ slave-bin.000001 # Query # # BEGIN slave-bin.000001 # Table_map # # table_id: # (test.t1) slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F slave-bin.000001 # Xid # # COMMIT /* XID */ -slave-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t2_tmp` /* generated by server */ +slave-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2_tmp` /* generated by server */ slave-bin.000001 # Query # # BEGIN slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2) slave-bin.000001 # Xid # # COMMIT /* XID */ @@ -111,7 +111,7 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t1` /* generated by server */ +master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */ master-bin.000001 # Query # # COMMIT include/sync_slave_sql_with_master.inc # Compare the base table. diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result 2016-08-26 11:22:35.000000000 +0000 @@ -196,4 +196,14 @@ DROP PROCEDURE p2; DROP EVENT e2; DROP TABLE t1, t2; +CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=InnoDB; +CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=MyISAM; +CREATE TABLE t1 LIKE temp_t1; +CREATE TABLE t2 LIKE temp_t2; +include/assert.inc ["t1 on master and temp_t1 have the same storage engine"] +include/assert.inc ["t2 on master and temp_t2 have the same storage engine"] +include/assert.inc ["t1 on slave and temp_t1 have the same storage engine"] +include/assert.inc ["t2 on slave and temp_t2 have the same storage engine"] +DROP TEMPORARY TABLE temp_t1, temp_t2; +DROP TABLE t1, t2; include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_unsafe_statements.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_unsafe_statements.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_unsafe_statements.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_unsafe_statements.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,56 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; +CREATE TABLE t2(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; +CREATE TRIGGER trig1 AFTER INSERT ON t1 +FOR EACH ROW +INSERT INTO t2(i) VALUES(new.i); +START TRANSACTION; +INSERT INTO t2(i) VALUES (1); +ROLLBACK; +INSERT INTO t1(i) VALUES(2); +START TRANSACTION; +LOCK TABLES t1 WRITE, t2 WRITE; +INSERT INTO t1(i) VALUES(3); +UNLOCK TABLES; +COMMIT; +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +DROP TABLE t1,t2; +CREATE TABLE t1(i INT) ENGINE=INNODB; +CREATE TABLE t2(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; +INSERT INTO t1 values (1), (2), (3); +START TRANSACTION; +INSERT INTO t2(i) VALUES (1); +ROLLBACK; +INSERT INTO t2(i) SELECT i FROM t1; +START TRANSACTION; +LOCK TABLES t2 WRITE, t1 READ; +INSERT INTO t2(i) SELECT i FROM t1; +UNLOCK TABLES; +COMMIT; +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +DROP TABLE t1,t2; +CREATE TABLE t1(i int, id INT AUTO_INCREMENT, PRIMARY KEY (i, id)) ENGINE=MYISAM; +INSERT INTO t1 (i) values (1); +START TRANSACTION; +LOCK TABLES t1 WRITE; +INSERT INTO t1 (i) values (2); +UNLOCK TABLES; +COMMIT; +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +CREATE TABLE t1(i INT, j INT, UNIQUE KEY(i), UNIQUE KEY(j)) ENGINE=INNODB; +INSERT INTO t1 (i,j) VALUES (1,2) ON DUPLICATE KEY UPDATE j=j+1; +START TRANSACTION; +LOCK TABLES t1 WRITE; +INSERT INTO t1 (i,j) VALUES (1,2) ON DUPLICATE KEY UPDATE j=j+1; +UNLOCK TABLES; +COMMIT; +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_zombie_dump_threads.result mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_zombie_dump_threads.result --- mysql-5.6-5.6.27/mysql-test/suite/rpl/r/rpl_zombie_dump_threads.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/r/rpl_zombie_dump_threads.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,16 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/stop_dump_threads.inc +[connection slave] +SET @save_debug = @@GLOBAL.debug; +SET GLOBAL debug="d,fake_5_5_version_slave"; +include/start_slave_io.inc +include/stop_slave_io.inc +include/start_slave_io.inc +[connection master] +[connection slave] +SET GLOBAL debug=@save_debug; +include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_autogen_query_multi_byte_char.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_autogen_query_multi_byte_char.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_autogen_query_multi_byte_char.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_autogen_query_multi_byte_char.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,87 @@ +############################################################################### +# Bug#21205695 DROP TABLE MAY CAUSE SLAVES TO BREAK +# +# Problem: +# ======== +# 1) Drop table queries are re-generated by server +# before writing the events(queries) into binlog +# for various reasons. If table name/db name contains +# a non regular characters (like latin characters), +# the generated query is wrong. Hence it breaks the +# replication. +# 2) In the edge case, when table name contains +# 64 latin characters (latin takes 2 bytes), server is +# throwing an assert (M_TBLLEN < 128) +# +# 3) In the edge case, when db name contains 64 latin +# characters, binlog contents are interpreted wrongly +# which is leading to replication issues. +# +############################################################################### + +--source include/not_windows.inc +--source include/master-slave.inc + +--let iter=1 +# Change iteration to 4 after fixing Bug #22280214 +while ($iter <= 2) +{ + --connection master + if ($iter == 1) + { + --echo Test case 1:- table name with one character latin name. + --let $tblname= REPEAT(CHAR(131),1) + } + if ($iter == 2) + { + --echo Test case 2:- table name and database names with one character latin name. + --let $tblname= REPEAT(CHAR(131),1),"`.`",REPEAT(CHAR(131),1) + --eval SET @s:=CONCAT("CREATE DATABASE `",REPEAT(CHAR(131),1),"`") + PREPARE STMT FROM @s; EXECUTE stmt; + } + # After fixing Bug #22280214 DATADIR LOCATION IS LIMITING + # IDENTIFIER MAX LENGTH, the following two tests (iter 3 and 4) can be + # uncommented. + #if ($iter == 3) + #{ + # --echo Test case 3:- table name and database names with 64 latin characters name. + # --let $tblname= REPEAT(CHAR(131),64),"`.`", REPEAT(CHAR(131),64) + # --eval SET @s:=CONCAT("CREATE DATABASE `",REPEAT(CHAR(131),64),"`") + # PREPARE STMT FROM @s; EXECUTE stmt; + #} + #if ($iter == 4) + #{ + # --echo Test case 4:- table name and database names with 64 Euro(€) characters. + # --let $tblname= REPEAT(CHAR(226,130,172),64),"`.`", REPEAT(CHAR(226,130,172),64) + # --eval SET @s:=CONCAT("CREATE DATABASE `",REPEAT(CHAR(226,130,172),64),"`") + # PREPARE STMT FROM @s; EXECUTE stmt; + #} + --eval SET @s:=CONCAT("CREATE TABLE `",$tblname,"` (a INT)") + PREPARE STMT FROM @s; EXECUTE stmt; + --eval SET @s:=CONCAT("INSERT INTO `",$tblname,"` VALUES (1)") + PREPARE STMT FROM @s; EXECUTE stmt; + --eval SET @s:=CONCAT("DROP TABLE `",$tblname, "`") + PREPARE STMT FROM @s; EXECUTE stmt; + if ($iter == 2) + { + --eval SET @s:=CONCAT("DROP DATABASE `",REPEAT(CHAR(131),1),"`") + PREPARE STMT FROM @s; EXECUTE stmt; + } + # After fixing Bug #22280214 DATADIR LOCATION IS LIMITING + # IDENTIFIER MAX LENGTH, the following two tests (iter 3 and 4) can be + # uncommented. + #if ($iter == 3) + #{ + # --eval SET @s:=CONCAT("DROP DATABASE `",REPEAT(CHAR(131),64),"`") + # PREPARE STMT FROM @s; EXECUTE stmt; + #} + #if ($iter == 4) + #{ + # --eval SET @s:=CONCAT("DROP DATABASE `",REPEAT(CHAR(226,130,172),64),"`") + # PREPARE STMT FROM @s; EXECUTE stmt; + #} + --sync_slave_with_master + --inc $iter +} + +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_autoinc_lock_style.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_autoinc_lock_style.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_autoinc_lock_style.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_autoinc_lock_style.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,46 @@ +############################################################################### +# Bug#22247668 SLAVE IS ~10X SLOWER TO EXECUTE SET OF STATEMENTS COMPARED TO +# MASTER RBR +# Problem: A new style of locking is implemented in Innodb. Starting from 5.6, +# Innodb uses this new style of locking for all the cases except for the case +# where for a simple (single/multi) row INSERTs, it fall back to old style +# locking if another transaction has already acquired the AUTOINC lock on behalf of +# a LOAD FILE or INSERT...SELECT etc. type of statement. But on +# Slave, in RBR format, it is always using old style auto inc +# algorithm. +# +# Steps to reproduce: +# 1) Setup DEBUG simulation point on Slave to bring the server down +# if the INSERT enters old style autoinc locking method. +# +# 2) Execute AUTOINC related work on Master. +# +# 3) Make sure that sync on slave happens without any issues. +# +############################################################################### +--source include/have_debug.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +# Initial setup +CREATE TABLE t (i INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; +--source include/sync_slave_sql_with_master.inc + +# Step-1 : Setup DEBUG simulation point on Slave to bring the server down +# if the INSERT enters old style autoinc locking method. +SET @save_debug=@@debug; +SET GLOBAL DEBUG='+d,die_if_autoinc_old_lock_style_used'; + +# Step-2 :Execute AUTOINC related work on Master. +--source include/rpl_connection_master.inc +INSERT INTO t VALUES (1); +DROP TABLE t; + +# Step-3: Due to above DEBUG simulation point, server will go down if it enters +# old autoinc lock style. After fix, sync on Slave happens without any issues. +--source include/sync_slave_sql_with_master.inc + +# Cleanup +# Reset the simulation point on Slave. +SET GLOBAL DEBUG=@save_debug; +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--replicate-ignore-db=db1 --replicate-wild-ignore-table=db1.% diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_binlog_failed_drop_table.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,61 @@ +# ==== Purpose ==== +# +# Check that when the exectuion of a DROP TABLE command with single table +# fails it should not be written to the binary log. Also test that when the +# execution of DROP TABLE command with multiple tables fails the command +# should be written into the binary log. +# +# ==== Implementation ==== +# Create a database `db1` on master and ignore this database on the slave side +# using --replicate-ignore-db=db1 --replicate-wild-ignore-table=db1.%. Now +# execute a DROP TABLE command with single table in it and the command should +# fail because of foreign key constraint. Check in the binlog that query should +# not be binlogged. Slave should also be up and running without any errors. +# Execute another DROP TABLE command with multiple tables in the drop list and +# this also fails because of foreign key constraint, check that query gets +# written into the binary log and slave should not fail since query is filtered +# on it. +# +# ==== References ==== +# +# Bug#21435502: DROP TABLE IF EXISTS MAY BRAKE REPLICATION IF SLAVE HAS +# REPLICATION FILTERS. +# +################################################################################ +--source include/master-slave.inc + +CREATE DATABASE `db1`; + +USE `db1`; + +CREATE TABLE `t1` (`ID` bigint(20) primary key) ENGINE=InnoDB; + +CREATE TABLE `t2` ( `ID` bigint(20) NOT NULL AUTO_INCREMENT, `DIVISION_ID` bigint(20) DEFAULT NULL, PRIMARY KEY (`ID`), KEY `FK_TABLE1_DIVISION_1` (`DIVISION_ID`), CONSTRAINT `FK_TABLE1_DIVISION_1` FOREIGN KEY (`DIVISION_ID`) REFERENCES `t1` (`ID`) ON DELETE CASCADE ) ENGINE=InnoDB; + +CREATE TABLE `t3` (`ID` bigint(20) primary key) ENGINE=InnoDB; + +# Save master position +--let $saved_master_pos=query_get_value('SHOW MASTER STATUS', Position, 1) + +# Test a single table drop failure +--error ER_ROW_IS_REFERENCED +DROP TABLE IF EXISTS `db1`.`t1`; +--let $current_master_pos=query_get_value('SHOW MASTER STATUS', Position, 1) +--let $assert_text= Drop with single table should not be written to the binary log if the query execution fails +--let $assert_cond= $current_master_pos = $saved_master_pos +--source include/assert.inc + +# Test a multiple table drop failure +--error ER_ROW_IS_REFERENCED +DROP TABLE `t3`, `t1`, `t2`; + +--let $binlog_start= $saved_master_pos +--source include/show_binlog_events.inc + +--source include/sync_slave_sql_with_master.inc + +--echo Cleanup +--source include/rpl_connection_master.inc +DROP DATABASE `db1`; + +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_bug33931.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_bug33931.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_bug33931.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_bug33931.test 2016-08-26 11:22:35.000000000 +0000 @@ -32,11 +32,14 @@ # but there won't be any crashes nor asserts hit. # -# 1593 = ER_SLAVE_FATAL_ERROR ---let $slave_sql_errno= 1593 +# Wait for the SQL thread error +--let $slave_sql_errno= convert_error(ER_SLAVE_FATAL_ERROR) --let $show_slave_sql_error= 1 --source include/wait_for_slave_sql_error.inc +# In 5.6 servers, there would be no I/O thread failure reported +# on SHOW SLAVE STATUS. We should just wait for the IO thread to stop. +--source include/wait_for_slave_io_to_stop.inc # # Cleanup # diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +"--replicate-rewrite-db=test->new_test" diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_drop_temp_tbl_with_rewrite_db.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,83 @@ +############################################################################### +# Bug#21317739: APPLYING CREATE TEMPORARY TABLE SQL ON A SLAVE WITH +# REPLICATE-REWRITE-DB FAILS +# +# Problem: +# ======= +# As part of fix for BUG#16290902, at the time of writing the 'DROP TEMPORARY +# TABLE IF EXISTS' query into the binlog, the query will not be preceded by a +# 'use `db`' statement. The query will have a fully qualified table name. +# Eg: +# 'USE `db`; DROP TEMPORARY TABLE IF EXISTS `t1`;' +# will be logged as +# 'DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;'. +# +# Because of this change application of 'replicate-rewrite-db' filter rule +# will fail on slave, as it works only on default database specified in 'use' +# statement. This causes slave to break when the 'CREATE TEMPORARY TABLE' is +# re-executed on slave. +# +# Test: +# ===== +# Specify replicate-rewrite-db=test->new_test on slave. On master use 'test' +# database and 'CREATE TEMPORARY TABLE 't1'. Then drop the temporary table and +# recreate it on master. Now sync master with slave. Slave should be in sync +# and up and running. +############################################################################### +--source include/master-slave.inc +--source include/have_binlog_format_statement.inc + +# Database 'test' on master is mapped with 'new_test' on slave by using +# replicate_rewrite_db filter +--source include/rpl_connection_slave.inc +CREATE DATABASE new_test; + +# Create a temporary table on the default database. +--source include/rpl_connection_master.inc +use test; +CREATE TEMPORARY TABLE t1(id int); +--source include/sync_slave_sql_with_master.inc + +# On slave verify that all the queries are rewritten as per the rewrite db +# rules. +--source include/show_binlog_events.inc + +# On slave verify that one temporary table is created. +SHOW STATUS LIKE 'Slave_open_temp_tables'; + +# On master drop the temporary table. +--source include/rpl_connection_master.inc +use test; +DROP TEMPORARY TABLE IF EXISTS t1; + +--source include/sync_slave_sql_with_master.inc +--source include/show_binlog_events.inc +# On slave verify that temporary table is dropped. Hence output should +# be 0. +SHOW STATUS LIKE 'Slave_open_temp_tables'; + +# On master recreate the temporary tables once again. +--source include/rpl_connection_master.inc +use test; +CREATE TEMPORARY TABLE t1(id int); +--source include/sync_slave_sql_with_master.inc + +# On slave temporary table should be recreated. +SHOW STATUS LIKE 'Slave_open_temp_tables'; + +# Disconnect the master, temp table on slave should dissapear +disconnect master; + +--source include/rpl_connection_slave.inc +# Wait until drop of temp tables appers in slave's binlog +let $wait_binlog_event= DROP; +source include/wait_for_binlog_event.inc; + +# On slave verify that temporary table is dropped. Hence output should +# be 0. +SHOW STATUS LIKE 'Slave_open_temp_tables'; + +# ===========Clean up========== +DROP DATABASE new_test; + +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_dump_thread_kill.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_dump_thread_kill.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_dump_thread_kill.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_dump_thread_kill.test 2016-08-26 11:22:35.000000000 +0000 @@ -29,17 +29,20 @@ # 3) While dump thread is sending data to slave, kill it. SET GLOBAL DEBUG='+d,simulate_dump_thread_kill'; --connection slave ---source include/start_slave.inc +SET GLOBAL DEBUG='+d,simulate_no_master_reconnect'; +START SLAVE IO_THREAD; + +# 4) Make sure that dump thread is killed and IO thread is stopped. +--source include/wait_for_slave_io_to_stop.inc -# 4) Make sure that dump thread is killed --connection master --let $wait_condition= SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Binlog dump' OR COMMAND = 'Binlog Dump GTID' --source include/wait_condition.inc SET GLOBAL DEBUG='-d,simulate_dump_thread_kill'; -# 5) Start dump thread +# 5) Start dump thread and replication threads --connection slave ---source include/stop_slave.inc +SET GLOBAL DEBUG='-d,simulate_no_master_reconnect'; --source include/start_slave.inc # 6) See that there is no issue in replication diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_events.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_events.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_events.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_events.test 2016-08-26 11:22:35.000000000 +0000 @@ -101,4 +101,59 @@ DROP EVENT event44331_3; DROP EVENT event44331_4; --source include/sync_slave_sql_with_master.inc + +# Bug#21229951 VARIABLES IN ALTER EVENT NOT REPLICATED PROPERLY +connection master; +DELIMITER \\; +CREATE EVENT event1 ON SCHEDULE EVERY 100 SECOND STARTS '2000-01-01 00:00:00' +ON COMPLETION PRESERVE ENABLE DO +BEGIN + SET @dummy = 100; +END\\ + +# A procedure that has alter event which uses sp local variable in it +CREATE PROCEDURE proc1() +BEGIN + DECLARE dummy INT UNSIGNED; + SET dummy = 100; + ALTER EVENT EVENT1 ON SCHEDULE EVERY dummy SECOND + STARTS '2000-01-01 00:00:00' ENABLE; +END \\ + +DELIMITER ;\\ + +CALL proc1(); +--source include/sync_slave_sql_with_master.inc + +# Cleanup +connection master; +DROP EVENT event1; +DROP PROCEDURE proc1; + +# +# Bug #19286708 REPLICATION BROKEN AFTER CREATION OF SCHEDULED EVENTS +# Testing create/alter event that has sysdate() (which makes statement unsafe) +# Testing create/alter event that has local variables +# +connection master; +call mtr.add_suppression("Unsafe statement written to the binary log"); +--disable_warnings +set @secs=100; +DELIMITER |; +CREATE EVENT EVENT_WITH_SYSDATE_AND_VARIABLES +ON SCHEDULE EVERY @secs MINUTE STARTS sysdate() +ON COMPLETION PRESERVE +DO BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +SELECT CONCAT('SAMPLE MSG'); +END | + +ALTER EVENT EVENT_WITH_SYSDATE_AND_VARIABLES +ON SCHEDULE +EVERY @secs HOUR +STARTS sysdate() | + +DROP EVENT EVENT_WITH_SYSDATE_AND_VARIABLES | +--enable_warnings +DELIMITER ;| --source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_group_commit_deadlock.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_group_commit_deadlock.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_group_commit_deadlock.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_group_commit_deadlock.test 2016-08-26 11:22:35.000000000 +0000 @@ -17,6 +17,7 @@ --let $connections= 11 --let $loops= 500 +--let $error_simulation= 1 --echo # Disable diff_table test --let $enable_diff_table= 0 @@ -25,9 +26,9 @@ --let $engine = MyISAM --source extra/rpl_tests/rpl_stress_test.inc ---echo # Enable diff_table test ---let $enable_diff_table= 1 ---echo # Test tables with InnoDB engine when enableing diff_table +--echo # Disable diff_table test +--let $enable_diff_table= 0 +--echo # Test tables with InnoDB engine when disabling diff_table --echo # and simulating flush error --let $engine = InnoDB --source extra/rpl_tests/rpl_stress_test.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.cnf mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.cnf --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.cnf 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.cnf 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -!include ../my.cnf -[mysqld.1] -gtid-mode=on -enforce-gtid-consistency -log-slave-updates - -[mysqld.2] -gtid-mode=on -enforce-gtid-consistency -log-slave-updates - -[mysqld.3] -gtid-mode=on -enforce-gtid-consistency -log-slave-updates -server-id=3 - -[mysqld.4] -gtid-mode=on -enforce-gtid-consistency -log-slave-updates -server-id=4 - -[mysqld.5] -gtid-mode=on -enforce-gtid-consistency -log-slave-updates -server-id=5 - -#[mysqld.6] -#gtid-mode=on -#enforce-gtid-consistency -#log-slave-updates -#server-id=6 -# -#[mysqld.7] -#gtid-mode=on -#enforce-gtid-consistency -#log-slave-updates -#server-id=7 -# -#[mysqld.8] -#gtid-mode=on -#enforce-gtid-consistency -#log-slave-updates -#server-id=8 -# -#[mysqld.9] -#gtid-mode=on -#enforce-gtid-consistency -#log-slave-updates -#server-id=9 - -[ENV] -SERVER_MYPORT_3= @mysqld.3.port -SERVER_MYPORT_4= @mysqld.4.port -SERVER_MYPORT_5= @mysqld.5.port -#SERVER_MYPORT_6= @mysqld.6.port -#SERVER_MYPORT_7= @mysqld.7.port -#SERVER_MYPORT_8= @mysqld.8.port -#SERVER_MYPORT_9= @mysqld.9.port diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_stress_failover.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,444 +0,0 @@ -# ==== Purpose ==== -# -# Test that it is possible to change the topology completely randomly, -# and the GTID system takes care of sending the correct transactions, -# as long as all servers generate non-conflicting transactions. -# -# ==== Implementation ==== -# -# Configure X servers and Y clients on each server. Iterate Z times. -# -# In each iteration, select a random server and select a random client -# on that server. On this connection, perform each of the following -# with a fixed probability: -# -# - A transaction (DML) -# - A DDL statement -# - FLUSH LOGS -# - CHANGE MASTER to a random other server -# -# After all iterations are done, change to a circular topology and -# wait for the servers to synchronize. Then check that all servers -# have the same data. -# -# Details: -# - We create as many databases as we have servers. -# - Each server only executes DML / DDL on one database. -# - Each database has one table per client. Initially, the table -# names are t_1_0, t_2_0, ..., t_Y_0, where Y is the number of -# clients per server, and all tables are empty. -# - The DDL consists in replacing the table by t_y_i, where i is the -# iteration counter and y is the client used in this iteration. -# t_y_i is empty. We do this in a funny way (see the code) just to -# use a couple of different DDL statements. -# - The DML consists in replacing the contents of t_y_*, by the value -# i, where i is the iteration counter and y is the client used in -# this iteration. We do this in a funny way (see the code) just to -# use a couple of diffrent DML statements. -# -# ==== Custom usage ==== -# -# You can alter the behavior of this test by setting the following -# variables (as environment variables or mtr variables): -# -# $debug -# If set, print all statements (default off) -# -# $max_iterations -# The maximal number of iterations to run. (default 10000) -# -# $max_seconds -# The maximal time to run iterations. (default 300) -# -# $n_servers -# The number of servers to run on (default 5) -# -# $n_clients_per_server -# The number of clients to use for each server (default 5) -# -# $change_master_probability -# The probability to execute CHANGE MASTER in each iteration (default 0.1) -# -# $flush_logs_probability -# The probability to execute FLUSH LOGS in each iteration (default 0.05) -# -# $dml_probability -# The probability to execute DML in each iteration (default 1) -# -# $ddl_probability -# The probability to execute DDL in each iteration (default 0.1) -# -# $deterministic -# By default, the random seed is taken to be a random number, -# different for each run, and the test is deliberately executing -# several tasks concurrently. If $deterministic is set, the random -# seed is taken to be the value of $deterministic, and the -# concurrency is reduced (but not entirely eliminated). -# -# ==== References ==== -# -# WL#3584: Global Transaction Identifiers -# - Created as part of this worklog -# BUG#18385953: RPL_GTID_STRESS_FAILOVER FAILS WITH "ERROR IN SYNC_WITH_MASTER.INC" -# - fixed bug in cleanup code - -#Want to skip this test from daily Valgrind execution ---source include/no_valgrind_without_big.inc ---source include/big_test.inc ---source include/have_gtid.inc - -# This test case has path issues when executing the -# external command mysqldump.exe on windows. Since -# what it tests is not platform dependent we disable -# it on Windows. ---source include/not_windows.inc - -# This test case fails in MTS mode due to BUG#12995174 -# once that bug is fixed, the following line should be -# removed so that the test is enabled in MTS ---source include/not_mts_slave_parallel_workers.inc - ---echo ==== Configure ==== - -if ($max_seconds == '') -{ - --let $max_seconds= 300 -} -if ($max_iterations == '') -{ - --let $max_iterations= 10000 -} -if (!$n_servers) -{ - --let $n_servers= 5 -} -if (!$n_clients_per_server) -{ - --let $n_clients_per_server= 5 -} - -if ($change_master_probability == '') -{ - --let $change_master_probability= 0.1 -} -if ($flush_logs_probability == '') -{ - --let $flush_logs_probability= 0.05 -} -if ($dml_probability == '') -{ - --let $dml_probability= 1 -} -if ($ddl_probability == '') -{ - --let $ddl_probability= 0.1 -} - -if ($deterministic != '') -{ - --let $rand_seed= $deterministic -} - ---echo ==== Initialize ==== - ---let $underscore= _ ---let $zero= 0 - -if (!$debug) -{ - --disable_query_log - --disable_result_log -} -if ($debug) -{ - --echo debug: n_servers=$n_servers n_clients_per_server=$n_clients_per_server max_iterations=$max_iterations max_seconds=$max_seconds - --echo debug: change_master_probability=$change_master_probability flush_logs_probability=$flush_logs_probability dml_probability=$dml_probability ddl_probability=$ddl_probability -} - ---let $circular_topology= 1 ---let $server_list= ---let $server= $n_servers -while ($server > 0) -{ - --let $circular_topology= $server->$circular_topology - --let $server_list= $server $server_list - --dec $server -} - ---let $rpl_extra_connections_per_server= $n_clients_per_server ---let $rpl_topology= $circular_topology ---let $use_gtids= 1 ---source include/rpl_init.inc - ---let $server= 1 -while ($server <= $n_servers) -{ - --connection server_$server - eval CREATE DATABASE db_$server; - - --let $client= 1 - while ($client <= $n_clients_per_server) - { - --let $connection= server_$server$underscore$client - --connection $connection - - eval CREATE TABLE db_$server.t_$client$underscore$zero (a INT) ENGINE = InnoDB; - eval SET @last_value = -1; - - --inc $client - } - --inc $server -} - ---source include/rpl_sync.inc ---source include/rpl_reset.inc - ---let $server= 1 -while ($server <= $n_servers) -{ - --let $client= 1 - while ($client <= $n_clients_per_server) - { - --connection server_$server$underscore$client - send SELECT 1; - --inc $client - } - --inc $server -} - - ---echo ==== Test ==== - ---connection default ---let $iteration= 1 ---let $start_time= `SELECT UNIX_TIMESTAMP()` ---let $done= 0 -while (!$done) -{ - --connection default - - --let $rand_type= int - --let $rand_min= 1 - --let $rand_max= $n_servers + 1 - --source include/rand.inc - --let $server= $rand - - --let $rand_max= $n_clients_per_server + 1 - --source include/rand.inc - --let $client= $rand - - --let $rand_type= decide - --let $rand_probability= $change_master_probability - --source include/rand.inc - --let $do_change_master= $rand - - --let $rand_probability= $flush_logs_probability - --source include/rand.inc - --let $do_flush_logs= $rand - - --let $rand_probability= $dml_probability - --source include/rand.inc - --let $do_dml= $rand - - --let $rand_probability= $ddl_probability - --source include/rand.inc - --let $do_ddl= $rand - - if ($debug) - { - --echo debug: server=$server client=$client change_master=$do_change_master flush=$do_flush_logs dml=$do_dml ddl=$do_ddl - } - - --let $connection= server_$server$underscore$client - --connection $connection - - if ($do_change_master) - { - --reap - - # Computes a random number between 1 and $n_servers that is - # different from $server. - --let $rand_type= int - --let $rand_min= 0 - --let $rand_max= $n_servers - 1 - --source include/rand.inc - --let $new_master= `SELECT 1 + (($server + $rand) % $n_servers)` - if ($debug) - { - --echo change master for $server to $new_master - } - - --let $include_silent= 1 - --source include/stop_slave.inc - - --let $port= \$SERVER_MYPORT_$new_master - --disable_warnings - eval CHANGE MASTER TO MASTER_HOST = '127.0.0.1', - MASTER_PORT = $port, - MASTER_USER = 'root', - MASTER_CONNECT_RETRY = 1, - MASTER_AUTO_POSITION = 1; - --enable_warnings - - --source include/start_slave.inc - --let $include_silent= 0 - # give something for the next reap - send SELECT 1; - } - - if ($do_flush_logs) - { - --reap - send FLUSH LOGS; - } - - if ($do_dml) - { - --reap - --let $t= `SHOW TABLES IN db_$server LIKE 't_$client$underscore%'` - --let $t= db_$server.$t - --let $last_value= `SELECT @last_value` - --delimiter | - send| - eval - BEGIN; - INSERT INTO $t VALUES (-1); - UPDATE $t SET a = $iteration WHERE a = $last_value; - DELETE FROM $t WHERE a = -1; - COMMIT; - SET @last_value= $iteration; - | - --delimiter ; - } - - if ($do_ddl) - { - --reap - --let $t= `SHOW TABLES IN db_$server LIKE 't_$client$underscore%'` - --let $t= db_$server.$t - --delimiter | - send| - eval - CREATE TABLE db_$server.t_$client (a INT) ENGINE = InnoDB; - DROP TABLE $t; - RENAME TABLE db_$server.t_$client TO db_$server.t_$client$underscore$iteration; - SET @last_value = -1; - | - --delimiter ; - } - - if ($deterministic != '') - { - --reap - --sleep 2 - --send SELECT 1 - } - - --inc $iteration - - if ($iteration > $max_iterations) - { - --let $done= 1 - } - --connection default - --let $elapsed_time= `SELECT UNIX_TIMESTAMP() - $start_time` - if ($elapsed_time > $max_seconds) - { - --let $done= 1 - } -} -if ($debug) -{ - --echo exited after iteration $iteration, $elapsed_time seconds (max_seconds=$max_seconds, start_time=$start_time) -} -# extra debug info for show_rpl_debug_info ---let $extra_debug_info= iterations=$iterations - - ---echo ==== Sync ==== - ---echo Reap all sent queries. ---let $server= 1 -while ($server <= $n_servers) -{ - --let $client= 1 - while ($client <= $n_clients_per_server) - { - --connection server_$server$underscore$client - --reap - --inc $client - } - --inc $server -} - -# Wait for replication to catch up ---connection default - ---source include/rpl_stop_slaves.inc - ---let $rpl_topology= $circular_topology ---let $rpl_extra_connections_per_server= 5 ---let $rpl_unconditional_change_master= 1 ---source include/rpl_change_topology.inc - ---source include/rpl_start_slaves.inc - ---source include/rpl_sync.inc - - ---echo ==== Check result ==== - ---echo Check that GTID_EXECUTED is equal on all servers. ---let $server= 1 -while ($server <= $n_servers) -{ - --connection server_$server - --let $gtid_executed= `SELECT @@GLOBAL.GTID_EXECUTED` - if ($server > 1) - { - if ($last_gtid_executed != $gtid_executed) - { - --source include/show_rpl_debug_info.inc - --echo ERROR: GTID_EXECUTED differs between server 1 and server $server - --echo ERROR: GTID_EXECUTED on server 1: '$last_gtid_executed' - --echo ERROR: GTID_EXECUTED on server $server: '$gtid_executed' - --die GTID_EXECUTED differs between two servers - } - } - --let $last_gtid_executed= $gtid_executed - --inc $server -} - ---echo Check that database state is equal on all servers. ---let $diff_servers= $server_list ---source include/diff_servers.inc - - ---echo ==== Clean up ==== - -# drop database ---connection default ---let $server= 1 -while ($server <= $n_servers) -{ - eval DROP DATABASE db_$server; - --inc $server -} ---source include/rpl_sync.inc - -# restore AUTO_POSITION ---let $server= 1 -while ($server <= $n_servers) -{ - --connection server_$server - - --let $include_silent=1 - --source include/stop_slave.inc - CHANGE MASTER TO MASTER_AUTO_POSITION=0; - --source include/start_slave.inc - --let $include_silent=0 - - --inc $server -} - ---source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_temp_table.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_temp_table.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_gtid_temp_table.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_gtid_temp_table.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,94 @@ +############################################################################### +# Bug #21253415 MULTIPLE DROP TEMP TABLE STATEMENTS IN SF CAUSE REPLICATION +# FAILS USING 5.6 GTID +# Problem: When there are more than one drop temp table in stored function or +# trigger, replication is failing when GTIDs are enabled. +# Fix: When GTIDs are enabled, it is documented that CREATE/DROP temp tables +# are not allowed in Multi Statement Transactions. Stored functions +# and Triggers are also considered as another form of Multi Statement +# Transactions. To maintain consistency and to avoid the problems that +# are mentioned in this bug scenario, CREATE/DROP temp tables are +# disallowed from stored functions and triggers also. +# Step to reproduce: +# 1) Create different combinations of functions/triggers with create/drop +# temp tables queries +# 2) Test SELECT, DMLs with those restricted functions and triggers +# 3) Server should throw error in all the cases. +############################################################################### + +# This test cannot be run in STATEMENT/MIXED mode until +# "Bug #22134026: ON BINLOGLESS SERVER ENFORCE_GTID_CONSISTENCY DOESN'T CHECK +# FOR ER1785,1786,1787" is fixed. +--source include/have_binlog_format_row.inc +--source include/have_gtid.inc +--source include/master-slave.inc +# Initial Setup +CREATE TABLE trans_table1 (i INT) ENGINE=INNODB; +INSERT INTO trans_table1 VALUES (1); + +CREATE TABLE trans_table2 (i INT) ENGINE=INNODB; +INSERT INTO trans_table2 VALUES (1); + +CREATE TABLE non_trans_table1 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table1 VALUES (1); + +CREATE TABLE non_trans_table2 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table2 VALUES (1); + +# Case 1: Function/Trigger with create and drop non trans temp table +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 2: Function/Trigger with create and drop trans temp table +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 3: Function/Trigger with just create non trans temp table +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 4: Function/Trigger with just create trans temp table +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 5: Function/Trigger with just drop temp table +--let $func_or_trig_body=DROP TEMPORARY TABLE IF EXISTS tt1; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 6: Function/Trigger with two create/drop temp tables +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 7: Function/Trigger with DML operation on trans table followed by create/drop temp table +--let $func_or_trig_body=INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 8: Function/Trigger with DML operation on non trans table followed by create/drop temp table +--let $func_or_trig_body=INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 9: Function/Trigger with DML operation on trans table after create/drop temp table queries +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Case 10: Function/Trigger with DML operation on non trans table after create/drop temp table queries +--let $func_or_trig_body=CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +--source extra/rpl_tests/rpl_gtid_temp_table_in_func_or_trigger.inc + +# Test that all Slave tables are in sync with Master tables +--let $diff_tables=master:trans_table1, slave:trans_table1 +--source include/diff_tables.inc + +--let $diff_tables=master:trans_table2, slave:trans_table2 +--source include/diff_tables.inc + +--let $diff_tables=master:non_trans_table1, slave:non_trans_table1 +--source include/diff_tables.inc + +--let $diff_tables=master:non_trans_table2, slave:non_trans_table2 +--source include/diff_tables.inc + +# Cleanup +DROP TABLE trans_table1, trans_table2; +DROP TABLE non_trans_table1, non_trans_table2; +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_killed_ddl.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_killed_ddl.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_killed_ddl.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_killed_ddl.test 2016-08-26 11:22:35.000000000 +0000 @@ -26,10 +26,8 @@ # # There are some part of the test are temporarily disabled because of # the following bugs, please enable then once they get fixed: -# - BUG#44041 -# - BUG#43353 -# - BUG#25705 -# - BUG#44171 +# - BUG#22473427 +# - Bug#22587377 source include/have_debug.inc; source include/master-slave.inc; @@ -145,11 +143,9 @@ send CREATE DATABASE d2; source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled, see BUG#44041, the ALTER DATABASE can affect the -# collation of other database on slave -#send ALTER DATABASE d1 -# DEFAULT CHARACTER SET = 'utf8'; -#source include/kill_query_and_diff_master_slave.inc; +send ALTER DATABASE d1 + DEFAULT CHARACTER SET = 'utf8'; +source include/kill_query_and_diff_master_slave.inc; send DROP DATABASE d1; source include/kill_query_and_diff_master_slave.inc; @@ -168,8 +164,8 @@ DO INSERT INTO test.t1 VALUES (2); source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled because of BUG#44171, killing ALTER EVENT can -# crash the server +# Temporarily disabled,see Bug#22587377-RPL.RPL_KILLED_DDL +# FAILS SPORADICALLY ON PB2 IN 5.5 AND 5.6 #send ALTER EVENT e1 # ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; #source include/kill_query_and_diff_master_slave.inc; @@ -198,16 +194,8 @@ # function f2 probably does not exist because the CREATE query was # killed -# -# Temporarily disabled. Because of BUG#43353, KILL the query may -# result in function not found, and for 5.1, DROP statements will be -# logged if the function is not found on master, so the following DROP -# FUNCTION statement may be interrupted and not drop the function on -# master, but still get logged and executed on slave and cause -# inconsistence. Also disable the following DROP PROCEDURE IF EXITS -# below. -#send DROP FUNCTION IF EXISTS f2; -#source include/kill_query_and_diff_master_slave.inc; +send DROP FUNCTION IF EXISTS f2; +source include/kill_query_and_diff_master_slave.inc; ######## PROCEDURE ######## @@ -228,9 +216,8 @@ send DROP PROCEDURE p1; source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled because of bug#43353, see comment above for DROP FUNCTION IF EXISTS -#send DROP PROCEDURE IF EXISTS p2; -#source include/kill_query_and_diff_master_slave.inc; +send DROP PROCEDURE IF EXISTS p2; +source include/kill_query_and_diff_master_slave.inc; ######## TABLE ######## @@ -258,9 +245,10 @@ ######## SERVER ######## -# Tempoarily disabled, see bug#25705 +# Temporarily disabled, see Bug #22473427 - DROP SERVER FAILS +# AFTER ALTER SERVER+KILL QUERY -# --let $rpl_diff_statement= SELECT * FROM mysql.server WHERE name like \'s%\' +# --let $rpl_diff_statement= SELECT * FROM mysql.servers WHERE Server_name like \'s%\' # send CREATE SERVER s2 # FOREIGN DATA WRAPPER mysql diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.cnf mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.cnf --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,15 @@ +!include ../my.cnf +[mysqld.1] +log-slave-updates +max_binlog_size = 4096 +[mysqld.2] +log-slave-updates +max_binlog_size = 4096 +log-slave-updates +relay_log_info_repository = TABLE +[mysqld.3] +log-slave-updates +max_binlog_size = 4096 + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mix_missing_data_on_slave.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,66 @@ +############################################################################### +# Bug#21630907: MISSING DATA DETECTED WHEN MAX_BINLOG_SIZE SMALLER ON SLAVE +# FOR 3 NODE TOPOLOGY +# +# Bug#21053163: MIXED BASED REPLICATION LOOSES EVENTS WHEN +# RELAY_LOG_INFO_REPOSITORY=TABLE +# +# Problem: +# ======= +# 2 level replication M1 -> S1 ->S2 ( S1 is slave of M1; S2 is slave of S1) +# replicating a non-transactional storage engine table (e.g. MyISAM) when set +# relay_log_info_repository=TABLE; and binlog rotation occurs in the middle +# of statement that was translated to multiple rows, then you loose part of +# that events. +# +# When binlog rotation occurs, on S1 not all rows are written to it's binlog, +# therefore S2 seamlessly looses part of rows that were translated from one +# statement to several rows. +# +# Test: +# ===== +# Have mixed based replication, relay_log_info_repository=TABLE and +# max_binlog_size=4096 on all servers in 3 NODE TOPOLOGY. On master +# generate a single WRITE_ROWS_EVENT which has multiple row updates. When +# this event is replicated to slave, it will be split across relay logs. +# Test will verify that the data on all servers is the same. +# In the case of bug if +# 1) GTID_MODE is set to ON on all three servers, the slave will fail with +# error code:1837 i.e ER_GTID_NEXT_TYPE_UNDEFINED_GROUP. +# 2) GTID_MODE is set to OFF on all three servers diff tables command will +# fail. +############################################################################### + +--source include/have_binlog_format_mixed.inc +--let $rpl_server_count= 3 +--let $rpl_topology= 1->2->3 +--disable_warnings +--source include/rpl_init.inc +--enable_warnings + +--connection server_1 +--echo Server 1 +CREATE TABLE `t1` ( + `id` bigint unsigned NOT NULL auto_increment, + `val` varchar(255), + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO t1 (val) VALUES (REPEAT('a', 255)); +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; +INSERT INTO t1 (val) SELECT val FROM t1; + +--echo Syncing all three servers +--source include/rpl_sync.inc +--echo Verifying 't1' table contents on all three servers through diff tables. +--let $diff_tables= server_1:t1, server_2:t1, server_3:t1 +--source include/diff_tables.inc + +# Clean up +DROP TABLE t1; +--source include/rpl_sync.inc +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--slave-transaction-retries=0 --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_post_crash_recovery.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,40 @@ +############################################################################### +# Bug#21507981: REPLICATION POSITION LOST AFTER CRASH ON MTS CONFIGURED SLAVE +# +# Problem: +# ======== +# Enable MTS along with crash-safe replication tables. Make sure that the +# server +# is busily inserting data with multiple threads in parallel. Shutdown mysqld +# uncleanly (kill -9 or power off server without notice). +# +# Now users are restarting the server with --relay-log-recovery=1 to recover +# the +# crashed slave. +# +# This results in following error: +# ================================ +# 2015-06-24 13:49:03 3895 [ERROR] --relay-log-recovery cannot +# be executed when the slave was stopped with an error or +# killed in MTS mode; consider using RESET SLAVE or restart +# the server with --relay-log-recovery = 0 followed by +# START SLAVE UNTIL SQL_AFTER_MTS_GAPS. +# +# i.e relay-log-recovery will not work in MTS mode. +############################################################################### +# Following test demonstrates that when gaps are generated due to MTS crash +# but not due to an error then recovery should be successful with +# --relay-log-recovery=1 option. + +--source include/force_restart.inc +--source include/have_binlog_format_statement.inc +--source include/only_mts_slave_parallel_workers.inc +--source include/master-slave.inc + +--let $skip_slave_start_var= FALSE +--source extra/rpl_tests/rpl_mts_relay_log_recovery.test + +--let $skip_slave_start_var= TRUE +--source extra/rpl_tests/rpl_mts_relay_log_recovery.test + +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--slave-transaction-retries=0 --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_mts_relay_log_recovery_on_error.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,115 @@ +############################################################################### +# Bug#21507981: REPLICATION POSITION LOST AFTER CRASH ON MTS CONFIGURED SLAVE +# +# Problem: +# ======== +# Enable MTS along with crash-safe replication tables. Make sure that the server +# is busily inserting data with multiple threads in parallel. Shutdown mysqld +# uncleanly (kill -9 or power off server without notice). +# +# Now users are restarting the server with --relay-log-recovery=1 to recover the +# crashed slave. +# +# This results in following error: +# ================================ +# 2015-06-24 13:49:03 3895 [ERROR] --relay-log-recovery cannot be executed when +# the slave was stopped with an error or killed in MTS mode; consider using +# RESET SLAVE or restart the server with --relay-log-recovery = 0 followed by +# START SLAVE UNTIL SQL_AFTER_MTS_GAPS. +# +# i.e relay-log-recovery will not work in MTS mode. +############################################################################### +# Following test demonstrates that when a gap is generated because MTS has +# stopped due to an error then attempting 'relay-log-recovery' will not be +# successful. Once the route cause of the error is eliminated restarting the +# recovery with relay-log-recovery=1 should fix the issue. +# +# Testing Method: +# =============== +# It first creates two databases (d1 and d2) and setup slave to use two parallel +# workers. The test case then insert on the slave a tuple that will block +# writes on d2 and generate gaps. Now COMMIT the blocking tuple on slave so +# that workers will proceed and apply the pending transactions. This will +# result in duplicate key error and slave will stop. Now crash the slave +# server and initiate relay-log-recovery. It should fail as slave has stopped +# due to an error. Eliminate the cause of duplicate key error by removing the +# local changes on slave. Restart the recovery process it should be +# successful. +--source include/force_restart.inc +--source include/have_binlog_format_statement.inc +--source include/only_mts_slave_parallel_workers.inc +--source include/master-slave.inc + +--source include/rpl_connection_slave.inc +call mtr.add_suppression("Duplicate entry*"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +call mtr.add_suppression("Failed to initialize the master info structure"); +call mtr.add_suppression("Slave failed to initialize relay log info*"); +call mtr.add_suppression("MTS recovery: automatic recovery failed.*"); +call mtr.add_suppression("Recovery from master pos"); + +--source extra/rpl_tests/rpl_generate_mts_gap.test + +--source include/rpl_connection_slave.inc +COMMIT; +--let $slave_sql_errno= convert_error(ER_DUP_ENTRY) +source include/wait_for_slave_sql_error.inc; + +# Restart the slave server - Recovery will fail as MTS has stopped due to an +# error. +--let $rpl_server_number= 2 +--let $rpl_server_parameters= --skip_slave_start=TRUE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1 +--source include/rpl_restart_server.inc + +--source include/rpl_connection_slave.inc +--exec echo "Relay log recovery should fail as MTS stopped due to an error" + +--error ER_SLAVE_RLI_INIT_REPOSITORY +START SLAVE; + +# Remove the affending rows from slave. +--exec echo "Eliminate the cause of MTS error" +DELETE FROM d2.t WHERE a=2; +DELETE FROM d1.t WHERE a=3; + +--let $table=d2.t +--let $count=1 +--source include/wait_until_rows_count.inc + +--let $table=d1.t +--let $count=2 +--source include/wait_until_rows_count.inc + +# Restart the slave server this should fix the gaps. +--let $rpl_server_number= 2 +--let $rpl_server_parameters= --skip_slave_start=TRUE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1 +--source include/rpl_restart_server.inc + +--exec echo "MTS recovery should be successful. Check that gaps are filled." + +--let $assert_text= Table d1.t should contain 2 rows. +--let $assert_cond= [select count(*) from d1.t] = 2 +--source include/assert.inc + +--let $assert_text= Table d2.t should contain 3 rows. +--let $assert_cond= [select count(*) from d2.t] = 3 +--source include/assert.inc + +--source include/start_slave.inc + +# Check consistency +--source include/rpl_connection_master.inc +--source include/sync_slave_sql_with_master.inc +--let $diff_tables= master:d1.t, slave:d1.t +--source include/diff_tables.inc + +--let $diff_tables= master:d2.t, slave:d2.t +--source include/diff_tables.inc + +# +# Cleanup +# +--source include/rpl_connection_master.inc +DROP DATABASE d1; +DROP DATABASE d2; +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_change_master.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_change_master.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_change_master.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_change_master.test 2016-08-26 11:22:35.000000000 +0000 @@ -106,7 +106,7 @@ --connection slave SELECT @@global.relay_log_recovery as 'must be ON'; -call mtr.add_suppression("--relay-log-recovery cannot be executed when the slave was stopped with an error or killed in MTS mode; consider using RESET SLAVE or restart the server with --relay-log-recovery = 0"); +call mtr.add_suppression("MTS recovery: automatic recovery failed.*"); call mtr.add_suppression("Failed to initialize the master info structure"); # # the following suppression applies to either restart. diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_worker_error-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_worker_error-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_worker_error-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_worker_error-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--no-console --log_error=$MYSQLTEST_VARDIR/tmp/slave.err diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_worker_error.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_worker_error.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_parallel_worker_error.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_parallel_worker_error.test 2016-08-26 11:22:35.000000000 +0000 @@ -1,3 +1,6 @@ +# Inorder to grep a specific error pattern in error log a fresh error log +# needs to be generated. +--source include/force_restart.inc --source include/master-slave.inc --source include/have_binlog_format_statement.inc --source include/only_mts_slave_parallel_workers.inc @@ -54,5 +57,19 @@ DROP TABLE t; --source include/sync_slave_sql_with_master.inc +# Bug#21198611: MULTI-THREADED SLAVE LOG SPAMMING ON FAILURE +# When a multi-threaded slave stops with an error, the same error message is +# printed three times. + +# Steps that are executed above ensure that MTS slave stops with an error. +# Following lines check that "The slave coordinator and worker threads are +# stopped..." error message is printed only once in the error log. + +--let $expected_errno= convert_error(ER_MTS_INCONSISTENT_DATA) +--replace_result $expected_errno ER_MTS_INCONSISTENT_DATA +--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]+/--TIME--/ +--let GREP_FILE=$MYSQLTEST_VARDIR/tmp/slave.err +--let GREP_PATTERN=The slave coordinator and worker threads are stopped +--source extra/rpl_tests/grep_pattern.inc --source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_img_sanity.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_img_sanity.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_img_sanity.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_img_sanity.test 2016-08-26 11:22:35.000000000 +0000 @@ -806,10 +806,73 @@ source include/wait_for_slave_sql_error.inc; DROP TABLE t; --let $rpl_only_running_threads= 1 + +# ==== Purpose ==== +# +# Check that when binlog_row_image= FULL 'UPDATE' query should not using +# temporary if the PRIMARY KEY not being modified as part of the query. +# +# ==== Implementation ==== +# +# Set binlog_row_image= FULL. Create a table which has both a primary key and +# a regular int field which is not a key. Execute an UPDATE statement in such +# a way that it doesn't update the primary key field. See the 'EXPLAIN' output +# it should not use a temporary table. Repeat the same test in case of +# binlog_row_image= NOBLOB as well. No temporary table should be used in this +# case as well. +# +# ==== References ==== +# +# Bug#22510353: UNNECESSARY USING TEMPORARY FOR UPDATE +# +############################################################################### -- source include/rpl_reset.inc +-- connection master +-- let $row_img_set=master:FULL:N,slave:FULL:Y +-- source include/rpl_row_img_set.inc +CREATE TABLE t1(id INT PRIMARY KEY, a INT) ENGINE = INNODB; -## CLEAN UP +--source include/sync_slave_sql_with_master.inc + +-- connection master +-- let $row_img_query= INSERT INTO t1 (id, a) VALUES (1, 1) +-- let $row_img_expected_master= | 1:1 2:1 +-- let $row_img_expected_slave = | 1:1 2:1 +-- source include/rpl_row_img_parts_master_slave.inc + +-- echo "Case: FULL - EXPLAIN output should not display Using temporary" +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; + +-- let $row_img_query= UPDATE t1 SET a=a+1 WHERE id < 2 +-- let $row_img_expected_master= 1:1 2:1 | 1:1 2:2 +-- let $row_img_expected_slave = 1:1 2:1 | 1:1 2:2 +-- source include/rpl_row_img_parts_master_slave.inc + +-- let $row_img_set=master:NOBLOB:N,slave:NOBLOB:Y +-- source include/rpl_row_img_set.inc +-- echo "Case: NOBLOB - EXPLAIN output should not display Using temporary" +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; + +-- let $row_img_query= UPDATE t1 SET a=a+1 WHERE id < 2 +-- let $row_img_expected_master= 1:1 2:2 | 1:1 2:3 +-- let $row_img_expected_slave = 1:1 2:2 | 1:1 2:3 +-- source include/rpl_row_img_parts_master_slave.inc + +-- let $row_img_set=master:MINIMAL:N,slave:MINIMAL:Y +-- source include/rpl_row_img_set.inc + +EXPLAIN UPDATE t1 SET a=a+1 WHERE id < 2; + +-- let $row_img_query= UPDATE t1 SET a=a+1 WHERE id < 2 +-- let $row_img_expected_master= 1:1 | 2:4 +-- let $row_img_expected_slave = 1:1 | 2:4 +-- source include/rpl_row_img_parts_master_slave.inc + +DROP TABLE t1; +--source include/sync_slave_sql_with_master.inc + +## CLEAN UP -- connection master SET GLOBAL binlog_row_image= @old_binlog_row_image; SET SESSION binlog_row_image= @old_binlog_row_image; diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_merge_engine.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_merge_engine.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_merge_engine.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_merge_engine.test 2016-08-26 11:22:35.000000000 +0000 @@ -20,8 +20,10 @@ CREATE TABLE t2 (a int) ENGINE=MyISAM; INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t2 VALUES (4), (5), (6); -CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; -ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); +# Changed a little to check also an issue reported on BUG#20574550 +CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1; +ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TABLE t1_merge LIKE tt1_merge; --source include/sync_slave_sql_with_master.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--slave-skip-errors=all --log_warnings=2 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_row_slave_skip_error_all.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,80 @@ +# ==== Purpose ==== +# +# Check that slave-skip-errors skips following errors like +# ER_SLAVE_CONVERSION_FAILED and ER_NO_SUCH_TABLE. +# +# ==== Implementation ==== +# On slave, set slave_skip_errors=all, so that slave skips all the errors that +# are reported during application of row based events. +# +# On master, create a table t with a varchar filed of length 25. On slave +# increase the varchar field width to 255, so that updates that are received +# from master will fail on slave with error ER_SLAVE_CONVERSION_FAILED. +# +# Secondly drop the table t on slave and try to the update the table from +# master. The updates will fail on slave with an error ER_NO_SUCH_TABLE. +# +# Verify that slave doesn't break inspite of these errors. +# ==== References ==== +# +# Bug#17653275:--SLAVE-SKIP-ERRORS WON'T SKIP MISSING DATABASE/TABLE +################################################################################ +--source include/have_debug.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +# On master create table t which contains a field named 'name' with length +# varchar(25). +CREATE TABLE t (name VARCHAR(25) DEFAULT NULL) ENGINE=InnoDB; +--source include/sync_slave_sql_with_master.inc + +# On slave alter the name field length to varchar(255). +call mtr.add_suppression("Slave SQL.*Error executing row event: .Table .test.t. doesn.t exist., Error_code: 1146"); +call mtr.add_suppression("Slave SQL.*Column 0 of table .test.t. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +call mtr.add_suppression("Got error 1 during COMMIT"); +ALTER TABLE t CHANGE name name VARCHAR(255); + +--source include/rpl_connection_master.inc +INSERT INTO t VALUE ('Amy'); +--echo # Sync should be successful. Slave should not stop with an error +--echo # ER_SLAVE_CONVERSION_FAILED. It should be up and running in spite +--echo # of errors as we have set slave_skip_error=all. +--source include/sync_slave_sql_with_master.inc + +# Drop the table t on slave. +DROP TABLE t; + +--source include/rpl_connection_master.inc +UPDATE t SET name='New'; +--echo # Sync should be successful. Slave should not stop with an error +--echo # ER_NO_SUCH_TABLE. It should be up and running in spite of errors +--echo # as we have set slave_skip_error=all. +--source include/sync_slave_sql_with_master.inc + +--echo # Enable a debug point to simulate failure during rows event cleanup. +--let $debug_saved= `SELECT @@GLOBAL.DEBUG` +SET @@GLOBAL.DEBUG= 'd,simulate_rows_event_cleanup_failure'; + +--source include/rpl_connection_master.inc +UPDATE t SET name='Old'; +--source include/rpl_connection_slave.inc +--echo # Since this is not an ignored error slave should stop. We only ignore the +--echo # errors that are generated during the execution of an event. The other errors +--echo # that are generated during commit/rollback failure, which takes place during cleanup +--echo # cannot be ignored. +--let $slave_sql_errno= convert_error(ER_ERROR_DURING_COMMIT); +--source include/wait_for_slave_sql_error.inc +--echo ==== Clean up ==== +SET @@GLOBAL.DEBUG= '$debug_saved'; +--source include/stop_slave_io.inc +RESET MASTER; +RESET SLAVE; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +DROP TABLE t; +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock.test 2016-08-26 11:22:35.000000000 +0000 @@ -18,6 +18,7 @@ --let $connections= 11 --let $loops= 500 +--let $error_simulation= 0 --echo # Disable diff_table test --let $enable_diff_table= 0 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_semi_sync_non_group_commit_deadlock.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_semi_sync_non_group_commit_deadlock.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_semi_sync_non_group_commit_deadlock.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_semi_sync_non_group_commit_deadlock.test 2016-08-26 11:22:35.000000000 +0000 @@ -19,6 +19,7 @@ --let $connections= 11 --let $loops= 500 +--let $error_simulation= 0 --echo # Disable diff_table test --let $enable_diff_table= 0 diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_server_uuid.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_server_uuid.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_server_uuid.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_server_uuid.test 2016-08-26 11:22:35.000000000 +0000 @@ -22,7 +22,7 @@ CALL mtr.add_suppression("Master's UUID has changed, although this should not happen unless you have changed it manually"); CALL mtr.add_suppression("Slave I/O: SET @master_heartbeat_period to master failed with error: Lost connection to MySQL server during query"); CALL mtr.add_suppression("Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error"); -CALL mtr.add_suppression("A slave with the same server_uuid as this slave has connected to the master"); +CALL mtr.add_suppression("A slave with the same server_uuid/server_id as this slave has connected to the master"); --let $uuid_file= auto.cnf @@ -299,7 +299,7 @@ --let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err # Assert only the occurrences after the last CHANGE MASTER --let $assert_only_after=CHANGE MASTER .* executed ---let $assert_select= Slave .* Got fatal error .* from master .* slave with the same server_uuid as this slave +--let $assert_select= Slave .* Got fatal error .* from master .* slave with the same server_uuid/server_id as this slave --let $assert_text= Found the expected line in server 2 error log --source include/assert_grep.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_sql_thread_error.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_sql_thread_error.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_sql_thread_error.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_sql_thread_error.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,53 @@ +############################################################################### +# +# Bug#21697821 RELAYLOG.LOG_LOCK IS NOT RELEASED IN +# AN ERROR CASE (IN NEXT_EVENT()) +# +# Problem: In an error case, relaylog.log_lock acquired by SQL thread is not +# released which is causing all threads, which are looking to acquire +# the lock, to hang forever. +# +# Steps to reproduce: +# +# 1) Inject sql thread error using a simulation point and start SQL thread. +# +# 2) Wait till SQL thread goes down (before fix, it wont release the log_lock). +# +# 3) start SQL thread (before fix, it will wait for log_lock) +# +# 4) After the fix, make sure the replication is working fine. +# +############################################################################### + +--source include/have_debug.inc +--source include/have_binlog_format_statement.inc +--let rpl_skip_start_slave=1 +--source include/master-slave.inc + +# Step 1) Set a simulation on Slave SQL thread so that it enters +# into faulty code (before fix) path. +--source include/rpl_connection_slave.inc +CALL mtr.add_suppression("Relay log read failure"); +SET @save_debug=@@GLOBAL.debug; +SET GLOBAL debug="d,force_sql_thread_error"; + +# Start SQL thread +START SLAVE SQL_THREAD; + +# Step 2) Wait for SQL thread to go down with the injected error. +# Before fix, SQL thread would not have released +# relay_log.log_lock. +--source include/wait_for_slave_sql_to_stop.inc + +# Step 3) Before fix, when SQL thread is trying to acquire +# relay_log.log_lock which was not released will hang +# forever. +SET GLOBAL debug=@save_debug; +--source include/start_slave.inc + +# Step 4) Execute dummy statements on master and see that it +# replication is working fine. +--source include/rpl_connection_master.inc +CREATE TABLE t1(i INT); +DROP TABLE t1; +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error-slave.opt mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error-slave.opt --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error-slave.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error-slave.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,2 @@ +--no-console +--log-error=$MYSQLTEST_VARDIR/tmp/slave_log.err diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_stop_slave_threads_error.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,60 @@ +################################################################################ +# +# BUG#22305605 STOP SLAVE IO THREAD PRINTS WRONG LOST CONNECTION MESSAGE +# IN ERROR LOG FILE. + +# Problem: +# STOP SLAVE IO_THREAD closes socket communication between Master and Slave. +# This prints an ERROR message in the error log +# [ERROR] Error reading packet from server: Lost connection to MySQL server +# during query (server_errno=2013). +# Here the socket closed intentionally by the DBA using command 'STOP SLAVE IO_THREAD'. +# Hence no need to print the message [ERROR] that says "Lost connection" which will +# confusion the users/DBAs. + +# Steps to Reproduce: +# 1) Execute some dummy statements to make sure replication is working fine. +# 2) Stop I/O thread and see that there is no panic message printed in log file. +# 3) Stop SQL thread and see that there is no panic message printed in log file. +# 4) Stop both I/O and SQL threads and see that there is no panic message printed +# in log file. +# +################################################################################ + +--source include/master-slave.inc + +# Execute dummy statements on Master and sync with Slave. +CREATE TABLE t1(i INT); +DROP TABLE t1; +--source include/sync_slave_sql_with_master.inc + +# Case:1 Stop and Start slave IO thread +--source include/stop_slave_io.inc +--source include/start_slave_io.inc + +# Make sure that there is no "Lost connection" error found in error log file +--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/slave_log.err +--let SEARCH_PATTERN=Lost connection to MySQL server during query +--source include/search_pattern.inc + +# Case:2 Stop and Start slave SQL thread +--source include/stop_slave_sql.inc +--source include/start_slave_sql.inc + +# Make sure that there is no "Lost connection" error found in error log file +--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/slave_log.err +--let SEARCH_PATTERN=Lost connection to MySQL server during query +--source include/search_pattern.inc + +# Case:3 Stop and start slave IO and SQL thread +--source include/stop_slave.inc +--source include/start_slave.inc + +# Make sure that there is no "Lost connection" error found in error log file +--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/slave_log.err +--let SEARCH_PATTERN=Lost connection to MySQL server during query +--source include/search_pattern.inc + +--remove_file $MYSQLTEST_VARDIR/tmp/slave_log.err +--source include/rpl_end.inc + diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test 2016-08-26 11:22:35.000000000 +0000 @@ -166,4 +166,55 @@ DROP EVENT e2; DROP TABLE t1, t2; +--sync_slave_with_master +# +# BUG#20574550 +# CREATE TABLE LIKE does not preserve original table storage +# engine when using row based replication +# +--connection master + +# Define temp_t1 and temp_t2 storage engines +--let $engine_temp_t1= InnoDB +--let $engine_temp_t2= MyISAM + +# Create the two temporary tables +--eval CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=$engine_temp_t1 +--eval CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=$engine_temp_t2 + +# Create t1 and t2 based on temporary tables +CREATE TABLE t1 LIKE temp_t1; +CREATE TABLE t2 LIKE temp_t2; +--sync_slave_with_master + +# On master +--connection master +# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2 +--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1) +--let $assert_cond= "$engine_t1" = "$engine_temp_t1" +--let $assert_text= "t1 on master and temp_t1 have the same storage engine" +--source include/assert.inc + +--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1) +--let $assert_cond= "$engine_t2" = "$engine_temp_t2" +--let $assert_text= "t2 on master and temp_t2 have the same storage engine" +--source include/assert.inc + +# On slave +--connection slave +# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2 +--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1) +--let $assert_cond= "$engine_t1" = "$engine_temp_t1" +--let $assert_text= "t1 on slave and temp_t1 have the same storage engine" +--source include/assert.inc + +--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1) +--let $assert_cond= "$engine_t2" = "$engine_temp_t2" +--let $assert_text= "t2 on slave and temp_t2 have the same storage engine" +--source include/assert.inc + +# Cleanup +--connection master +DROP TEMPORARY TABLE temp_t1, temp_t2; +DROP TABLE t1, t2; --source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_unsafe_statements.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_unsafe_statements.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_unsafe_statements.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_unsafe_statements.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,175 @@ +################################################################################ +# Bug#17047208 REPLICATION DIFFERENCE FOR MULTIPLE TRIGGERS +# Problem: If DML invokes a trigger or a stored function that inserts into an +# AUTO_INCREMENT column, that DML has to be marked as 'unsafe' statement. If the +# tables are locked in the transaction prior to DML statement (using LOCK +# TABLES), then the DML statement is not marked as 'unsafe' statement. + +# Steps to reproduce the reported test case (BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS) +# Case-1: +# > Create a trigger on a table and do a insert in the trigger that updates +# auto increment column +# > A DML that executes the trigger in step.1 and check that DML is marked +# as unsafe and DML is written into binlog using row format (in MBR) +# > Execute the step 2 by locking the required tables prior to DML and check +# that DML is marked as unsafe and DML is written into binlog using row +# format (in MBR) +# +# This test script also adds test cases to cover few other unsafe statements. +# Case-2: BINLOG_STMT_UNSAFE_WRITE_AUTOINC_SELECT +# Case-3: BINLOG_STMT_UNSAFE_AUTOINC_NOT_FIRST +# Case-4: BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS +################################################################################ + +--source include/have_binlog_format_mixed.inc +--source include/master-slave.inc + +# Case-1: BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS +# Statement is unsafe because it invokes a trigger or a +# stored function that inserts into an AUTO_INCREMENT column. + +# Step-1.1: Create two tables, one with AUTO_INCREMENT column. +CREATE TABLE t1(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; +CREATE TABLE t2(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; + +# Step-1.2: Create a trigger that inserts into an AUTO_INCREMENT column. +CREATE TRIGGER trig1 AFTER INSERT ON t1 +FOR EACH ROW + INSERT INTO t2(i) VALUES(new.i); + +# Step-1.3: Create some gap in auto increment value on master's t2 table +# but not on slave (by doing rollback). Just in case if the unsafe statements +# are written in statement format, diff tables will fail. +START TRANSACTION; +INSERT INTO t2(i) VALUES (1); +ROLLBACK; + +# Step-1.4: Insert a tuple into table t1 that triggers trig1 which inserts +# into an AUTO_INCREMENT column. +INSERT INTO t1(i) VALUES(2); + +# Step-1.5: Repeat step 1.4 but using 'LOCK TABLES' logic. +START TRANSACTION; +LOCK TABLES t1 WRITE, t2 WRITE; +INSERT INTO t1(i) VALUES(3); +UNLOCK TABLES; +COMMIT; + +# Step-1.6: Sync slave with master +--sync_slave_with_master + +# Step-1.7: Diff master-slave tables to make sure everything is in sync. +--let $diff_tables=master:t1, slave:t1 +--source include/diff_tables.inc + +--let $diff_tables=master:t2, slave:t2 +--source include/diff_tables.inc + +# Step-1.8: Cleanup +--connection master +DROP TABLE t1,t2; + +# Case-2: BINLOG_STMT_UNSAFE_WRITE_AUTOINC_SELECT +# Statements writing to a table with an auto-increment column after selecting +# from another table are unsafe because the order in which rows are retrieved +# determines what (if any) rows will be written. This order cannot be +# predicted and may differ on master and the slave. + +# Step-2.1: Create two tables, one with AUTO_INCREMENT column. +CREATE TABLE t1(i INT) ENGINE=INNODB; +CREATE TABLE t2(id INT AUTO_INCREMENT, i INT, PRIMARY KEY (id)) ENGINE=INNODB; + +# Step-2.2: Create some tuples in table t1. +INSERT INTO t1 values (1), (2), (3); + +# Step-2.3: Create some gap in auto increment value on master's t2 table +# but not on slave (by doing rollback). Just in case if the unsafe statements +# are written in statement format, diff tables will fail. +START TRANSACTION; +INSERT INTO t2(i) VALUES (1); +ROLLBACK; + +# Step-2.4: Insert into t2 (table with an auto-increment) by selecting tuples +# from table t1. +INSERT INTO t2(i) SELECT i FROM t1; + +# Step-2.5: Repeat step 2.4 but now with 'LOCK TABLES' logic. +START TRANSACTION; +LOCK TABLES t2 WRITE, t1 READ; +INSERT INTO t2(i) SELECT i FROM t1; +UNLOCK TABLES; +COMMIT; + +# Step-2.6: Sync slave with master +--sync_slave_with_master + +# Step-2.7: Diff master-slave tables to make sure everything is in sync. +--let $diff_tables=master:t1, slave:t1 +--source include/diff_tables.inc + +--let $diff_tables=master:t2, slave:t2 +--source include/diff_tables.inc + +# Step-2.8: Cleanup +--connection master +DROP TABLE t1,t2; + +# Case-3: BINLOG_STMT_UNSAFE_AUTOINC_NOT_FIRST +# INSERT into autoincrement field which is not the first part in the +# composed primary key is unsafe +# +# Step-3.1: Create a table with auto increment column and a composed primary key +# (second column is auto increment column). Such a definition is allowed only +# with 'myisam' engine. +CREATE TABLE t1(i int, id INT AUTO_INCREMENT, PRIMARY KEY (i, id)) ENGINE=MYISAM; + +# Step-3.2: Inserting into such a table is unsafe. +INSERT INTO t1 (i) values (1); + +# Step-3.3: Repeat step 3.2, now with 'LOCK TABLES' logic. +START TRANSACTION; +LOCK TABLES t1 WRITE; +INSERT INTO t1 (i) values (2); +UNLOCK TABLES; +COMMIT; + +# Step-3.4: Sync slave with master +--sync_slave_with_master + +# Step-3.5: Diff master-slave tables to make sure everything is in sync. +--let $diff_tables=master:t1, slave:t1 +--source include/diff_tables.inc + +# Step-3.6: Cleanup +--connection master +DROP TABLE t1; + +# Case-4: BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS +# INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY +# is unsafe Statement + +# Step-4.1: Create a table with two unique keys +CREATE TABLE t1(i INT, j INT, UNIQUE KEY(i), UNIQUE KEY(j)) ENGINE=INNODB; + +# Step-4.2: Inserting into such a table is unsafe. +INSERT INTO t1 (i,j) VALUES (1,2) ON DUPLICATE KEY UPDATE j=j+1; + +# Step-4.3: Repeat step 3.2, now with 'LOCK TABLES' logic. +START TRANSACTION; +LOCK TABLES t1 WRITE; +INSERT INTO t1 (i,j) VALUES (1,2) ON DUPLICATE KEY UPDATE j=j+1; +UNLOCK TABLES; +COMMIT; + +# Step-4.4: Sync slave with master +--sync_slave_with_master + +# Step-4.5: Diff master-slave tables to make sure everything is in sync. +--let $diff_tables=master:t1, slave:t1 +--source include/diff_tables.inc + +# Step-4.6: Cleanup +--connection master +DROP TABLE t1; + +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_zombie_dump_threads.test mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_zombie_dump_threads.test --- mysql-5.6-5.6.27/mysql-test/suite/rpl/t/rpl_zombie_dump_threads.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/rpl/t/rpl_zombie_dump_threads.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,59 @@ +############################################################################### +# Bug#21179199 ZOMBIE DUMP THREADS ARE NOT DISCONNECTED, +# CAN ALSO LEAD TO A CRASH +# +# Problem: Zombie dump threads on Master (>= MySQL-5.6 version) +# that are created to server slaves which are on lower +# versions than MySQL-5.6 version are not getting killed. +# Steps to reproduce: +# +# 1) A simulation point on slave to fake that server MySQL version is lower +# than MySQL-5.6 (i.e., no slave_uuid set in initial replication protocol) +# +# 2) Start IO thread on Slave which will start a dump thread on Master. +# +# 3) Restart the IO thread (Master should kill existing dump thread before +# starting a new dump thread) +# +# 4) Now count the number of dump threads on Master, it should be only '1'. +# +############################################################################### +--source include/have_debug.inc +--source include/have_binlog_format_statement.inc +--let rpl_skip_start_slave= 1 +--source include/master-slave.inc + +# When this test script is running in combination with other tests, +# it is possible that dump threads from those tests are not killed. +# (rpl_end.inc does not kill dump threads). +# Hence doing the cleanup here as this test depends on counting the +# active dump threads. +--source include/stop_dump_threads.inc + +# Step-1) A simulation point on slave to fake that server MySQL version +# is lower than MySQL-5.6 (i.e., no slave_uuid set in initial replication +# protocol). +--source include/rpl_connection_slave.inc +SET @save_debug = @@GLOBAL.debug; +SET GLOBAL debug="d,fake_5_5_version_slave"; + +# Step-2) Start IO thread on Slave which will start a dump thread on Master. +--source include/start_slave_io.inc + +# Step-3) Restart the IO thread (Master should kill existing dump thread before +# starting a new dump thread) +--source include/stop_slave_io.inc +--source include/start_slave_io.inc + +# Step-4) Count the number of dump threads on Master, it should be eventually +# become '1'. +--source include/rpl_connection_master.inc +--let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE COMMAND LIKE 'Binlog Dump%' +--source include/wait_condition.inc + +# Cleanup +--source include/rpl_connection_slave.inc +SET GLOBAL debug=@save_debug; +# We do not care about SQL thread for this test scenario +--let $rpl_only_running_threads= 1 +--source include/rpl_end.inc diff -Nru mysql-5.6-5.6.27/mysql-test/suite/sys_vars/r/innodb_tmpdir_basic.result mysql-5.6-5.6.33/mysql-test/suite/sys_vars/r/innodb_tmpdir_basic.result --- mysql-5.6-5.6.27/mysql-test/suite/sys_vars/r/innodb_tmpdir_basic.result 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/sys_vars/r/innodb_tmpdir_basic.result 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,35 @@ +SET @start_global_value = @@global.innodb_tmpdir; +SELECT @start_global_value; +@start_global_value +NULL +select @@session.innodb_tmpdir; +@@session.innodb_tmpdir +NULL +show global variables like 'innodb_tmpdir'; +Variable_name Value +innodb_tmpdir +show session variables like 'innodb_tmpdir'; +Variable_name Value +innodb_tmpdir +select * from information_schema.global_variables where variable_name='innodb_tmpdir'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_TMPDIR +select * from information_schema.session_variables where variable_name='innodb_tmpdir'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_TMPDIR +set global innodb_tmpdir=@@global.tmpdir; +set session innodb_tmpdir=@@global.tmpdir; +set global innodb_tmpdir=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_tmpdir' +set global innodb_tmpdir=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_tmpdir' +set global innodb_tmpdir=repeat('a',1000); +ERROR 42000: Variable 'innodb_tmpdir' can't be set to the value of 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +show warnings; +Level Code Message +Warning 1210 Path length should not exceed 512 bytes +Error 1231 Variable 'innodb_tmpdir' can't be set to the value of 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +SET @@global.innodb_tmpdir = @start_global_value; +SELECT @@global.innodb_tmpdir; +@@global.innodb_tmpdir +NULL diff -Nru mysql-5.6-5.6.27/mysql-test/suite/sys_vars/t/innodb_tmpdir_basic.test mysql-5.6-5.6.33/mysql-test/suite/sys_vars/t/innodb_tmpdir_basic.test --- mysql-5.6-5.6.27/mysql-test/suite/sys_vars/t/innodb_tmpdir_basic.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/suite/sys_vars/t/innodb_tmpdir_basic.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,43 @@ +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_tmpdir; +SELECT @start_global_value; + +# +# exists as global and session +# +select @@session.innodb_tmpdir; + +show global variables like 'innodb_tmpdir'; +show session variables like 'innodb_tmpdir'; + +select * from information_schema.global_variables where variable_name='innodb_tmpdir'; +select * from information_schema.session_variables where variable_name='innodb_tmpdir'; +# +# Show that it is writable +# + +set global innodb_tmpdir=@@global.tmpdir; +set session innodb_tmpdir=@@global.tmpdir; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_tmpdir=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_tmpdir=1e1; + +# +# path len more than 512 +# +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_tmpdir=repeat('a',1000); +show warnings; + +# +# Cleanup +# + +SET @@global.innodb_tmpdir = @start_global_value; +SELECT @@global.innodb_tmpdir; diff -Nru mysql-5.6-5.6.27/mysql-test/t/alter_table.test mysql-5.6-5.6.33/mysql-test/t/alter_table.test --- mysql-5.6-5.6.27/mysql-test/t/alter_table.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/alter_table.test 2016-08-26 11:22:35.000000000 +0000 @@ -2069,3 +2069,53 @@ --echo #Cleanup SET @@session.show_old_temporals= @save_show_old_temporals; DROP TABLE t1, t2; + + +--echo # +--echo # Bug#21345391: ALTER TABLE ... CONVERT TO CHARACTER SET NOT EFFECT +--echo # AND REMAIN A TEMP TABLE + +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE = INNODB CHARACTER SET gbk; +ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8, ALGORITHM = INPLACE; + +--echo # Without fix, the CHARSET SET for table remains gbk. +SHOW CREATE TABLE t1; + +let $test_dir = + `SELECT CONCAT(variable_value, 'test/') FROM + INFORMATION_SCHEMA.GLOBAL_VARIABLES + WHERE LOWER(variable_name) = 'datadir'`; + +--echo # Without fix, the temporary .frm file is not cleaned up. +--list_files $test_dir `#sql-*.frm` + +DROP TABLE t1; + +--echo # Test cases added for coverage. + +--echo # Reports an error for tables containing datatypes supporting +--echo # characters. + +CREATE TABLE t1 (fld1 CHAR(10) PRIMARY KEY) ENGINE = INNODB CHARACTER SET gbk; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8, ALGORITHM = INPLACE; + +DROP TABLE t1; + +--echo # ALTER TABLE, CHARACTER SET operation. + +CREATE TABLE t1 (fld1 INT PRIMARY KEY, fld2 CHAR(10)) ENGINE = INNODB +CHARACTER SET gbk; +ALTER TABLE t1 CHARACTER SET UTF8, ALGORITHM = INPLACE; + +SHOW CREATE TABLE t1; + +let $test_dir = + `SELECT CONCAT(variable_value, 'test/') FROM + INFORMATION_SCHEMA.GLOBAL_VARIABLES + WHERE LOWER(variable_name) = 'datadir'`; + +--list_files $test_dir `#sql-*.frm` + +DROP TABLE t1; diff -Nru mysql-5.6-5.6.27/mysql-test/t/connect_debug.test mysql-5.6-5.6.33/mysql-test/t/connect_debug.test --- mysql-5.6-5.6.27/mysql-test/t/connect_debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/connect_debug.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,80 @@ + +# This test makes no sense with the embedded server +--source include/not_embedded.inc + +--source include/have_debug_sync.inc + +# Save the initial number of concurrent sessions +--source include/count_sessions.inc + +--echo +--echo # -- Bug#20201006: Spamming show processlist prevents old connection +--echo # -- threads from cleaning up. + +--enable_connect_log +SET @saved_max_connections = @@global.max_connections; +SET GLOBAL max_connections = 2; + +--echo +--echo # -- Check that we allow only max_connections + 1 connections here +--connect (con_1, localhost, root) +--connect (con_2, localhost, root) +--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK +--error ER_CON_COUNT_ERROR +--connect (con_3, localhost, root) + +--echo +--echo # -- Ensure we have max_connections + 1 connections. +SELECT count(*)= @@global.max_connections + 1 FROM information_schema.processlist; + +--echo +--echo # -- Take LOCK_thd_remove and close one connection then +--echo # attempt new one [should fail]... +SET DEBUG_SYNC='fill_schema_processlist_after_copying_threads SIGNAL disconnect_connection WAIT_FOR continue'; +--send SELECT user FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY user; + +--connection default +SET DEBUG_SYNC='now WAIT_FOR disconnect_connection'; +--disconnect con_1 + +--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK +--error ER_CON_COUNT_ERROR +--connect (con_3, localhost, root) + +--echo +--echo # -- Release the lock. Now new connection should go through +SET DEBUG_SYNC='now SIGNAL continue'; +--connection con_2 +reap; + +SET DEBUG_SYNC='RESET'; + +--echo +--echo # -- Waiting for connection to close... +let $wait_condition = + SELECT COUNT(*) = 2 + FROM information_schema.processlist; +--source include/wait_condition.inc + +--connect (con_3, localhost, root) + +--echo +--echo # -- Closing connections... +--disconnect con_3 +--disconnect con_2 +--source include/wait_until_disconnected.inc + +--connection default + +--echo +--echo # -- Resetting variables... +SET GLOBAL max_connections= @saved_max_connections; + +--disable_connect_log + +--echo +--echo # -- End of Bug#20201006. +--echo + +# Wait till all disconnects are completed +--source include/wait_until_count_sessions.inc diff -Nru mysql-5.6-5.6.27/mysql-test/t/enable_cleartext_plugin-master.opt mysql-5.6-5.6.33/mysql-test/t/enable_cleartext_plugin-master.opt --- mysql-5.6-5.6.27/mysql-test/t/enable_cleartext_plugin-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/enable_cleartext_plugin-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,2 @@ +$PLUGIN_AUTH_OPT +$PLUGIN_AUTH_LOAD diff -Nru mysql-5.6-5.6.27/mysql-test/t/enable_cleartext_plugin.test mysql-5.6-5.6.33/mysql-test/t/enable_cleartext_plugin.test --- mysql-5.6-5.6.27/mysql-test/t/enable_cleartext_plugin.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/enable_cleartext_plugin.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,65 @@ +--source include/have_plugin_auth.inc +--source include/not_embedded.inc + +--echo # +--echo # Bug #21235226 : THE --ENABLE-CLEARTEXT-PLUGIN IS NOT IMPLEMENTED +--echo # IN ALL CLIENT PROGRAMS +--echo # + +CREATE DATABASE db21235226; +USE db21235226; + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (2); +SELECT * FROM t1; + +CREATE USER uplain@localhost IDENTIFIED WITH 'cleartext_plugin_server' + AS 'cleartext_test'; + +GRANT ALL PRIVILEGES ON *.* TO uplain@localhost; + +#Reset the LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN variable. +let LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=N; + +#Scenario 1 : MYSQL_DUMP without --enable_cleartext_plugin +# Should get CR_AUTH_PLUGIN_CANNOT_LOAD error +--error 2 +--exec $MYSQL_DUMP --user=uplain --password=cleartext_test --tab=$MYSQLTEST_VARDIR/tmp/ db21235226 2>&1 + +#Scenario 2 : MYSQL_DUMP with --enable_cleartext_plugin +--exec $MYSQL_DUMP --enable_cleartext_plugin --user=uplain --password=cleartext_test --tab=$MYSQLTEST_VARDIR/tmp/ db21235226 +--exec $MYSQL --enable_cleartext_plugin --user=uplain --password=cleartext_test db21235226 < $MYSQLTEST_VARDIR/tmp/t1.sql +SELECT * FROM t1; + +#Scenario 3 : MYSQL_IMPORT without --enable_cleartext_plugin +# Should get CR_AUTH_PLUGIN_CANNOT_LOAD error +--replace_regex /.*mysqlimport(\.exe)*/mysqlimport/ +--error 1 +--exec $MYSQL_IMPORT --user=uplain --password=cleartext_test --silent db21235226 $MYSQLTEST_VARDIR/tmp/t1.txt 2>&1 + +#Scenario 4 : MYSQL_IMPORT with --enable_cleartext_plugin +--exec $MYSQL_IMPORT --enable_cleartext_plugin --user=uplain --password=cleartext_test --silent db21235226 $MYSQLTEST_VARDIR/tmp/t1.txt +SELECT * FROM t1; + +#Scenario 5 : MYSQL_SHOW without --enable_cleartext_plugin +# Should get CR_AUTH_PLUGIN_CANNOT_LOAD error +--replace_regex /.*mysqlshow(\.exe)*/mysqlshow/ +--error 1 +--exec $MYSQL_SHOW --user=uplain --password=cleartext_test db21235226 2>&1 + +#Scenario 6 : MYSQL_SHOW with --enable_cleartext_plugin +--exec $MYSQL_SHOW --enable_cleartext_plugin --user=uplain --password=cleartext_test db21235226 + +#Scenario 7 : MYSQL_CHECK without --enable_cleartext_plugin +# Should get CR_AUTH_PLUGIN_CANNOT_LOAD error +--replace_regex /.*mysqlcheck(\.exe)*/mysqlcheck/ +--error 2 +--exec $MYSQL_CHECK --user=uplain --password=cleartext_test db21235226 t1 2>&1 + +#Scenario 8 : MYSQL_CHECK with --enable_cleartext_plugin +--exec $MYSQL_CHECK --enable_cleartext_plugin --user=uplain --password=cleartext_test db21235226 t1 + +#Cleanup +DROP TABLE t1; +DROP DATABASE db21235226; +DROP USER uplain@localhost; diff -Nru mysql-5.6-5.6.27/mysql-test/t/events_1.test mysql-5.6-5.6.33/mysql-test/t/events_1.test --- mysql-5.6-5.6.27/mysql-test/t/events_1.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/events_1.test 2016-08-26 11:22:35.000000000 +0000 @@ -125,7 +125,7 @@ create table t_event3 (a int, b float); drop event if exists event3; -create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); +create event event3 on schedule every 50 + 10 minute starts date_add(curdate(), interval 5 minute) ends date_add(curdate(), interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand()); let $wait_condition=SELECT count(*)=0 from t_event3; --source include/wait_condition.inc select count(*) from t_event3; diff -Nru mysql-5.6-5.6.27/mysql-test/t/explain.test mysql-5.6-5.6.33/mysql-test/t/explain.test --- mysql-5.6-5.6.27/mysql-test/t/explain.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/explain.test 2016-08-26 11:22:35.000000000 +0000 @@ -400,3 +400,25 @@ --echo # End WL#4897 --echo End of 6.0 tests. + +--echo # +--echo # Bug #18899860: EXPLAIN .. SELECT .. FOR UPDATE TAKES LOCKS +--echo # + +CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=INNODB; +INSERT INTO t1 VALUES (1),(2),(3); +CONNECT (c1,localhost,root,,); +CONNECT (c2,localhost,root,,); +CONNECTION c1; +START TRANSACTION; +EXPLAIN SELECT * FROM t1 WHERE c1 = 1 FOR UPDATE; +CONNECTION c2; +START TRANSACTION; +EXPLAIN SELECT * FROM t1 WHERE c1 = 1 FOR UPDATE; +CONNECTION default; +DISCONNECT c1; +DISCONNECT c2; +DROP TABLE t1; + +--echo # End of test for Bug#18899860 + diff -Nru mysql-5.6-5.6.27/mysql-test/t/func_str.test mysql-5.6-5.6.33/mysql-test/t/func_str.test --- mysql-5.6-5.6.27/mysql-test/t/func_str.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/func_str.test 2016-08-26 11:22:35.000000000 +0000 @@ -1734,5 +1734,14 @@ DROP TABLE t1; --echo # +--echo # Bug#22888420 CONCAT_WS: ASSERTION FAILED: !S.USES_BUFFER_OWNED_BY(THIS) +--echo # + +do concat('a',concat_ws('a', 0x2859, 'a' , + trim(period_add('a',1) from (1&'')) + ) + ); + +--echo # --echo # End of 5.6 tests --echo # diff -Nru mysql-5.6-5.6.27/mysql-test/t/group_min_max.test mysql-5.6-5.6.33/mysql-test/t/group_min_max.test --- mysql-5.6-5.6.27/mysql-test/t/group_min_max.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/group_min_max.test 2016-08-26 11:22:35.000000000 +0000 @@ -1288,3 +1288,27 @@ SET end_markers_in_json=DEFAULT; DROP TABLE t; + +--echo # +--echo # Bug#18109609: LOOSE INDEX SCAN IS NOT USED WHEN IT SHOULD +--echo # + +CREATE TABLE t1 ( +id INT AUTO_INCREMENT PRIMARY KEY, +c1 INT, +c2 INT, +KEY(c1,c2)); + +INSERT INTO t1(c1,c2) VALUES +(1, 1), (1,2), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (4,3), +(4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (4,11), (4,12), (4,13), +(4,14), (4,15), (4,16), (4,17), (4,18), (4,19), (4,20),(5,5); + +EXPLAIN SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1; +FLUSH STATUS; +SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1; +SHOW SESSION STATUS LIKE 'Handler_read%'; + +DROP TABLE t1; + +--echo # End of test for Bug#18109609 diff -Nru mysql-5.6-5.6.27/mysql-test/t/innodb_explain_json_non_select_all.test mysql-5.6-5.6.33/mysql-test/t/innodb_explain_json_non_select_all.test --- mysql-5.6-5.6.27/mysql-test/t/innodb_explain_json_non_select_all.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/innodb_explain_json_non_select_all.test 2016-08-26 11:22:35.000000000 +0000 @@ -22,12 +22,10 @@ set session default_storage_engine = InnoDB; --let $innodb = 1 -# Next 2 variables control the JSON format output and validation in explain_utils. +# Next variable controls the JSON format output in explain_utils. # 1 = enable, 0 = disable --let $json = 1 -# Validation disabled due to not having Python with JSON on all PB machines. ---let $validation = 0 ---file_exists $MYSQL_TEST_DIR/suite/opt_trace/validate_json.py +--file_exists $MYSQL_TEST_DIR/suite/opt_trace/validate_json.pl --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/innodb_explain_json_non_select_none.test mysql-5.6-5.6.33/mysql-test/t/innodb_explain_json_non_select_none.test --- mysql-5.6-5.6.27/mysql-test/t/innodb_explain_json_non_select_none.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/innodb_explain_json_non_select_none.test 2016-08-26 11:22:35.000000000 +0000 @@ -30,11 +30,9 @@ set @save_storage_engine= @@session.default_storage_engine; set session default_storage_engine = InnoDB; --let $innodb = 1 -# Next 2 variables control the JSON format output and validation in explain_utils. +# Next variable controls the JSON format output in explain_utils. # 1 = enable, 0 = disable --let $json = 1 -# Validation disabled due to not having Python with JSON on all PB machines. ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/innodb_explain_non_select_all.test mysql-5.6-5.6.33/mysql-test/t/innodb_explain_non_select_all.test --- mysql-5.6-5.6.27/mysql-test/t/innodb_explain_non_select_all.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/innodb_explain_non_select_all.test 2016-08-26 11:22:35.000000000 +0000 @@ -20,9 +20,8 @@ set session default_storage_engine = InnoDB; --let $innodb = 1 -# json validation in explain_util.inc can be switched off by setting to zero. +# json format in explain_util.inc can be switched off by setting to zero. --let $json = 0 ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/innodb_explain_non_select_none.test mysql-5.6-5.6.33/mysql-test/t/innodb_explain_non_select_none.test --- mysql-5.6-5.6.27/mysql-test/t/innodb_explain_non_select_none.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/innodb_explain_non_select_none.test 2016-08-26 11:22:35.000000000 +0000 @@ -29,7 +29,6 @@ set session default_storage_engine = InnoDB; --let $innodb = 1 --let $json = 0 ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/insert.test mysql-5.6-5.6.33/mysql-test/t/insert.test --- mysql-5.6-5.6.27/mysql-test/t/insert.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/insert.test 2016-08-26 11:22:35.000000000 +0000 @@ -550,3 +550,66 @@ INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; DROP TABLE t1; + + +--echo # +--echo # BUG#22037930: INSERT IGNORE FAILS TO IGNORE +--echo # FOREIGN KEY CONSTRAINT + +--echo # Setup. +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB; +CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1)) +ENGINE=INNODB; +INSERT INTO t1 VALUES(0); +INSERT INTO t2 VALUES(0); + +--echo # Without fix, an error is reported. +--enable_warnings +INSERT IGNORE INTO t2 VALUES(1); +UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0; +UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0; + +--echo # Test for multi update. +UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3; +UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3; +--disable_warnings + +--echo # Reports an error since IGNORE is not used. +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO t2 VALUES(1); + +--error ER_NO_REFERENCED_ROW_2 +UPDATE t2 SET fld2=20 WHERE fld2=0; + +--error ER_ROW_IS_REFERENCED_2 +UPDATE t1 SET fld1=20 WHERE fld1=0; + +--error ER_NO_REFERENCED_ROW_2 +UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3; + +--error ER_ROW_IS_REFERENCED_2 +UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; + +DROP TABLE t2, t1; + + +--echo # +--echo # BUG#22037930: INSERT IGNORE FAILS TO IGNORE FOREIGN +--echo # KEY CONSTRAINT + +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= INNODB; + +CREATE TABLE t2 (fld1 VARCHAR(10), fld2 INT NOT NULL, +CONSTRAINT fk FOREIGN KEY (fld2) REFERENCES t1(fld1)) ENGINE= INNODB; + +--echo # Without patch, reports incorrect error. +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +--error ER_NO_REFERENCED_ROW_2 +REPLACE INTO t2 VALUES('abc', 2); + +--enable_warnings +INSERT IGNORE INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +--disable_warnings + +DROP TABLE t2, t1; diff -Nru mysql-5.6-5.6.27/mysql-test/t/loaddata.test mysql-5.6-5.6.33/mysql-test/t/loaddata.test --- mysql-5.6-5.6.27/mysql-test/t/loaddata.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/loaddata.test 2016-08-26 11:22:35.000000000 +0000 @@ -610,7 +610,7 @@ --echo # CREATE TABLE t1(f1 INT); -EVAL SELECT 0xE1BB30 INTO OUTFILE 't1.dat'; +EVAL SELECT 0xE1C330 INTO OUTFILE 't1.dat'; --disable_warnings LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8; --enable_warnings @@ -656,3 +656,26 @@ --remove_file $MYSQLTEST_VARDIR/mysql DROP TABLE t1; +--echo +--echo # +--echo # Bug#23080148 - Backport of Bug#20683959. +--echo # Bug#20683959 LOAD DATA INFILE IGNORES A SPECIFIC ROW SILENTLY +--echo # UNDER DB CHARSET IS UTF8. +--echo # + +CREATE DATABASE d1 CHARSET latin1; +USE d1; +CREATE TABLE t1 (val TEXT); +LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1; +SELECT COUNT(*) FROM t1; +SELECT HEX(val) FROM t1; + +CREATE DATABASE d2 CHARSET utf8; +USE d2; +CREATE TABLE t1 (val TEXT); +--error ER_INVALID_CHARACTER_STRING +LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1; + +DROP TABLE d1.t1, d2.t1; +DROP DATABASE d1; +DROP DATABASE d2; diff -Nru mysql-5.6-5.6.27/mysql-test/t/myisam_explain_json_non_select_all.test mysql-5.6-5.6.33/mysql-test/t/myisam_explain_json_non_select_all.test --- mysql-5.6-5.6.27/mysql-test/t/myisam_explain_json_non_select_all.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/myisam_explain_json_non_select_all.test 2016-08-26 11:22:35.000000000 +0000 @@ -15,11 +15,9 @@ set @save_storage_engine= @@session.default_storage_engine; set session default_storage_engine = MyISAM; -# Next 2 variables control the JSON format output and validation in explain_utils. +# Next variable controls the JSON format output in explain_utils. # 1 = enable, 0 = disable --let $json = 1 -# Validation disabled due to not having Python with JSON on all PB machines. ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/myisam_explain_json_non_select_none.test mysql-5.6-5.6.33/mysql-test/t/myisam_explain_json_non_select_none.test --- mysql-5.6-5.6.27/mysql-test/t/myisam_explain_json_non_select_none.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/myisam_explain_json_non_select_none.test 2016-08-26 11:22:35.000000000 +0000 @@ -25,11 +25,9 @@ set @save_storage_engine= @@session.default_storage_engine; set session default_storage_engine = MyISAM; -# Next 2 variables control the JSON format output and validation in explain_utils. +# Next variable controls the JSON format output in explain_utils. # 1 = enable, 0 = disable --let $json = 1 -# Validation disabled due to not having Python with JSON on all PB machines. ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/myisam_explain_non_select_all.test mysql-5.6-5.6.33/mysql-test/t/myisam_explain_non_select_all.test --- mysql-5.6-5.6.27/mysql-test/t/myisam_explain_non_select_all.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/myisam_explain_non_select_all.test 2016-08-26 11:22:35.000000000 +0000 @@ -14,7 +14,6 @@ set @save_storage_engine= @@session.default_storage_engine; set session default_storage_engine = MyISAM; --let $json = 0 ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/myisam_explain_non_select_none.test mysql-5.6-5.6.33/mysql-test/t/myisam_explain_non_select_none.test --- mysql-5.6-5.6.27/mysql-test/t/myisam_explain_non_select_none.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/myisam_explain_non_select_none.test 2016-08-26 11:22:35.000000000 +0000 @@ -24,7 +24,6 @@ set @save_storage_engine= @@session.default_storage_engine; set session default_storage_engine = MyISAM; --let $json = 0 ---let $validation = 0 --source include/explain_non_select.inc set default_storage_engine= @save_storage_engine; diff -Nru mysql-5.6-5.6.27/mysql-test/t/mysqlbinlog.test mysql-5.6-5.6.33/mysql-test/t/mysqlbinlog.test --- mysql-5.6-5.6.27/mysql-test/t/mysqlbinlog.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/mysqlbinlog.test 2016-08-26 11:22:35.000000000 +0000 @@ -374,7 +374,7 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SELECT (@a:=LOAD_FILE("$binlog_file")) -IS NOT NULL; +IS NOT NULL AS Loaded; let $s_id_unsigned= `SELECT @a LIKE "%server id $s_id_max%" /* must return 1 */`; echo *** Unsigned server_id $s_id_max is found: $s_id_unsigned ***; diff -Nru mysql-5.6-5.6.27/mysql-test/t/mysql_client_test_qcache-master.opt mysql-5.6-5.6.33/mysql-test/t/mysql_client_test_qcache-master.opt --- mysql-5.6-5.6.27/mysql-test/t/mysql_client_test_qcache-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/mysql_client_test_qcache-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--query_cache_type=1 diff -Nru mysql-5.6-5.6.27/mysql-test/t/mysql_client_test_qcache.test mysql-5.6-5.6.33/mysql-test/t/mysql_client_test_qcache.test --- mysql-5.6-5.6.27/mysql-test/t/mysql_client_test_qcache.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/mysql_client_test_qcache.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# This test should work in embedded server after we fix mysqltest +-- source include/not_embedded.inc + +--echo # Bug#22559575 "the statement (1) has no open cursor" pops sometimes with +--echo # prepared+query_cache +--echo # +--echo # Create relevent tables and call C API test cases +--echo # Setup + +select VARIABLE_VALUE into @qcache_hit_val1 from + information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Qcache_hits'; + +--echo +--echo #Run C_API test case +--exec echo "$MYSQL_CLIENT_TEST --silent test_bug22559575" > $MYSQLTEST_VARDIR/log/mysql_client_test_qcache.out.log 2>&1 +--exec $MYSQL_CLIENT_TEST --silent test_bug22559575 >> $MYSQLTEST_VARDIR/log/mysql_client_test_qcache.out.log 2>&1 + +select VARIABLE_VALUE into @qcache_hit_val2 from + information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Qcache_hits'; +SELECT @qcache_hit_val2 - @qcache_hit_val1; + diff -Nru mysql-5.6-5.6.27/mysql-test/t/mysqltest.test mysql-5.6-5.6.33/mysql-test/t/mysqltest.test --- mysql-5.6-5.6.27/mysql-test/t/mysqltest.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/mysqltest.test 2016-08-26 11:22:35.000000000 +0000 @@ -710,6 +710,18 @@ --error 1 --exec echo "--error 1,2,3,4,5,6,7,8,9,10,11" | $MYSQL_TEST 2>&1 +# BUG#13687542 MTR BEHAVES WRONG WHEN EXECUTING 'ERROR $VAR' IN A LOOP +--let $i= 0 +--let $error= 0 +while ($i < 3) +{ + --error $error + CREATE TABLE t1 (a INT); + --let $error= 1050 + --inc $i +} + +DROP TABLE t1; # ---------------------------------------------------------------------------- # Test echo command diff -Nru mysql-5.6-5.6.27/mysql-test/t/mysql_upgrade.test mysql-5.6-5.6.33/mysql-test/t/mysql_upgrade.test --- mysql-5.6-5.6.27/mysql-test/t/mysql_upgrade.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/mysql_upgrade.test 2016-08-26 11:22:35.000000000 +0000 @@ -202,5 +202,14 @@ DROP USER B20023823_41hash@localhost; DROP USER B20023823_16hash@localhost; + +--echo # +--echo # Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR +--echo # + +--echo Run mysql_upgrade with unauthorized access +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose --user=root --password=wrong_password 2>&1 + --echo --echo End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/t/partition_innodb.test mysql-5.6-5.6.33/mysql-test/t/partition_innodb.test --- mysql-5.6-5.6.27/mysql-test/t/partition_innodb.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/partition_innodb.test 2016-08-26 11:22:35.000000000 +0000 @@ -885,3 +885,57 @@ CREATE_TIME IS NOT NULL AND TABLE_NAME='t1'; DROP TABLE t1; + +--echo # +--echo # Bug#20160327 OPTIMIZE TABLE REMOVES THE DATA DIRECTORY IN PARTITIONS +--echo # + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE `t1` ( + `f1` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `f2` MEDIUMTEXT NOT NULL, + `f3` CHAR(100) NOT NULL, + `f4` TINYINT(1) unsigned NOT NULL, + PRIMARY KEY (`f1`,`f4`) + ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1 + PARTITION BY LIST (`f4`) + (PARTITION p0 VALUES IN (0) ENGINE = InnoDB, + PARTITION p1 VALUES IN (1) DATA DIRECTORY = '$MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB); + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; + +OPTIMIZE TABLE t1; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +--list_files $MYSQL_TMP_DIR/temp_dir/test + +ALTER TABLE t1 OPTIMIZE PARTITION p0; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +--list_files $MYSQL_TMP_DIR/temp_dir/test + +ALTER TABLE t1 OPTIMIZE PARTITION p1; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +--list_files $MYSQL_TMP_DIR/temp_dir/test + +ALTER TABLE t1 REBUILD PARTITION ALL; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +--list_files $MYSQL_TMP_DIR/temp_dir/test + +ALTER TABLE t1 ADD extracol VARCHAR(32) NULL; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +--list_files $MYSQL_TMP_DIR/temp_dir/test + +DROP TABLE t1; + +--rmdir $MYSQL_TMP_DIR/temp_dir/test +--rmdir $MYSQL_TMP_DIR/temp_dir diff -Nru mysql-5.6-5.6.27/mysql-test/t/partition_open_files_limit.test mysql-5.6-5.6.33/mysql-test/t/partition_open_files_limit.test --- mysql-5.6-5.6.27/mysql-test/t/partition_open_files_limit.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/partition_open_files_limit.test 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,13 @@ --source include/have_partition.inc +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); +CALL mtr.add_suppression("Warning: you must raise the value of "); +CALL mtr.add_suppression(" InnoDB: Warning: too many (.*) files stay open"); +CALL mtr.add_suppression(" while the maximum"); +CALL mtr.add_suppression("InnoDB: allowed value would be 1."); +CALL mtr.add_suppression("InnoDB: You may need to raise the value of"); +CALL mtr.add_suppression(" innodb_open_files in"); +CALL mtr.add_suppression("InnoDB: my.cnf."); --disable_warnings DROP TABLE IF EXISTS `t1`; --enable_warnings diff -Nru mysql-5.6-5.6.27/mysql-test/t/sp-prelocking.test mysql-5.6-5.6.33/mysql-test/t/sp-prelocking.test --- mysql-5.6-5.6.27/mysql-test/t/sp-prelocking.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/sp-prelocking.test 2016-08-26 11:22:35.000000000 +0000 @@ -388,3 +388,41 @@ --echo End of 5.0 tests +--echo # +--echo # Bug#21142859: FUNCTION UPDATING A VIEW FAILS TO FIND TABLE THAT ACTUALLY EXISTS +--echo # + +CREATE TABLE t1 SELECT 1 AS fld1, 'A' AS fld2; +CREATE TABLE t2 (fld3 INT, fld4 CHAR(1)); + +CREATE VIEW v1 AS SELECT * FROM t1; + +CREATE TRIGGER t1_au AFTER UPDATE ON t1 +FOR EACH ROW INSERT INTO t2 VALUES (new.fld1, new.fld2); + +DELIMITER !; +CREATE FUNCTION f1() RETURNS INT +BEGIN + UPDATE v1 SET fld2='B' WHERE fld1=1; + RETURN row_count(); +END ! +DELIMITER ;! + +--echo # Without the patch, an error was getting reported. +SELECT f1(); + +DROP FUNCTION f1; +DROP VIEW v1; +DROP TABLE t1,t2; + +--echo # +--echo # Bug #16672723 "CAN'T FIND TEMPORARY TABLE". +--echo # +CREATE FUNCTION f1() RETURNS INT RETURN 1; +CREATE TEMPORARY TABLE tmp1(a INT); +PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t"; +--echo # The below statement failed before the fix. +EXECUTE stmt1; +DROP TEMPORARY TABLES tmp1, tmp2; +DEALLOCATE PREPARE stmt1; +DROP FUNCTION f1; diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_ca-master.opt mysql-5.6-5.6.33/mysql-test/t/ssl_ca-master.opt --- mysql-5.6-5.6.27/mysql-test/t/ssl_ca-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_ca-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,3 @@ +--ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem +--ssl-key=$MYSQL_TEST_DIR/std_data/crl-server-key.pem +--ssl-cert=$MYSQL_TEST_DIR/std_data/crl-server-cert.pem diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_ca.test mysql-5.6-5.6.33/mysql-test/t/ssl_ca.test --- mysql-5.6-5.6.27/mysql-test/t/ssl_ca.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_ca.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,32 @@ +--source include/have_ssl.inc +--source include/not_embedded.inc + +--echo # +--echo # Bug#21920657: SSL-CA FAILS SILENTLY IF THE PATH CANNOT BE FOUND +--echo # + +--echo # try to connect with wrong '--ssl-ca' path : should fail +--error 1 +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/wrong-crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 + +--echo # try to connect with correct '--ssl-ca' path : should connect +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # +--echo # Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +--echo # PATH SUBSTITUTION +--echo # + +--let $mysql_test_dir_path= `SELECT REPLACE('$MYSQL_TEST_DIR', '$HOME', '~')` + +--echo # try to connect with '--ssl-ca' option using tilde home directoy +--echo # path substitution : should connect +--exec $MYSQL --ssl-ca=$mysql_test_dir_path/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # try to connect with '--ssl-key' option using tilde home directoy +--echo # path substitution : should connect +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$mysql_test_dir_path/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # try to connect with '--ssl-cert' option using tilde home directoy +--echo # path substitution : should connect +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$mysql_test_dir_path/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_crl.test mysql-5.6-5.6.33/mysql-test/t/ssl_crl.test --- mysql-5.6-5.6.27/mysql-test/t/ssl_crl.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_crl.test 2016-08-26 11:22:35.000000000 +0000 @@ -21,3 +21,20 @@ --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --error 1 --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-revoked-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-revoked-cert.pem test -e "SHOW VARIABLES like '%ssl%';" + +--echo # +--echo # Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +--echo # PATH SUBSTITUTION +--echo # + +--let $mysql_test_dir_path= `SELECT REPLACE('$MYSQL_TEST_DIR', '$HOME', '~')` + +--echo # try to connect with '--ssl-crl' option using tilde home directoy +--echo # path substitution : should connect +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test --ssl-crl=$mysql_test_dir_path/std_data/crl-client-revoked.crl -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # try to connect with '--ssl-crlpath' option using tilde home directoy +--echo # path substitution : should connect +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem --ssl-crlpath=$mysql_test_dir_path/std_data/crldir test -e "SHOW STATUS LIKE 'Ssl_cipher'" diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_mode_no_ssl-master.opt mysql-5.6-5.6.33/mysql-test/t/ssl_mode_no_ssl-master.opt --- mysql-5.6-5.6.27/mysql-test/t/ssl_mode_no_ssl-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_mode_no_ssl-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +--skip-ssl diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_mode_no_ssl.test mysql-5.6-5.6.33/mysql-test/t/ssl_mode_no_ssl.test --- mysql-5.6-5.6.27/mysql-test/t/ssl_mode_no_ssl.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_mode_no_ssl.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,41 @@ +-- source include/not_embedded.inc + +--echo # negative client tests +--echo # mysql +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl --ssl-cipher=DHE-RSA-AES256-SHA 2>&1 +--echo # mysqldump +--error 2 +--exec $MYSQL_DUMP --ssl-mode=REQUIRED test 2>&1 +--echo # mysqladmin +--replace_regex /.*mysqladmin.*/mysqladmin: / +--error 1 +--exec $MYSQLADMIN --ssl-mode=REQUIRED -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--echo # mysqlcheck +--replace_regex /.*mysqlcheck(\.exe)*/mysqlcheck/ +--error 2 +--exec $MYSQL_CHECK --ssl-mode=REQUIRED test 2>&1 +--echo # mysqlimport +--replace_regex /.*mysqlimport(\.exe)*/mysqlimport/ +--error 1 +--exec $MYSQL_IMPORT --ssl-mode=REQUIRED test $MYSQLTEST_VARDIR/tmp/t1.txt 2>&1 +--echo # mysqlshow +--replace_regex /.*mysqlshow(\.exe)*/mysqlshow/ +--error 1 +--exec $MYSQL_SHOW --ssl-mode=REQUIRED test 2>&1 +--echo # mysqlslap +--replace_regex /.*mysqlslap(\.exe)*/mysqlslap/ +--error 1 +--exec $MYSQL_SLAP --ssl-mode=REQUIRED 2>&1 +--echo # mysqltest +--error 1 +--exec $MYSQL_TEST --ssl-mode=REQUIRED -x $MYSQL_TEST_DIR/include/mysqltest-x.inc 2>&1 + +--echo +--echo End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/t/ssl_mode.test mysql-5.6-5.6.33/mysql-test/t/ssl_mode.test --- mysql-5.6-5.6.27/mysql-test/t/ssl_mode.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/ssl_mode.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,47 @@ +-- source include/not_embedded.inc +-- source include/have_ssl_communication.inc + +--echo # positive client tests +--echo # mysql +--exec $MYSQL test --ssl-mode=ReQuIrEd --ssl-cipher=DHE-RSA-AES256-SHA -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl --ssl-cipher=DHE-RSA-AES256-SHA -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(0); + +--echo # mysqldump +--exec $MYSQL_DUMP --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --compact --skip-comments test 2>&1 +--echo # mysqladmin +--exec $MYSQLADMIN --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--echo # mysqlcheck +--exec $MYSQL_CHECK --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test 2>&1 +--echo # mysqlimport +CREATE TABLE words(a VARCHAR(255)); +--exec $MYSQL_IMPORT --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test $MYSQLTEST_VARDIR/std_data/words.dat 2>&1 +DROP TABLE words; +--echo # mysqlshow +--exec $MYSQL_SHOW --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test 2>&1 +--echo # mysqlslap +--exec $MYSQL_SLAP --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --create-schema=test --query="select * from t1" --silent 2>&1 +--echo # mysqltest +--exec $MYSQL_TEST --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA -x $MYSQL_TEST_DIR/include/mysqltest-x.inc 2>&1 + +DROP TABLE t1; + +--echo # negative client tests +--echo # mysql +--error 5 +--exec $MYSQL test --ssl-mode +--error 1 +--exec $MYSQL test --ssl-mode= 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=DERIUQER 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --skip-ssl 2>&1 + +--echo +--echo End of tests diff -Nru mysql-5.6-5.6.27/mysql-test/t/table_open_cache_functionality.test mysql-5.6-5.6.33/mysql-test/t/table_open_cache_functionality.test --- mysql-5.6-5.6.27/mysql-test/t/table_open_cache_functionality.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/table_open_cache_functionality.test 2016-08-26 11:22:35.000000000 +0000 @@ -25,6 +25,14 @@ -- source include/not_embedded.inc -- source include/have_innodb_16k.inc +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); +CALL mtr.add_suppression("Warning: you must raise the value of "); +CALL mtr.add_suppression(" InnoDB: Warning: too many (.*) files stay open"); +CALL mtr.add_suppression(" while the maximum"); +CALL mtr.add_suppression("InnoDB: allowed value would be 1."); +CALL mtr.add_suppression("InnoDB: You may need to raise the value of"); +CALL mtr.add_suppression(" innodb_open_files in"); +CALL mtr.add_suppression("InnoDB: my.cnf."); if (`select $PS_PROTOCOL != 0`) { --skip Test requires: ps-protocol disabled diff -Nru mysql-5.6-5.6.27/mysql-test/t/udf_services-master.opt mysql-5.6-5.6.33/mysql-test/t/udf_services-master.opt --- mysql-5.6-5.6.27/mysql-test/t/udf_services-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/udf_services-master.opt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +$TESTUDFSERVICES_OPT diff -Nru mysql-5.6-5.6.27/mysql-test/t/udf_services.test mysql-5.6-5.6.33/mysql-test/t/udf_services.test --- mysql-5.6-5.6.27/mysql-test/t/udf_services.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/udf_services.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +--source include/not_embedded.inc + +--echo # +--echo # Bug #20085672: CRYPTIC ERROR WHEN FAILING TO UNLOAD A DYNAMIC LIBRARY +--echo # + +--echo # Install the plugin +--replace_result $TESTUDFSERVICES TESTUDFSERVICES +eval INSTALL PLUGIN test_udf_services SONAME '$TESTUDFSERVICES'; + +--echo # Define the function +--replace_result $TESTUDFSERVICES TESTUDFSERVICES +eval CREATE FUNCTION test_udf_services_udf RETURNS INT + SONAME "$TESTUDFSERVICES"; + +--echo # Uninstall the plugin +UNINSTALL PLUGIN test_udf_services; + +--echo # Install the plugin again. Should not fail +--replace_result $TESTUDFSERVICES TESTUDFSERVICES +eval INSTALL PLUGIN test_udf_services SONAME '$TESTUDFSERVICES'; + +--echo # Cleanup +DROP FUNCTION test_udf_services_udf; +UNINSTALL PLUGIN test_udf_services; diff -Nru mysql-5.6-5.6.27/mysql-test/t/validate_password_plugin.test mysql-5.6-5.6.33/mysql-test/t/validate_password_plugin.test --- mysql-5.6-5.6.27/mysql-test/t/validate_password_plugin.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/validate_password_plugin.test 2016-08-26 11:22:35.000000000 +0000 @@ -264,6 +264,23 @@ remove_file $MYSQLTEST_VARDIR/tmp/dictionary.txt; remove_file $MYSQLTEST_VARDIR/tmp/dictionary2.txt; +--echo # +--echo # Bug#21616496: CREATE USER ACCEPTS PLUGIN AND PASSWORD HASH, +--echo # BUT IGNORES THE PASSWORD HASH +--echo # + +--error ER_NOT_VALID_PASSWORD +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password'; + +--error ER_NOT_VALID_PASSWORD +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_old_password'; + +--error ER_NOT_VALID_PASSWORD +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; + +--error ER_NOT_VALID_PASSWORD +CREATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_old_password' AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; + --echo # clean up after the test UNINSTALL PLUGIN validate_password; diff -Nru mysql-5.6-5.6.27/mysql-test/t/variables-win.test mysql-5.6-5.6.33/mysql-test/t/variables-win.test --- mysql-5.6-5.6.27/mysql-test/t/variables-win.test 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/variables-win.test 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,15 @@ +--source include/windows.inc + + +--echo # +--echo # Bug #23747899: @@basedir sysvar value not normalized if set through +--echo # the command line/ini file + +--echo # There should be no slashes in @@basedir and just backslashes +--echo # since it's normalized +SELECT + LOCATE('/', @@basedir) <> 0 AS have_slashes, + LOCATE('\\', @@basedir) <> 0 AS have_backslashes; + + +--echo End of the 5.6 tests diff -Nru mysql-5.6-5.6.27/mysql-test/t/wl6443_deprecation.test mysql-5.6-5.6.33/mysql-test/t/wl6443_deprecation.test --- mysql-5.6-5.6.27/mysql-test/t/wl6443_deprecation.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/wl6443_deprecation.test 2016-08-26 11:22:35.000000000 +0000 @@ -80,6 +80,9 @@ my $count_warnings= $count_warnings; print "Deprecation warning count : $count_warnings\n"; close(FILE); + # Truncate the log file so that repititions of the test don't pick up deprecation warnings from previous runs + open(FILE,">$logf") or die("Unable to open $logf for truncation $!\n"); + close(FILE); EOF -- source include/mysql_upgrade_preparation.inc diff -Nru mysql-5.6-5.6.27/mysql-test/t/xml.test mysql-5.6-5.6.33/mysql-test/t/xml.test --- mysql-5.6-5.6.27/mysql-test/t/xml.test 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/t/xml.test 2016-08-26 11:22:35.000000000 +0000 @@ -676,3 +676,22 @@ --echo # --echo # End of 5.5 tests --echo # + +--echo # +--echo # Bug#13358486 WEIGHT_STRING = MY_STRNXFRM_UNICODE: +--echo # ASSERTION `SRC' FAILED +--echo # +set names utf8; +do weight_string(extractvalue('','/*/a') level 1 reverse); +do char((weight_string(extractvalue((''),('tX')) level 7 desc)) using cp852); +set names default; + +--echo # +--echo # Bug#22552615 EXTRACTVALUE RETURNS NULL WHEN NO MATCHING +--echo # TEXT NODE IS FOUND FOR THE EXPRESSION +--echo # + +set @x = 'HOLA'; +set @y = 'Default Value'; +select ExtractValue( @x, '/MESSAGE/DATA2' ) into @y; +select @y; diff -Nru mysql-5.6-5.6.27/mysql-test/valgrind.supp mysql-5.6-5.6.33/mysql-test/valgrind.supp --- mysql-5.6-5.6.27/mysql-test/valgrind.supp 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/mysql-test/valgrind.supp 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public @@ -933,3 +933,35 @@ fun:mi_arena.* fun:malloc_info } + +#supress warnings from openssl + +{ + OpenSSL PB2 / 1 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + fun:CRYPTO_malloc + fun:sk_new + fun:SSL_COMP_get_compression_methods + fun:SSL_library_init + fun:ssl_start + fun:_Z8init_sslv + fun:_Z11mysqld_mainiPPc + fun:main +} + +{ + OpenSSL PB2 / 2 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + fun:CRYPTO_malloc + fun:sk_new + fun:SSL_COMP_get_compression_methods + fun:SSL_library_init + fun:ssl_start + fun:_ZL8init_sslv + fun:_Z11mysqld_mainiPPc + fun:main +} diff -Nru mysql-5.6-5.6.27/mysys/charset.c mysql-5.6-5.6.33/mysys/charset.c --- mysql-5.6-5.6.27/mysys/charset.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/charset.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -357,8 +357,8 @@ Be silent by default: no warnings on the client side. */ static void -default_reporter(enum loglevel level __attribute__ ((unused)), - const char *format __attribute__ ((unused)), +default_reporter(enum loglevel level MY_ATTRIBUTE ((unused)), + const char *format MY_ATTRIBUTE ((unused)), ...) { } @@ -1040,3 +1040,22 @@ *to= 0; return overflow ? (ulong)~0 : (ulong) (to - to_start); } + +#if defined(EXPORT_SYMVER16) +#ifndef EMBEDDED_LIBRARY + +// Hack to provide Fedora symbols + +CHARSET_INFO *mysql_get_charset(uint cs_number, myf flags) +{ + return get_charset(cs_number, flags); +} + + +CHARSET_INFO * mysql_get_charset_by_csname(const char *cs_name, uint cs_flags, myf flags) +{ + return get_charset_by_csname(cs_name, cs_flags, flags); +} + +#endif +#endif /* EXPORT_SYMVER16 */ diff -Nru mysql-5.6-5.6.27/mysys/charset-def.c mysql-5.6-5.6.33/mysys/charset-def.c --- mysql-5.6-5.6.27/mysys/charset-def.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/charset-def.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -161,7 +161,7 @@ #endif /* HAVE_UCA_COLLATIONS */ -my_bool init_compiled_charsets(myf flags __attribute__((unused))) +my_bool init_compiled_charsets(myf flags MY_ATTRIBUTE((unused))) { CHARSET_INFO *cs; diff -Nru mysql-5.6-5.6.27/mysys/errors.c mysql-5.6-5.6.33/mysys/errors.c --- mysql-5.6-5.6.27/mysys/errors.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/errors.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru mysql-5.6-5.6.27/mysys/lf_hash.c mysql-5.6-5.6.33/mysys/lf_hash.c --- mysql-5.6-5.6.27/mysys/lf_hash.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/lf_hash.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,7 +45,7 @@ /* a structure to pass the context (pointers two the three successive elements - in a list) from lfind to linsert/ldelete + in a list) from my_lfind to linsert/ldelete */ typedef struct { intptr volatile *prev; @@ -72,7 +72,7 @@ cursor is positioned in either case pins[0..2] are used, they are NOT removed on return */ -static int lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, +static int my_lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, const uchar *key, uint keylen, CURSOR *cursor, LF_PINS *pins) { uint32 cur_hashnr; @@ -140,7 +140,7 @@ /* DESCRIPTION insert a 'node' in the list that starts from 'head' in the correct - position (as found by lfind) + position (as found by my_lfind) RETURN 0 - inserted @@ -158,7 +158,7 @@ for (;;) { - if (lfind(head, cs, node->hashnr, node->key, node->keylen, + if (my_lfind(head, cs, node->hashnr, node->key, node->keylen, &cursor, pins) && (flags & LF_HASH_UNIQUE)) { @@ -209,7 +209,7 @@ for (;;) { - if (!lfind(head, cs, hashnr, key, keylen, &cursor, pins)) + if (!my_lfind(head, cs, hashnr, key, keylen, &cursor, pins)) { res= 1; /* not found */ break; @@ -233,7 +233,7 @@ (to ensure the number of "set DELETED flag" actions is equal to the number of "remove from the list" actions) */ - lfind(head, cs, hashnr, key, keylen, &cursor, pins); + my_lfind(head, cs, hashnr, key, keylen, &cursor, pins); } res= 0; break; @@ -259,12 +259,12 @@ it uses pins[0..2], on return the pin[2] keeps the node found all other pins are removed. */ -static LF_SLIST *lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs, +static LF_SLIST *my_lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, const uchar *key, uint keylen, LF_PINS *pins) { CURSOR cursor; - int res= lfind(head, cs, hashnr, key, keylen, &cursor, pins); + int res= my_lfind(head, cs, hashnr, key, keylen, &cursor, pins); if (res) _lf_pin(pins, 2, cursor.curr); _lf_unpin(pins, 0); @@ -445,7 +445,7 @@ MY_ERRPTR if OOM NOTE - see lsearch() for pin usage notes + see my_lsearch() for pin usage notes */ void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen) { @@ -459,7 +459,7 @@ return MY_ERRPTR; if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins))) return MY_ERRPTR; - found= lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1, + found= my_lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1, (uchar *)key, keylen, pins); lf_rwunlock_by_pins(pins); return found ? found+1 : 0; diff -Nru mysql-5.6-5.6.27/mysys/mf_cache.c mysql-5.6-5.6.33/mysys/mf_cache.c --- mysql-5.6-5.6.27/mysys/mf_cache.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_cache.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ this, just remember the file name for later removal */ -static my_bool cache_remove_open_tmp(IO_CACHE *cache __attribute__((unused)), +static my_bool cache_remove_open_tmp(IO_CACHE *cache MY_ATTRIBUTE((unused)), const char *name) { #if O_TEMPORARY == 0 diff -Nru mysql-5.6-5.6.27/mysys/mf_iocache.c mysql-5.6-5.6.33/mysys/mf_iocache.c --- mysql-5.6-5.6.27/mysys/mf_iocache.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_iocache.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -323,7 +323,7 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, my_off_t seek_offset, - pbool use_async_io __attribute__((unused)), + pbool use_async_io MY_ATTRIBUTE((unused)), pbool clear_cache) { DBUG_ENTER("reinit_io_cache"); @@ -1129,7 +1129,7 @@ while (write_length) { size_t copy_length= MY_MIN(write_length, write_cache->buffer_length); - int __attribute__((unused)) rc; + int MY_ATTRIBUTE((unused)) rc; rc= lock_io_cache(write_cache, write_cache->pos_in_file); /* The writing thread does always have the lock when it awakes. */ @@ -1732,7 +1732,7 @@ unlock_append_buffer(info); int my_b_flush_io_cache(IO_CACHE *info, - int need_append_buffer_lock __attribute__((unused))) + int need_append_buffer_lock MY_ATTRIBUTE((unused))) { size_t length; my_off_t pos_in_file; @@ -1740,6 +1740,10 @@ DBUG_ENTER("my_b_flush_io_cache"); DBUG_PRINT("enter", ("cache: 0x%lx", (long) info)); + DBUG_EXECUTE_IF("simulate_error_during_flush_cache_to_file", + { + DBUG_RETURN(TRUE); + }); if (!append_cache) need_append_buffer_lock= 0; diff -Nru mysql-5.6-5.6.27/mysys/mf_keycache.c mysql-5.6-5.6.33/mysys/mf_keycache.c --- mysql-5.6-5.6.27/mysys/mf_keycache.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_keycache.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2498,8 +2498,8 @@ uchar *key_cache_read(KEY_CACHE *keycache, File file, my_off_t filepos, int level, uchar *buff, uint length, - uint block_length __attribute__((unused)), - int return_buffer __attribute__((unused))) + uint block_length MY_ATTRIBUTE((unused)), + int return_buffer MY_ATTRIBUTE((unused))) { my_bool locked_and_incremented= FALSE; int error=0; @@ -2979,7 +2979,7 @@ int key_cache_write(KEY_CACHE *keycache, File file, my_off_t filepos, int level, uchar *buff, uint length, - uint block_length __attribute__((unused)), + uint block_length MY_ATTRIBUTE((unused)), int dont_write) { my_bool locked_and_incremented= FALSE; @@ -4206,7 +4206,7 @@ 0 on success (always because it can't fail) */ -int reset_key_cache_counters(const char *name __attribute__((unused)), +int reset_key_cache_counters(const char *name MY_ATTRIBUTE((unused)), KEY_CACHE *key_cache) { DBUG_ENTER("reset_key_cache_counters"); @@ -4230,9 +4230,9 @@ /* Test if disk-cache is ok */ -static void test_key_cache(KEY_CACHE *keycache __attribute__((unused)), - const char *where __attribute__((unused)), - my_bool lock __attribute__((unused))) +static void test_key_cache(KEY_CACHE *keycache MY_ATTRIBUTE((unused)), + const char *where MY_ATTRIBUTE((unused)), + my_bool lock MY_ATTRIBUTE((unused))) { /* TODO */ } diff -Nru mysql-5.6-5.6.27/mysys/mf_keycaches.c mysql-5.6-5.6.33/mysys/mf_keycaches.c --- mysql-5.6-5.6.27/mysys/mf_keycaches.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_keycaches.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -77,7 +77,7 @@ /* Get key and length for a SAFE_HASH_ENTRY */ static uchar *safe_hash_entry_get(SAFE_HASH_ENTRY *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=entry->length; return (uchar*) entry->key; diff -Nru mysql-5.6-5.6.27/mysys/mf_tempfile.c mysql-5.6-5.6.33/mysys/mf_tempfile.c --- mysql-5.6-5.6.27/mysys/mf_tempfile.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_tempfile.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -55,8 +55,8 @@ */ File create_temp_file(char *to, const char *dir, const char *prefix, - int mode __attribute__((unused)), - myf MyFlags __attribute__((unused))) + int mode MY_ATTRIBUTE((unused)), + myf MyFlags MY_ATTRIBUTE((unused))) { File file= -1; #ifdef __WIN__ diff -Nru mysql-5.6-5.6.27/mysys/mf_unixpath.c mysql-5.6-5.6.33/mysys/mf_unixpath.c --- mysql-5.6-5.6.27/mysys/mf_unixpath.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/mf_unixpath.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ @param to A pathname. */ -void to_unix_path(char *to __attribute__((unused))) +void to_unix_path(char *to MY_ATTRIBUTE((unused))) { #if FN_LIBCHAR != '/' { diff -Nru mysql-5.6-5.6.27/mysys/my_access.c mysql-5.6-5.6.33/mysys/my_access.c --- mysql-5.6-5.6.27/mysys/my_access.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_access.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -187,9 +187,9 @@ @return TRUE if the file name is allowed, FALSE otherwise. */ -my_bool is_filename_allowed(const char *name __attribute__((unused)), - size_t length __attribute__((unused)), - my_bool allow_current_dir __attribute__((unused))) +my_bool is_filename_allowed(const char *name MY_ATTRIBUTE((unused)), + size_t length MY_ATTRIBUTE((unused)), + my_bool allow_current_dir MY_ATTRIBUTE((unused))) { /* For Windows, check if the file name contains : character. diff -Nru mysql-5.6-5.6.27/mysys/my_alarm.c mysql-5.6-5.6.33/mysys/my_alarm.c --- mysql-5.6-5.6.27/mysys/my_alarm.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_alarm.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,4 @@ -/* Copyright (C) 2000 MySQL AB - Use is subject to license terms +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +11,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Function to set a varible when we got a alarm */ /* Used by my_lock samt functions in m_alarm.h */ @@ -24,7 +23,7 @@ #ifdef HAVE_ALARM /* ARGSUSED */ -sig_handler my_set_alarm_variable(int signo __attribute__((unused))) +sig_handler my_set_alarm_variable(int signo MY_ATTRIBUTE((unused))) { my_have_got_alarm=1; /* Tell program that time expired */ return; diff -Nru mysql-5.6-5.6.27/mysys/my_alloc.c mysql-5.6-5.6.33/mysys/my_alloc.c --- mysql-5.6-5.6.27/mysys/my_alloc.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_alloc.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ */ void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size __attribute__((unused))) + size_t pre_alloc_size MY_ATTRIBUTE((unused))) { DBUG_ENTER("init_alloc_root"); DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); @@ -94,7 +94,7 @@ */ void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size __attribute__((unused))) + size_t pre_alloc_size MY_ATTRIBUTE((unused))) { DBUG_ASSERT(alloc_root_inited(mem_root)); diff -Nru mysql-5.6-5.6.27/mysys/my_bitmap.c mysql-5.6-5.6.33/mysys/my_bitmap.c --- mysql-5.6-5.6.27/mysys/my_bitmap.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_bitmap.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -81,14 +81,14 @@ } -static inline void bitmap_lock(MY_BITMAP *map __attribute__((unused))) +static inline void bitmap_lock(MY_BITMAP *map MY_ATTRIBUTE((unused))) { if (map->mutex) mysql_mutex_lock(map->mutex); } -static inline void bitmap_unlock(MY_BITMAP *map __attribute__((unused))) +static inline void bitmap_unlock(MY_BITMAP *map MY_ATTRIBUTE((unused))) { if (map->mutex) mysql_mutex_unlock(map->mutex); @@ -136,7 +136,7 @@ my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits, - my_bool thread_safe __attribute__((unused))) + my_bool thread_safe MY_ATTRIBUTE((unused))) { DBUG_ENTER("bitmap_init"); if (!buf) diff -Nru mysql-5.6-5.6.27/mysys/my_fopen.c mysql-5.6-5.6.33/mysys/my_fopen.c --- mysql-5.6-5.6.27/mysys/my_fopen.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_fopen.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -147,7 +147,7 @@ /* No close operation hook. */ -static int no_close(void *cookie __attribute__((unused))) +static int no_close(void *cookie MY_ATTRIBUTE((unused))) { return 0; } diff -Nru mysql-5.6-5.6.27/mysys/my_fstream.c mysql-5.6-5.6.33/mysys/my_fstream.c --- mysql-5.6-5.6.27/mysys/my_fstream.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_fstream.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -171,7 +171,7 @@ /* Seek to position in file */ my_off_t my_fseek(FILE *stream, my_off_t pos, int whence, - myf MyFlags __attribute__((unused))) + myf MyFlags MY_ATTRIBUTE((unused))) { DBUG_ENTER("my_fseek"); DBUG_PRINT("my",("stream: 0x%lx pos: %lu whence: %d MyFlags: %d", @@ -183,7 +183,7 @@ /* Tell current position of file */ -my_off_t my_ftell(FILE *stream, myf MyFlags __attribute__((unused))) +my_off_t my_ftell(FILE *stream, myf MyFlags MY_ATTRIBUTE((unused))) { off_t pos; DBUG_ENTER("my_ftell"); diff -Nru mysql-5.6-5.6.27/mysys/my_gethwaddr.c mysql-5.6-5.6.33/mysys/my_gethwaddr.c --- mysql-5.6-5.6.27/mysys/my_gethwaddr.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_gethwaddr.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -228,14 +228,14 @@ #else /* __FreeBSD__ || __linux__ || __WIN__ */ /* just fail */ -my_bool my_gethwaddr(uchar *to __attribute__((unused))) +my_bool my_gethwaddr(uchar *to MY_ATTRIBUTE((unused))) { return 1; } #endif #else /* MAIN */ -int main(int argc __attribute__((unused)),char **argv) +int main(int argc MY_ATTRIBUTE((unused)),char **argv) { uchar mac[6]; uint i; diff -Nru mysql-5.6-5.6.27/mysys/my_getsystime.c mysql-5.6-5.6.33/mysys/my_getsystime.c --- mysql-5.6-5.6.27/mysys/my_getsystime.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_getsystime.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -170,7 +170,7 @@ @retval current time. */ -time_t my_time_possible_from_micro(ulonglong microtime __attribute__((unused))) +time_t my_time_possible_from_micro(ulonglong microtime MY_ATTRIBUTE((unused))) { #ifdef _WIN32 time_t t; diff -Nru mysql-5.6-5.6.27/mysys/my_lib.c mysql-5.6-5.6.33/mysys/my_lib.c --- mysql-5.6-5.6.27/mysys/my_lib.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_lib.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -390,7 +390,7 @@ int my_fstat(File Filedes, MY_STAT *stat_area, - myf MyFlags __attribute__((unused))) + myf MyFlags MY_ATTRIBUTE((unused))) { DBUG_ENTER("my_fstat"); DBUG_PRINT("my",("fd: %d MyFlags: %d", Filedes, MyFlags)); diff -Nru mysql-5.6-5.6.27/mysys/my_mess.c mysql-5.6-5.6.33/mysys/my_mess.c --- mysql-5.6-5.6.27/mysys/my_mess.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_mess.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ #include "mysys_priv.h" -void my_message_stderr(uint error __attribute__((unused)), +void my_message_stderr(uint error MY_ATTRIBUTE((unused)), const char *str, myf MyFlags) { DBUG_ENTER("my_message_stderr"); diff -Nru mysql-5.6-5.6.27/mysys/my_redel.c mysql-5.6-5.6.33/mysys/my_redel.c --- mysql-5.6-5.6.27/mysys/my_redel.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_redel.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,6 +35,9 @@ if MY_REDEL_MAKE_COPY is given, then the orginal file is renamed to org_name-'current_time'.BAK + + if MY_REDEL_NO_COPY_STAT is given, stats are not copied + from org_name to tmp_name. */ #define REDEL_EXT ".BAK" @@ -46,8 +49,11 @@ DBUG_PRINT("my",("org_name: '%s' tmp_name: '%s' MyFlags: %d", org_name,tmp_name,MyFlags)); - if (my_copystat(org_name,tmp_name,MyFlags) < 0) - goto end; + if (!(MyFlags & MY_REDEL_NO_COPY_STAT)) + { + if (my_copystat(org_name,tmp_name,MyFlags) < 0) + goto end; + } if (MyFlags & MY_REDEL_MAKE_BACKUP) { char name_buff[FN_REFLEN+20]; diff -Nru mysql-5.6-5.6.27/mysys/my_static.c mysql-5.6-5.6.33/mysys/my_static.c --- mysql-5.6-5.6.27/mysys/my_static.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_static.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -74,12 +74,12 @@ void (*fatal_error_handler_hook)(uint error, const char *str, myf MyFlags)= my_message_stderr; -static void proc_info_dummy(void *a __attribute__((unused)), - const PSI_stage_info *b __attribute__((unused)), - PSI_stage_info *c __attribute__((unused)), - const char *d __attribute__((unused)), - const char *e __attribute__((unused)), - const unsigned int f __attribute__((unused))) +static void proc_info_dummy(void *a MY_ATTRIBUTE((unused)), + const PSI_stage_info *b MY_ATTRIBUTE((unused)), + PSI_stage_info *c MY_ATTRIBUTE((unused)), + const char *d MY_ATTRIBUTE((unused)), + const char *e MY_ATTRIBUTE((unused)), + const unsigned int f MY_ATTRIBUTE((unused))) { return; } diff -Nru mysql-5.6-5.6.27/mysys/my_symlink.c mysql-5.6-5.6.33/mysys/my_symlink.c --- mysql-5.6-5.6.27/mysys/my_symlink.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_symlink.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -107,7 +107,7 @@ #endif -int my_is_symlink(const char *filename __attribute__((unused))) +int my_is_symlink(const char *filename MY_ATTRIBUTE((unused))) { #if defined (HAVE_LSTAT) && defined (S_ISLNK) struct stat stat_buff; diff -Nru mysql-5.6-5.6.27/mysys/my_sync.c mysql-5.6-5.6.33/mysys/my_sync.c --- mysql-5.6-5.6.27/mysys/my_sync.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_sync.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -159,8 +159,8 @@ #else /* NEED_EXPLICIT_SYNC_DIR */ -int my_sync_dir(const char *dir_name __attribute__((unused)), - myf my_flags __attribute__((unused))) +int my_sync_dir(const char *dir_name MY_ATTRIBUTE((unused)), + myf my_flags MY_ATTRIBUTE((unused))) { return 0; } @@ -192,8 +192,8 @@ #else /* NEED_EXPLICIT_SYNC_DIR */ -int my_sync_dir_by_file(const char *file_name __attribute__((unused)), - myf my_flags __attribute__((unused))) +int my_sync_dir_by_file(const char *file_name MY_ATTRIBUTE((unused)), + myf my_flags MY_ATTRIBUTE((unused))) { return 0; } diff -Nru mysql-5.6-5.6.27/mysys/my_wincond.c mysql-5.6-5.6.33/mysys/my_wincond.c --- mysql-5.6-5.6.27/mysys/my_wincond.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_wincond.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -88,6 +88,7 @@ static DWORD get_milliseconds(const struct timespec *abstime) { +#ifndef HAVE_STRUCT_TIMESPEC long long millis; union ft64 now; @@ -118,6 +119,21 @@ millis= UINT_MAX; return (DWORD)millis; +#else + /* + Convert timespec to millis and subtract current time. + my_getsystime() returns time in 100 ns units. + */ + if (abstime == NULL) + return INFINITE; + + ulonglong future= abstime->tv_sec * 1000 + abstime->tv_nsec / 1000000; + ulonglong now= my_getsystime() / 10000; + /* Don't allow the timeout to be negative. */ + if (future < now) + return 0; + return (DWORD)(future - now); +#endif } diff -Nru mysql-5.6-5.6.27/mysys/my_write.c mysql-5.6-5.6.33/mysys/my_write.c --- mysql-5.6-5.6.27/mysys/my_write.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/my_write.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru mysql-5.6-5.6.27/mysys/psi_noop.c mysql-5.6-5.6.33/mysys/psi_noop.c --- mysql-5.6-5.6.27/mysys/psi_noop.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/psi_noop.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ C_MODE_START -#define NNN __attribute__((unused)) +#define NNN MY_ATTRIBUTE((unused)) static void register_mutex_noop(const char *category NNN, PSI_mutex_info *info NNN, @@ -637,9 +637,9 @@ } static int -set_thread_connect_attrs_noop(const char *buffer __attribute__((unused)), - uint length __attribute__((unused)), - const void *from_cs __attribute__((unused))) +set_thread_connect_attrs_noop(const char *buffer MY_ATTRIBUTE((unused)), + uint length MY_ATTRIBUTE((unused)), + const void *from_cs MY_ATTRIBUTE((unused))) { return 0; } diff -Nru mysql-5.6-5.6.27/mysys/ptr_cmp.c mysql-5.6-5.6.33/mysys/ptr_cmp.c --- mysql-5.6-5.6.27/mysys/ptr_cmp.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/ptr_cmp.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,9 +45,9 @@ Special case for ORDER BY / GROUP BY CHAR(0) NOT NULL */ static -int ptr_compare_zero_length(size_t *compare_length __attribute__((unused)), - uchar **a __attribute__((unused)), - uchar **b __attribute__((unused))) +int ptr_compare_zero_length(size_t *compare_length MY_ATTRIBUTE((unused)), + uchar **a MY_ATTRIBUTE((unused)), + uchar **b MY_ATTRIBUTE((unused))) { return 0; } @@ -61,7 +61,7 @@ /* Get a pointer to a optimal byte-compare function for a given size */ #ifdef __sun -qsort2_cmp get_ptr_compare (size_t size __attribute__((unused))) +qsort2_cmp get_ptr_compare (size_t size MY_ATTRIBUTE((unused))) { return (qsort2_cmp) native_compare; } diff -Nru mysql-5.6-5.6.27/mysys/stacktrace.c mysql-5.6-5.6.33/mysys/stacktrace.c --- mysql-5.6-5.6.27/mysys/stacktrace.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/stacktrace.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -159,8 +159,8 @@ /* Use Solaris' symbolic stack trace routine. */ #include -void my_print_stacktrace(uchar* stack_bottom __attribute__((unused)), - ulong thread_stack __attribute__((unused))) +void my_print_stacktrace(uchar* stack_bottom MY_ATTRIBUTE((unused)), + ulong thread_stack MY_ATTRIBUTE((unused))) { if (printstack(fileno(stderr)) == -1) my_safe_printf_stderr("%s", @@ -178,9 +178,9 @@ #if BACKTRACE_DEMANGLE -char __attribute__ ((weak)) * -my_demangle(const char *mangled_name __attribute__((unused)), - int *status __attribute__((unused))) +char MY_ATTRIBUTE ((weak)) * +my_demangle(const char *mangled_name MY_ATTRIBUTE((unused)), + int *status MY_ATTRIBUTE((unused))) { return NULL; } diff -Nru mysql-5.6-5.6.27/mysys/testhash.c mysql-5.6-5.6.33/mysys/testhash.c --- mysql-5.6-5.6.27/mysys/testhash.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/testhash.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,7 +39,7 @@ void free_record(void *record); static uchar *hash2_key(const uchar *rec,uint *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=(uint) (uchar) rec[reclength-1]; return (uchar*) rec; diff -Nru mysql-5.6-5.6.27/mysys/thr_alarm.c mysql-5.6-5.6.33/mysys/thr_alarm.c --- mysql-5.6-5.6.27/mysys/thr_alarm.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/thr_alarm.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -60,9 +60,9 @@ #define reschedule_alarms() pthread_kill(alarm_thread,THR_SERVER_ALARM) #endif -static sig_handler thread_alarm(int sig __attribute__((unused))); +static sig_handler thread_alarm(int sig MY_ATTRIBUTE((unused))); -static int compare_ulong(void *not_used __attribute__((unused)), +static int compare_ulong(void *not_used MY_ATTRIBUTE((unused)), uchar *a_ptr,uchar* b_ptr) { ulong a=*((ulong*) a_ptr),b= *((ulong*) b_ptr); @@ -274,7 +274,7 @@ every second. */ -sig_handler process_alarm(int sig __attribute__((unused))) +sig_handler process_alarm(int sig MY_ATTRIBUTE((unused))) { sigset_t old_mask; /* @@ -304,7 +304,7 @@ } -static sig_handler process_alarm_part2(int sig __attribute__((unused))) +static sig_handler process_alarm_part2(int sig MY_ATTRIBUTE((unused))) { ALARM *alarm_data; DBUG_ENTER("process_alarm"); @@ -492,7 +492,7 @@ */ -static sig_handler thread_alarm(int sig __attribute__((unused))) +static sig_handler thread_alarm(int sig MY_ATTRIBUTE((unused))) { #ifdef MAIN printf("thread_alarm\n"); fflush(stdout); @@ -511,7 +511,7 @@ /* set up a alarm thread with uses 'sleep' to sleep between alarms */ #ifdef USE_ALARM_THREAD -static void *alarm_handler(void *arg __attribute__((unused))) +static void *alarm_handler(void *arg MY_ATTRIBUTE((unused))) { int error; struct timespec abstime; @@ -580,7 +580,7 @@ /* Can't do this yet */ } -sig_handler process_alarm(int sig __attribute__((unused))) +sig_handler process_alarm(int sig MY_ATTRIBUTE((unused))) { /* Can't do this yet */ } @@ -774,7 +774,7 @@ #endif /* USE_ONE_SIGNAL_HAND */ -static void *signal_hand(void *arg __attribute__((unused))) +static void *signal_hand(void *arg MY_ATTRIBUTE((unused))) { sigset_t set; int sig,error,err_count=0;; @@ -842,7 +842,7 @@ } -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char **argv MY_ATTRIBUTE((unused))) { pthread_t tid; pthread_attr_t thr_attr; @@ -931,7 +931,7 @@ #else /* !defined(DONT_USE_ALARM_THREAD) */ -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char **argv MY_ATTRIBUTE((unused))) { printf("thr_alarm disabled with DONT_USE_THR_ALARM\n"); exit(1); diff -Nru mysql-5.6-5.6.27/mysys/thr_lock.c mysql-5.6-5.6.33/mysys/thr_lock.c --- mysql-5.6-5.6.27/mysys/thr_lock.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/thr_lock.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1512,21 +1512,21 @@ /* The following functions is for WRITE_CONCURRENT_INSERT */ -static void test_get_status(void* param __attribute__((unused)), - int concurrent_insert __attribute__((unused))) +static void test_get_status(void* param MY_ATTRIBUTE((unused)), + int concurrent_insert MY_ATTRIBUTE((unused))) { } -static void test_update_status(void* param __attribute__((unused))) +static void test_update_status(void* param MY_ATTRIBUTE((unused))) { } -static void test_copy_status(void* to __attribute__((unused)) , - void *from __attribute__((unused))) +static void test_copy_status(void* to MY_ATTRIBUTE((unused)) , + void *from MY_ATTRIBUTE((unused))) { } -static my_bool test_check_status(void* param __attribute__((unused))) +static my_bool test_check_status(void* param MY_ATTRIBUTE((unused))) { return 0; } @@ -1583,7 +1583,7 @@ } -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char **argv MY_ATTRIBUTE((unused))) { pthread_t tid; pthread_attr_t thr_attr; diff -Nru mysql-5.6-5.6.27/mysys/thr_mutex.c mysql-5.6-5.6.33/mysys/thr_mutex.c --- mysql-5.6-5.6.27/mysys/thr_mutex.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/thr_mutex.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ int safe_mutex_init(safe_mutex_t *mp, - const pthread_mutexattr_t *attr __attribute__((unused)), + const pthread_mutexattr_t *attr MY_ATTRIBUTE((unused)), const char *file, uint line) { @@ -370,7 +370,7 @@ This is ok, as this thread may not yet have been exited. */ -void safe_mutex_end(FILE *file __attribute__((unused))) +void safe_mutex_end(FILE *file MY_ATTRIBUTE((unused))) { if (!safe_mutex_count) /* safetly */ pthread_mutex_destroy(&THR_LOCK_mutex); diff -Nru mysql-5.6-5.6.27/mysys/tree.c mysql-5.6-5.6.33/mysys/tree.c --- mysql-5.6-5.6.27/mysys/tree.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/tree.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,7 +83,7 @@ static int test_rb_tree(TREE_ELEMENT *element); #endif -void init_tree(TREE *tree, ulong default_alloc_size, ulong memory_limit, +void init_tree(TREE *tree, size_t default_alloc_size, ulong memory_limit, int size, qsort_cmp2 compare, my_bool with_delete, tree_element_free free_element, const void *custom_arg) { @@ -127,7 +127,7 @@ } if (!(tree->with_delete=with_delete)) { - init_alloc_root(&tree->mem_root, (uint) default_alloc_size, 0); + init_alloc_root(&tree->mem_root, default_alloc_size, 0); tree->mem_root.min_malloc=(sizeof(TREE_ELEMENT)+tree->size_of_element); } DBUG_VOID_RETURN; diff -Nru mysql-5.6-5.6.27/mysys/waiting_threads.c mysql-5.6-5.6.33/mysys/waiting_threads.c --- mysql-5.6-5.6.27/mysys/waiting_threads.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/mysys/waiting_threads.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -295,9 +295,9 @@ uint32 wt_success_stats; static my_atomic_rwlock_t - cycle_stats_lock __attribute__((unused)), - wait_stats_lock __attribute__((unused)), - success_stats_lock __attribute__((unused)); + cycle_stats_lock MY_ATTRIBUTE((unused)), + wait_stats_lock MY_ATTRIBUTE((unused)), + success_stats_lock MY_ATTRIBUTE((unused)); #ifdef SAFE_STATISTICS #define incr(VAR, LOCK) \ diff -Nru mysql-5.6-5.6.27/mysys_ssl/my_default.cc mysql-5.6-5.6.33/mysys_ssl/my_default.cc --- mysql-5.6-5.6.27/mysys_ssl/my_default.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/mysys_ssl/my_default.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -106,16 +106,8 @@ static char my_defaults_file_buffer[FN_REFLEN]; static char my_defaults_extra_file_buffer[FN_REFLEN]; -static char my_login_file[FN_REFLEN]; - static my_bool defaults_already_read= FALSE; -/* Set to TRUE, if --no-defaults is found. */ -static my_bool found_no_defaults= FALSE; - -/* Set to TRUE, when login file is being processed. */ -static my_bool is_login_file= FALSE; - /* Which directories are searched for options (and in which order) */ #define MAX_DEFAULT_DIRS 6 @@ -148,13 +140,16 @@ }; static int search_default_file(Process_option_func func, void *func_ctx, - const char *dir, const char *config_file); + const char *dir, const char *config_file, + my_bool is_login_file); static int search_default_file_with_ext(Process_option_func func, void *func_ctx, const char *dir, const char *ext, - const char *config_file, int recursion_level); -static my_bool mysql_file_getline(char *str, int size, MYSQL_FILE *file); - + const char *config_file, + int recursion_level, + my_bool is_login_file); +static my_bool mysql_file_getline(char *str, int size, MYSQL_FILE *file, + my_bool is_login_file); /** Create the list of default directories. @@ -230,6 +225,7 @@ func_ctx It's context. Usually it is the structure to store additional options. default_directories List of default directories. + found_no_defaults TRUE, if --no-defaults is specified. DESCRIPTION Process the default options from argc & argv @@ -253,7 +249,8 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, uint *args_used, Process_option_func func, - void *func_ctx, const char **default_directories) + void *func_ctx, const char **default_directories, + my_bool is_login_file, my_bool found_no_defaults) { const char **dirs, *forced_default_file, *forced_extra_defaults; int error= 0; @@ -267,7 +264,7 @@ (char **) &forced_default_file, (char **) &forced_extra_defaults, (char **) &my_defaults_group_suffix, - (char **) &my_login_path); + (char **) &my_login_path, found_no_defaults); if (! my_defaults_group_suffix) my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV)); @@ -382,14 +379,16 @@ // If conf_file is an absolute path, we only read it if (dirname_length(conf_file)) { - if ((error= search_default_file(func, func_ctx, NullS, conf_file)) < 0) - goto err; + if ((error= search_default_file(func, func_ctx, NullS, conf_file, + is_login_file)) < 0) + goto err; } // If my defaults file is set (from a previous run), we read it else if (my_defaults_file) { if ((error= search_default_file_with_ext(func, func_ctx, "", "", - my_defaults_file, 0)) < 0) + my_defaults_file, 0, + is_login_file)) < 0) goto err; if (error > 0) { @@ -404,14 +403,16 @@ { if (**dirs) { - if (search_default_file(func, func_ctx, *dirs, conf_file) < 0) - goto err; + if (search_default_file(func, func_ctx, *dirs, conf_file, + is_login_file) < 0) + goto err; } else if (my_defaults_extra_file) { if ((error= search_default_file_with_ext(func, func_ctx, "", "", - my_defaults_extra_file, 0)) < 0) - goto err; /* Fatal error */ + my_defaults_extra_file, 0, + is_login_file)) < 0) + goto err; /* Fatal error */ if (error > 0) { fprintf(stderr, "Could not open required defaults file: %s\n", @@ -499,7 +500,8 @@ char **defaults, char **extra_defaults, char **group_suffix, - char **login_path) + char **login_path, + my_bool found_no_defaults) { int org_argc= argc, prev_argc= 0, default_option_count= 0; *defaults= *extra_defaults= *group_suffix= *login_path= 0; @@ -626,6 +628,8 @@ char *ptr,**res; struct handle_option_ctx ctx; const char **dirs; + char my_login_file[FN_REFLEN]; + my_bool found_no_defaults= false; uint args_sep= my_getopt_use_args_separator ? 1 : 0; DBUG_ENTER("load_defaults"); @@ -655,23 +659,21 @@ if ((error= my_search_option_files(conf_file, argc, argv, &args_used, handle_default_option, - (void *) &ctx, dirs))) + (void *) &ctx, dirs, false, found_no_defaults))) { free_root(&alloc,MYF(0)); DBUG_RETURN(error); } /* Read options from login group. */ - is_login_file= TRUE; if (my_default_get_login_file(my_login_file, sizeof(my_login_file)) && (error= my_search_option_files(my_login_file,argc, argv, &args_used, handle_default_option, (void *) &ctx, - dirs))) + dirs, true, found_no_defaults))) { free_root(&alloc,MYF(0)); DBUG_RETURN(error); } - is_login_file= FALSE; /* Here error contains <> 0 only if we have a fully specified conf_file @@ -754,7 +756,8 @@ static int search_default_file(Process_option_func opt_handler, void *handler_ctx, const char *dir, - const char *config_file) + const char *config_file, + my_bool is_login_file) { char **ext; const char *empty_list[]= { "", 0 }; @@ -766,7 +769,7 @@ int error; if ((error= search_default_file_with_ext(opt_handler, handler_ctx, dir, *ext, - config_file, 0)) < 0) + config_file, 0, is_login_file)) < 0) return error; } return 0; @@ -838,6 +841,7 @@ group groups to read recursion_level the level of recursion, got while processing "!include" or "!includedir" + is_login_file TRUE, when login file is being processed. RETURN 0 Success @@ -850,7 +854,8 @@ const char *dir, const char *ext, const char *config_file, - int recursion_level) + int recursion_level, + my_bool is_login_file) { char name[FN_REFLEN + 10], buff[4096], curr_gr[4096], *ptr, *end, **tmp_ext; char *value, option[4096+2], tmp[FN_REFLEN]; @@ -879,7 +884,7 @@ } fn_format(name,name,"","",4); - if ((rc= check_file_permissions(name)) < 2) + if ((rc= check_file_permissions(name, is_login_file)) < 2) return (int) rc; if (is_login_file) @@ -894,7 +899,7 @@ return 1; /* Ignore wrong files */ } - while (mysql_file_getline(buff, sizeof(buff) - 1, fp)) + while (mysql_file_getline(buff, sizeof(buff) - 1, fp, is_login_file)) { line++; /* Ignore comment and empty lines */ @@ -955,7 +960,7 @@ MY_UNPACK_FILENAME | MY_SAFE_PATH); search_default_file_with_ext(opt_handler, handler_ctx, "", "", tmp, - recursion_level + 1); + recursion_level + 1, is_login_file); } } @@ -970,7 +975,7 @@ goto err; search_default_file_with_ext(opt_handler, handler_ctx, "", "", ptr, - recursion_level + 1); + recursion_level + 1, is_login_file); } continue; @@ -1132,15 +1137,17 @@ of scrambled login file, the line read is first decrypted and then returned. - @param str [out] Buffer to store the read text. - @param size [in] At max, size-1 bytes to be read. - @param file [in] Source file. + @param str [out] Buffer to store the read text. + @param size [in] At max, size-1 bytes to be read. + @param file [in] Source file. + @param is_login_file [in] TRUE, when login file is being processed. @return 1 Success 0 Error */ -static my_bool mysql_file_getline(char *str, int size, MYSQL_FILE *file) +static my_bool mysql_file_getline(char *str, int size, MYSQL_FILE *file, + my_bool is_login_file) { uchar cipher[4096], len_buf[MAX_CIPHER_STORE_LEN]; static unsigned char my_key[LOGIN_KEY_LEN]; @@ -1279,7 +1286,7 @@ char buf[FN_REFLEN]; size_t len; char *p; - my_bool err __attribute__((unused)); + my_bool err MY_ATTRIBUTE((unused)); len= normalize_dirname(buf, dir); if (!(p= strmake_root(alloc, buf, len))) @@ -1453,13 +1460,14 @@ /** Check file permissions of the option file. - @param file_name [in] Name of the option file. + @param file_name [in] Name of the option file. + @param is_login_file [in] TRUE, when login file is being processed. @return 0 - Non-allowable file permissions. 1 - Failed to stat. 2 - Success. */ -int check_file_permissions(const char *file_name) +int check_file_permissions(const char *file_name, my_bool is_login_file) { #if !defined(__WIN__) MY_STAT stat_info; diff -Nru mysql-5.6-5.6.27/mysys_ssl/my_getopt.cc mysql-5.6-5.6.33/mysys_ssl/my_getopt.cc --- mysql-5.6-5.6.27/mysys_ssl/my_getopt.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/mysys_ssl/my_getopt.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1147,6 +1147,14 @@ return num; } +static inline my_bool is_negative_num(char* num) +{ + while (my_isspace(&my_charset_latin1, *num)) + num++; + + return (*num == '-'); +} + /* function: getopt_ull @@ -1156,7 +1164,20 @@ static ulonglong getopt_ull(char *arg, const struct my_option *optp, int *err) { - ulonglong num= eval_num_suffix_ull(arg, err, (char*) optp->name); + char buf[255]; + ulonglong num; + + /* If a negative number is specified as a value for the option. */ + if (arg == NULL || is_negative_num(arg) == TRUE) + { + num= (ulonglong) optp->min_value; + my_getopt_error_reporter(WARNING_LEVEL, + "option '%s': value %s adjusted to %s", + optp->name, arg, ullstr(num, buf)); + } + else + num= eval_num_suffix_ull(arg, err, (char*) optp->name); + return getopt_ull_limit_value(num, optp, NULL); } @@ -1349,7 +1370,7 @@ */ static void fini_one_value(const struct my_option *option, void *variable, - longlong value __attribute__ ((unused))) + longlong value MY_ATTRIBUTE ((unused))) { DBUG_ENTER("fini_one_value"); switch ((option->var_type & GET_TYPE_MASK)) { diff -Nru mysql-5.6-5.6.27/packaging/deb-jessie/control mysql-5.6-5.6.33/packaging/deb-jessie/control --- mysql-5.6-5.6.27/packaging/deb-jessie/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-jessie/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.5 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-jessie/mysql-common.install mysql-5.6-5.6.33/packaging/deb-jessie/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-jessie/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-jessie/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -17,7 +17,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-jessie/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-jessie/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-jessie/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-jessie/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -118,8 +136,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -129,8 +147,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -153,8 +171,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-jessie/source/include-binaries mysql-5.6-5.6.33/packaging/deb-jessie/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-jessie/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-jessie/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-precise/control mysql-5.6-5.6.33/packaging/deb-precise/control --- mysql-5.6-5.6.27/packaging/deb-precise/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-precise/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.3 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-precise/mysql-common.install mysql-5.6-5.6.33/packaging/deb-precise/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-precise/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-precise/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-precise/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-precise/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-precise/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-precise/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -120,8 +138,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -131,8 +149,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -155,8 +173,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-precise/source/include-binaries mysql-5.6-5.6.33/packaging/deb-precise/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-precise/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-precise/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-trusty/control mysql-5.6-5.6.33/packaging/deb-trusty/control --- mysql-5.6-5.6.27/packaging/deb-trusty/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-trusty/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.5 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-trusty/mysql-common.install mysql-5.6-5.6.33/packaging/deb-trusty/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-trusty/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-trusty/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-trusty/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-trusty/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-trusty/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-trusty/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -120,8 +138,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -131,8 +149,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -155,8 +173,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-trusty/source/include-binaries mysql-5.6-5.6.33/packaging/deb-trusty/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-trusty/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-trusty/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-utopic/control mysql-5.6-5.6.33/packaging/deb-utopic/control --- mysql-5.6-5.6.27/packaging/deb-utopic/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-utopic/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.5 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-utopic/mysql-common.install mysql-5.6-5.6.33/packaging/deb-utopic/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-utopic/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-utopic/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -17,7 +17,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-utopic/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-utopic/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-utopic/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-utopic/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -120,8 +138,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -131,8 +149,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -155,8 +173,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-utopic/source/include-binaries mysql-5.6-5.6.33/packaging/deb-utopic/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-utopic/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-utopic/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-vivid/control mysql-5.6-5.6.33/packaging/deb-vivid/control --- mysql-5.6-5.6.27/packaging/deb-vivid/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-vivid/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.6 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-vivid/mysql-common.install mysql-5.6-5.6.33/packaging/deb-vivid/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-vivid/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-vivid/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -20,7 +20,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-vivid/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-vivid/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-vivid/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-vivid/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -120,8 +138,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -131,8 +149,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -155,8 +173,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-vivid/source/include-binaries mysql-5.6-5.6.33/packaging/deb-vivid/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-vivid/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-vivid/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-wheezy/control mysql-5.6-5.6.33/packaging/deb-wheezy/control --- mysql-5.6-5.6.27/packaging/deb-wheezy/control 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wheezy/control 2016-08-26 11:22:35.000000000 +0000 @@ -4,7 +4,7 @@ Priority: optional Standards-Version: 3.9.3 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev Package: mysql-server Architecture: any diff -Nru mysql-5.6-5.6.27/packaging/deb-wheezy/mysql-common.install mysql-5.6-5.6.33/packaging/deb-wheezy/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-wheezy/mysql-common.install 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wheezy/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ usr/share/aclocal/mysql.m4 usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN -usr/share/mysql/INSTALL-BINARY usr/share/mysql/docs/ChangeLog # localized error msgs usr/share/mysql/*/errmsg.sys diff -Nru mysql-5.6-5.6.27/packaging/deb-wheezy/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-wheezy/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-wheezy/mysql-community-server.mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wheezy/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -37,18 +37,36 @@ MYSQLDATA=/var/lib/mysql VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi } server_stop () { - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) COUNT=0 while :; do COUNT=$(( COUNT+1 )) echo -n . - if [ "${PSCOUNT}" -eq 1 ]; + if [ "${RUNNING}" -eq 0 ]; then echo break @@ -58,7 +76,7 @@ echo return 1 fi - PSCOUNT=$(get_pcount) + RUNNING=$(get_running) sleep 1 done return 0 @@ -66,8 +84,8 @@ case "$1" in 'start') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "A MySQL Server is already started" else @@ -118,8 +136,8 @@ echo -n . done echo - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is started" else @@ -129,8 +147,8 @@ ;; 'stop') - PSCOUNT=$(get_pcount) - if [ "${PSCOUNT}" -gt 1 ]; + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; then killall -15 mysqld server_stop @@ -153,8 +171,8 @@ ;; 'status') - PSCOUNT=$(get_pcount) - if [ ${PSCOUNT} -gt 1 ]; + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; then log_action_msg "MySQL Community Server ${VERSION} is running" else diff -Nru mysql-5.6-5.6.27/packaging/deb-wheezy/source/include-binaries mysql-5.6-5.6.33/packaging/deb-wheezy/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-wheezy/source/include-binaries 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wheezy/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,4 +30,5 @@ debian/extra/qa_auth_server-plugin debian/extra/semisync_master-plugin debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/changelog mysql-5.6-5.6.33/packaging/deb-wily/changelog --- mysql-5.6-5.6.27/packaging/deb-wily/changelog 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/changelog 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,137 @@ +mysql-community (5.6.28-1ubuntu15.10) wily; urgency=low + + * New upstream release + + -- Lars Tangvald Thu, 12 Nov 2015 10:34:23 +0100 + +mysql-community (5.6.26-1ubuntu15.04) vivid; urgency=low + + * new upstream release + * mysql-commercial-server now depends on perl, psmisc + mysql-commercial-test now depends on python, libmysqlclient-dev + (Closes: #20893836) + + -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 + +mysql-community (5.6.25-3ubuntu15.04) vivid; urgency=low + + * new upstream release + * mysql-common now conflicts with + mysql-server-5.6, mysql-server-core-5.6 + mysql-client-5.6, mysql-client-core-5.6 + * mysql-*-server no more provides + mysql-server-5.6, mysql-server-core-5.6 + * mysql-*-client no more provides + mysql-client-5.6, mysql-client-core-5.6 + + -- Akhil Mohan Mon, 15 Jun 2015 16:48:05 +0530 + +mysql-community (5.6.24-3ubuntu15.04) vivid; urgency=low + + * updated Standards-Version to 3.9.6 in d/control + * apparmor profile updated to allow read on all files under /etc/mysql + * added new conf files under d/extra/*.conf + * mysql_plugin moved from client to server pkg + * innochecksum moved from client to server pkg + * server pkg now replaces client pkg + * added systemd service profile and script + * new /etc/mysql/my.cnf management scheme added for Ubuntu 15.04 + as discussed in Dec 2014 for native packaging source + * added dh "--with systemd" for enabling systemd + + -- Akhil Mohan Wed, 27 May 2015 11:35:35 +0530 + +mysql-community (5.6.24-2ubuntu15.04) vivid; urgency=low + + * new upstream release + * forked packaging source from utopic to vivid + + -- Akhil Mohan Wed, 15 Apr 2015 18:52:22 +0530 + +mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low + + * new upstream release + + -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 + +mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low + + * new upstream release + * mysql-community-server now recommends mysql-client + * mysql-community-server now depends on apparmor + * removed template install-test-db; not installed by default + * d/compat incremented to 9 from 8 + * d/control updated to build depend on debhelper 9 + * added d/*.lintian-overrides and d/source/lintian-overrides + * d/rules updated to reflect correct file permissions + + -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 + +mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low + + * new upstream release + * mysql-common now replaces mysql-server-{,core-}5.6 + + -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 + +mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low + + * new upstream release + * fixed d/*server.postinst to allow dropping test db without + setting root password + * init script will now run my_i_db if data dir is not present or empty + * updated init script to read app armor profile on startup + * forked packaging source from trusty and rebranded for utopic + * updated d/m-c-source.install to pack *.xz packaging source archive + * added more system resources to app armor profile + * dh_apparmor to now run before dh_installinit in d/rules + * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 + + -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 + +mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * updated d/rules to increment -j8 as make option + * updated d/source/include-binaries to add mysql_no_login plugin + * updated CMake option WITH_EXTRA_CHARSETS from complex to all + + -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 + +mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * added fakeroot as build-dep in d/control + * added d/*.dirs for bench, dev and test pkg + * updated d/rules to make compilation verbose + * removed default CFLAGS, CXXFLAGS in d/rules + * added patch for testsuite search paths under d/patches + * modified cmake option for testsuite in d/rules + * updated patch d/fix-mysql_install_db.patch + * enabled two patches in d/patches/series + * removed extra permissions check in d/rules when fixed in source + * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf + * modified d/*-test.* for updated location of testsuite + * updated d/{mysql-*-server.install,rules} to include debug plugins + * updated d/rules to remove storage engine cmake options + * modified data dir permission in d/*server.{pre,post}inst + * updated d/source/include-binaries to add debug plugins + * updated d/rules to rename debug plugins + + -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 + +mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * d/rules updated to rid of files removed from source + * modified path for source tar in source pkg + * obscured actual filenames in d/source/include-binaries + * modified d/rules to handle obscured filenames + + -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 + +mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low + + * new upstream release + + -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/compat mysql-5.6-5.6.33/packaging/deb-wily/compat --- mysql-5.6-5.6.27/packaging/deb-wily/compat 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/compat 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +9 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/control mysql-5.6-5.6.33/packaging/deb-wily/control --- mysql-5.6-5.6.27/packaging/deb-wily/control 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/control 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,192 @@ +Source: mysql-community +Maintainer: MySQL Release Engineering +Section: database +Priority: optional +Standards-Version: 3.9.6 +Homepage: http://www.mysql.com/ +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev + +Package: mysql-server +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} +Description: MySQL Server meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql server + package available in the repository. + +Package: mysql-community-server +Architecture: any +Pre-depends: debconf (>= 0.2.17), adduser +Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, + ${shlibs:Depends}, ${misc:Depends} +Recommends: mysql-client (= ${binary:Version}) +Conflicts: mysql, + mysql-server-5.0, mysql-server-core-5.0, + mysql-server-5.1, mysql-server-core-5.1, + mysql-server-5.5, mysql-server-core-5.5, + mysql-server-5.6, mysql-server-core-5.6, + mysql-commercial-server +Replaces: mysql, + mysql-server-5.0, mysql-server-core-5.0, + mysql-server-5.1, mysql-server-core-5.1, + mysql-server-5.5, mysql-server-core-5.5, + mysql-server-5.6, mysql-server-core-5.6, + mysql-commercial-server, + mysql-community-client +Provides: virtual-mysql-server, virtual-mysql-server-core +Description: MySQL Server + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package includes the MySQL server binary as well as related + utilities to run and administer a MySQL server. + +Package: mysql-client +Architecture: any +Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} +Description: MySQL Client meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql client + package available in the repository. + +Package: mysql-community-client +Architecture: any +Depends: mysql-common (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, + mysql-client-5.0, mysql-client-core-5.0, + mysql-client-5.1, mysql-client-core-5.1, + mysql-client-5.5, mysql-client-core-5.5, + mysql-client-5.6, mysql-client-core-5.6, + mysql-commercial-client +Replaces: mysql, + mysql-client-5.0, mysql-client-core-5.0, + mysql-client-5.1, mysql-client-core-5.1, + mysql-client-5.5, mysql-client-core-5.5, + mysql-client-5.6, mysql-client-core-5.6, + mysql-commercial-client +Provides: virtual-mysql-client, virtual-mysql-client-core +Description: MySQL Client + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the standard MySQL clients and + administration tools. + +Package: libmysqlclient18 +Architecture: any +Section: libs +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Depends: mysql-common (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: MySQL shared client libraries + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the shared libraries for MySQL client + applications. + +Package: mysql-common +Architecture: any +Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} +Multi-Arch: foreign +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, mysql-server-5.6, mysql-server-core-5.6, + mysql-client-5.6, mysql-client-core-5.6, + mariadb-server-5.5, percona-xtradb-cluster-common-5.5 +Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, + mysql-server-5.6, mysql-server-core-5.6, + mariadb-server-5.5, percona-xtradb-cluster-common-5.5 +Provides: mysql-common, mysql-common-5.6 +Description: MySQL Common + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains common files needed by MySQL client + library, MySQL database server, and MySQL embedded server. + +Package: libmysqlclient-dev +Architecture: any +Section: libdevel +Depends: libmysqlclient18 (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Replaces: mysql-client-5.6, mysql-client-core-5.6 +Description: MySQL development headers + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the development header files necessary + to develop MySQL client applications. + +Package: libmysqld-dev +Architecture: any +Section: libdevel +Depends: libmysqlclient-dev (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: MySQL embedded server library + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the MySQL server as an embedded library. + +Package: mysql-testsuite +Architecture: any +Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} +Description: MySQL Testsuite meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql test + package available in the repository. + +Package: mysql-community-test +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), + mysql-community-client (= ${binary:Version}), python, + libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, + mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, + mysql-testsuite-5.6, mysql-commercial-test +Description: MySQL Test Run MTR - The MySQL testsuite + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the MySQL regression test suite for MySQL + database server. + +Package: mysql-community-bench +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, mysql-commercial-bench +Description: MySQL Bench + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. + +Package: mysql-community-source +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Description: MySQL source + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/copyright mysql-5.6-5.6.33/packaging/deb-wily/copyright --- mysql-5.6-5.6.27/packaging/deb-wily/copyright 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/copyright 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,41 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: MySQL Server 5.6 +Upstream-Contact: MySQL Release Engineering +Source: http://dev.mysql.com/ + +Copyright: 2000, 2014, 2015, Oracle and/or its affiliates. All rights reserved. +License: + This is a release of MySQL, a dual-license SQL database server. + For the avoidance of doubt, this particular copy of the software + is released under the version 2 of the GNU General Public License. + MySQL is brought to you by Oracle. + . + MySQL FOSS License Exception + We want free and open source software applications under certain + licenses to be able to use specified GPL-licensed MySQL client + libraries despite the fact that not all such FOSS licenses are + compatible with version 2 of the GNU General Public License. + Therefore there are special exceptions to the terms and conditions + of the GPLv2 as applied to these client libraries, which are + identified and described in more detail in the FOSS License + Exception at + . + . + This distribution may include materials developed by third + parties. For license and attribution notices for these + materials, please refer to the documentation that accompanies + this distribution (see the "Licenses for Third-Party Components" + appendix) or view the online documentation at + . + . + GPLv2 Disclaimer + For the avoidance of doubt, except that if any license choice + other than GPL or LGPL is available it will apply instead, + Oracle elects to use only the General Public License version 2 + (GPLv2) at this time for any software where a choice of GPL + license versions is made available with the language indicating + that GPLv2 or any later version may be used, or where a choice + . + The full text of the GNU General Public License version 2 can + be found in the file + `/usr/share/mysql/doc/COPYING'. diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/apparmor-profile mysql-5.6-5.6.33/packaging/deb-wily/extra/apparmor-profile --- mysql-5.6-5.6.27/packaging/deb-wily/extra/apparmor-profile 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/apparmor-profile 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,47 @@ +# vim:syntax=apparmor +# Last Modified: Fri Feb 28 18:06:30 2014 +#include + +/usr/sbin/mysqld { + #include + #include + #include + +# Allow system resource access + /sys/devices/system/cpu/ r, + capability sys_resource, + capability dac_override, + capability setuid, + capability setgid, + +# Allow config access + /etc/mysql/** r, + +# Allow pid and socket file access + /run/mysqld/mysqld.pid rw, + /run/mysqld/mysqld.sock rw, + +# Allow read/ write to /tmp + /tmp/ r, + /tmp/* rw, + +# Allow execution of server binary + /usr/sbin/mysqld mr, + /usr/sbin/mysqld-debug mr, + +# Allow plugin access + /usr/lib/mysql/plugin/ r, + /usr/lib/mysql/plugin/*.so* mr, + +# Allow error msg and charset access + /usr/share/mysql/ r, + /usr/share/mysql/** r, + +# Allow data dir access + /var/lib/mysql/ r, + /var/lib/mysql/** rwk, + +# Allow log file access + /var/log/mysql/ r, + /var/log/mysql/** rw, +} diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/my.cnf.fallback mysql-5.6-5.6.33/packaging/deb-wily/extra/my.cnf.fallback --- mysql-5.6-5.6.27/packaging/deb-wily/extra/my.cnf.fallback 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/my.cnf.fallback 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql.cnf mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql.cnf --- mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Community Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ +!includedir /etc/mysql/mysql.conf.d/ diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql.conf.cnf mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql.conf.cnf --- mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql.conf.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql.conf.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Client configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysql] diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/mysqld.cnf mysql-5.6-5.6.33/packaging/deb-wily/extra/mysqld.cnf --- mysql-5.6-5.6.27/packaging/deb-wily/extra/mysqld.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/mysqld.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,48 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysqld_safe] +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +user = mysql +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc-messages-dir = /usr/share/mysql +explicit_defaults_for_timestamp + +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = 127.0.0.1 + +log-error = /var/log/mysql/error.log + +# Recommended in standard MySQL setup +sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES + +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql_embedded.1 mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql_embedded.1 --- mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql_embedded.1 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql_embedded.1 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +.so man1/mysql.1 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql-systemd-start mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql-systemd-start --- mysql-5.6-5.6.27/packaging/deb-wily/extra/mysql-systemd-start 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/extra/mysql-systemd-start 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,84 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Scripts to run by MySQL systemd service +# +# Needed argument: pre | post +# +# pre mode : try to perform sanity check for configuration, log, data +# post mode : ping server until answer is received + +pinger () { + while /bin/true ; do + sleep 1 + mysqladmin ping >/dev/null 2>&1 && break + done +} + +sanity () { + MYSQLRUN=/var/run/mysqld + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + fi + + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + /lib/init/apparmor-profile-load usr.sbin.mysqld + + if [ ! -r /etc/mysql/my.cnf ]; then + echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." + exit 1 + fi +} + +case $1 in + "pre") sanity ;; + "post") pinger ;; +esac diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient18.install mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient18.install --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient18.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient18.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/*/libmysqlclient.so.* +# legal +usr/share/doc/libmysqlclient18/COPYING +usr/share/doc/libmysqlclient18/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient18.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient18.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient18.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient18.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql +libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz +libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +libmysqlclient18: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient-dev.install mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient-dev.install --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient-dev.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/include/mysql/*.h +usr/include/mysql/mysql/*.h +usr/include/mysql/mysql/*.h.pp +usr/include/mysql/mysql/psi/*.h +usr/lib/*/libmysqlclient.a +usr/lib/*/libmysqlclient.so +usr/lib/*/libmysqlservices.a +usr/bin/mysql_config +usr/bin/mysql_config_editor +usr/share/man/man1/mysql_config.1 +usr/share/man/man1/mysql_config_editor.1 +# legal +usr/share/doc/libmysqlclient-dev/COPYING +usr/share/doc/libmysqlclient-dev/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient-dev.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient-dev.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqlclient-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqlclient-dev.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql +libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz +libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +libmysqlclient-dev: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqld-dev.install mysql-5.6-5.6.33/packaging/deb-wily/libmysqld-dev.install --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqld-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqld-dev.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/*/libmysqld.a +usr/lib/*/libmysqld-debug.a +# legal +usr/share/doc/libmysqld-dev/COPYING +usr/share/doc/libmysqld-dev/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/libmysqld-dev.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/libmysqld-dev.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/libmysqld-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/libmysqld-dev.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql +libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz +libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-client.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-client.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-client.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-client.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-client/COPYING +usr/share/doc/mysql-client/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-client.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-client.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-client.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-client.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql +mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz +mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.dirs mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.dirs --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.dirs 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.dirs 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,16 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +etc/mysql/conf.d diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# configuration file and script +debian/extra/my.cnf.fallback etc/mysql/ +debian/extra/mysql.conf.cnf etc/mysql/conf.d/mysql.cnf + +usr/share/aclocal/mysql.m4 +usr/share/mysql/docs/INFO_SRC +usr/share/mysql/docs/INFO_BIN +usr/share/mysql/docs/ChangeLog +# localized error msgs +usr/share/mysql/*/errmsg.sys +usr/share/mysql/errmsg-utf8.txt +# charsets +usr/share/mysql/charsets/*.xml +usr/share/mysql/charsets/README +# legal +usr/share/doc/mysql-common/COPYING +usr/share/doc/mysql-common/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql +mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz +mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.postinst mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.postinst --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.postinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.postinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +if [ "$1" = "configure" ]; then + # Low priority fallback for client use when no server is installed. + update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/my.cnf.fallback 100 +fi + +#DEBHELPER# diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.postrm mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.postrm --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-common.postrm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-common.postrm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +if [ "$1" = "purge" ]; then + rmdir /etc/mysql 2>/dev/null || true + update-alternatives --remove-all my.cnf +fi + +#DEBHELPER# diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-bench.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-bench.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-bench.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-bench.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql/sql-bench/* +# legal +usr/share/doc/mysql-community-bench/COPYING +usr/share/doc/mysql-community-bench/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-bench.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-bench.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-bench.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-bench.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql +mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz +mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-client.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-client.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-client.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-client.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,56 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# binaries +usr/bin/myisam_ftdump +usr/bin/mysql +usr/bin/mysql_embedded +usr/bin/mysqlaccess +usr/bin/mysqlaccess.conf +usr/bin/mysqladmin +usr/bin/mysqlbug +usr/bin/mysqlcheck +usr/bin/mysql_client_test +usr/bin/mysql_client_test_embedded +usr/bin/mysqldump +usr/bin/mysqldumpslow +usr/bin/mysql_find_rows +usr/bin/mysql_fix_extensions +usr/bin/mysqlimport +usr/bin/mysqlshow +usr/bin/mysqlslap +usr/bin/mysql_waitpid +# man pages +usr/share/man/man1/myisam_ftdump.1 +usr/share/man/man1/mysql.1 +usr/share/man/man1/mysql_embedded.1 +usr/share/man/man1/mysqlaccess.1 +usr/share/man/man1/mysqladmin.1 +usr/share/man/man1/mysqlbug.1 +usr/share/man/man1/mysqlcheck.1 +usr/share/man/man1/mysql_client_test.1 +usr/share/man/man1/mysql_client_test_embedded.1 +usr/share/man/man1/mysqldump.1 +usr/share/man/man1/mysqldumpslow.1 +usr/share/man/man1/mysql_find_rows.1 +usr/share/man/man1/mysql_fix_extensions.1 +usr/share/man/man1/mysqlimport.1 +usr/share/man/man1/mysqlman.1 +usr/share/man/man1/mysqlshow.1 +usr/share/man/man1/mysqlslap.1 +usr/share/man/man1/mysql_waitpid.1 +# legal +usr/share/doc/mysql-community-client/COPYING +usr/share/doc/mysql-community-client/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-client.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-client.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-client.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-client.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql +mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz +mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +mysql-community-client: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.config mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.config --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.config 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.config 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,88 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /usr/share/debconf/confmodule + +if [ "$1" = "configure" ] && [ -z "$2" ]; +then + + set -e + + PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server + INSTALLED_PKG=none + MYSQLDATA=/var/lib/mysql + + IFS_BACKUP=${IFS} + IFS=":" + for PKG in ${PKG_LIST}; + do + STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) + if [ "${STATUS}" = "installed" ]; + then + INSTALLED_PKG=${PKG} + break + fi + done + IFS=${IFS_BACKUP} + + if [ "${INSTALLED_PKG}" = "none" ]; + then + if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; + then + db_input high mysql-community-server/data-dir || true + else + db_fset mysql-community-server/data-dir seen true + fi + + while :; do + PASSWD="" + db_input high mysql-community-server/root-pass || true + db_go + + db_get mysql-community-server/root-pass + if [ -z "${RET}" ]; + then + db_fset mysql-community-server/root-pass seen true + db_fset mysql-community-server/re-root-pass seen true + break + fi + PASSWD="${RET}" + + db_input high mysql-community-server/re-root-pass || true + db_go + + db_get mysql-community-server/re-root-pass + if [ "${RET}" == "${PASSWD}" ]; + then + PASSWD="" + break + fi + + db_fset mysql-community-server/root-pass-mismatch seen false + db_input critical mysql-community-server/root-pass-mismatch + db_set mysql-community-server/root-pass "" + db_set mysql-community-server/re-root-pass "" + done + + else + db_fset mysql-community-server/data-dir seen true + db_fset mysql-community-server/root-pass seen true + db_fset mysql-community-server/re-root-pass seen true + fi + + set +e +fi diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.dirs mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.dirs --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.dirs 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.dirs 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +etc/mysql/mysql.conf.d +etc/init.d +usr/lib/mysql +usr/lib/mysql/plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,94 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# binaries +usr/bin/innochecksum +usr/bin/msql2mysql +usr/bin/myisamchk +usr/bin/myisamlog +usr/bin/myisampack +usr/bin/my_print_defaults +usr/bin/mysqlbinlog +usr/bin/mysql_convert_table_format +usr/bin/mysqld_multi +usr/bin/mysqld_safe +usr/bin/mysqlhotcopy +usr/bin/mysql_install_db +usr/bin/mysql_plugin +usr/bin/mysql_secure_installation +usr/bin/mysql_setpermission +usr/bin/mysqltest +usr/bin/mysqltest_embedded +usr/bin/mysql_tzinfo_to_sql +usr/bin/mysql_upgrade +usr/bin/mysql_zap +usr/bin/perror +usr/bin/replace +usr/bin/resolveip +usr/bin/resolve_stack_dump +usr/sbin/mysqld +# debug binary +usr/sbin/mysqld-debug +# man pages +usr/share/man/man1/innochecksum.1 +usr/share/man/man1/comp_err.1 +usr/share/man/man1/msql2mysql.1 +usr/share/man/man1/myisamchk.1 +usr/share/man/man1/myisamlog.1 +usr/share/man/man1/myisampack.1 +usr/share/man/man1/my_print_defaults.1 +usr/share/man/man1/mysqlbinlog.1 +usr/share/man/man1/mysql_convert_table_format.1 +usr/share/man/man1/mysqld_multi.1 +usr/share/man/man1/mysqld_safe.1 +usr/share/man/man1/mysqlhotcopy.1 +usr/share/man/man1/mysql_install_db.1 +usr/share/man/man1/mysql_plugin.1 +usr/share/man/man1/mysql_secure_installation.1 +usr/share/man/man1/mysql.server.1 +usr/share/man/man1/mysql_setpermission.1 +usr/share/man/man1/mysql-stress-test.pl.1 +usr/share/man/man1/mysqltest.1 +usr/share/man/man1/mysqltest_embedded.1 +usr/share/man/man1/mysql_tzinfo_to_sql.1 +usr/share/man/man1/mysql_upgrade.1 +usr/share/man/man1/mysql_zap.1 +usr/share/man/man1/perror.1 +usr/share/man/man1/replace.1 +usr/share/man/man1/resolveip.1 +usr/share/man/man1/resolve_stack_dump.1 +usr/share/man/man8/mysqld.8 +# confguration files +debian/extra/mysql.cnf etc/mysql/ +debian/extra/mysqld.cnf etc/mysql/mysql.conf.d/ +# app armor profile +etc/apparmor.d/usr.sbin.mysqld +# SQL files +usr/share/mysql/*.sql +# plugins +usr/lib/mysql/plugin/*.so +usr/lib/mysql/plugin/debug/*.so +usr/lib/mysql/plugin/daemon_example.ini +usr/lib/mysql/plugin/debug/daemon_example.ini +# support files +usr/share/mysql/mysqld_multi.server +usr/share/mysql/magic +usr/share/mysql/mysql-log-rotate +usr/share/mysql/mysql-systemd-start +usr/share/mysql/my-default.cnf +usr/share/mysql/dictionary.txt +# legal +usr/share/doc/mysql-community-server/COPYING +usr/share/doc/mysql-community-server/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,23 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql +mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz +mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +mysql-community-server: embedded-library +# Since we ship debug plugins so this error is overridden +mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.mysql.init 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,192 @@ +#!/bin/bash +# +### BEGIN INIT INFO +# Provides: mysql +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Should-Start: $network $time +# Should-Stop: $network $time +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/ Stop MySQL Community Server daemon +# Description: This service script facilitates startup and shutdown of +# mysqld daemon throught its wrapper script mysqld_safe +### END INIT INFO +# + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /lib/lsb/init-functions + +cd / +umask 077 + +MYSQLDATA=/var/lib/mysql +VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) + +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi +} + +server_stop () { + RUNNING=$(get_running) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${RUNNING}" -eq 0 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + RUNNING=$(get_running) + sleep 1 + done + return 0 +} + +case "$1" in + 'start') + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + log_action_msg "A MySQL Server is already started" + else + MYSQLRUN=/var/run/mysqld + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + fi + + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + /lib/init/apparmor-profile-load usr.sbin.mysqld + + su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" + for i in 1 2 3 4 5 6; + do + sleep 1 + echo -n . + done + echo + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is started" + else + log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." + fi + fi + ;; + + 'stop') + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + killall -15 mysqld + server_stop + if [ "$?" -eq 0 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is stopped" + else + log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" + fi + else + log_action_msg "MySQL Community Server ${VERSION} is already stopped" + fi + ;; + + 'restart'|'reload'|'force-reload') + log_action_msg "Stopping MySQL Community Server ${VERSION}" + $0 stop + log_action_msg "Re-starting MySQL Community Server ${VERSION}" + $0 start + ;; + + 'status') + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is running" + else + log_action_msg "MySQL Community Server ${VERSION} is not running" + exit 3 + fi + ;; + + *) + echo "Usage: $SELF start|stop|restart|reload|force-reload|status" + exit 1 + ;; +esac + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.mysql.service mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.mysql.service --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.mysql.service 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.mysql.service 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# MySQL systemd service file + +[Unit] +Description=MySQL Community Server +After=network.target + +[Install] +WantedBy=multi-user.target + +[Service] +User=mysql +Group=mysql +PermissionsStartOnly=true +ExecStartPre=/usr/share/mysql/mysql-systemd-start pre +ExecStart=/usr/bin/mysqld_safe +ExecStartPost=/usr/share/mysql/mysql-systemd-start post +TimeoutSec=600 +Restart=on-failure diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.postinst mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.postinst --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.postinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.postinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,95 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /usr/share/debconf/confmodule + +take_upstart_job_backup () { + if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; + then + mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup + fi +} + +case "$1" in + configure) + + if [ -z "$2" ]; + then + set -e + + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/mysql.cnf" 200 + + MYSQLDATA=/var/lib/mysql + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + fi + + db_get mysql-community-server/root-pass && PASSWD=${RET} + if [ ! -z "${PASSWD}" ]; + then + db_set mysql-community-server/root-pass "" + db_set mysql-community-server/re-root-pass "" + PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" + else + PASSWD="" + fi + + SQL=`mktemp` + if [ -f "${SQL}" ]; + then + chmod 700 ${SQL} + cat << EOF > ${SQL} +USE mysql; +${PASSWD} +DELETE FROM user WHERE user=''; +FLUSH PRIVILEGES; +EOF + mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL + PASSWD="" + rm -f ${SQL} + fi + + set +e + + fi + + ;; + + abort-upgrade|abort-remove|abort-configure) + + ;; + + *) + exit 1 + ;; +esac + +db_stop + +take_upstart_job_backup + +#DEBHELPER# + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.postrm mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.postrm --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.postrm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.postrm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,155 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; +then +. /usr/share/debconf/confmodule +fi + +place_upstart_job_back () { + if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; + then + mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf + fi +} + +get_pcount () { + PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) + echo "${PSCOUNT}" +} + +server_stop () { + PSCOUNT=$(get_pcount) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${PSCOUNT}" -eq 1 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + PSCOUNT=$(get_pcount) + sleep 1 + done + return 0 +} + +case "$1" in + remove) + + set -e + + place_upstart_job_back + update-alternatives --remove my.cnf "/etc/mysql/mysql.cnf" + + set +e + + ;; + + purge) + + set -e + + place_upstart_job_back + + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + MYSQLRUN=/var/run/mysqld + + server_stop + + db_input high mysql-community-server/remove-data-dir || true + db_go + db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} + if [ "${RMDATADIR}" = "true" ]; + then + if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; + then + rm -rf ${MYSQLRUN} + fi + + if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; + then + rm -rf ${MYSQLLOG} + fi + + if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; + then + rm -rf ${MYSQLDATA} + fi + + if getent passwd mysql >/dev/null; + then + userdel mysql + fi + fi + + set +e + ;; + + abort-install) + + set -e + + place_upstart_job_back + + if [ -x "/etc/init.d/mysql" ]; + then + invoke-rc.d mysql start || exit $? + else + if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; + then + rm -rf ${MYSQLRUN} + fi + + if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; + then + rm -rf ${MYSQLLOG} + fi + + if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; + then + rm -rf ${MYSQLDATA} + fi + + if getent passwd mysql >/dev/null; + then + userdel mysql + fi + fi + + set +e + ;; + + upgrade|abort-upgrade) + + ;; + + *) + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.preinst mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.preinst --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.preinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.preinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,123 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +get_pcount () { + PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) + echo "${PSCOUNT}" +} + +server_stop () { + PSCOUNT=$(get_pcount) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${PSCOUNT}" -eq 1 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + PSCOUNT=$(get_pcount) + sleep 1 + done + return 0 +} + +case "$1" in + install) + + if [ -z "$2" ]; + then + + set -e + + if [ -x "/etc/init.d/mysql" ]; + then + invoke-rc.d mysql stop || exit $? + server_stop + fi + + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + MYSQLRUN=/var/run/mysqld + + if ! getent group mysql >/dev/null; + then + addgroup --system mysql >/dev/null + fi + + if ! getent passwd mysql >/dev/null; + then + adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null + fi + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + set +e + + fi + + ;; + + upgrade) + + set -e + + #DEBHELPER# + server_stop + + set +e + + ;; + + abort-upgrade) + + ;; + + *) + exit 1 + ;; +esac + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.prerm mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.prerm --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.prerm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.prerm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,24 @@ +#!/bin/bash + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +#DEBHELPER# + +set +e + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.templates mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.templates --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-server.templates 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-server.templates 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,33 @@ +Template: mysql-community-server/root-pass +Type: password +Description: Enter root password: + Please provide a strong password that will be set for the root account of your MySQL database. + Leave it blank if you do not wish to set or change the root password at this time. + +Template: mysql-community-server/re-root-pass +Type: password +Description: Re-enter root password: + Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. + +Template: mysql-community-server/root-pass-mismatch +Type: error +Description: The two passwords did not match + Please try again. Make sure you type the exact same password twice. + +Template: mysql-community-server/remove-data-dir +Type: boolean +Default: false +Description: Remove data directory at /var/lib/mysql ? + This operation will remove the data directory that stores all the databases, tables and related meta-data. + It is highly recommended to take data backup before removing the data directory. + +Template: mysql-community-server/data-dir +Type: note +Description: Data directory found when no MySQL server package is installed + A data directory '/var/lib/mysql' is present on this system when no MySQL server + package is currently installed on the system. The directory may be under control of + server package received from third-party vendors. It may also be an unclaimed data + directory from previous removal of mysql packages. + . + It is highly recommended to take data backup. If you have not done so, now would be + the time to take backup in another shell. Once completed, press 'Ok' to continue. diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-source.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-source.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-source.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-source.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +../*.dsc usr/src/mysql/ +../*.tar.gz usr/src/mysql/ +../*.tar.xz usr/src/mysql/ +# legal +usr/share/doc/mysql-community-source/COPYING +usr/share/doc/mysql-community-source/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-source.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-source.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-source.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-source.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql +mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz +mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql-test/* +usr/share/man/man1/mysql-test-run.pl.1 +# legal +usr/share/doc/mysql-community-test/COPYING +usr/share/doc/mysql-community-test/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.links mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.links --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.links 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.links 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,17 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run +usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-community-test.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-community-test.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql +mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz +mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-server.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-server.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-server.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-server.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-server/COPYING +usr/share/doc/mysql-server/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-server.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-server.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-server.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-server.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql +mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz +mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-testsuite.install mysql-5.6-5.6.33/packaging/deb-wily/mysql-testsuite.install --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-testsuite.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-testsuite.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-testsuite/COPYING +usr/share/doc/mysql-testsuite/README diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/mysql-testsuite.lintian-overrides mysql-5.6-5.6.33/packaging/deb-wily/mysql-testsuite.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-wily/mysql-testsuite.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/mysql-testsuite.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql +mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz +mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-man-page-links.patch mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-man-page-links.patch --- mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-man-page-links.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-man-page-links.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,14 @@ +From: Akhil Mohan +Description: Fix path in man page link. +Bug: http://bugs.mysql.com/bug.php?id=70952 + +--- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 ++++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 +@@ -1 +1 @@ +-.so man-gpl-tmp2/mysql_client_test.1 ++.so man1/mysql_client_test.1 +--- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 ++++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 +@@ -1 +1 @@ +-.so man-gpl-tmp2/mysqltest.1 ++.so man1/mysqltest.1 diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-mtr-search-paths.patch mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-mtr-search-paths.patch --- mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-mtr-search-paths.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-mtr-search-paths.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,13 @@ +From: Akhil Mohan +Description: Adding extra search path for testsuite. + +--- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 ++++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 +@@ -288,6 +288,7 @@ + { + $suitedir= my_find_dir($::basedir, + ["share/mysql-test/suite", ++ "lib/mysql-test/suite", + "mysql-test/suite", + "internal/mysql-test/suite", + "mysql-test", diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-mysql_install_db.patch mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-mysql_install_db.patch --- mysql-5.6-5.6.27/packaging/deb-wily/patches/fix-mysql_install_db.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/patches/fix-mysql_install_db.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,43 @@ +From: Terje Røsten +Description: Maintains the pending --skip-my-cnf option in mainline +Bug: + +diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in +index 440a977..7d068fc 100644 +--- a/scripts/mysql_install_db.pl.in ++++ b/scripts/mysql_install_db.pl.in +@@ -113,6 +113,7 @@ EOF2 + print <{srcdir} and $opt->{basedir} ) + { + error($opt,"Specify either --basedir or --srcdir, not both"); + } +-if ( $opt->{'keep-my-cnf'} ) ++if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) + { + $keep_my_cnf = 1; + } +@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) + } + + # ---------------------------------------------------------------------- +-# Create database directories mysql & test ++# Create database directory mysql + # ---------------------------------------------------------------------- + + # FIXME The shell variant uses "mkdir -p": +@@ -697,7 +698,7 @@ if ($opt_user) + } + } + +-foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) ++foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") + { + mkdir($dir, 0700) unless -d $dir; + if ($opt_user and -w "/") diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/patches/series mysql-5.6-5.6.33/packaging/deb-wily/patches/series --- mysql-5.6-5.6.27/packaging/deb-wily/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/patches/series 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#fix-man-page-links.patch +fix-mysql_install_db.patch +fix-mtr-search-paths.patch diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/rules mysql-5.6-5.6.33/packaging/deb-wily/rules --- mysql-5.6-5.6.27/packaging/deb-wily/rules 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/rules 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,137 @@ +#!/usr/bin/make -f + +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +%: + dh $@ + +export DH_VERBOSE=1 +export CFLAGS= +export CXXFLAGS= + +override_dh_auto_configure: + @echo "RULES.$@" + cmake . \ + -DBUILD_CONFIG=mysql_release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DINSTALL_DOCDIR=share/mysql/docs \ + -DINSTALL_DOCREADMEDIR=share/mysql \ + -DINSTALL_INCLUDEDIR=include/mysql \ + -DINSTALL_INFODIR=share/mysql/docs \ + -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ + -DINSTALL_MANDIR=share/man \ + -DINSTALL_MYSQLSHAREDIR=share/mysql \ + -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ + -DINSTALL_PLUGINDIR=lib/mysql/plugin \ + -DINSTALL_SBINDIR=sbin \ + -DINSTALL_SCRIPTDIR=bin \ + -DINSTALL_SQLBENCHDIR=lib/mysql \ + -DINSTALL_SUPPORTFILESDIR=share/mysql \ + -DMYSQL_DATADIR=/var/lib/mysql \ + -DSYSCONFDIR=/etc/mysql \ + -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ + -DWITH_SSL=bundled \ + -DWITH_ZLIB=system \ + -DWITH_EXTRA_CHARSETS=all \ + -DWITH_INNODB_MEMCACHED=1 \ + -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ + -DINSTALL_LAYOUT=DEB + + cat CMakeCache.txt + touch $@ + +override_dh_auto_build: + @echo "RULES.$@" + $(MAKE) -j8 VERBOSE=1 + touch $@ + +override_dh_auto_test: + @echo "RULES.$@" + echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" + touch $@ + +override_dh_auto_install: + + @echo "RULES.$@" + # complete install first + $(MAKE) install DESTDIR=debian/tmp + # remove all redundant files and links + rm debian/tmp/usr/lib/*/*_r* + rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake + rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake + rm debian/tmp/usr/lib/mysql-test/Makefile + # add missing man pages + install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 + # add MySQL Server debug binary and library to package + install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug + install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a + # add debug plugin libraries to package + install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug + for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done + install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug + install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug + # add apparmor profile + install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld + # add systemd script + install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ + # add directory for legal docs + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source + # add COPYING file to each package + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING + # add README file to each package + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README + touch $@ + +override_dh_installinit: + @echo "RULES.$@" + dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld + dh_systemd_enable --name=mysql + dh_installinit --name=mysql -- defaults 19 21 + dh_systemd_start --restart-after-upgrade + touch $@ diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/source/format mysql-5.6-5.6.33/packaging/deb-wily/source/format --- mysql-5.6-5.6.27/packaging/deb-wily/source/format 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/source/format 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/source/include-binaries mysql-5.6-5.6.33/packaging/deb-wily/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-wily/source/include-binaries 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,34 @@ +# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins +debian/extra/server-binary +debian/extra/embedded-server +debian/extra/adt_null-plugin +debian/extra/auth-plugin +debian/extra/auth_socket-plugin +debian/extra/auth_test_plugin-plugin +debian/extra/innodb_engine-plugin +debian/extra/libdaemon_example-plugin +debian/extra/libmemcached-plugin +debian/extra/mypluglib-plugin +debian/extra/mysql_no_login-plugin +debian/extra/qa_auth_client-plugin +debian/extra/qa_auth_interface-plugin +debian/extra/qa_auth_server-plugin +debian/extra/semisync_master-plugin +debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin +debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-wily/watch mysql-5.6-5.6.33/packaging/deb-wily/watch --- mysql-5.6-5.6.27/packaging/deb-wily/watch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-wily/watch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,2 @@ +version=3 +http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/changelog mysql-5.6-5.6.33/packaging/deb-xenial/changelog --- mysql-5.6-5.6.27/packaging/deb-xenial/changelog 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/changelog 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,143 @@ +mysql-community (5.6.31-1ubuntu16.04) xenial; urgency=medium + + * New upstream release + + -- Lars Tangvald Tue, 03 May 2016 09:30:33 +0200 + +mysql-community (5.6.28-1ubuntu15.10) wily; urgency=low + + * New upstream release + + -- Lars Tangvald Thu, 12 Nov 2015 10:34:23 +0100 + +mysql-community (5.6.26-1ubuntu15.04) vivid; urgency=low + + * new upstream release + * mysql-commercial-server now depends on perl, psmisc + mysql-commercial-test now depends on python, libmysqlclient-dev + (Closes: #20893836) + + -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 + +mysql-community (5.6.25-3ubuntu15.04) vivid; urgency=low + + * new upstream release + * mysql-common now conflicts with + mysql-server-5.6, mysql-server-core-5.6 + mysql-client-5.6, mysql-client-core-5.6 + * mysql-*-server no more provides + mysql-server-5.6, mysql-server-core-5.6 + * mysql-*-client no more provides + mysql-client-5.6, mysql-client-core-5.6 + + -- Akhil Mohan Mon, 15 Jun 2015 16:48:05 +0530 + +mysql-community (5.6.24-3ubuntu15.04) vivid; urgency=low + + * updated Standards-Version to 3.9.6 in d/control + * apparmor profile updated to allow read on all files under /etc/mysql + * added new conf files under d/extra/*.conf + * mysql_plugin moved from client to server pkg + * innochecksum moved from client to server pkg + * server pkg now replaces client pkg + * added systemd service profile and script + * new /etc/mysql/my.cnf management scheme added for Ubuntu 15.04 + as discussed in Dec 2014 for native packaging source + * added dh "--with systemd" for enabling systemd + + -- Akhil Mohan Wed, 27 May 2015 11:35:35 +0530 + +mysql-community (5.6.24-2ubuntu15.04) vivid; urgency=low + + * new upstream release + * forked packaging source from utopic to vivid + + -- Akhil Mohan Wed, 15 Apr 2015 18:52:22 +0530 + +mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low + + * new upstream release + + -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 + +mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low + + * new upstream release + * mysql-community-server now recommends mysql-client + * mysql-community-server now depends on apparmor + * removed template install-test-db; not installed by default + * d/compat incremented to 9 from 8 + * d/control updated to build depend on debhelper 9 + * added d/*.lintian-overrides and d/source/lintian-overrides + * d/rules updated to reflect correct file permissions + + -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 + +mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low + + * new upstream release + * mysql-common now replaces mysql-server-{,core-}5.6 + + -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 + +mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low + + * new upstream release + * fixed d/*server.postinst to allow dropping test db without + setting root password + * init script will now run my_i_db if data dir is not present or empty + * updated init script to read app armor profile on startup + * forked packaging source from trusty and rebranded for utopic + * updated d/m-c-source.install to pack *.xz packaging source archive + * added more system resources to app armor profile + * dh_apparmor to now run before dh_installinit in d/rules + * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 + + -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 + +mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * updated d/rules to increment -j8 as make option + * updated d/source/include-binaries to add mysql_no_login plugin + * updated CMake option WITH_EXTRA_CHARSETS from complex to all + + -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 + +mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * added fakeroot as build-dep in d/control + * added d/*.dirs for bench, dev and test pkg + * updated d/rules to make compilation verbose + * removed default CFLAGS, CXXFLAGS in d/rules + * added patch for testsuite search paths under d/patches + * modified cmake option for testsuite in d/rules + * updated patch d/fix-mysql_install_db.patch + * enabled two patches in d/patches/series + * removed extra permissions check in d/rules when fixed in source + * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf + * modified d/*-test.* for updated location of testsuite + * updated d/{mysql-*-server.install,rules} to include debug plugins + * updated d/rules to remove storage engine cmake options + * modified data dir permission in d/*server.{pre,post}inst + * updated d/source/include-binaries to add debug plugins + * updated d/rules to rename debug plugins + + -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 + +mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low + + * new upstream release + * d/rules updated to rid of files removed from source + * modified path for source tar in source pkg + * obscured actual filenames in d/source/include-binaries + * modified d/rules to handle obscured filenames + + -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 + +mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low + + * new upstream release + + -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/compat mysql-5.6-5.6.33/packaging/deb-xenial/compat --- mysql-5.6-5.6.27/packaging/deb-xenial/compat 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/compat 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +9 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/control mysql-5.6-5.6.33/packaging/deb-xenial/control --- mysql-5.6-5.6.27/packaging/deb-xenial/control 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/control 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,192 @@ +Source: mysql-community +Maintainer: MySQL Release Engineering +Section: database +Priority: optional +Standards-Version: 3.9.6 +Homepage: http://www.mysql.com/ +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev + +Package: mysql-server +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} +Description: MySQL Server meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql server + package available in the repository. + +Package: mysql-community-server +Architecture: any +Pre-depends: debconf (>= 0.2.17), adduser +Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, + ${shlibs:Depends}, ${misc:Depends} +Recommends: mysql-client (= ${binary:Version}) +Conflicts: mysql, + mysql-server-5.0, mysql-server-core-5.0, + mysql-server-5.1, mysql-server-core-5.1, + mysql-server-5.5, mysql-server-core-5.5, + mysql-server-5.6, mysql-server-core-5.6, + mysql-commercial-server +Replaces: mysql, + mysql-server-5.0, mysql-server-core-5.0, + mysql-server-5.1, mysql-server-core-5.1, + mysql-server-5.5, mysql-server-core-5.5, + mysql-server-5.6, mysql-server-core-5.6, + mysql-commercial-server, + mysql-community-client +Provides: virtual-mysql-server, virtual-mysql-server-core +Description: MySQL Server + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package includes the MySQL server binary as well as related + utilities to run and administer a MySQL server. + +Package: mysql-client +Architecture: any +Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} +Description: MySQL Client meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql client + package available in the repository. + +Package: mysql-community-client +Architecture: any +Depends: mysql-common (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, + mysql-client-5.0, mysql-client-core-5.0, + mysql-client-5.1, mysql-client-core-5.1, + mysql-client-5.5, mysql-client-core-5.5, + mysql-client-5.6, mysql-client-core-5.6, + mysql-commercial-client +Replaces: mysql, + mysql-client-5.0, mysql-client-core-5.0, + mysql-client-5.1, mysql-client-core-5.1, + mysql-client-5.5, mysql-client-core-5.5, + mysql-client-5.6, mysql-client-core-5.6, + mysql-commercial-client +Provides: virtual-mysql-client, virtual-mysql-client-core +Description: MySQL Client + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the standard MySQL clients and + administration tools. + +Package: libmysqlclient18 +Architecture: any +Section: libs +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Depends: mysql-common (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: MySQL shared client libraries + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the shared libraries for MySQL client + applications. + +Package: mysql-common +Architecture: any +Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} +Multi-Arch: foreign +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, mysql-server-5.6, mysql-server-core-5.6, + mysql-client-5.6, mysql-client-core-5.6, + mariadb-server-5.5, percona-xtradb-cluster-common-5.5 +Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, + mysql-server-5.6, mysql-server-core-5.6, + mariadb-server-5.5, percona-xtradb-cluster-common-5.5 +Provides: mysql-common, mysql-common-5.6 +Description: MySQL Common + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains common files needed by MySQL client + library, MySQL database server, and MySQL embedded server. + +Package: libmysqlclient-dev +Architecture: any +Section: libdevel +Depends: libmysqlclient18 (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Replaces: mysql-client-5.6, mysql-client-core-5.6 +Description: MySQL development headers + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the development header files necessary + to develop MySQL client applications. + +Package: libmysqld-dev +Architecture: any +Section: libdevel +Depends: libmysqlclient-dev (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: MySQL embedded server library + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the MySQL server as an embedded library. + +Package: mysql-testsuite +Architecture: any +Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} +Description: MySQL Testsuite meta package depending on latest version + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This is a meta package that depends on the latest mysql test + package available in the repository. + +Package: mysql-community-test +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), + mysql-community-client (= ${binary:Version}), python, + libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, + mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, + mysql-testsuite-5.6, mysql-commercial-test +Description: MySQL Test Run MTR - The MySQL testsuite + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. This package contains the MySQL regression test suite for MySQL + database server. + +Package: mysql-community-bench +Architecture: any +Depends: mysql-community-server (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: mysql, mysql-commercial-bench +Description: MySQL Bench + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. + +Package: mysql-community-source +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Description: MySQL source + The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, + and robust SQL (Structured Query Language) database server. MySQL Server + is intended for mission-critical, heavy-load production systems as well + as for embedding into mass-deployed software. MySQL is a trademark of + Oracle. diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/copyright mysql-5.6-5.6.33/packaging/deb-xenial/copyright --- mysql-5.6-5.6.27/packaging/deb-xenial/copyright 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/copyright 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,41 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: MySQL Server 5.6 +Upstream-Contact: MySQL Release Engineering +Source: http://dev.mysql.com/ + +Copyright: 2000, 2016, Oracle and/or its affiliates. All rights reserved. +License: + This is a release of MySQL, a dual-license SQL database server. + For the avoidance of doubt, this particular copy of the software + is released under the version 2 of the GNU General Public License. + MySQL is brought to you by Oracle. + . + MySQL FOSS License Exception + We want free and open source software applications under certain + licenses to be able to use specified GPL-licensed MySQL client + libraries despite the fact that not all such FOSS licenses are + compatible with version 2 of the GNU General Public License. + Therefore there are special exceptions to the terms and conditions + of the GPLv2 as applied to these client libraries, which are + identified and described in more detail in the FOSS License + Exception at + . + . + This distribution may include materials developed by third + parties. For license and attribution notices for these + materials, please refer to the documentation that accompanies + this distribution (see the "Licenses for Third-Party Components" + appendix) or view the online documentation at + . + . + GPLv2 Disclaimer + For the avoidance of doubt, except that if any license choice + other than GPL or LGPL is available it will apply instead, + Oracle elects to use only the General Public License version 2 + (GPLv2) at this time for any software where a choice of GPL + license versions is made available with the language indicating + that GPLv2 or any later version may be used, or where a choice + . + The full text of the GNU General Public License version 2 can + be found in the file + `/usr/share/mysql/doc/COPYING'. diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/apparmor-profile mysql-5.6-5.6.33/packaging/deb-xenial/extra/apparmor-profile --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/apparmor-profile 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/apparmor-profile 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,47 @@ +# vim:syntax=apparmor +# Last Modified: Fri Feb 28 18:06:30 2014 +#include + +/usr/sbin/mysqld { + #include + #include + #include + +# Allow system resource access + /sys/devices/system/cpu/ r, + capability sys_resource, + capability dac_override, + capability setuid, + capability setgid, + +# Allow config access + /etc/mysql/** r, + +# Allow pid and socket file access + /run/mysqld/mysqld.pid rw, + /run/mysqld/mysqld.sock rw, + +# Allow read/ write to /tmp + /tmp/ r, + /tmp/* rw, + +# Allow execution of server binary + /usr/sbin/mysqld mr, + /usr/sbin/mysqld-debug mr, + +# Allow plugin access + /usr/lib/mysql/plugin/ r, + /usr/lib/mysql/plugin/*.so* mr, + +# Allow error msg and charset access + /usr/share/mysql/ r, + /usr/share/mysql/** r, + +# Allow data dir access + /var/lib/mysql/ r, + /var/lib/mysql/** rwk, + +# Allow log file access + /var/log/mysql/ r, + /var/log/mysql/** rw, +} diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/my.cnf.fallback mysql-5.6-5.6.33/packaging/deb-xenial/extra/my.cnf.fallback --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/my.cnf.fallback 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/my.cnf.fallback 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql.cnf mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql.cnf --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Community Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ +!includedir /etc/mysql/mysql.conf.d/ diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql.conf.cnf mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql.conf.cnf --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql.conf.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql.conf.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Client configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysql] diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysqld.cnf mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysqld.cnf --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysqld.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysqld.cnf 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,48 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Commercial Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysqld_safe] +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +user = mysql +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc-messages-dir = /usr/share/mysql +explicit_defaults_for_timestamp + +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = 127.0.0.1 + +log-error = /var/log/mysql/error.log + +# Recommended in standard MySQL setup +sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES + +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql_embedded.1 mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql_embedded.1 --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql_embedded.1 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql_embedded.1 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +.so man1/mysql.1 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql-systemd-start mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql-systemd-start --- mysql-5.6-5.6.27/packaging/deb-xenial/extra/mysql-systemd-start 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/extra/mysql-systemd-start 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,84 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Scripts to run by MySQL systemd service +# +# Needed argument: pre | post +# +# pre mode : try to perform sanity check for configuration, log, data +# post mode : ping server until answer is received + +pinger () { + while /bin/true ; do + sleep 1 + mysqladmin ping >/dev/null 2>&1 && break + done +} + +sanity () { + MYSQLRUN=/var/run/mysqld + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + fi + + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + /lib/init/apparmor-profile-load usr.sbin.mysqld + + if [ ! -r /etc/mysql/my.cnf ]; then + echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." + exit 1 + fi +} + +case $1 in + "pre") sanity ;; + "post") pinger ;; +esac diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient18.install mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient18.install --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient18.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient18.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/*/libmysqlclient.so.* +# legal +usr/share/doc/libmysqlclient18/COPYING +usr/share/doc/libmysqlclient18/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient18.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient18.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient18.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient18.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql +libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz +libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +libmysqlclient18: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient-dev.install mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient-dev.install --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient-dev.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/include/mysql/*.h +usr/include/mysql/mysql/*.h +usr/include/mysql/mysql/*.h.pp +usr/include/mysql/mysql/psi/*.h +usr/lib/*/libmysqlclient.a +usr/lib/*/libmysqlclient.so +usr/lib/*/libmysqlservices.a +usr/bin/mysql_config +usr/bin/mysql_config_editor +usr/share/man/man1/mysql_config.1 +usr/share/man/man1/mysql_config_editor.1 +# legal +usr/share/doc/libmysqlclient-dev/COPYING +usr/share/doc/libmysqlclient-dev/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql +libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz +libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +libmysqlclient-dev: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqld-dev.install mysql-5.6-5.6.33/packaging/deb-xenial/libmysqld-dev.install --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqld-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqld-dev.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/*/libmysqld.a +usr/lib/*/libmysqld-debug.a +# legal +usr/share/doc/libmysqld-dev/COPYING +usr/share/doc/libmysqld-dev/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/libmysqld-dev.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/libmysqld-dev.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/libmysqld-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/libmysqld-dev.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql +libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz +libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-client.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-client.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-client.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-client.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-client/COPYING +usr/share/doc/mysql-client/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-client.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-client.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-client.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-client.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql +mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz +mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.dirs mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.dirs --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.dirs 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.dirs 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,16 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +etc/mysql/conf.d diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# configuration file and script +debian/extra/my.cnf.fallback etc/mysql/ +debian/extra/mysql.conf.cnf etc/mysql/conf.d/mysql.cnf + +usr/share/aclocal/mysql.m4 +usr/share/mysql/docs/INFO_SRC +usr/share/mysql/docs/INFO_BIN +usr/share/mysql/docs/ChangeLog +# localized error msgs +usr/share/mysql/*/errmsg.sys +usr/share/mysql/errmsg-utf8.txt +# charsets +usr/share/mysql/charsets/*.xml +usr/share/mysql/charsets/README +# legal +usr/share/doc/mysql-common/COPYING +usr/share/doc/mysql-common/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql +mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz +mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.postinst mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.postinst --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.postinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.postinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +if [ "$1" = "configure" ]; then + # Low priority fallback for client use when no server is installed. + update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/my.cnf.fallback 100 +fi + +#DEBHELPER# diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.postrm mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.postrm --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-common.postrm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-common.postrm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +if [ "$1" = "purge" ]; then + rmdir /etc/mysql 2>/dev/null || true + update-alternatives --remove-all my.cnf +fi + +#DEBHELPER# diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-bench.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-bench.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-bench.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-bench.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql/sql-bench/* +# legal +usr/share/doc/mysql-community-bench/COPYING +usr/share/doc/mysql-community-bench/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-bench.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-bench.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-bench.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-bench.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql +mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz +mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-client.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-client.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-client.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-client.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,56 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# binaries +usr/bin/myisam_ftdump +usr/bin/mysql +usr/bin/mysql_embedded +usr/bin/mysqlaccess +usr/bin/mysqlaccess.conf +usr/bin/mysqladmin +usr/bin/mysqlbug +usr/bin/mysqlcheck +usr/bin/mysql_client_test +usr/bin/mysql_client_test_embedded +usr/bin/mysqldump +usr/bin/mysqldumpslow +usr/bin/mysql_find_rows +usr/bin/mysql_fix_extensions +usr/bin/mysqlimport +usr/bin/mysqlshow +usr/bin/mysqlslap +usr/bin/mysql_waitpid +# man pages +usr/share/man/man1/myisam_ftdump.1 +usr/share/man/man1/mysql.1 +usr/share/man/man1/mysql_embedded.1 +usr/share/man/man1/mysqlaccess.1 +usr/share/man/man1/mysqladmin.1 +usr/share/man/man1/mysqlbug.1 +usr/share/man/man1/mysqlcheck.1 +usr/share/man/man1/mysql_client_test.1 +usr/share/man/man1/mysql_client_test_embedded.1 +usr/share/man/man1/mysqldump.1 +usr/share/man/man1/mysqldumpslow.1 +usr/share/man/man1/mysql_find_rows.1 +usr/share/man/man1/mysql_fix_extensions.1 +usr/share/man/man1/mysqlimport.1 +usr/share/man/man1/mysqlman.1 +usr/share/man/man1/mysqlshow.1 +usr/share/man/man1/mysqlslap.1 +usr/share/man/man1/mysql_waitpid.1 +# legal +usr/share/doc/mysql-community-client/COPYING +usr/share/doc/mysql-community-client/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-client.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-client.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-client.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-client.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql +mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz +mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +mysql-community-client: embedded-library diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.config mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.config --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.config 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.config 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,88 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /usr/share/debconf/confmodule + +if [ "$1" = "configure" ] && [ -z "$2" ]; +then + + set -e + + PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server + INSTALLED_PKG=none + MYSQLDATA=/var/lib/mysql + + IFS_BACKUP=${IFS} + IFS=":" + for PKG in ${PKG_LIST}; + do + STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) + if [ "${STATUS}" = "installed" ]; + then + INSTALLED_PKG=${PKG} + break + fi + done + IFS=${IFS_BACKUP} + + if [ "${INSTALLED_PKG}" = "none" ]; + then + if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; + then + db_input high mysql-community-server/data-dir || true + else + db_fset mysql-community-server/data-dir seen true + fi + + while :; do + PASSWD="" + db_input high mysql-community-server/root-pass || true + db_go + + db_get mysql-community-server/root-pass + if [ -z "${RET}" ]; + then + db_fset mysql-community-server/root-pass seen true + db_fset mysql-community-server/re-root-pass seen true + break + fi + PASSWD="${RET}" + + db_input high mysql-community-server/re-root-pass || true + db_go + + db_get mysql-community-server/re-root-pass + if [ "${RET}" == "${PASSWD}" ]; + then + PASSWD="" + break + fi + + db_fset mysql-community-server/root-pass-mismatch seen false + db_input critical mysql-community-server/root-pass-mismatch + db_set mysql-community-server/root-pass "" + db_set mysql-community-server/re-root-pass "" + done + + else + db_fset mysql-community-server/data-dir seen true + db_fset mysql-community-server/root-pass seen true + db_fset mysql-community-server/re-root-pass seen true + fi + + set +e +fi diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.dirs mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.dirs --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.dirs 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.dirs 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +etc/mysql/mysql.conf.d +etc/init.d +usr/lib/mysql +usr/lib/mysql/plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,94 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# binaries +usr/bin/innochecksum +usr/bin/msql2mysql +usr/bin/myisamchk +usr/bin/myisamlog +usr/bin/myisampack +usr/bin/my_print_defaults +usr/bin/mysqlbinlog +usr/bin/mysql_convert_table_format +usr/bin/mysqld_multi +usr/bin/mysqld_safe +usr/bin/mysqlhotcopy +usr/bin/mysql_install_db +usr/bin/mysql_plugin +usr/bin/mysql_secure_installation +usr/bin/mysql_setpermission +usr/bin/mysqltest +usr/bin/mysqltest_embedded +usr/bin/mysql_tzinfo_to_sql +usr/bin/mysql_upgrade +usr/bin/mysql_zap +usr/bin/perror +usr/bin/replace +usr/bin/resolveip +usr/bin/resolve_stack_dump +usr/sbin/mysqld +# debug binary +usr/sbin/mysqld-debug +# man pages +usr/share/man/man1/innochecksum.1 +usr/share/man/man1/comp_err.1 +usr/share/man/man1/msql2mysql.1 +usr/share/man/man1/myisamchk.1 +usr/share/man/man1/myisamlog.1 +usr/share/man/man1/myisampack.1 +usr/share/man/man1/my_print_defaults.1 +usr/share/man/man1/mysqlbinlog.1 +usr/share/man/man1/mysql_convert_table_format.1 +usr/share/man/man1/mysqld_multi.1 +usr/share/man/man1/mysqld_safe.1 +usr/share/man/man1/mysqlhotcopy.1 +usr/share/man/man1/mysql_install_db.1 +usr/share/man/man1/mysql_plugin.1 +usr/share/man/man1/mysql_secure_installation.1 +usr/share/man/man1/mysql.server.1 +usr/share/man/man1/mysql_setpermission.1 +usr/share/man/man1/mysql-stress-test.pl.1 +usr/share/man/man1/mysqltest.1 +usr/share/man/man1/mysqltest_embedded.1 +usr/share/man/man1/mysql_tzinfo_to_sql.1 +usr/share/man/man1/mysql_upgrade.1 +usr/share/man/man1/mysql_zap.1 +usr/share/man/man1/perror.1 +usr/share/man/man1/replace.1 +usr/share/man/man1/resolveip.1 +usr/share/man/man1/resolve_stack_dump.1 +usr/share/man/man8/mysqld.8 +# confguration files +debian/extra/mysql.cnf etc/mysql/ +debian/extra/mysqld.cnf etc/mysql/mysql.conf.d/ +# app armor profile +etc/apparmor.d/usr.sbin.mysqld +# SQL files +usr/share/mysql/*.sql +# plugins +usr/lib/mysql/plugin/*.so +usr/lib/mysql/plugin/debug/*.so +usr/lib/mysql/plugin/daemon_example.ini +usr/lib/mysql/plugin/debug/daemon_example.ini +# support files +usr/share/mysql/mysqld_multi.server +usr/share/mysql/magic +usr/share/mysql/mysql-log-rotate +usr/share/mysql/mysql-systemd-start +usr/share/mysql/my-default.cnf +usr/share/mysql/dictionary.txt +# legal +usr/share/doc/mysql-community-server/COPYING +usr/share/doc/mysql-community-server/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,23 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql +mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz +mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl +# Due to static linking this cannot be avoided and hence being overridden +mysql-community-server: embedded-library +# Since we ship debug plugins so this error is overridden +mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.mysql.init mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.mysql.init --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.mysql.init 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,192 @@ +#!/bin/bash +# +### BEGIN INIT INFO +# Provides: mysql +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Should-Start: $network $time +# Should-Stop: $network $time +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/ Stop MySQL Community Server daemon +# Description: This service script facilitates startup and shutdown of +# mysqld daemon throught its wrapper script mysqld_safe +### END INIT INFO +# + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /lib/lsb/init-functions + +cd / +umask 077 + +MYSQLDATA=/var/lib/mysql +VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) + +get_mysql_option() { + RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) + if [ -z "$RESULT" ]; + then + RESULT="$3" + fi + echo $RESULT +} + +get_running () { + PIDFILE=$(get_mysql_option mysqld_safe pid-file "") + if [ -z "$PIDFILE" ]; + then + PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") + fi + if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; + then + echo 1 + else + echo 0 + fi +} + +server_stop () { + RUNNING=$(get_running) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${RUNNING}" -eq 0 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + RUNNING=$(get_running) + sleep 1 + done + return 0 +} + +case "$1" in + 'start') + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + log_action_msg "A MySQL Server is already started" + else + MYSQLRUN=/var/run/mysqld + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + fi + + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + /lib/init/apparmor-profile-load usr.sbin.mysqld + + su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" + for i in 1 2 3 4 5 6; + do + sleep 1 + echo -n . + done + echo + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is started" + else + log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." + fi + fi + ;; + + 'stop') + RUNNING=$(get_running) + if [ "${RUNNING}" -eq 1 ]; + then + killall -15 mysqld + server_stop + if [ "$?" -eq 0 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is stopped" + else + log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" + fi + else + log_action_msg "MySQL Community Server ${VERSION} is already stopped" + fi + ;; + + 'restart'|'reload'|'force-reload') + log_action_msg "Stopping MySQL Community Server ${VERSION}" + $0 stop + log_action_msg "Re-starting MySQL Community Server ${VERSION}" + $0 start + ;; + + 'status') + RUNNING=$(get_running) + if [ ${RUNNING} -eq 1 ]; + then + log_action_msg "MySQL Community Server ${VERSION} is running" + else + log_action_msg "MySQL Community Server ${VERSION} is not running" + exit 3 + fi + ;; + + *) + echo "Usage: $SELF start|stop|restart|reload|force-reload|status" + exit 1 + ;; +esac + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.mysql.service mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.mysql.service --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.mysql.service 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.mysql.service 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# MySQL systemd service file + +[Unit] +Description=MySQL Community Server +After=network.target + +[Install] +WantedBy=multi-user.target + +[Service] +User=mysql +Group=mysql +PermissionsStartOnly=true +ExecStartPre=/usr/share/mysql/mysql-systemd-start pre +ExecStart=/usr/bin/mysqld_safe +ExecStartPost=/usr/share/mysql/mysql-systemd-start post +TimeoutSec=600 +Restart=on-failure diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.postinst mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.postinst --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.postinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.postinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,95 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +. /usr/share/debconf/confmodule + +take_upstart_job_backup () { + if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; + then + mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup + fi +} + +case "$1" in + configure) + + if [ -z "$2" ]; + then + set -e + + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/mysql.cnf" 200 + + MYSQLDATA=/var/lib/mysql + + if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; + then + mkdir ${MYSQLDATA}/mysql + chown mysql:mysql ${MYSQLDATA}/mysql + chmod 750 ${MYSQLDATA}/mysql + if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; + then + mysql_install_db --user=mysql > /dev/null + fi + fi + + db_get mysql-community-server/root-pass && PASSWD=${RET} + if [ ! -z "${PASSWD}" ]; + then + db_set mysql-community-server/root-pass "" + db_set mysql-community-server/re-root-pass "" + PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" + else + PASSWD="" + fi + + SQL=`mktemp` + if [ -f "${SQL}" ]; + then + chmod 700 ${SQL} + cat << EOF > ${SQL} +USE mysql; +${PASSWD} +DELETE FROM user WHERE user=''; +FLUSH PRIVILEGES; +EOF + mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL + PASSWD="" + rm -f ${SQL} + fi + + set +e + + fi + + ;; + + abort-upgrade|abort-remove|abort-configure) + + ;; + + *) + exit 1 + ;; +esac + +db_stop + +take_upstart_job_backup + +#DEBHELPER# + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.postrm mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.postrm --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.postrm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.postrm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,155 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; +then +. /usr/share/debconf/confmodule +fi + +place_upstart_job_back () { + if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; + then + mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf + fi +} + +get_pcount () { + PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) + echo "${PSCOUNT}" +} + +server_stop () { + PSCOUNT=$(get_pcount) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${PSCOUNT}" -eq 1 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + PSCOUNT=$(get_pcount) + sleep 1 + done + return 0 +} + +case "$1" in + remove) + + set -e + + place_upstart_job_back + update-alternatives --remove my.cnf "/etc/mysql/mysql.cnf" + + set +e + + ;; + + purge) + + set -e + + place_upstart_job_back + + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + MYSQLRUN=/var/run/mysqld + + server_stop + + db_input high mysql-community-server/remove-data-dir || true + db_go + db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} + if [ "${RMDATADIR}" = "true" ]; + then + if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; + then + rm -rf ${MYSQLRUN} + fi + + if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; + then + rm -rf ${MYSQLLOG} + fi + + if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; + then + rm -rf ${MYSQLDATA} + fi + + if getent passwd mysql >/dev/null; + then + userdel mysql + fi + fi + + set +e + ;; + + abort-install) + + set -e + + place_upstart_job_back + + if [ -x "/etc/init.d/mysql" ]; + then + invoke-rc.d mysql start || exit $? + else + if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; + then + rm -rf ${MYSQLRUN} + fi + + if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; + then + rm -rf ${MYSQLLOG} + fi + + if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; + then + rm -rf ${MYSQLDATA} + fi + + if getent passwd mysql >/dev/null; + then + userdel mysql + fi + fi + + set +e + ;; + + upgrade|abort-upgrade) + + ;; + + *) + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.preinst mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.preinst --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.preinst 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.preinst 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,123 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +get_pcount () { + PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) + echo "${PSCOUNT}" +} + +server_stop () { + PSCOUNT=$(get_pcount) + COUNT=0 + while :; do + COUNT=$(( COUNT+1 )) + echo -n . + if [ "${PSCOUNT}" -eq 1 ]; + then + echo + break + fi + if [ "${COUNT}" -gt 15 ]; + then + echo + return 1 + fi + PSCOUNT=$(get_pcount) + sleep 1 + done + return 0 +} + +case "$1" in + install) + + if [ -z "$2" ]; + then + + set -e + + if [ -x "/etc/init.d/mysql" ]; + then + invoke-rc.d mysql stop || exit $? + server_stop + fi + + MYSQLDATA=/var/lib/mysql + MYSQLLOG=/var/log/mysql + MYSQLRUN=/var/run/mysqld + + if ! getent group mysql >/dev/null; + then + addgroup --system mysql >/dev/null + fi + + if ! getent passwd mysql >/dev/null; + then + adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null + fi + + if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; + then + mkdir ${MYSQLDATA} + chown mysql:mysql ${MYSQLDATA} + chmod 750 ${MYSQLDATA} + fi + + if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; + then + mkdir ${MYSQLLOG} + chown mysql:adm ${MYSQLLOG} + chmod 750 ${MYSQLLOG} + touch ${MYSQLLOG}/error.log + chmod 640 ${MYSQLLOG}/error.log + chown mysql:adm ${MYSQLLOG}/error.log + fi + + if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; + then + mkdir ${MYSQLRUN} + chown mysql:mysql ${MYSQLRUN} + chmod 755 ${MYSQLRUN} + fi + + set +e + + fi + + ;; + + upgrade) + + set -e + + #DEBHELPER# + server_stop + + set +e + + ;; + + abort-upgrade) + + ;; + + *) + exit 1 + ;; +esac + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.prerm mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.prerm --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.prerm 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.prerm 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,24 @@ +#!/bin/bash + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +set -e + +#DEBHELPER# + +set +e + +exit 0 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.templates mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.templates --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-server.templates 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-server.templates 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,33 @@ +Template: mysql-community-server/root-pass +Type: password +Description: Enter root password: + Please provide a strong password that will be set for the root account of your MySQL database. + Leave it blank if you do not wish to set or change the root password at this time. + +Template: mysql-community-server/re-root-pass +Type: password +Description: Re-enter root password: + Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. + +Template: mysql-community-server/root-pass-mismatch +Type: error +Description: The two passwords did not match + Please try again. Make sure you type the exact same password twice. + +Template: mysql-community-server/remove-data-dir +Type: boolean +Default: false +Description: Remove data directory at /var/lib/mysql ? + This operation will remove the data directory that stores all the databases, tables and related meta-data. + It is highly recommended to take data backup before removing the data directory. + +Template: mysql-community-server/data-dir +Type: note +Description: Data directory found when no MySQL server package is installed + A data directory '/var/lib/mysql' is present on this system when no MySQL server + package is currently installed on the system. The directory may be under control of + server package received from third-party vendors. It may also be an unclaimed data + directory from previous removal of mysql packages. + . + It is highly recommended to take data backup. If you have not done so, now would be + the time to take backup in another shell. Once completed, press 'Ok' to continue. diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-source.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-source.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-source.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-source.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +../*.dsc usr/src/mysql/ +../*.tar.gz usr/src/mysql/ +../*.tar.xz usr/src/mysql/ +# legal +usr/share/doc/mysql-community-source/COPYING +usr/share/doc/mysql-community-source/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-source.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-source.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-source.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-source.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql +mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz +mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql-test/* +usr/share/man/man1/mysql-test-run.pl.1 +# legal +usr/share/doc/mysql-community-test/COPYING +usr/share/doc/mysql-community-test/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.links mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.links --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.links 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.links 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,17 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run +usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-community-test.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-community-test.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql +mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz +mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-server.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-server.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-server.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-server.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-server/COPYING +usr/share/doc/mysql-server/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-server.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-server.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-server.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-server.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql +mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz +mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-testsuite.install mysql-5.6-5.6.33/packaging/deb-xenial/mysql-testsuite.install --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-testsuite.install 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-testsuite.install 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# legal +usr/share/doc/mysql-testsuite/COPYING +usr/share/doc/mysql-testsuite/README diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/mysql-testsuite.lintian-overrides mysql-5.6-5.6.33/packaging/deb-xenial/mysql-testsuite.lintian-overrides --- mysql-5.6-5.6.27/packaging/deb-xenial/mysql-testsuite.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/mysql-testsuite.lintian-overrides 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,19 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Additional license file is needed so overriding this warning +mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql +mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz +mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-man-page-links.patch mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-man-page-links.patch --- mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-man-page-links.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-man-page-links.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,14 @@ +From: Akhil Mohan +Description: Fix path in man page link. +Bug: http://bugs.mysql.com/bug.php?id=70952 + +--- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 ++++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 +@@ -1 +1 @@ +-.so man-gpl-tmp2/mysql_client_test.1 ++.so man1/mysql_client_test.1 +--- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 ++++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 +@@ -1 +1 @@ +-.so man-gpl-tmp2/mysqltest.1 ++.so man1/mysqltest.1 diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-mtr-search-paths.patch mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-mtr-search-paths.patch --- mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-mtr-search-paths.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-mtr-search-paths.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,13 @@ +From: Akhil Mohan +Description: Adding extra search path for testsuite. + +--- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 ++++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 +@@ -288,6 +288,7 @@ + { + $suitedir= my_find_dir($::basedir, + ["share/mysql-test/suite", ++ "lib/mysql-test/suite", + "mysql-test/suite", + "internal/mysql-test/suite", + "mysql-test", diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-mysql_install_db.patch mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-mysql_install_db.patch --- mysql-5.6-5.6.27/packaging/deb-xenial/patches/fix-mysql_install_db.patch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/patches/fix-mysql_install_db.patch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,43 @@ +From: Terje Røsten +Description: Maintains the pending --skip-my-cnf option in mainline +Bug: + +diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in +index 440a977..7d068fc 100644 +--- a/scripts/mysql_install_db.pl.in ++++ b/scripts/mysql_install_db.pl.in +@@ -113,6 +113,7 @@ EOF2 + print <{srcdir} and $opt->{basedir} ) + { + error($opt,"Specify either --basedir or --srcdir, not both"); + } +-if ( $opt->{'keep-my-cnf'} ) ++if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) + { + $keep_my_cnf = 1; + } +@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) + } + + # ---------------------------------------------------------------------- +-# Create database directories mysql & test ++# Create database directory mysql + # ---------------------------------------------------------------------- + + # FIXME The shell variant uses "mkdir -p": +@@ -697,7 +698,7 @@ if ($opt_user) + } + } + +-foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) ++foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") + { + mkdir($dir, 0700) unless -d $dir; + if ($opt_user and -w "/") diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/patches/series mysql-5.6-5.6.33/packaging/deb-xenial/patches/series --- mysql-5.6-5.6.27/packaging/deb-xenial/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/patches/series 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#fix-man-page-links.patch +fix-mysql_install_db.patch +fix-mtr-search-paths.patch diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/rules mysql-5.6-5.6.33/packaging/deb-xenial/rules --- mysql-5.6-5.6.27/packaging/deb-xenial/rules 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/rules 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,137 @@ +#!/usr/bin/make -f + +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +%: + dh $@ + +export DH_VERBOSE=1 +export CFLAGS= +export CXXFLAGS= + +override_dh_auto_configure: + @echo "RULES.$@" + cmake . \ + -DBUILD_CONFIG=mysql_release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DINSTALL_DOCDIR=share/mysql/docs \ + -DINSTALL_DOCREADMEDIR=share/mysql \ + -DINSTALL_INCLUDEDIR=include/mysql \ + -DINSTALL_INFODIR=share/mysql/docs \ + -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ + -DINSTALL_MANDIR=share/man \ + -DINSTALL_MYSQLSHAREDIR=share/mysql \ + -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ + -DINSTALL_PLUGINDIR=lib/mysql/plugin \ + -DINSTALL_SBINDIR=sbin \ + -DINSTALL_SCRIPTDIR=bin \ + -DINSTALL_SQLBENCHDIR=lib/mysql \ + -DINSTALL_SUPPORTFILESDIR=share/mysql \ + -DMYSQL_DATADIR=/var/lib/mysql \ + -DSYSCONFDIR=/etc/mysql \ + -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ + -DWITH_SSL=bundled \ + -DWITH_ZLIB=system \ + -DWITH_EXTRA_CHARSETS=all \ + -DWITH_INNODB_MEMCACHED=1 \ + -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ + -DINSTALL_LAYOUT=DEB + + cat CMakeCache.txt + touch $@ + +override_dh_auto_build: + @echo "RULES.$@" + $(MAKE) -j8 VERBOSE=1 + touch $@ + +override_dh_auto_test: + @echo "RULES.$@" + echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" + touch $@ + +override_dh_auto_install: + + @echo "RULES.$@" + # complete install first + $(MAKE) install DESTDIR=debian/tmp + # remove all redundant files and links + rm debian/tmp/usr/lib/*/*_r* + rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake + rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake + rm debian/tmp/usr/lib/mysql-test/Makefile + # add missing man pages + install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 + # add MySQL Server debug binary and library to package + install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug + install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a + # add debug plugin libraries to package + install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug + for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done + install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug + install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug + # add apparmor profile + install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld + # add systemd script + install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ + # add directory for legal docs + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test + install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source + # add COPYING file to each package + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING + # add README file to each package + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README + install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README + touch $@ + +override_dh_installinit: + @echo "RULES.$@" + dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld + dh_systemd_enable --name=mysql + dh_installinit --name=mysql -- defaults 19 21 + dh_systemd_start --restart-after-upgrade + touch $@ diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/source/format mysql-5.6-5.6.33/packaging/deb-xenial/source/format --- mysql-5.6-5.6.27/packaging/deb-xenial/source/format 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/source/format 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/source/include-binaries mysql-5.6-5.6.33/packaging/deb-xenial/source/include-binaries --- mysql-5.6-5.6.27/packaging/deb-xenial/source/include-binaries 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/source/include-binaries 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,34 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins +debian/extra/server-binary +debian/extra/embedded-server +debian/extra/adt_null-plugin +debian/extra/auth-plugin +debian/extra/auth_socket-plugin +debian/extra/auth_test_plugin-plugin +debian/extra/innodb_engine-plugin +debian/extra/libdaemon_example-plugin +debian/extra/libmemcached-plugin +debian/extra/mypluglib-plugin +debian/extra/mysql_no_login-plugin +debian/extra/qa_auth_client-plugin +debian/extra/qa_auth_interface-plugin +debian/extra/qa_auth_server-plugin +debian/extra/semisync_master-plugin +debian/extra/semisync_slave-plugin +debian/extra/test_udf_services-plugin +debian/extra/validate_password-plugin diff -Nru mysql-5.6-5.6.27/packaging/deb-xenial/watch mysql-5.6-5.6.33/packaging/deb-xenial/watch --- mysql-5.6-5.6.27/packaging/deb-xenial/watch 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/deb-xenial/watch 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,2 @@ +version=3 +http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff -Nru mysql-5.6-5.6.27/packaging/rpm-docker/mysql.spec.in mysql-5.6-5.6.33/packaging/rpm-docker/mysql.spec.in --- mysql-5.6-5.6.27/packaging/rpm-docker/mysql.spec.in 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-docker/mysql.spec.in 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -189,7 +189,8 @@ # Remove test plugins for p in auth.so auth_test_plugin.so daemon_example.ini libdaemon_example.so qa_auth_client.so \ - qa_auth_interface.so qa_auth_server.so replication_observers_example_plugin.so ha_example.so ; do + qa_auth_interface.so qa_auth_server.so replication_observers_example_plugin.so ha_example.so \ + test_udf_services.so ; do rm -f %{buildroot}%{_libdir}/mysql/plugin/$p done @@ -286,6 +287,9 @@ %dir %attr(750, mysql, mysql) /var/lib/mysql-files %changelog +* Mon Mar 14 2016 Georgi Kodinov - 5.6.31-1 +- Add test_udf_services.so plugin + * Thu Jun 25 2015 Balasubramanian Kandasamy - 5.6.26-1 - Update package names diff -Nru mysql-5.6-5.6.27/packaging/rpm-fedora/CMakeLists.txt mysql-5.6-5.6.33/packaging/rpm-fedora/CMakeLists.txt --- mysql-5.6-5.6.27/packaging/rpm-fedora/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-fedora/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ FOREACH(fedfile my.cnf my_config.h mysql_config.sh mysqld.service mysql-systemd-start mysql.conf - mysql-5.6.16-mysql-install.patch mysql-5.6-libmysqlclient-symbols.patch) + mysql-5.6.16-mysql-install.patch) CONFIGURE_FILE(${fedfile} ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} COPYONLY) ENDFOREACH() ENDIF() diff -Nru mysql-5.6-5.6.27/packaging/rpm-fedora/mysql-5.6-libmysqlclient-symbols.patch mysql-5.6-5.6.33/packaging/rpm-fedora/mysql-5.6-libmysqlclient-symbols.patch --- mysql-5.6-5.6.27/packaging/rpm-fedora/mysql-5.6-libmysqlclient-symbols.patch 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-fedora/mysql-5.6-libmysqlclient-symbols.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,960 +0,0 @@ -diff -rup old/libmysql/libmysql.c new/libmysql/libmysql.c ---- old/libmysql/libmysql.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/libmysql/libmysql.c 2014-01-14 12:10:27.148374504 +0100 -@@ -4898,3 +4898,612 @@ my_bool STDCALL mysql_read_query_result( - return (*mysql->methods->read_query_result)(mysql); - } - -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name) -+{ -+ return myodbc_remove_escape(mysql, name); -+} -+SYM_16(myodbc_remove_escape); -+ -+ -+my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql) -+{ -+ return mysql_affected_rows(mysql); -+} -+SYM_16(mysql_affected_rows); -+ -+ -+my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode) -+{ -+ return mysql_autocommit(mysql, auto_mode); -+} -+SYM_16(mysql_autocommit); -+ -+ -+my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) -+{ -+ return mysql_change_user(mysql, user, passwd, db); -+} -+SYM_16(mysql_change_user); -+ -+ -+const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql) -+{ -+ return mysql_character_set_name(mysql); -+} -+SYM_16(mysql_character_set_name); -+ -+ -+my_bool STDCALL symver16_mysql_commit(MYSQL * mysql) -+{ -+ return mysql_commit(mysql); -+} -+SYM_16(mysql_commit); -+ -+ -+void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row) -+{ -+ return mysql_data_seek(result, row); -+} -+SYM_16(mysql_data_seek); -+ -+ -+void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused))) -+{ -+ return mysql_debug(debug); -+} -+SYM_16(mysql_debug); -+ -+ -+int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql) -+{ -+ return mysql_dump_debug_info(mysql); -+} -+SYM_16(mysql_dump_debug_info); -+ -+ -+my_bool STDCALL symver16_mysql_embedded(void) -+{ -+ return mysql_embedded(); -+} -+SYM_16(mysql_embedded); -+ -+ -+my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res) -+{ -+ return mysql_eof(res); -+} -+SYM_16(mysql_eof); -+ -+ -+ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length) -+{ -+ return mysql_escape_string(to, from, length); -+} -+SYM_16(mysql_escape_string); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result) -+{ -+ return mysql_fetch_field(result); -+} -+SYM_16(mysql_fetch_field); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) -+{ -+ return mysql_fetch_field_direct(res, fieldnr); -+} -+SYM_16(mysql_fetch_field_direct); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res) -+{ -+ return mysql_fetch_fields(res); -+} -+SYM_16(mysql_fetch_fields); -+ -+ -+unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql) -+{ -+ return mysql_field_count(mysql); -+} -+SYM_16(mysql_field_count); -+ -+ -+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) -+{ -+ return mysql_field_seek(result, field_offset); -+} -+SYM_16(mysql_field_seek); -+ -+ -+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res) -+{ -+ return mysql_field_tell(res); -+} -+SYM_16(mysql_field_tell); -+ -+ -+void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) -+{ -+ return mysql_get_character_set_info(mysql, csinfo); -+} -+SYM_16(mysql_get_character_set_info); -+ -+ -+const char * STDCALL symver16_mysql_get_client_info(void) -+{ -+ return mysql_get_client_info(); -+} -+SYM_16(mysql_get_client_info); -+ -+ulong STDCALL symver16_mysql_get_client_version(void) -+{ -+ return mysql_get_client_version(); -+} -+SYM_16(mysql_get_client_version); -+ -+ -+const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql) -+{ -+ return mysql_get_host_info(mysql); -+} -+SYM_16(mysql_get_host_info); -+ -+ -+MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void) -+{ -+ return mysql_get_parameters(); -+} -+SYM_16(mysql_get_parameters); -+ -+ -+uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql) -+{ -+ return mysql_get_proto_info(mysql); -+} -+SYM_16(mysql_get_proto_info); -+ -+ -+const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql) -+{ -+ return mysql_get_server_info(mysql); -+} -+SYM_16(mysql_get_server_info); -+ -+ -+ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length) -+{ -+ return mysql_hex_string(to, from, length); -+} -+SYM_16(mysql_hex_string); -+ -+ -+const char *STDCALL symver16_mysql_info(MYSQL *mysql) -+{ -+ return mysql_info(mysql); -+} -+SYM_16(mysql_info); -+ -+ -+my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql) -+{ -+ return mysql_insert_id(mysql); -+} -+SYM_16(mysql_insert_id); -+ -+ -+int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid) -+{ -+ return mysql_kill(mysql, pid); -+} -+SYM_16(mysql_kill); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild) -+{ -+ return mysql_list_dbs(mysql, wild); -+} -+SYM_16(mysql_list_dbs); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) -+{ -+ return mysql_list_fields(mysql, table, wild); -+} -+SYM_16(mysql_list_fields); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql) -+{ -+ return mysql_list_processes(mysql); -+} -+SYM_16(mysql_list_processes); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild) -+{ -+ return mysql_list_tables(mysql, wild); -+} -+SYM_16(mysql_list_tables); -+ -+ -+my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql) -+{ -+ return mysql_more_results(mysql); -+} -+SYM_16(mysql_more_results); -+ -+ -+int STDCALL symver16_mysql_next_result(MYSQL *mysql) -+{ -+ return mysql_next_result(mysql); -+} -+SYM_16(mysql_next_result); -+ -+ -+int STDCALL symver16_mysql_ping(MYSQL *mysql) -+{ -+ return mysql_ping(mysql); -+} -+SYM_16(mysql_ping); -+ -+ -+int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query) -+{ -+ return mysql_query(mysql, query); -+} -+SYM_16(mysql_query); -+ -+ -+my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql) -+{ -+ return mysql_read_query_result(mysql); -+} -+SYM_16(mysql_read_query_result); -+ -+ -+ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length) -+{ -+ return mysql_real_escape_string(mysql, to, from, length); -+} -+SYM_16(mysql_real_escape_string); -+ -+ -+int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options) -+{ -+ return mysql_refresh(mysql, options); -+} -+SYM_16(mysql_refresh); -+ -+ -+my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql) -+{ -+ return mysql_rollback(mysql); -+} -+SYM_16(mysql_rollback); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) -+{ -+ return mysql_row_seek(result, row); -+} -+SYM_16(mysql_row_seek); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res) -+{ -+ return mysql_row_tell(res); -+} -+SYM_16(mysql_row_tell); -+ -+ -+void STDCALL symver16_mysql_server_end() -+{ -+ return mysql_server_end(); -+} -+SYM_16(mysql_server_end); -+ -+ -+int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused))) -+{ -+ return mysql_server_init(argc, argv, groups); -+} -+SYM_16(mysql_server_init); -+ -+ -+void symver16_mysql_set_local_infile_default(MYSQL *mysql) -+{ -+ return mysql_set_local_infile_default(mysql); -+} -+SYM_16(mysql_set_local_infile_default); -+ -+ -+void symver16_mysql_set_local_infile_handler(MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), int (*local_infile_read)(void *, char *, uint), void (*local_infile_end)(void *), int (*local_infile_error)(void *, char *, uint), void *userdata) -+{ -+ return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata); -+} -+SYM_16(mysql_set_local_infile_handler); -+ -+ -+int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option) -+{ -+ return mysql_set_server_option(mysql, option); -+} -+SYM_16(mysql_set_server_option); -+ -+ -+int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level) -+{ -+ return mysql_shutdown(mysql, shutdown_level); -+} -+SYM_16(mysql_shutdown); -+ -+ -+const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql) -+{ -+ return mysql_sqlstate(mysql); -+} -+SYM_16(mysql_sqlstate); -+ -+ -+const char * STDCALL symver16_mysql_stat(MYSQL *mysql) -+{ -+ return mysql_stat(mysql); -+} -+SYM_16(mysql_stat); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_affected_rows(stmt); -+} -+SYM_16(mysql_stmt_affected_rows); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value) -+{ -+ return mysql_stmt_attr_get(stmt, attr_type, value); -+} -+SYM_16(mysql_stmt_attr_get); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value) -+{ -+ return mysql_stmt_attr_set(stmt, attr_type, value); -+} -+SYM_16(mysql_stmt_attr_set); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -+{ -+ return mysql_stmt_bind_param(stmt, my_bind); -+} -+SYM_16(mysql_stmt_bind_param); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -+{ -+ return mysql_stmt_bind_result(stmt, my_bind); -+} -+SYM_16(mysql_stmt_bind_result); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_close(stmt); -+} -+SYM_16(mysql_stmt_close); -+ -+ -+void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) -+{ -+ return mysql_stmt_data_seek(stmt, row); -+} -+SYM_16(mysql_stmt_data_seek); -+ -+ -+uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_errno(stmt); -+} -+SYM_16(mysql_stmt_errno); -+ -+ -+const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_error(stmt); -+} -+SYM_16(mysql_stmt_error); -+ -+ -+int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_execute(stmt); -+} -+SYM_16(mysql_stmt_execute); -+ -+ -+int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_fetch(stmt); -+} -+SYM_16(mysql_stmt_fetch); -+ -+ -+int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset) -+{ -+ return mysql_stmt_fetch_column(stmt, my_bind, column, offset); -+} -+SYM_16(mysql_stmt_fetch_column); -+ -+ -+unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_field_count(stmt); -+} -+SYM_16(mysql_stmt_field_count); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_free_result(stmt); -+} -+SYM_16(mysql_stmt_free_result); -+ -+ -+MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql) -+{ -+ return mysql_stmt_init(mysql); -+} -+SYM_16(mysql_stmt_init); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_insert_id(stmt); -+} -+SYM_16(mysql_stmt_insert_id); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_num_rows(stmt); -+} -+SYM_16(mysql_stmt_num_rows); -+ -+ -+ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_param_count(stmt); -+} -+SYM_16(mysql_stmt_param_count); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_param_metadata(stmt); -+} -+SYM_16(mysql_stmt_param_metadata); -+ -+ -+int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) -+{ -+ return mysql_stmt_prepare(stmt, query, length); -+} -+SYM_16(mysql_stmt_prepare); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_reset(stmt); -+} -+SYM_16(mysql_stmt_reset); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_result_metadata(stmt); -+} -+SYM_16(mysql_stmt_result_metadata); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row) -+{ -+ return mysql_stmt_row_seek(stmt, row); -+} -+SYM_16(mysql_stmt_row_seek); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_row_tell(stmt); -+} -+SYM_16(mysql_stmt_row_tell); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length) -+{ -+ return mysql_stmt_send_long_data(stmt, param_number, data, length); -+} -+SYM_16(mysql_stmt_send_long_data); -+ -+ -+const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_sqlstate(stmt); -+} -+SYM_16(mysql_stmt_sqlstate); -+ -+ -+int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_store_result(stmt); -+} -+SYM_16(mysql_stmt_store_result); -+ -+ -+void STDCALL symver16_mysql_thread_end() -+{ -+ return mysql_thread_end(); -+} -+SYM_16(mysql_thread_end); -+ -+ -+ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql) -+{ -+ return mysql_thread_id(mysql); -+} -+SYM_16(mysql_thread_id); -+ -+ -+my_bool STDCALL symver16_mysql_thread_init() -+{ -+ return mysql_thread_init(); -+} -+SYM_16(mysql_thread_init); -+ -+ -+uint STDCALL symver16_mysql_thread_safe(void) -+{ -+ return mysql_thread_safe(); -+} -+SYM_16(mysql_thread_safe); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql) -+{ -+ return mysql_use_result(mysql); -+} -+SYM_16(mysql_use_result); -+ -+ -+uint STDCALL symver16_mysql_warning_count(MYSQL *mysql) -+{ -+ return mysql_warning_count(mysql); -+} -+SYM_16(mysql_warning_count); -+ -+/*****/ -+ -+MYSQL * STDCALL symver16_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag) -+{ -+ return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag); -+} -+SYM_16(mysql_real_connect); -+ -+/*****/ -+ -+my_bool symver16_my_init(void) -+{ -+ return my_init(); -+} -+SYM_16(my_init); -+ -+#endif -diff -rup old/libmysql/libmysql.ver.in new/libmysql/libmysql.ver.in ---- old/libmysql/libmysql.ver.in 2013-11-04 20:15:10.000000000 +0100 -+++ new/libmysql/libmysql.ver.in 2014-01-14 12:10:27.148374504 +0100 -@@ -1 +1,136 @@ --libmysqlclient_@SHARED_LIB_MAJOR_VERSION@ { global: *; }; -+libmysqlclient_16 -+{ -+ local: -+ symver16_*; -+}; -+ -+libmysqlclient_18 -+{ -+ global: -+ my_init; -+ myodbc_remove_escape; -+ mysql_affected_rows; -+ mysql_autocommit; -+ mysql_change_user; -+ mysql_character_set_name; -+ mysql_close; -+ mysql_commit; -+ mysql_data_seek; -+ mysql_debug; -+ mysql_dump_debug_info; -+ mysql_embedded; -+ mysql_eof; -+ mysql_errno; -+ mysql_error; -+ mysql_escape_string; -+ mysql_fetch_field; -+ mysql_fetch_field_direct; -+ mysql_fetch_fields; -+ mysql_fetch_lengths; -+ mysql_fetch_row; -+ mysql_field_count; -+ mysql_field_seek; -+ mysql_field_tell; -+ mysql_free_result; -+ mysql_get_character_set_info; -+ mysql_get_client_info; -+ mysql_get_client_version; -+ mysql_get_host_info; -+ mysql_get_parameters; -+ mysql_get_proto_info; -+ mysql_get_server_info; -+ mysql_get_server_version; -+ mysql_get_ssl_cipher; -+ mysql_hex_string; -+ mysql_info; -+ mysql_init; -+ mysql_insert_id; -+ mysql_kill; -+ mysql_list_dbs; -+ mysql_list_fields; -+ mysql_list_processes; -+ mysql_list_tables; -+ mysql_more_results; -+ mysql_next_result; -+ mysql_num_fields; -+ mysql_num_rows; -+ mysql_options; -+ mysql_ping; -+ mysql_query; -+ mysql_read_query_result; -+ mysql_real_connect; -+ mysql_real_escape_string; -+ mysql_real_query; -+ mysql_refresh; -+ mysql_rollback; -+ mysql_row_seek; -+ mysql_row_tell; -+ mysql_select_db; -+ mysql_send_query; -+ mysql_server_end; -+ mysql_server_init; -+ mysql_set_character_set; -+ mysql_set_local_infile_default; -+ mysql_set_local_infile_handler; -+ mysql_set_server_option; -+ mysql_shutdown; -+ mysql_sqlstate; -+ mysql_ssl_set; -+ mysql_stat; -+ mysql_stmt_affected_rows; -+ mysql_stmt_attr_get; -+ mysql_stmt_attr_set; -+ mysql_stmt_bind_param; -+ mysql_stmt_bind_result; -+ mysql_stmt_close; -+ mysql_stmt_data_seek; -+ mysql_stmt_errno; -+ mysql_stmt_error; -+ mysql_stmt_execute; -+ mysql_stmt_fetch; -+ mysql_stmt_fetch_column; -+ mysql_stmt_field_count; -+ mysql_stmt_free_result; -+ mysql_stmt_init; -+ mysql_stmt_insert_id; -+ mysql_stmt_num_rows; -+ mysql_stmt_param_count; -+ mysql_stmt_param_metadata; -+ mysql_stmt_prepare; -+ mysql_stmt_reset; -+ mysql_stmt_result_metadata; -+ mysql_stmt_row_seek; -+ mysql_stmt_row_tell; -+ mysql_stmt_send_long_data; -+ mysql_stmt_sqlstate; -+ mysql_stmt_store_result; -+ mysql_store_result; -+ mysql_thread_end; -+ mysql_thread_id; -+ mysql_thread_init; -+ mysql_thread_safe; -+ mysql_use_result; -+ mysql_warning_count; -+ -+ free_defaults; -+ handle_options; -+ load_defaults; -+ my_print_help; -+ -+ #my_make_scrambled_password; -+ THR_KEY_mysys; -+ -+ mysql_client_find_plugin; -+ mysql_client_register_plugin; -+ mysql_load_plugin; -+ mysql_load_plugin_v; -+ mysql_plugin_options; -+ mysql_stmt_next_result; -+ -+ #mysql_default_charset_info; -+ mysql_get_charset; -+ mysql_get_charset_by_csname; -+ mysql_net_realloc; -+ #mysql_client_errors; -+ *; -+} libmysqlclient_16; -diff -rup old/mysys/charset.c new/mysys/charset.c ---- old/mysys/charset.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/mysys/charset.c 2014-01-14 12:10:27.197377417 +0100 -@@ -1040,3 +1040,20 @@ size_t escape_quotes_for_mysql(CHARSET_I - *to= 0; - return overflow ? (ulong)~0 : (ulong) (to - to_start); - } -+ -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide Fedora symbols -+ -+CHARSET_INFO *mysql_get_charset(uint cs_number, myf flags) -+{ -+ return get_charset(cs_number, flags); -+} -+ -+ -+CHARSET_INFO * mysql_get_charset_by_csname(const char *cs_name, uint cs_flags, myf flags) -+{ -+ return get_charset_by_csname(cs_name, cs_flags, flags); -+} -+ -+#endif -diff -rup old/sql/net_serv.cc new/sql/net_serv.cc ---- old/sql/net_serv.cc 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql/net_serv.cc 2014-01-14 12:10:27.252380688 +0100 -@@ -1047,3 +1047,15 @@ void my_net_set_write_timeout(NET *net, - DBUG_VOID_RETURN; - } - -+#ifndef EMBEDDED_LIBRARY -+C_MODE_START -+ -+// Hack to provide Fedora symbols -+ -+my_bool mysql_net_realloc(NET *net, size_t length) -+{ -+ return net_realloc(net, length); -+} -+ -+C_MODE_END -+#endif -diff -rup old/sql/password.c new/sql/password.c ---- old/sql/password.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql/password.c 2014-01-14 12:10:27.309384078 +0100 -@@ -584,3 +584,16 @@ void make_password_from_salt(char *to, c - octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); - } - -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len) -+{ -+ my_make_scrambled_password(to, password, pass_len); -+} -+SYM_16(my_make_scrambled_password); -+ -+#endif -diff -rup old/sql-common/client.c new/sql-common/client.c ---- old/sql-common/client.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql-common/client.c 2014-01-14 12:10:27.199377537 +0100 -@@ -4847,3 +4847,136 @@ static int clear_password_auth_client(MY - - return res ? CR_ERROR : CR_OK; - } -+ -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void STDCALL symver16_mysql_close(MYSQL *mysql) -+{ -+ return mysql_close(mysql); -+} -+SYM_16(mysql_close); -+ -+ -+uint STDCALL symver16_mysql_errno(MYSQL *mysql) -+{ -+ return mysql_errno(mysql); -+} -+SYM_16(mysql_errno); -+ -+ -+const char * STDCALL symver16_mysql_error(MYSQL *mysql) -+{ -+ return mysql_error(mysql); -+} -+SYM_16(mysql_error); -+ -+ -+ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res) -+{ -+ return mysql_fetch_lengths(res); -+} -+SYM_16(mysql_fetch_lengths); -+ -+ -+MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res) -+{ -+ return mysql_fetch_row(res); -+} -+SYM_16(mysql_fetch_row); -+ -+ -+void STDCALL symver16_mysql_free_result(MYSQL_RES *result) -+{ -+ return mysql_free_result(result); -+} -+SYM_16(mysql_free_result); -+ -+ -+ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql) -+{ -+ return mysql_get_server_version(mysql); -+} -+SYM_16(mysql_get_server_version); -+ -+ -+const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) -+{ -+ return mysql_get_ssl_cipher(mysql); -+} -+SYM_16(mysql_get_ssl_cipher); -+ -+ -+MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql) -+{ -+ return mysql_init(mysql); -+} -+SYM_16(mysql_init); -+ -+ -+unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res) -+{ -+ return mysql_num_fields(res); -+} -+SYM_16(mysql_num_fields); -+ -+ -+my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res) -+{ -+ return mysql_num_rows(res); -+} -+SYM_16(mysql_num_rows); -+ -+ -+int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) -+{ -+ return mysql_options(mysql, option, arg); -+} -+SYM_16(mysql_options); -+ -+ -+int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length) -+{ -+ return mysql_real_query(mysql, query, length); -+} -+SYM_16(mysql_real_query); -+ -+ -+int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db) -+{ -+ return mysql_select_db(mysql, db); -+} -+SYM_16(mysql_select_db); -+ -+ -+int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length) -+{ -+ return mysql_send_query(mysql, query, length); -+} -+SYM_16(mysql_send_query); -+ -+ -+int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name) -+{ -+ return mysql_set_character_set(mysql, cs_name); -+} -+SYM_16(mysql_set_character_set); -+ -+ -+my_bool STDCALL symver16_mysql_ssl_set(MYSQL *mysql __attribute__((unused)), const char *key __attribute__((unused)), const char *cert __attribute__((unused)), const char *ca __attribute__((unused)), const char *capath __attribute__((unused)), const char *cipher __attribute__((unused))) -+{ -+ return mysql_ssl_set(mysql, key, cert, ca, capath, cipher); -+} -+SYM_16(mysql_ssl_set); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql) -+{ -+ return mysql_store_result(mysql); -+} -+SYM_16(mysql_store_result); -+ -+#endif diff -Nru mysql-5.6-5.6.27/packaging/rpm-fedora/mysql.spec.in mysql-5.6-5.6.33/packaging/rpm-fedora/mysql.spec.in --- mysql-5.6-5.6.27/packaging/rpm-fedora/mysql.spec.in 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-fedora/mysql.spec.in 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -54,6 +54,8 @@ %global license_type GPLv2 %endif +%global min 5.6.10 + Name: mysql-%{product_suffix} Summary: A very fast and reliable SQL database server Group: Applications/Databases @@ -69,8 +71,7 @@ Source3: mysql.conf Source4: my_config.h Source6: mysql_config.sh -Patch0: mysql-5.6-libmysqlclient-symbols.patch -Patch1: mysql-5.6.16-mysql-install.patch +Patch0: mysql-5.6.16-mysql-install.patch BuildRequires: cmake BuildRequires: perl BuildRequires: time @@ -114,14 +115,15 @@ Requires: net-tools %if 0%{?commercial} Obsoletes: mysql-community-server < %{version}-%{release} -Requires: mysql-commercial-client%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-client%{?_isa} >= %{min} Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else -Requires: mysql-community-client%{?_isa} = %{version}-%{release} +Requires: mysql-community-client%{?_isa} >= %{min} Requires: mysql-community-common%{?_isa} = %{version}-%{release} %endif Obsoletes: mariadb-server Obsoletes: mariadb-galera-server +Obsoletes: mariadb-server-galera Obsoletes: community-mysql-server < %{version}-%{release} Obsoletes: mysql-server < %{version}-%{release} Provides: mysql-server = %{version}-%{release} @@ -158,9 +160,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-client < %{version}-%{release} -Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} >= %{min} %else -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} +Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: mariadb Obsoletes: community-mysql < %{version}-%{release} @@ -196,10 +198,10 @@ Summary: Test suite for the MySQL database server Group: Applications/Databases %if 0%{?commercial} -Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} >= %{min} Obsoletes: mysql-community-test < %{version}-%{release} %else -Requires: mysql-community-server%{?_isa} = %{version}-%{release} +Requires: mysql-community-server%{?_isa} >= %{min} %endif Obsoletes: mariadb-test Obsoletes: community-mysql-test < %{version}-%{release} @@ -217,9 +219,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-bench < %{version}-%{release} -Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} >= %{min} %else -Requires: mysql-community-server%{?_isa} = %{version}-%{release} +Requires: mysql-community-server%{?_isa} >= %{min} %endif Obsoletes: mariadb-bench Obsoletes: community-mysql-bench < %{obs_ver} @@ -236,9 +238,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-devel < %{version}-%{release} -Requires: mysql-enterprise-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} >= %{min} %else -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} +Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: mariadb-devel Obsoletes: community-mysql-devel < %{obs_ver} @@ -255,9 +257,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-libs < %{version}-%{release} -Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-common%{?_isa} >= %{min} %else -Requires: mysql-community-common%{?_isa} = %{version}-%{release} +Requires: mysql-community-common%{?_isa} >= %{min} %endif Obsoletes: mariadb-libs Obsoletes: community-mysql-libs < %{version}-%{release} @@ -301,11 +303,11 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-embedded-devel < %{version}-%{release} -Requires: mysql-commercial-devel%{?_isa} = %{version}-%{release} -Requires: mysql-commercial-embedded%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-devel%{?_isa} >= %{min} +Requires: mysql-commercial-embedded%{?_isa} >= %{min} %else -Requires: mysql-community-devel%{?_isa} = %{version}-%{release} -Requires: mysql-community-embedded%{?_isa} = %{version}-%{release} +Requires: mysql-community-devel%{?_isa} >= %{min} +Requires: mysql-community-embedded%{?_isa} >= %{min} %endif Obsoletes: mariadb-embedded-devel Obsoletes: community-mysql-embedded-devel < %{version}-%{release} @@ -321,7 +323,6 @@ %setup -q -T -a 0 -c -n %{src_dir} pushd %{src_dir} %patch0 -p1 -%patch1 -p1 %build # Fail quickly and obviously if user tries to build as root @@ -352,6 +353,7 @@ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ + -DWITH_SYMVER16=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ %{?ssl_option} \ @@ -377,6 +379,7 @@ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ + -DWITH_SYMVER16=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ %{?ssl_option} \ @@ -455,9 +458,10 @@ -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || : %post server -datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') +datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) /bin/chmod 0755 "$datadir" >/dev/null 2>&1 || : /bin/touch /var/log/mysqld.log >/dev/null 2>&1 || : +/bin/chown mysql:mysql /var/log/mysqld.log >/dev/null 2>&1 || : %systemd_post mysqld.service /usr/bin/systemctl enable mysqld >/dev/null 2>&1 || : @@ -625,8 +629,6 @@ %attr(755, root, root) %{_bindir}/mysqlimport %attr(755, root, root) %{_bindir}/mysqlshow %attr(755, root, root) %{_bindir}/mysqlslap -%attr(755, root, root) %{_bindir}/mysql_config -%attr(755, root, root) %{_bindir}/mysql_config-%{__isa_bits} %attr(755, root, root) %{_bindir}/mysql_config_editor %attr(644, root, root) %{_mandir}/man1/msql2mysql.1* @@ -679,12 +681,14 @@ %attr(755, root, root) %{_libdir}/mysql/plugin/auth_test_plugin.so %attr(644, root, root) %{_libdir}/mysql/plugin/daemon_example.ini %attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_server.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth_test_plugin.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_server.so @@ -716,6 +720,12 @@ %attr(755, root, root) %{_libdir}/mysql/libmysqld.so %changelog +* Tue Jul 05 2016 Balasubramanian Kandasamy - 5.6.32-1 +- Remove mysql_config from client subpackage + +* Mon Mar 14 2016 Georgi Kodinov - 5.6.31-1 +- Add test_udf_services.so plugin + * Wed Jan 14 2015 Balasubramanian Kandasamy - 5.6.24-1 - Add mysql_no_login.so plugin diff -Nru mysql-5.6-5.6.27/packaging/rpm-fedora/mysql-systemd-start mysql-5.6-5.6.33/packaging/rpm-fedora/mysql-systemd-start --- mysql-5.6-5.6.27/packaging/rpm-fedora/mysql-systemd-start 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-fedora/mysql-systemd-start 2016-08-26 11:22:35.000000000 +0000 @@ -12,7 +12,7 @@ local section=$1 local option=$2 local default=$3 - ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) + ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2- | tail -n 1) [ -z "$ret" ] && ret=$default echo $ret } diff -Nru mysql-5.6-5.6.27/packaging/rpm-oel/CMakeLists.txt mysql-5.6-5.6.33/packaging/rpm-oel/CMakeLists.txt --- mysql-5.6-5.6.27/packaging/rpm-oel/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-oel/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,8 +29,7 @@ FOREACH(fedfile my.cnf my_config.h mysql_config.sh mysqld.service mysql-systemd-start mysql.conf mysql-5.6.16-mysql-install.patch mysql.init - filter-requires.sh filter-provides.sh - mysql-5.6-libmysqlclient-symbols.patch) + filter-requires.sh filter-provides.sh) CONFIGURE_FILE(${fedfile} ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} COPYONLY) ENDFOREACH() ENDIF() diff -Nru mysql-5.6-5.6.27/packaging/rpm-oel/mysql-5.6-libmysqlclient-symbols.patch mysql-5.6-5.6.33/packaging/rpm-oel/mysql-5.6-libmysqlclient-symbols.patch --- mysql-5.6-5.6.27/packaging/rpm-oel/mysql-5.6-libmysqlclient-symbols.patch 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-oel/mysql-5.6-libmysqlclient-symbols.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,960 +0,0 @@ -diff -rup old/libmysql/libmysql.c new/libmysql/libmysql.c ---- old/libmysql/libmysql.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/libmysql/libmysql.c 2014-01-14 12:10:27.148374504 +0100 -@@ -4898,3 +4898,612 @@ my_bool STDCALL mysql_read_query_result( - return (*mysql->methods->read_query_result)(mysql); - } - -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name) -+{ -+ return myodbc_remove_escape(mysql, name); -+} -+SYM_16(myodbc_remove_escape); -+ -+ -+my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql) -+{ -+ return mysql_affected_rows(mysql); -+} -+SYM_16(mysql_affected_rows); -+ -+ -+my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode) -+{ -+ return mysql_autocommit(mysql, auto_mode); -+} -+SYM_16(mysql_autocommit); -+ -+ -+my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) -+{ -+ return mysql_change_user(mysql, user, passwd, db); -+} -+SYM_16(mysql_change_user); -+ -+ -+const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql) -+{ -+ return mysql_character_set_name(mysql); -+} -+SYM_16(mysql_character_set_name); -+ -+ -+my_bool STDCALL symver16_mysql_commit(MYSQL * mysql) -+{ -+ return mysql_commit(mysql); -+} -+SYM_16(mysql_commit); -+ -+ -+void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row) -+{ -+ return mysql_data_seek(result, row); -+} -+SYM_16(mysql_data_seek); -+ -+ -+void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused))) -+{ -+ return mysql_debug(debug); -+} -+SYM_16(mysql_debug); -+ -+ -+int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql) -+{ -+ return mysql_dump_debug_info(mysql); -+} -+SYM_16(mysql_dump_debug_info); -+ -+ -+my_bool STDCALL symver16_mysql_embedded(void) -+{ -+ return mysql_embedded(); -+} -+SYM_16(mysql_embedded); -+ -+ -+my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res) -+{ -+ return mysql_eof(res); -+} -+SYM_16(mysql_eof); -+ -+ -+ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length) -+{ -+ return mysql_escape_string(to, from, length); -+} -+SYM_16(mysql_escape_string); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result) -+{ -+ return mysql_fetch_field(result); -+} -+SYM_16(mysql_fetch_field); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) -+{ -+ return mysql_fetch_field_direct(res, fieldnr); -+} -+SYM_16(mysql_fetch_field_direct); -+ -+ -+MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res) -+{ -+ return mysql_fetch_fields(res); -+} -+SYM_16(mysql_fetch_fields); -+ -+ -+unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql) -+{ -+ return mysql_field_count(mysql); -+} -+SYM_16(mysql_field_count); -+ -+ -+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) -+{ -+ return mysql_field_seek(result, field_offset); -+} -+SYM_16(mysql_field_seek); -+ -+ -+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res) -+{ -+ return mysql_field_tell(res); -+} -+SYM_16(mysql_field_tell); -+ -+ -+void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) -+{ -+ return mysql_get_character_set_info(mysql, csinfo); -+} -+SYM_16(mysql_get_character_set_info); -+ -+ -+const char * STDCALL symver16_mysql_get_client_info(void) -+{ -+ return mysql_get_client_info(); -+} -+SYM_16(mysql_get_client_info); -+ -+ulong STDCALL symver16_mysql_get_client_version(void) -+{ -+ return mysql_get_client_version(); -+} -+SYM_16(mysql_get_client_version); -+ -+ -+const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql) -+{ -+ return mysql_get_host_info(mysql); -+} -+SYM_16(mysql_get_host_info); -+ -+ -+MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void) -+{ -+ return mysql_get_parameters(); -+} -+SYM_16(mysql_get_parameters); -+ -+ -+uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql) -+{ -+ return mysql_get_proto_info(mysql); -+} -+SYM_16(mysql_get_proto_info); -+ -+ -+const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql) -+{ -+ return mysql_get_server_info(mysql); -+} -+SYM_16(mysql_get_server_info); -+ -+ -+ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length) -+{ -+ return mysql_hex_string(to, from, length); -+} -+SYM_16(mysql_hex_string); -+ -+ -+const char *STDCALL symver16_mysql_info(MYSQL *mysql) -+{ -+ return mysql_info(mysql); -+} -+SYM_16(mysql_info); -+ -+ -+my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql) -+{ -+ return mysql_insert_id(mysql); -+} -+SYM_16(mysql_insert_id); -+ -+ -+int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid) -+{ -+ return mysql_kill(mysql, pid); -+} -+SYM_16(mysql_kill); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild) -+{ -+ return mysql_list_dbs(mysql, wild); -+} -+SYM_16(mysql_list_dbs); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) -+{ -+ return mysql_list_fields(mysql, table, wild); -+} -+SYM_16(mysql_list_fields); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql) -+{ -+ return mysql_list_processes(mysql); -+} -+SYM_16(mysql_list_processes); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild) -+{ -+ return mysql_list_tables(mysql, wild); -+} -+SYM_16(mysql_list_tables); -+ -+ -+my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql) -+{ -+ return mysql_more_results(mysql); -+} -+SYM_16(mysql_more_results); -+ -+ -+int STDCALL symver16_mysql_next_result(MYSQL *mysql) -+{ -+ return mysql_next_result(mysql); -+} -+SYM_16(mysql_next_result); -+ -+ -+int STDCALL symver16_mysql_ping(MYSQL *mysql) -+{ -+ return mysql_ping(mysql); -+} -+SYM_16(mysql_ping); -+ -+ -+int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query) -+{ -+ return mysql_query(mysql, query); -+} -+SYM_16(mysql_query); -+ -+ -+my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql) -+{ -+ return mysql_read_query_result(mysql); -+} -+SYM_16(mysql_read_query_result); -+ -+ -+ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length) -+{ -+ return mysql_real_escape_string(mysql, to, from, length); -+} -+SYM_16(mysql_real_escape_string); -+ -+ -+int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options) -+{ -+ return mysql_refresh(mysql, options); -+} -+SYM_16(mysql_refresh); -+ -+ -+my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql) -+{ -+ return mysql_rollback(mysql); -+} -+SYM_16(mysql_rollback); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) -+{ -+ return mysql_row_seek(result, row); -+} -+SYM_16(mysql_row_seek); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res) -+{ -+ return mysql_row_tell(res); -+} -+SYM_16(mysql_row_tell); -+ -+ -+void STDCALL symver16_mysql_server_end() -+{ -+ return mysql_server_end(); -+} -+SYM_16(mysql_server_end); -+ -+ -+int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused))) -+{ -+ return mysql_server_init(argc, argv, groups); -+} -+SYM_16(mysql_server_init); -+ -+ -+void symver16_mysql_set_local_infile_default(MYSQL *mysql) -+{ -+ return mysql_set_local_infile_default(mysql); -+} -+SYM_16(mysql_set_local_infile_default); -+ -+ -+void symver16_mysql_set_local_infile_handler(MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), int (*local_infile_read)(void *, char *, uint), void (*local_infile_end)(void *), int (*local_infile_error)(void *, char *, uint), void *userdata) -+{ -+ return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata); -+} -+SYM_16(mysql_set_local_infile_handler); -+ -+ -+int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option) -+{ -+ return mysql_set_server_option(mysql, option); -+} -+SYM_16(mysql_set_server_option); -+ -+ -+int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level) -+{ -+ return mysql_shutdown(mysql, shutdown_level); -+} -+SYM_16(mysql_shutdown); -+ -+ -+const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql) -+{ -+ return mysql_sqlstate(mysql); -+} -+SYM_16(mysql_sqlstate); -+ -+ -+const char * STDCALL symver16_mysql_stat(MYSQL *mysql) -+{ -+ return mysql_stat(mysql); -+} -+SYM_16(mysql_stat); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_affected_rows(stmt); -+} -+SYM_16(mysql_stmt_affected_rows); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value) -+{ -+ return mysql_stmt_attr_get(stmt, attr_type, value); -+} -+SYM_16(mysql_stmt_attr_get); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value) -+{ -+ return mysql_stmt_attr_set(stmt, attr_type, value); -+} -+SYM_16(mysql_stmt_attr_set); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -+{ -+ return mysql_stmt_bind_param(stmt, my_bind); -+} -+SYM_16(mysql_stmt_bind_param); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -+{ -+ return mysql_stmt_bind_result(stmt, my_bind); -+} -+SYM_16(mysql_stmt_bind_result); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_close(stmt); -+} -+SYM_16(mysql_stmt_close); -+ -+ -+void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) -+{ -+ return mysql_stmt_data_seek(stmt, row); -+} -+SYM_16(mysql_stmt_data_seek); -+ -+ -+uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_errno(stmt); -+} -+SYM_16(mysql_stmt_errno); -+ -+ -+const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_error(stmt); -+} -+SYM_16(mysql_stmt_error); -+ -+ -+int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_execute(stmt); -+} -+SYM_16(mysql_stmt_execute); -+ -+ -+int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_fetch(stmt); -+} -+SYM_16(mysql_stmt_fetch); -+ -+ -+int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset) -+{ -+ return mysql_stmt_fetch_column(stmt, my_bind, column, offset); -+} -+SYM_16(mysql_stmt_fetch_column); -+ -+ -+unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_field_count(stmt); -+} -+SYM_16(mysql_stmt_field_count); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_free_result(stmt); -+} -+SYM_16(mysql_stmt_free_result); -+ -+ -+MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql) -+{ -+ return mysql_stmt_init(mysql); -+} -+SYM_16(mysql_stmt_init); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_insert_id(stmt); -+} -+SYM_16(mysql_stmt_insert_id); -+ -+ -+my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_num_rows(stmt); -+} -+SYM_16(mysql_stmt_num_rows); -+ -+ -+ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_param_count(stmt); -+} -+SYM_16(mysql_stmt_param_count); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_param_metadata(stmt); -+} -+SYM_16(mysql_stmt_param_metadata); -+ -+ -+int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) -+{ -+ return mysql_stmt_prepare(stmt, query, length); -+} -+SYM_16(mysql_stmt_prepare); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_reset(stmt); -+} -+SYM_16(mysql_stmt_reset); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_result_metadata(stmt); -+} -+SYM_16(mysql_stmt_result_metadata); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row) -+{ -+ return mysql_stmt_row_seek(stmt, row); -+} -+SYM_16(mysql_stmt_row_seek); -+ -+ -+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_row_tell(stmt); -+} -+SYM_16(mysql_stmt_row_tell); -+ -+ -+my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length) -+{ -+ return mysql_stmt_send_long_data(stmt, param_number, data, length); -+} -+SYM_16(mysql_stmt_send_long_data); -+ -+ -+const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt) -+{ -+ return mysql_stmt_sqlstate(stmt); -+} -+SYM_16(mysql_stmt_sqlstate); -+ -+ -+int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt) -+{ -+ return mysql_stmt_store_result(stmt); -+} -+SYM_16(mysql_stmt_store_result); -+ -+ -+void STDCALL symver16_mysql_thread_end() -+{ -+ return mysql_thread_end(); -+} -+SYM_16(mysql_thread_end); -+ -+ -+ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql) -+{ -+ return mysql_thread_id(mysql); -+} -+SYM_16(mysql_thread_id); -+ -+ -+my_bool STDCALL symver16_mysql_thread_init() -+{ -+ return mysql_thread_init(); -+} -+SYM_16(mysql_thread_init); -+ -+ -+uint STDCALL symver16_mysql_thread_safe(void) -+{ -+ return mysql_thread_safe(); -+} -+SYM_16(mysql_thread_safe); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql) -+{ -+ return mysql_use_result(mysql); -+} -+SYM_16(mysql_use_result); -+ -+ -+uint STDCALL symver16_mysql_warning_count(MYSQL *mysql) -+{ -+ return mysql_warning_count(mysql); -+} -+SYM_16(mysql_warning_count); -+ -+/*****/ -+ -+MYSQL * STDCALL symver16_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag) -+{ -+ return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag); -+} -+SYM_16(mysql_real_connect); -+ -+/*****/ -+ -+my_bool symver16_my_init(void) -+{ -+ return my_init(); -+} -+SYM_16(my_init); -+ -+#endif -diff -rup old/libmysql/libmysql.ver.in new/libmysql/libmysql.ver.in ---- old/libmysql/libmysql.ver.in 2013-11-04 20:15:10.000000000 +0100 -+++ new/libmysql/libmysql.ver.in 2014-01-14 12:10:27.148374504 +0100 -@@ -1 +1,136 @@ --libmysqlclient_@SHARED_LIB_MAJOR_VERSION@ { global: *; }; -+libmysqlclient_16 -+{ -+ local: -+ symver16_*; -+}; -+ -+libmysqlclient_18 -+{ -+ global: -+ my_init; -+ myodbc_remove_escape; -+ mysql_affected_rows; -+ mysql_autocommit; -+ mysql_change_user; -+ mysql_character_set_name; -+ mysql_close; -+ mysql_commit; -+ mysql_data_seek; -+ mysql_debug; -+ mysql_dump_debug_info; -+ mysql_embedded; -+ mysql_eof; -+ mysql_errno; -+ mysql_error; -+ mysql_escape_string; -+ mysql_fetch_field; -+ mysql_fetch_field_direct; -+ mysql_fetch_fields; -+ mysql_fetch_lengths; -+ mysql_fetch_row; -+ mysql_field_count; -+ mysql_field_seek; -+ mysql_field_tell; -+ mysql_free_result; -+ mysql_get_character_set_info; -+ mysql_get_client_info; -+ mysql_get_client_version; -+ mysql_get_host_info; -+ mysql_get_parameters; -+ mysql_get_proto_info; -+ mysql_get_server_info; -+ mysql_get_server_version; -+ mysql_get_ssl_cipher; -+ mysql_hex_string; -+ mysql_info; -+ mysql_init; -+ mysql_insert_id; -+ mysql_kill; -+ mysql_list_dbs; -+ mysql_list_fields; -+ mysql_list_processes; -+ mysql_list_tables; -+ mysql_more_results; -+ mysql_next_result; -+ mysql_num_fields; -+ mysql_num_rows; -+ mysql_options; -+ mysql_ping; -+ mysql_query; -+ mysql_read_query_result; -+ mysql_real_connect; -+ mysql_real_escape_string; -+ mysql_real_query; -+ mysql_refresh; -+ mysql_rollback; -+ mysql_row_seek; -+ mysql_row_tell; -+ mysql_select_db; -+ mysql_send_query; -+ mysql_server_end; -+ mysql_server_init; -+ mysql_set_character_set; -+ mysql_set_local_infile_default; -+ mysql_set_local_infile_handler; -+ mysql_set_server_option; -+ mysql_shutdown; -+ mysql_sqlstate; -+ mysql_ssl_set; -+ mysql_stat; -+ mysql_stmt_affected_rows; -+ mysql_stmt_attr_get; -+ mysql_stmt_attr_set; -+ mysql_stmt_bind_param; -+ mysql_stmt_bind_result; -+ mysql_stmt_close; -+ mysql_stmt_data_seek; -+ mysql_stmt_errno; -+ mysql_stmt_error; -+ mysql_stmt_execute; -+ mysql_stmt_fetch; -+ mysql_stmt_fetch_column; -+ mysql_stmt_field_count; -+ mysql_stmt_free_result; -+ mysql_stmt_init; -+ mysql_stmt_insert_id; -+ mysql_stmt_num_rows; -+ mysql_stmt_param_count; -+ mysql_stmt_param_metadata; -+ mysql_stmt_prepare; -+ mysql_stmt_reset; -+ mysql_stmt_result_metadata; -+ mysql_stmt_row_seek; -+ mysql_stmt_row_tell; -+ mysql_stmt_send_long_data; -+ mysql_stmt_sqlstate; -+ mysql_stmt_store_result; -+ mysql_store_result; -+ mysql_thread_end; -+ mysql_thread_id; -+ mysql_thread_init; -+ mysql_thread_safe; -+ mysql_use_result; -+ mysql_warning_count; -+ -+ free_defaults; -+ handle_options; -+ load_defaults; -+ my_print_help; -+ -+ #my_make_scrambled_password; -+ THR_KEY_mysys; -+ -+ mysql_client_find_plugin; -+ mysql_client_register_plugin; -+ mysql_load_plugin; -+ mysql_load_plugin_v; -+ mysql_plugin_options; -+ mysql_stmt_next_result; -+ -+ #mysql_default_charset_info; -+ mysql_get_charset; -+ mysql_get_charset_by_csname; -+ mysql_net_realloc; -+ #mysql_client_errors; -+ *; -+} libmysqlclient_16; -diff -rup old/mysys/charset.c new/mysys/charset.c ---- old/mysys/charset.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/mysys/charset.c 2014-01-14 12:10:27.197377417 +0100 -@@ -1040,3 +1040,20 @@ size_t escape_quotes_for_mysql(CHARSET_I - *to= 0; - return overflow ? (ulong)~0 : (ulong) (to - to_start); - } -+ -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide Fedora symbols -+ -+CHARSET_INFO *mysql_get_charset(uint cs_number, myf flags) -+{ -+ return get_charset(cs_number, flags); -+} -+ -+ -+CHARSET_INFO * mysql_get_charset_by_csname(const char *cs_name, uint cs_flags, myf flags) -+{ -+ return get_charset_by_csname(cs_name, cs_flags, flags); -+} -+ -+#endif -diff -rup old/sql/net_serv.cc new/sql/net_serv.cc ---- old/sql/net_serv.cc 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql/net_serv.cc 2014-01-14 12:10:27.252380688 +0100 -@@ -1047,3 +1047,15 @@ void my_net_set_write_timeout(NET *net, - DBUG_VOID_RETURN; - } - -+#ifndef EMBEDDED_LIBRARY -+C_MODE_START -+ -+// Hack to provide Fedora symbols -+ -+my_bool mysql_net_realloc(NET *net, size_t length) -+{ -+ return net_realloc(net, length); -+} -+ -+C_MODE_END -+#endif -diff -rup old/sql/password.c new/sql/password.c ---- old/sql/password.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql/password.c 2014-01-14 12:10:27.309384078 +0100 -@@ -584,3 +584,16 @@ void make_password_from_salt(char *to, c - octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); - } - -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len) -+{ -+ my_make_scrambled_password(to, password, pass_len); -+} -+SYM_16(my_make_scrambled_password); -+ -+#endif -diff -rup old/sql-common/client.c new/sql-common/client.c ---- old/sql-common/client.c 2013-11-04 20:15:10.000000000 +0100 -+++ new/sql-common/client.c 2014-01-14 12:10:27.199377537 +0100 -@@ -4847,3 +4847,136 @@ static int clear_password_auth_client(MY - - return res ? CR_ERROR : CR_OK; - } -+ -+#ifndef EMBEDDED_LIBRARY -+ -+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions -+ -+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") -+ -+void STDCALL symver16_mysql_close(MYSQL *mysql) -+{ -+ return mysql_close(mysql); -+} -+SYM_16(mysql_close); -+ -+ -+uint STDCALL symver16_mysql_errno(MYSQL *mysql) -+{ -+ return mysql_errno(mysql); -+} -+SYM_16(mysql_errno); -+ -+ -+const char * STDCALL symver16_mysql_error(MYSQL *mysql) -+{ -+ return mysql_error(mysql); -+} -+SYM_16(mysql_error); -+ -+ -+ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res) -+{ -+ return mysql_fetch_lengths(res); -+} -+SYM_16(mysql_fetch_lengths); -+ -+ -+MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res) -+{ -+ return mysql_fetch_row(res); -+} -+SYM_16(mysql_fetch_row); -+ -+ -+void STDCALL symver16_mysql_free_result(MYSQL_RES *result) -+{ -+ return mysql_free_result(result); -+} -+SYM_16(mysql_free_result); -+ -+ -+ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql) -+{ -+ return mysql_get_server_version(mysql); -+} -+SYM_16(mysql_get_server_version); -+ -+ -+const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) -+{ -+ return mysql_get_ssl_cipher(mysql); -+} -+SYM_16(mysql_get_ssl_cipher); -+ -+ -+MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql) -+{ -+ return mysql_init(mysql); -+} -+SYM_16(mysql_init); -+ -+ -+unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res) -+{ -+ return mysql_num_fields(res); -+} -+SYM_16(mysql_num_fields); -+ -+ -+my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res) -+{ -+ return mysql_num_rows(res); -+} -+SYM_16(mysql_num_rows); -+ -+ -+int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) -+{ -+ return mysql_options(mysql, option, arg); -+} -+SYM_16(mysql_options); -+ -+ -+int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length) -+{ -+ return mysql_real_query(mysql, query, length); -+} -+SYM_16(mysql_real_query); -+ -+ -+int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db) -+{ -+ return mysql_select_db(mysql, db); -+} -+SYM_16(mysql_select_db); -+ -+ -+int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length) -+{ -+ return mysql_send_query(mysql, query, length); -+} -+SYM_16(mysql_send_query); -+ -+ -+int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name) -+{ -+ return mysql_set_character_set(mysql, cs_name); -+} -+SYM_16(mysql_set_character_set); -+ -+ -+my_bool STDCALL symver16_mysql_ssl_set(MYSQL *mysql __attribute__((unused)), const char *key __attribute__((unused)), const char *cert __attribute__((unused)), const char *ca __attribute__((unused)), const char *capath __attribute__((unused)), const char *cipher __attribute__((unused))) -+{ -+ return mysql_ssl_set(mysql, key, cert, ca, capath, cipher); -+} -+SYM_16(mysql_ssl_set); -+ -+ -+MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql) -+{ -+ return mysql_store_result(mysql); -+} -+SYM_16(mysql_store_result); -+ -+#endif diff -Nru mysql-5.6-5.6.27/packaging/rpm-oel/mysql.init mysql-5.6-5.6.33/packaging/rpm-oel/mysql.init --- mysql-5.6-5.6.27/packaging/rpm-oel/mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-oel/mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -3,7 +3,7 @@ # mysqld This shell script takes care of starting and stopping # the MySQL subsystem (mysqld). # -# chkconfig: - 64 36 +# chkconfig: 345 64 36 # description: MySQL database server. # processname: mysqld # config: /etc/my.cnf @@ -34,7 +34,7 @@ # We use my_print_defaults which prints all options from multiple files, # with the more specific ones later; hence take the last match. get_mysql_option(){ - result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1` + result=$(/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) if [ -z "$result" ]; then # not found, use default result="$3" @@ -102,7 +102,7 @@ # alarms, per bug #547485 $exec --datadir="$datadir" --socket="$socketfile" \ --pid-file="$mypidfile" \ - --basedir=/usr --user=mysql >/dev/null 2>&1 & + --basedir=/usr --user=mysql >/dev/null & safe_pid=$! # Spin for a maximum of N seconds waiting for the server to come up; # exit the loop immediately if mysqld_safe process disappears. diff -Nru mysql-5.6-5.6.27/packaging/rpm-oel/mysql.spec.in mysql-5.6-5.6.33/packaging/rpm-oel/mysql.spec.in --- mysql-5.6-5.6.27/packaging/rpm-oel/mysql.spec.in 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-oel/mysql.spec.in 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -81,6 +81,8 @@ %global license_type GPLv2 %endif +%global min 5.6.10 + Name: mysql-%{product_suffix} Summary: A very fast and reliable SQL database server Group: Applications/Databases @@ -102,7 +104,6 @@ Source90: filter-provides.sh Source91: filter-requires.sh Patch0: mysql-5.6.16-mysql-install.patch -Patch1: mysql-5.6-libmysqlclient-symbols.patch BuildRequires: cmake BuildRequires: perl %{?el7:BuildRequires: perl(Time::HiRes)} @@ -160,11 +161,11 @@ Provides: MySQL-server-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-server-advanced < %{version}-%{release} Obsoletes: mysql-community-server < %{version}-%{release} -Requires: mysql-commercial-client%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-client%{?_isa} >= %{min} Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else Provides: MySQL-server%{?_isa} = %{version}-%{release} -Requires: mysql-community-client%{?_isa} = %{version}-%{release} +Requires: mysql-community-client%{?_isa} >= %{min} Requires: mysql-community-common%{?_isa} = %{version}-%{release} %endif Obsoletes: MySQL-server < %{version}-%{release} @@ -213,10 +214,10 @@ Provides: MySQL-client-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-client-advanced < %{version}-%{release} Obsoletes: mysql-community-client < %{version}-%{release} -Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} >= %{min} %else Provides: MySQL-client%{?_isa} = %{version}-%{release} -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} +Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: MySQL-client < %{version}-%{release} Obsoletes: mariadb @@ -238,7 +239,7 @@ %endif Provides: mysql-common = %{version}-%{release} Provides: mysql-common%{?_isa} = %{version}-%{release} -%{?el5:Requires: mysql%{?_isa} = %{version}-%{release}} +%{?el5:Requires: mysql%{?_isa} >= %{min}} %description common This packages contains common files needed by MySQL client library, @@ -252,10 +253,10 @@ Provides: MySQL-test-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-test-advanced < %{version}-%{release} Obsoletes: mysql-community-test < %{version}-%{release} -Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} >= %{min} %else Provides: MySQL-test%{?_isa} = %{version}-%{release} -Requires: mysql-community-server%{?_isa} = %{version}-%{release} +Requires: mysql-community-server%{?_isa} >= %{min} %endif Obsoletes: MySQL-test < %{version}-%{release} Obsoletes: mysql-test < %{version}-%{release} @@ -273,9 +274,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-bench < %{version}-%{release} -Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} >= %{min} %else -Requires: mysql-community-server%{?_isa} = %{version}-%{release} +Requires: mysql-community-server%{?_isa} >= %{min} %endif Obsoletes: mariadb-bench Obsoletes: community-mysql-bench < %{version}-%{release} @@ -294,16 +295,17 @@ Provides: MySQL-devel-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-devel-advanced < %{version}-%{release} Obsoletes: mysql-community-devel < %{version}-%{release} -Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} >= %{min} %else Provides: MySQL-devel%{?_isa} = %{version}-%{release} -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} +Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: MySQL-devel < %{version}-%{release} Obsoletes: mysql-devel < %{version}-%{release} Obsoletes: mariadb-devel Provides: mysql-devel = %{version}-%{release} Provides: mysql-devel%{?_isa} = %{version}-%{release} +Conflicts: mysql-connector-c-devel < 6.2 %description devel This package contains the development header files and libraries necessary @@ -316,14 +318,15 @@ Provides: MySQL-shared-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-shared-advanced < %{version}-%{release} Obsoletes: mysql-community-libs < %{version}-%{release} -Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-common%{?_isa} >= %{min} %else Provides: MySQL-shared%{?_isa} = %{version}-%{release} -Requires: mysql-community-common%{?_isa} = %{version}-%{release} +Requires: mysql-community-common%{?_isa} >= %{min} %endif Obsoletes: MySQL-shared < %{version}-%{release} Obsoletes: mysql-libs < %{version}-%{release} Obsoletes: mariadb-libs +Conflicts: mysql-connector-c-shared < 6.2 Provides: mysql-libs = %{version}-%{release} Provides: mysql-libs%{?_isa} = %{version}-%{release} @@ -342,10 +345,10 @@ Provides: MySQL-shared-compat-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-shared-compat-advanced < %{version}-%{release} Obsoletes: mysql-community-libs-compat < %{version}-%{release} -Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} >= %{min} %else Provides: MySQL-shared-compat%{?_isa} = %{version}-%{release} -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} +Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: MySQL-shared-compat < %{version}-%{release} %if 0%{?rhel} > 5 @@ -392,11 +395,11 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-embedded-devel < %{version}-%{release} -Requires: mysql-commercial-devel%{?_isa} = %{version}-%{release} -Requires: mysql-commercial-embedded%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-devel%{?_isa} >= %{min} +Requires: mysql-commercial-embedded%{?_isa} >= %{min} %else -Requires: mysql-community-devel%{?_isa} = %{version}-%{release} -Requires: mysql-community-embedded%{?_isa} = %{version}-%{release} +Requires: mysql-community-devel%{?_isa} >= %{min} +Requires: mysql-community-embedded%{?_isa} >= %{min} %endif Obsoletes: mariadb-embedded-devel Obsoletes: mysql-embedded-devel < %{version}-%{release} @@ -412,13 +415,13 @@ Summary: Convenience package for easy upgrades of MySQL package set Group: Applications/Databases %if 0%{?commercial} -Requires: mysql-commercial-client%{?_isa} = %{version}-%{release} -Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} -Requires: mysql-commercial-libs-compat%{?_isa} = %{version}-%{release} -%else -Requires: mysql-community-client%{?_isa} = %{version}-%{release} -Requires: mysql-community-libs%{?_isa} = %{version}-%{release} -Requires: mysql-community-libs-compat%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-client%{?_isa} >= %{min} +Requires: mysql-commercial-libs%{?_isa} >= %{min} +Requires: mysql-commercial-libs-compat%{?_isa} >= %{min} +%else +Requires: mysql-community-client%{?_isa} >= %{min} +Requires: mysql-community-libs%{?_isa} >= %{min} +Requires: mysql-community-libs-compat%{?_isa} >= %{min} %endif %description -n mysql @@ -437,7 +440,6 @@ %endif # 0%{?compatlib} pushd %{src_dir} %patch0 -p1 -%{?el7:%patch1 -p1} %build # Fail quickly and obviously if user tries to build as root @@ -509,6 +511,7 @@ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ + %{?el7:-DWITH_SYMVER16=1} \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ %{?ssl_option} \ @@ -534,6 +537,7 @@ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ + %{?el7:-DWITH_SYMVER16=1} \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ %{?ssl_option} \ @@ -624,13 +628,14 @@ %pre server /usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || : -/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s /bin/bash \ +/usr/sbin/useradd -M %{!?el5:-N} -g mysql -o -r -d /var/lib/mysql -s /bin/bash \ -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || : %post server -datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') +datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) /bin/chmod 0755 "$datadir" >/dev/null 2>&1 || : /bin/touch /var/log/mysqld.log >/dev/null 2>&1 || : +/bin/chown mysql:mysql /var/log/mysqld.log >/dev/null 2>&1 || : %if 0%{?systemd} %systemd_post mysqld.service /usr/bin/systemctl enable mysqld >/dev/null 2>&1 || : @@ -763,12 +768,14 @@ %attr(755, root, root) %{_libdir}/mysql/plugin/auth_test_plugin.so %attr(644, root, root) %{_libdir}/mysql/plugin/daemon_example.ini %attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_server.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth_test_plugin.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_server.so @@ -855,8 +862,6 @@ %attr(755, root, root) %{_bindir}/mysqlimport %attr(755, root, root) %{_bindir}/mysqlshow %attr(755, root, root) %{_bindir}/mysqlslap -%attr(755, root, root) %{_bindir}/mysql_config -%attr(755, root, root) %{_bindir}/mysql_config-%{__isa_bits} %attr(755, root, root) %{_bindir}/mysql_config_editor %attr(644, root, root) %{_mandir}/man1/msql2mysql.1* @@ -947,6 +952,15 @@ %endif %changelog +* Tue Jul 05 2016 Balasubramanian Kandasamy - 5.6.32-1 +- Remove mysql_config from client subpackage + +* Mon Mar 14 2016 Georgi Kodinov - 5.6.31-1 +- Add test_udf_services.so plugin + +* Tue Sep 29 2015 Balasubramanian Kandasamy - 5.6.28-1 +- Added conflicts to mysql-connector-c-shared dependencies + * Wed Jan 14 2015 Balasubramanian Kandasamy - 5.6.24-1 - Add mysql_no_login.so plugin diff -Nru mysql-5.6-5.6.27/packaging/rpm-oel/mysql-systemd-start mysql-5.6-5.6.33/packaging/rpm-oel/mysql-systemd-start --- mysql-5.6-5.6.27/packaging/rpm-oel/mysql-systemd-start 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-oel/mysql-systemd-start 2016-08-26 11:22:35.000000000 +0000 @@ -12,7 +12,7 @@ local section=$1 local option=$2 local default=$3 - ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) + ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2- | tail -n 1) [ -z "$ret" ] && ret=$default echo $ret } diff -Nru mysql-5.6-5.6.27/packaging/rpm-sles/mysql.init mysql-5.6-5.6.33/packaging/rpm-sles/mysql.init --- mysql-5.6-5.6.27/packaging/rpm-sles/mysql.init 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-sles/mysql.init 2016-08-26 11:22:35.000000000 +0000 @@ -57,7 +57,7 @@ local section=$1 local option=$2 local default=$3 - ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) + ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2- | tail -n 1) [ -z $ret ] && ret=$default echo $ret } @@ -153,7 +153,7 @@ rc_failed 6 ; rc_status -v ; rc_exit fi - $PROG --basedir=/usr --datadir="$datadir" --pid-file="$pidfile" >/dev/null 2>&1 & + $PROG --basedir=/usr --datadir="$datadir" --pid-file="$pidfile" >/dev/null & if pinger $! ; then echo -n "Starting service MySQL:" touch $lockfile diff -Nru mysql-5.6-5.6.27/packaging/rpm-sles/mysql.spec.in mysql-5.6-5.6.33/packaging/rpm-sles/mysql.spec.in --- mysql-5.6-5.6.27/packaging/rpm-sles/mysql.spec.in 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-sles/mysql.spec.in 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -66,6 +66,8 @@ %{?sles12: %global systemd 1} %{!?_tmpfilesdir: %global _tmpfilesdir /usr/lib/tmpfiles.d} +%global min 5.6.10 + Name: mysql-%{product_suffix} Summary: A very fast and reliable SQL database server Group: Applications/Databases @@ -136,12 +138,12 @@ Provides: MySQL-server-advanced = %{version}-%{release} Obsoletes: MySQL-server-advanced < %{version}-%{release} Obsoletes: mysql-community-server < %{version}-%{release} -Requires: mysql-commercial-client = %{version}-%{release} -Requires: mysql-commercial-common = %{version}-%{release} +Requires: mysql-commercial-client >= %{min} +Requires: mysql-commercial-common >= %{min} %else Provides: MySQL-server = %{version}-%{release} -Requires: mysql-community-client = %{version}-%{release} -Requires: mysql-community-common = %{version}-%{release} +Requires: mysql-community-client >= %{min} +Requires: mysql-community-common >= %{min} %endif Obsoletes: MySQL-server < %{version}-%{release} Obsoletes: mysql < %{version}-%{release} @@ -189,10 +191,10 @@ Provides: MySQL-client-advanced = %{version}-%{release} Obsoletes: MySQL-client-advanced < %{version}-%{release} Obsoletes: mysql-community-client < %{version}-%{release} -Requires: mysql-commercial-libs = %{version}-%{release} +Requires: mysql-commercial-libs >= %{min} %else Provides: MySQL-client = %{version}-%{release} -Requires: mysql-community-libs = %{version}-%{release} +Requires: mysql-community-libs >= %{min} %endif Obsoletes: MySQL-client < %{version}-%{release} Provides: mysql-client = %{version}-%{release} @@ -224,10 +226,10 @@ Provides: MySQL-test-advanced = %{version}-%{release} Obsoletes: MySQL-test-advanced < %{version}-%{release} Obsoletes: mysql-community-test < %{version}-%{release} -Requires: mysql-commercial-server = %{version}-%{release} +Requires: mysql-commercial-server >= %{min} %else Provides: MySQL-test = %{version}-%{release} -Requires: mysql-community-server = %{version}-%{release} +Requires: mysql-community-server >= %{min} %endif Obsoletes: MySQL-test < %{version}-%{release} Obsoletes: mysql-test < %{version}-%{release} @@ -245,9 +247,9 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-bench < %{version}-%{release} -Requires: mysql-commercial-server = %{version}-%{release} +Requires: mysql-commercial-server >= %{min} %else -Requires: mysql-community-server = %{version}-%{release} +Requires: mysql-community-server >= %{min} %endif Obsoletes: mariadb-bench Obsoletes: community-mysql-bench < %{version}-%{release} @@ -266,10 +268,10 @@ Provides: MySQL-devel-advanced = %{version}-%{release} Obsoletes: MySQL-devel-advanced < %{version}-%{release} Obsoletes: mysql-community-devel < %{version}-%{release} -Requires: mysql-commercial-libs = %{version}-%{release} +Requires: mysql-commercial-libs >= %{min} %else Provides: MySQL-devel = %{version}-%{release} -Requires: mysql-community-libs = %{version}-%{release} +Requires: mysql-community-libs >= %{min} %endif Obsoletes: MySQL-devel < %{version}-%{release} Obsoletes: mysql-devel < %{version}-%{release} @@ -277,6 +279,7 @@ Obsoletes: libmysqlclient-devel Provides: mysql-devel = %{version}-%{release} Provides: libmysqlclient-devel = %{version}-%{release} +Conflicts: mysql-connector-c-devel < 6.2 %description devel This package contains the development header files and libraries necessary @@ -289,10 +292,10 @@ Provides: MySQL-shared-advanced = %{version}-%{release} Obsoletes: MySQL-shared-advanced < %{version}-%{release} Obsoletes: mysql-community-libs < %{version}-%{release} -Requires: mysql-commercial-common = %{version}-%{release} +Requires: mysql-commercial-common >= %{min} %else Provides: MySQL-shared = %{version}-%{release} -Requires: mysql-community-common = %{version}-%{release} +Requires: mysql-community-common >= %{min} %endif Obsoletes: MySQL-shared < %{version}-%{release} Obsoletes: mysql-libs < %{version}-%{release} @@ -302,6 +305,7 @@ Provides: mysql-libs = %{version}-%{release} Provides: libmysqlclient18 = %{version}-%{release} Provides: libmysqlclient_r18 = %{version}-%{release} +Conflicts: mysql-connector-c-shared < 6.2 %description libs This package contains the shared libraries for MySQL client @@ -314,10 +318,10 @@ Provides: MySQL-embedded-advanced = %{version}-%{release} Obsoletes: MySQL-embedded-advanced < %{version}-%{release} Obsoletes: mysql-community-embedded < %{version}-%{release} -Requires: mysql-commercial-common = %{version}-%{release} +Requires: mysql-commercial-common >= %{min} %else Provides: MySQL-embedded = %{version}-%{release} -Requires: mysql-community-common = %{version}-%{release} +Requires: mysql-community-common >= %{min} %endif Obsoletes: mariadb-embedded Obsoletes: MySQL-embedded < %{version}-%{release} @@ -341,11 +345,11 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-embedded-devel < %{version}-%{release} -Requires: mysql-commercial-devel = %{version}-%{release} -Requires: mysql-commercial-embedded = %{version}-%{release} +Requires: mysql-commercial-devel >= %{min} +Requires: mysql-commercial-embedded >= %{min} %else -Requires: mysql-community-devel = %{version}-%{release} -Requires: mysql-community-embedded = %{version}-%{release} +Requires: mysql-community-devel >= %{min} +Requires: mysql-community-embedded >= %{min} %endif Obsoletes: mariadb-embedded-devel Obsoletes: mysql-embedded-devel < %{version}-%{release} @@ -502,9 +506,10 @@ %endif %post server -datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') +datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) /bin/chmod 0755 "$datadir" /bin/touch /var/log/mysql/mysqld.log +/bin/chown mysql:mysql /var/log/mysql/mysqld.log >/dev/null 2>&1 || : %if 0%{?systemd} %service_add_post mysql.service /usr/bin/systemd-tmpfiles --create %{_tmpfilesdir}/mysql.conf >/dev/null 2>&1 || : @@ -715,7 +720,6 @@ %attr(755, root, root) %{_bindir}/mysqlimport %attr(755, root, root) %{_bindir}/mysqlshow %attr(755, root, root) %{_bindir}/mysqlslap -%attr(755, root, root) %{_bindir}/mysql_config %attr(755, root, root) %{_bindir}/mysql_config_editor %attr(644, root, root) %{_mandir}/man1/msql2mysql.1* @@ -779,12 +783,14 @@ %attr(755, root, root) %{_libdir}/mysql/plugin/auth_test_plugin.so %attr(644, root, root) %{_libdir}/mysql/plugin/daemon_example.ini %attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_server.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth_test_plugin.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/test_udf_services.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_client.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_server.so @@ -816,6 +822,12 @@ %attr(755, root, root) %{_libdir}/mysql/libmysqld.so %changelog +* Mon Mar 14 2016 Georgi Kodinov - 5.6.31-1 +- Add test_udf_services.so plugin + +* Tue Sep 29 2015 Balasubramanian Kandasamy - 5.6.28-1 +- Added conflicts to mysql-connector-c-shared dependencies + * Wed Jan 14 2015 Balasubramanian Kandasamy - 5.6.24-1 - Add mysql_no_login.so plugin diff -Nru mysql-5.6-5.6.27/packaging/rpm-sles/mysql-systemd-start mysql-5.6-5.6.33/packaging/rpm-sles/mysql-systemd-start --- mysql-5.6-5.6.27/packaging/rpm-sles/mysql-systemd-start 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/rpm-sles/mysql-systemd-start 2016-08-26 11:22:35.000000000 +0000 @@ -10,7 +10,7 @@ install_db () { # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode) - datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') + datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) # Restore log, dir, perms and SELinux contexts [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1 diff -Nru mysql-5.6-5.6.27/packaging/WiX/ca/CMakeLists.txt mysql-5.6-5.6.33/packaging/WiX/ca/CMakeLists.txt --- mysql-5.6-5.6.27/packaging/WiX/ca/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/WiX/ca/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,38 +13,38 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE_DIRECTORIES(${WIX_DIR}/../SDK/inc ${WIX_DIR}/SDK/inc) -LINK_DIRECTORIES(${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib) - -SET(WIXCA_SOURCES CustomAction.cpp CustomAction.def) - IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(WIX_ARCH_SUFFIX "_x64") + SET(WIX_ARCH "x64") ELSE() - SET(WIX_ARCH_SUFFIX) + SET(WIX_ARCH "x86") ENDIF() -IF(MSVC_VERSION EQUAL 1400) - SET(WIX35_MSVC_SUFFIX "_2005") -ELSEIF(MSVC_VERSION EQUAL 1500) - SET(WIX35_MSVC_SUFFIX "_2008") +IF(MSVC_VERSION EQUAL 1900) + SET(WIX_MSVC_DIR "VS2015") +ELSEIF(MSVC_VERSION EQUAL 1800) + SET(WIX_MSVC_DIR "VS2013") ELSEIF(MSVC_VERSION EQUAL 1600) - SET(WIX35_MSVC_SUFFIX "_2010") + SET(WIX_MSVC_DIR "VS2010") ELSE() # When next VS is out, add the correct version here MESSAGE(FATAL_ERROR "Unknown VS version") ENDIF() -MESSAGE(STATUS "Searching for wcautil${WIX_ARCH_SUFFIX} or wcautil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} in ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib") -MESSAGE(STATUS "Searching for dutil${WIX_ARCH_SUFFIX} or dutil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} in ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib") +INCLUDE_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/inc) +LINK_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) + +SET(WIXCA_SOURCES CustomAction.cpp CustomAction.def) + +MESSAGE(STATUS "Searching for wcautil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}") +MESSAGE(STATUS "Searching for dutil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}") FIND_LIBRARY(WIX_WCAUTIL_LIBRARY - NAMES wcautil${WIX_ARCH_SUFFIX} wcautil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} - HINTS ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib) + NAMES wcautil + PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) FIND_LIBRARY(WIX_DUTIL_LIBRARY - NAMES dutil${WIX_ARCH_SUFFIX} dutil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} - PATHS ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib) + NAMES dutil + PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) MESSAGE(STATUS "Found: ${WIX_WCAUTIL_LIBRARY}") MESSAGE(STATUS "Found: ${WIX_DUTIL_LIBRARY}") diff -Nru mysql-5.6-5.6.27/packaging/WiX/CMakeLists.txt mysql-5.6-5.6.33/packaging/WiX/CMakeLists.txt --- mysql-5.6-5.6.27/packaging/WiX/CMakeLists.txt 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/WiX/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,9 +23,16 @@ "$ENV{ProgramFiles}/Windows Installer XML v3/bin" "$ENV{ProgramFiles}/Windows Installer XML v3.5/bin" "$ENV{ProgramFiles}/WiX Toolset V3.6/bin" + "$ENV{ProgramFiles}/WiX Toolset V3.8/bin" ) IF(NOT WIX_DIR) + FIND_PATH(WIX_DIR heat.exe + "$ENV{ProgramFiles}/WiX Toolset V3.10/bin" + ) +ENDIF() + +IF(NOT WIX_DIR) IF(NOT _WIX_DIR_CHECKED) SET(_WIX_DIR_CHECKED 1 CACHE INTERNAL "") MESSAGE(STATUS "Cannot find wix 3, installer project will not be generated") @@ -101,6 +108,7 @@ SET(WixWin64 " Win64='yes'") ELSE() SET(WixWin64) + SET(WixWin64 " Win64='no'") ENDIF() CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server_extra.wxs.in diff -Nru mysql-5.6-5.6.27/packaging/WiX/custom_ui.wxs mysql-5.6-5.6.33/packaging/WiX/custom_ui.wxs --- mysql-5.6-5.6.27/packaging/WiX/custom_ui.wxs 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/packaging/WiX/custom_ui.wxs 2016-08-26 11:22:35.000000000 +0000 @@ -2,7 +2,7 @@ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> - + + + + Installed + #include -#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8) -#define __attribute__(A) -#endif +#include "my_attribute.h" static volatile int number_of_calls; /* for SHOW STATUS, see below */ /* Count MYSQL_AUDIT_GENERAL_CLASS event instances */ @@ -48,7 +46,7 @@ 1 failure (cannot happen) */ -static int audit_null_plugin_init(void *arg __attribute__((unused))) +static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) { number_of_calls= 0; number_of_calls_general_log= 0; @@ -75,7 +73,7 @@ */ -static int audit_null_plugin_deinit(void *arg __attribute__((unused))) +static int audit_null_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { return(0); } @@ -91,7 +89,7 @@ DESCRIPTION */ -static void audit_null_notify(MYSQL_THD thd __attribute__((unused)), +static void audit_null_notify(MYSQL_THD thd MY_ATTRIBUTE((unused)), unsigned int event_class, const void *event) { diff -Nru mysql-5.6-5.6.27/plugin/auth/dialog.c mysql-5.6-5.6.33/plugin/auth/dialog.c --- mysql-5.6-5.6.27/plugin/auth/dialog.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/auth/dialog.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -207,8 +207,8 @@ static mysql_authentication_dialog_ask_t ask; -static char *builtin_ask(MYSQL *mysql __attribute__((unused)), - int type __attribute__((unused)), +static char *builtin_ask(MYSQL *mysql MY_ATTRIBUTE((unused)), + int type MY_ATTRIBUTE((unused)), const char *prompt, char *buf, int buf_len) { @@ -309,10 +309,10 @@ or fall back to the default implementation. */ -static int init_dialog(char *unused1 __attribute__((unused)), - size_t unused2 __attribute__((unused)), - int unused3 __attribute__((unused)), - va_list unused4 __attribute__((unused))) +static int init_dialog(char *unused1 MY_ATTRIBUTE((unused)), + size_t unused2 MY_ATTRIBUTE((unused)), + int unused3 MY_ATTRIBUTE((unused)), + va_list unused4 MY_ATTRIBUTE((unused))) { void *sym= dlsym(RTLD_DEFAULT, "mysql_authentication_dialog_ask"); ask= sym ? (mysql_authentication_dialog_ask_t) sym : builtin_ask; diff -Nru mysql-5.6-5.6.27/plugin/auth/mysql_no_login.c mysql-5.6-5.6.33/plugin/auth/mysql_no_login.c --- mysql-5.6-5.6.27/plugin/auth/mysql_no_login.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/auth/mysql_no_login.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015 Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2016 Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -32,8 +32,8 @@ #include static int mysql_no_login( - MYSQL_PLUGIN_VIO *vio __attribute__((unused)), - MYSQL_SERVER_AUTH_INFO *info __attribute__((unused))) + MYSQL_PLUGIN_VIO *vio MY_ATTRIBUTE((unused)), + MYSQL_SERVER_AUTH_INFO *info MY_ATTRIBUTE((unused))) { return CR_ERROR; } diff -Nru mysql-5.6-5.6.27/plugin/daemon_example/daemon_example.cc mysql-5.6-5.6.33/plugin/daemon_example/daemon_example.cc --- mysql-5.6-5.6.27/plugin/daemon_example/daemon_example.cc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/daemon_example/daemon_example.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,10 +26,10 @@ #include "sql_plugin.h" // st_plugin_int /* - Disable __attribute__() on non-gcc compilers. + Disable MY_ATTRIBUTE() on non-gcc compilers. */ -#if !defined(__attribute__) && !defined(__GNUC__) -#define __attribute__(A) +#if !defined(MY_ATTRIBUTE) && !defined(__GNUC__) +#define MY_ATTRIBUTE(A) #endif diff -Nru mysql-5.6-5.6.27/plugin/fulltext/plugin_example.c mysql-5.6-5.6.33/plugin/fulltext/plugin_example.c --- mysql-5.6-5.6.27/plugin/fulltext/plugin_example.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/fulltext/plugin_example.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,9 +17,7 @@ #include #include -#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8) -#define __attribute__(A) -#endif +#include "my_attribute.h" static long number_of_calls= 0; /* for SHOW STATUS, see below */ @@ -62,7 +60,7 @@ 1 failure (cannot happen) */ -static int simple_parser_plugin_init(void *arg __attribute__((unused))) +static int simple_parser_plugin_init(void *arg MY_ATTRIBUTE((unused))) { return(0); } @@ -81,7 +79,7 @@ */ -static int simple_parser_plugin_deinit(void *arg __attribute__((unused))) +static int simple_parser_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { return(0); } @@ -102,7 +100,7 @@ */ static int simple_parser_init(MYSQL_FTPARSER_PARAM *param - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { return(0); } @@ -123,7 +121,7 @@ */ static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { return(0); } diff -Nru mysql-5.6-5.6.27/plugin/innodb_memcached/daemon_memcached/include/memcached/util.h mysql-5.6-5.6.33/plugin/innodb_memcached/daemon_memcached/include/memcached/util.h --- mysql-5.6-5.6.27/plugin/innodb_memcached/daemon_memcached/include/memcached/util.h 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/innodb_memcached/daemon_memcached/include/memcached/util.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,3 +1,5 @@ +/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. */ + #ifndef UTIL_H #define UTIL_H /* @@ -12,6 +14,11 @@ #include #include +/* Changed for INNODB_MEMCACHED */ +#if defined(htonll) +#define HAVE_HTONLL 1 +#endif + #ifdef __cplusplus extern "C" { #endif diff -Nru mysql-5.6-5.6.27/plugin/innodb_memcached/daemon_memcached/utilities/engine_loader.c mysql-5.6-5.6.33/plugin/innodb_memcached/daemon_memcached/utilities/engine_loader.c --- mysql-5.6-5.6.27/plugin/innodb_memcached/daemon_memcached/utilities/engine_loader.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/innodb_memcached/daemon_memcached/utilities/engine_loader.c 2016-08-26 11:22:35.000000000 +0000 @@ -137,6 +137,12 @@ offset += nw; for (int ii = 0; ii < info->num_features; ++ii) { if (info->features[ii].description != NULL) { + // We don't want to write partially from source + if (sizeof(message)-offset <= + 2+strlen(info->features[ii].description)) + { + return; + } nw = snprintf(message + offset, sizeof(message) - offset, "%s%s", comma ? ", " : "", info->features[ii].description); diff -Nru mysql-5.6-5.6.27/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c mysql-5.6-5.6.33/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c --- mysql-5.6-5.6.27/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /*********************************************************************** -Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -1929,6 +1929,9 @@ &col_value->value_int, col_value->value_len, col_value->is_unsigned); + + assert(int_len <= conn_data->mul_col_buf_len); + memcpy(c_value, int_buf, int_len); c_value += int_len; } else { diff -Nru mysql-5.6-5.6.27/plugin/password_validation/validate_password.cc mysql-5.6-5.6.33/plugin/password_validation/validate_password.cc --- mysql-5.6-5.6.27/plugin/password_validation/validate_password.cc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/password_validation/validate_password.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,18 +17,19 @@ #include #include #include +#include // std::streamoff #include #include #include // std::swap /* - __attribute__(A) needs to be defined for Windows else complier + MY_ATTRIBUTE(A) needs to be defined for Windows else complier do not recognise it. Argument in plugin_init and plugin_deinit Used in other plugins as well. */ -#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8) -#define __attribute__(A) +#if !defined(MY_ATTRIBUTE) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8) +#define MY_ATTRIBUTE(A) #endif #define MAX_DICTIONARY_FILE_LENGTH 1024 * 1024 @@ -366,7 +367,7 @@ It empty the std::set and returns 0 */ -static int validate_password_deinit(void *arg __attribute__((unused))) +static int validate_password_deinit(void *arg MY_ATTRIBUTE((unused))) { free_dictionary_file(); mysql_rwlock_destroy(&LOCK_dict_file); @@ -379,8 +380,8 @@ the cache and re-load the new dictionary file. */ static void -dictionary_update(MYSQL_THD thd __attribute__((unused)), - struct st_mysql_sys_var *var __attribute__((unused)), +dictionary_update(MYSQL_THD thd MY_ATTRIBUTE((unused)), + struct st_mysql_sys_var *var MY_ATTRIBUTE((unused)), void *var_ptr, const void *save) { *(const char**)var_ptr= *(const char**)save; @@ -395,8 +396,8 @@ 4. validate_password_special_char_count */ static void -length_update(MYSQL_THD thd __attribute__((unused)), - struct st_mysql_sys_var *var __attribute__((unused)), +length_update(MYSQL_THD thd MY_ATTRIBUTE((unused)), + struct st_mysql_sys_var *var MY_ATTRIBUTE((unused)), void *var_ptr, const void *save) { int new_validate_password_length; diff -Nru mysql-5.6-5.6.27/plugin/semisync/semisync_master.cc mysql-5.6-5.6.33/plugin/semisync/semisync_master.cc --- mysql-5.6-5.6.27/plugin/semisync/semisync_master.cc 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/semisync/semisync_master.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (C) 2007 Google Inc. - Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,7 +51,7 @@ static unsigned long long timespec_to_usec(const struct timespec *ts) { -#ifndef __WIN__ +#ifdef HAVE_STRUCT_TIMESPEC return (unsigned long long) ts->tv_sec * TIME_MILLION + ts->tv_nsec / TIME_THOUSAND; #else return ts->tv.i64 / 10; @@ -702,7 +702,7 @@ } /* Calcuate the waiting period. */ -#ifdef __WIN__ +#ifndef HAVE_STRUCT_TIMESPEC abstime.tv.i64 = start_ts.tv.i64 + (__int64)wait_timeout_ * TIME_THOUSAND * 10; abstime.max_timeout_msec= (long)wait_timeout_; #else diff -Nru mysql-5.6-5.6.27/plugin/udf_services/CMakeLists.txt mysql-5.6-5.6.33/plugin/udf_services/CMakeLists.txt --- mysql-5.6-5.6.27/plugin/udf_services/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/udf_services/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,16 @@ +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +MYSQL_ADD_PLUGIN(test_udf_services test_udf_services.cc MODULE_ONLY) diff -Nru mysql-5.6-5.6.27/plugin/udf_services/test_udf_services.cc mysql-5.6-5.6.33/plugin/udf_services/test_udf_services.cc --- mysql-5.6-5.6.27/plugin/udf_services/test_udf_services.cc 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/plugin/udf_services/test_udf_services.cc 2016-08-26 11:22:35.000000000 +0000 @@ -0,0 +1,101 @@ +/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include +#include +#include +#include + +/** + @file test_udf_services.cc + + This is a test suite plugin to verify that plugins can co-exist with UDFs. + The file defines one DAEMON plugin @ref test_udf_services_plugin and one + UDF function: @ref test_udf_services_udf. + The test then checks if the plugin can be unloaded and loaded while the + UDF is defined. + + No user-facing functionality in this plugin. Just test material ! +*/ + +static struct st_mysql_daemon test_udf_services_plugin= +{ MYSQL_DAEMON_INTERFACE_VERSION }; + +mysql_declare_plugin(test_udf_services) +{ + MYSQL_DAEMON_PLUGIN, + &test_udf_services_plugin, + "test_udf_services", + "Georgi Kodinov", + "MySQL mtr test framework", + PLUGIN_LICENSE_GPL, + NULL, /* Plugin Init */ + NULL, /* Plugin Deinit */ + 0x0100, /* Plugin version: 1.0 */ + NULL, /* status variables */ + NULL, /* system variables */ + NULL, /* config options */ + 0, /* flags */ +} +mysql_declare_plugin_end; + +#ifdef WIN32 +#define PLUGIN_EXPORT extern "C" __declspec(dllexport) +#else +#define PLUGIN_EXPORT extern "C" +#endif + + +/** + Initialization function for @ref test_udf_services_udf + + Must be present otherwise the server refuses to load + + @param initrd Return value from xxxx_init + @param args Array of arguments + @param[out] message Error message in case of error. + @retval FALSE success + @retval TRUE Failure. Error in the message argument +*/ +PLUGIN_EXPORT my_bool +test_udf_services_udf_init(UDF_INIT *initid MY_ATTRIBUTE((unused)), + UDF_ARGS *args MY_ATTRIBUTE((unused)), + char *message MY_ATTRIBUTE((unused))) +{ + return FALSE; +} + + +/** + A UDF function returning 0. + + @param initrd Return value from xxxx_init + @param args Array of arguments + @param[out] is_null If the result is null, store 1 here + @param[out] error On error store 1 here +*/ +PLUGIN_EXPORT longlong +test_udf_services_udf(UDF_INIT *initid MY_ATTRIBUTE((unused)), + UDF_ARGS *args MY_ATTRIBUTE((unused)), + char *is_null MY_ATTRIBUTE((unused)), + char *error MY_ATTRIBUTE((unused))) +{ + char buffer[10]; + *is_null= 0; + *error= 0; + /* use a plugin service function */ + my_snprintf(buffer, sizeof(buffer), "test"); + return 0; +} diff -Nru mysql-5.6-5.6.27/README mysql-5.6-5.6.33/README --- mysql-5.6-5.6.27/README 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/README 2016-08-26 11:22:35.000000000 +0000 @@ -5,7 +5,7 @@ is released under the version 2 of the GNU General Public License. MySQL is brought to you by Oracle. -Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. License information can be found in the COPYING file. diff -Nru mysql-5.6-5.6.27/regex/main.c mysql-5.6-5.6.33/regex/main.c --- mysql-5.6-5.6.27/regex/main.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/regex/main.c 2016-08-26 11:22:35.000000000 +0000 @@ -498,7 +498,8 @@ (sub.rm_so != -1 && sub.rm_eo == -1) || (sub.rm_so != -1 && sub.rm_so < 0) || (sub.rm_eo != -1 && sub.rm_eo < 0) ) { - sprintf(grump, "start %ld end %ld", (long)sub.rm_so, + snprintf(grump, sizeof(grump), + "start %ld end %ld", (long)sub.rm_so, (long)sub.rm_eo); return(grump); } @@ -511,7 +512,8 @@ /* check for in range */ if ((int) sub.rm_eo > (int) strlen(str)) { - sprintf(grump, "start %ld end %ld, past end of string", + snprintf(grump, sizeof(grump), + "start %ld end %ld, past end of string", (long)sub.rm_so, (long)sub.rm_eo); return(grump); } @@ -522,13 +524,15 @@ /* check for not supposed to match */ if (should == NULL) { - sprintf(grump, "matched `%.*s'", len, p); + snprintf(grump, sizeof(grump), + "matched `%.*s'", len, p); return(grump); } /* check for wrong match */ if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) { - sprintf(grump, "matched `%.*s' instead", len, p); + snprintf(grump, sizeof(grump), + "matched `%.*s' instead", len, p); return(grump); } if (shlen > 0) @@ -541,7 +545,8 @@ if (shlen == 0) shlen = 1; /* force check for end-of-string */ if (strncmp(p, at, shlen) != 0) { - sprintf(grump, "matched null at `%.20s'", p); + snprintf(grump, sizeof(grump), + "matched null at `%.20s'", p); return(grump); } return(NULL); @@ -574,7 +579,7 @@ static char efbuf[100]; my_regex_t re; - sprintf(efbuf, "MY_REG_%s", name); + snprintf(efbuf, sizeof(efbuf), "MY_REG_%s", name); assert(strlen(efbuf) < sizeof(efbuf)); re.re_endp = efbuf; (void) my_regerror(MY_REG_ATOI, &re, efbuf, sizeof(efbuf)); diff -Nru mysql-5.6-5.6.27/regex/regcomp.c mysql-5.6-5.6.33/regex/regcomp.c --- mysql-5.6-5.6.27/regex/regcomp.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/regex/regcomp.c 2016-08-26 11:22:35.000000000 +0000 @@ -3,7 +3,7 @@ This file was modified by Oracle on 2015-05-18 for 32-bit compatibility. - Modifications copyright (c) 2015, Oracle and/or its affiliates. All rights + Modifications copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. */ #include @@ -1258,8 +1258,8 @@ */ static void mcinvert(p, cs) - register struct parse *p __attribute__((unused)); - register cset *cs __attribute__((unused)); + register struct parse *p MY_ATTRIBUTE((unused)); + register cset *cs MY_ATTRIBUTE((unused)); { assert(cs->multis == NULL); /* xxx */ } @@ -1273,8 +1273,8 @@ */ static void mccase(p, cs) -register struct parse *p __attribute__((unused)); -register cset *cs __attribute__((unused)); +register struct parse *p MY_ATTRIBUTE((unused)); +register cset *cs MY_ATTRIBUTE((unused)); { assert(cs->multis == NULL); /* xxx */ } diff -Nru mysql-5.6-5.6.27/regex/split.c mysql-5.6-5.6.33/regex/split.c --- mysql-5.6-5.6.27/regex/split.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/regex/split.c 2016-08-26 11:22:35.000000000 +0000 @@ -159,10 +159,18 @@ if (argc > 4) for (n = atoi(argv[3]); n > 0; n--) { + if(sizeof(buf)-1 < strlen(argv[1])) + { + exit(EXIT_FAILURE); + } (void) strcpy(buf, argv[1]); } else if (argc > 3) for (n = atoi(argv[3]); n > 0; n--) { + if(sizeof(buf)-1 < strlen(argv[1])) + { + exit(EXIT_FAILURE); + } (void) strcpy(buf, argv[1]); (void) split(buf, fields, MNF, argv[2]); } diff -Nru mysql-5.6-5.6.27/scripts/fill_help_tables.sql mysql-5.6-5.6.33/scripts/fill_help_tables.sql --- mysql-5.6-5.6.27/scripts/fill_help_tables.sql 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/scripts/fill_help_tables.sql 2016-08-26 11:32:53.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. +-- Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -17,9 +17,9 @@ -- team. If you require changes to the format of this file, contact the -- docs team. --- File generation date: 2015-09-18 +-- File generation date: 2016-08-25 -- MySQL series: 5.6 --- Document repository revision: 44619 +-- Document repository revision: 48695 -- To use this file, load its contents into the mysql database. For example, -- with the mysql client program, process the file like this, where @@ -77,8 +77,8 @@ INSERT INTO help_category (help_category_id,name,parent_category_id,url) VALUES (39,'Functions',36,''); INSERT INTO help_category (help_category_id,name,parent_category_id,url) VALUES (40,'Data Definition',36,''); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (0,28,'JOIN','MySQL supports the following JOIN syntaxes for the table_references\npart of SELECT statements and multiple-table DELETE and UPDATE\nstatements:\n\ntable_references:\n escaped_table_reference [, escaped_table_reference] ...\n\nescaped_table_reference:\n table_reference\n | { OJ table_reference }\n\ntable_reference:\n table_factor\n | join_table\n\ntable_factor:\n tbl_name [PARTITION (partition_names)] \n [[AS] alias] [index_hint_list]\n | table_subquery [AS] alias\n | ( table_references )\n\njoin_table:\n table_reference [INNER | CROSS] JOIN table_factor [join_condition]\n | table_reference STRAIGHT_JOIN table_factor\n | table_reference STRAIGHT_JOIN table_factor ON conditional_expr\n | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition\n | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor\n\njoin_condition:\n ON conditional_expr\n | USING (column_list)\n\nindex_hint_list:\n index_hint [, index_hint] ...\n\nindex_hint:\n USE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])\n | IGNORE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n | FORCE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n\nindex_list:\n index_name [, index_name] ...\n\nA table reference is also known as a join expression.\n\nIn MySQL 5.6.2 and later, a table reference (when it refers to a\npartitioned table) may contain a PARTITION option, including a\ncomma-separated list of partitions, subpartitions, or both. This option\nfollows the name of the table and precedes any alias declaration. The\neffect of this option is that rows are selected only from the listed\npartitions or subpartitions---in other words, any partitions or\nsubpartitions not named in the list are ignored For more information,\nsee http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html.\n\nThe syntax of table_factor is extended in comparison with the SQL\nStandard. The latter accepts only table_reference, not a list of them\ninside a pair of parentheses.\n\nThis is a conservative extension if we consider each comma in a list of\ntable_reference items as equivalent to an inner join. For example:\n\nSELECT * FROM t1 LEFT JOIN (t2, t3, t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nis equivalent to:\n\nSELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nIn MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents\n(they can replace each other). In standard SQL, they are not\nequivalent. INNER JOIN is used with an ON clause, CROSS JOIN is used\notherwise.\n\nIn general, parentheses can be ignored in join expressions containing\nonly inner join operations. MySQL also supports nested joins (see\nhttp://dev.mysql.com/doc/refman/5.6/en/nested-join-optimization.html).\n\nIndex hints can be specified to affect how the MySQL optimizer makes\nuse of indexes. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/index-hints.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/join.html\n\n','SELECT left_tbl.*\n FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id\n WHERE right_tbl.id IS NULL;\n','http://dev.mysql.com/doc/refman/5.6/en/join.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (1,38,'HEX','Syntax:\nHEX(str), HEX(N)\n\nFor a string argument str, HEX() returns a hexadecimal string\nrepresentation of str where each byte of each character in str is\nconverted to two hexadecimal digits. (Multibyte characters therefore\nbecome more than two digits.) The inverse of this operation is\nperformed by the UNHEX() function.\n\nFor a numeric argument N, HEX() returns a hexadecimal string\nrepresentation of the value of N treated as a longlong (BIGINT) number.\nThis is equivalent to CONV(N,10,16). The inverse of this operation is\nperformed by CONV(HEX(N),16,10).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT 0x616263, HEX(\'abc\'), UNHEX(HEX(\'abc\'));\n -> \'abc\', 616263, \'abc\'\nmysql> SELECT HEX(255), CONV(HEX(255),16,10);\n -> \'FF\', 255\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (0,28,'JOIN','MySQL supports the following JOIN syntaxes for the table_references\npart of SELECT statements and multiple-table DELETE and UPDATE\nstatements:\n\ntable_references:\n escaped_table_reference [, escaped_table_reference] ...\n\nescaped_table_reference:\n table_reference\n | { OJ table_reference }\n\ntable_reference:\n table_factor\n | join_table\n\ntable_factor:\n tbl_name [PARTITION (partition_names)]\n [[AS] alias] [index_hint_list]\n | table_subquery [AS] alias\n | ( table_references )\n\njoin_table:\n table_reference [INNER | CROSS] JOIN table_factor [join_condition]\n | table_reference STRAIGHT_JOIN table_factor\n | table_reference STRAIGHT_JOIN table_factor ON conditional_expr\n | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition\n | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor\n\njoin_condition:\n ON conditional_expr\n | USING (column_list)\n\nindex_hint_list:\n index_hint [, index_hint] ...\n\nindex_hint:\n USE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])\n | IGNORE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n | FORCE {INDEX|KEY}\n [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n\nindex_list:\n index_name [, index_name] ...\n\nA table reference is also known as a join expression.\n\nIn MySQL 5.6.2 and later, a table reference (when it refers to a\npartitioned table) may contain a PARTITION option, including a\ncomma-separated list of partitions, subpartitions, or both. This option\nfollows the name of the table and precedes any alias declaration. The\neffect of this option is that rows are selected only from the listed\npartitions or subpartitions---in other words, any partitions or\nsubpartitions not named in the list are ignored For more information,\nsee http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html.\n\nThe syntax of table_factor is extended in comparison with the SQL\nStandard. The latter accepts only table_reference, not a list of them\ninside a pair of parentheses.\n\nThis is a conservative extension if we consider each comma in a list of\ntable_reference items as equivalent to an inner join. For example:\n\nSELECT * FROM t1 LEFT JOIN (t2, t3, t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nis equivalent to:\n\nSELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nIn MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents\n(they can replace each other). In standard SQL, they are not\nequivalent. INNER JOIN is used with an ON clause, CROSS JOIN is used\notherwise.\n\nIn general, parentheses can be ignored in join expressions containing\nonly inner join operations. MySQL also supports nested joins (see\nhttp://dev.mysql.com/doc/refman/5.6/en/nested-join-optimization.html).\n\nIndex hints can be specified to affect how the MySQL optimizer makes\nuse of indexes. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/index-hints.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/join.html\n\n','SELECT left_tbl.*\n FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id\n WHERE right_tbl.id IS NULL;\n','http://dev.mysql.com/doc/refman/5.6/en/join.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (1,38,'HEX','Syntax:\nHEX(str), HEX(N)\n\nFor a string argument str, HEX() returns a hexadecimal string\nrepresentation of str where each byte of each character in str is\nconverted to two hexadecimal digits. (Multibyte characters therefore\nbecome more than two digits.) The inverse of this operation is\nperformed by the UNHEX() function.\n\nFor a numeric argument N, HEX() returns a hexadecimal string\nrepresentation of the value of N treated as a longlong (BIGINT) number.\nThis is equivalent to CONV(N,10,16). The inverse of this operation is\nperformed by CONV(HEX(N),16,10).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT X\'616263\', HEX(\'abc\'), UNHEX(HEX(\'abc\'));\n -> \'abc\', 616263, \'abc\'\nmysql> SELECT HEX(255), CONV(HEX(255),16,10);\n -> \'FF\', 255\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (2,31,'CONTAINS','Contains(g1,g2)\n\nMBRContains() and Contains() are synonyms. For more information, see\nthe description of MBRContains().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (3,37,'SRID','SRID(g)\n\nST_SRID() and SRID() are synonyms. For more information, see the\ndescription of ST_SRID().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (4,27,'SHOW CONTRIBUTORS','Syntax:\nSHOW CONTRIBUTORS\n\nThe SHOW CONTRIBUTORS statement displays information about the people\nwho contribute to MySQL source or to causes that we support. For each\ncontributor, it displays Name, Location, and Comment values.\n\nThis statement is removed as of MySQL 5.6.8.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-contributors.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-contributors.html'); @@ -89,13 +89,13 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (9,33,'ST_GEOMCOLLFROMWKB','ST_GeomCollFromWKB(wkb[,srid]),\nST_GeometryCollectionFromWKB(wkb[,srid])\n\nConstructs a GeometryCollection value using its WKB representation and\nSRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (10,38,'CONCAT','Syntax:\nCONCAT(str1,str2,...)\n\nReturns the string that results from concatenating the arguments. May\nhave one or more arguments. If all arguments are nonbinary strings, the\nresult is a nonbinary string. If the arguments include any binary\nstrings, the result is a binary string. A numeric argument is converted\nto its equivalent nonbinary string form.\n\nCONCAT() returns NULL if any argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT CONCAT(\'My\', \'S\', \'QL\');\n -> \'MySQL\'\nmysql> SELECT CONCAT(\'My\', NULL, \'QL\');\n -> NULL\nmysql> SELECT CONCAT(14.3);\n -> \'14.3\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (11,35,'GEOMETRY HIERARCHY','Geometry is the base class. It is an abstract class. The instantiable\nsubclasses of Geometry are restricted to zero-, one-, and\ntwo-dimensional geometric objects that exist in two-dimensional\ncoordinate space. All instantiable geometry classes are defined so that\nvalid instances of a geometry class are topologically closed (that is,\nall defined geometries include their boundary).\n\nThe base Geometry class has subclasses for Point, Curve, Surface, and\nGeometryCollection:\n\no Point represents zero-dimensional objects.\n\no Curve represents one-dimensional objects, and has subclass\n LineString, with sub-subclasses Line and LinearRing.\n\no Surface is designed for two-dimensional objects and has subclass\n Polygon.\n\no GeometryCollection has specialized zero-, one-, and two-dimensional\n collection classes named MultiPoint, MultiLineString, and\n MultiPolygon for modeling geometries corresponding to collections of\n Points, LineStrings, and Polygons, respectively. MultiCurve and\n MultiSurface are introduced as abstract superclasses that generalize\n the collection interfaces to handle Curves and Surfaces.\n\nGeometry, Curve, Surface, MultiCurve, and MultiSurface are defined as\nnoninstantiable classes. They define a common set of methods for their\nsubclasses and are included for extensibility.\n\nPoint, LineString, Polygon, GeometryCollection, MultiPoint,\nMultiLineString, and MultiPolygon are instantiable classes.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-geometry-class-hierarchy.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-geometry-class-hierarchy.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (12,38,'CHAR FUNCTION','Syntax:\nCHAR(N,... [USING charset_name])\n\nCHAR() interprets each argument N as an integer and returns a string\nconsisting of the characters given by the code values of those\nintegers. NULL values are skipped.\nBy default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nmysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));\n+---------------------+--------------------------------+\n| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |\n+---------------------+--------------------------------+\n| binary | utf8 |\n+---------------------+--------------------------------+\n\nIf USING is given and the result string is illegal for the given\ncharacter set, a warning is issued. Also, if strict SQL mode is\nenabled, the result from CHAR() becomes NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT CHAR(77,121,83,81,\'76\');\n -> \'MySQL\'\nmysql> SELECT CHAR(77,77.3,\'77.3\');\n -> \'MMM\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (12,38,'CHAR FUNCTION','Syntax:\nCHAR(N,... [USING charset_name])\n\nCHAR() interprets each argument N as an integer and returns a string\nconsisting of the characters given by the code values of those\nintegers. NULL values are skipped.\nBy default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nmysql> SELECT CHARSET(CHAR(X\'65\')), CHARSET(CHAR(X\'65\' USING utf8));\n+----------------------+---------------------------------+\n| CHARSET(CHAR(X\'65\')) | CHARSET(CHAR(X\'65\' USING utf8)) |\n+----------------------+---------------------------------+\n| binary | utf8 |\n+----------------------+---------------------------------+\n\nIf USING is given and the result string is illegal for the given\ncharacter set, a warning is issued. Also, if strict SQL mode is\nenabled, the result from CHAR() becomes NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT CHAR(77,121,83,81,\'76\');\n -> \'MySQL\'\nmysql> SELECT CHAR(77,77.3,\'77.3\');\n -> \'MMM\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (13,7,'ASYMMETRIC_DECRYPT','Syntax:\nASYMMETRIC_DECRYPT(algorithm, crypt_str, key_str)\n\nDecrypts an encrypted string using the given algorithm and key string,\nand returns the resulting cleartext as a binary string. If decryption\nfails, the result is NULL.\n\nkey_str must be a valid key string in PEM format. For successful\ndecryption, it must be the public or private key string corresponding\nto the private or public key string used with ASYMMETRIC_ENCRYPT() to\nproduce the encrypted string. algorithm indicates the encryption\nalgorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nFor a usage example, see the description of ASYMMETRIC_ENCRYPT().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (14,27,'SHOW CREATE TRIGGER','Syntax:\nSHOW CREATE TRIGGER trigger_name\n\nThis statement shows the CREATE TRIGGER statement that creates the\nnamed trigger.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-create-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-create-trigger.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (14,27,'SHOW CREATE TRIGGER','Syntax:\nSHOW CREATE TRIGGER trigger_name\n\nThis statement shows the CREATE TRIGGER statement that creates the\nnamed trigger. This statement requires the TRIGGER privilege for the\ntable associated with the trigger.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-create-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-create-trigger.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (15,27,'SHOW CREATE PROCEDURE','Syntax:\nSHOW CREATE PROCEDURE proc_name\n\nThis statement is a MySQL extension. It returns the exact string that\ncan be used to re-create the named stored procedure. A similar\nstatement, SHOW CREATE FUNCTION, displays information about stored\nfunctions (see [HELP SHOW CREATE FUNCTION]).\n\nTo use either statement, you must be the user named in the routine\nDEFINER clause or have SELECT access to the mysql.proc table. If you do\nnot have privileges for the routine itself, the value displayed for the\nCreate Procedure or Create Function field will be NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-create-procedure.html\n\n','mysql> SHOW CREATE PROCEDURE test.simpleproc\\G\n*************************** 1. row ***************************\n Procedure: simpleproc\n sql_mode:\n Create Procedure: CREATE PROCEDURE `simpleproc`(OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nmysql> SHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n Function: hello\n sql_mode:\n Create Function: CREATE FUNCTION `hello`(s CHAR(20))\n RETURNS CHAR(50)\n RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.6/en/show-create-procedure.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (16,24,'OPEN','Syntax:\nOPEN cursor_name\n\nThis statement opens a previously declared cursor. For an example, see\nhttp://dev.mysql.com/doc/refman/5.6/en/cursors.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/open.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/open.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (17,31,'ST_INTERSECTS','ST_Intersects(g1,g2)\n\nReturns 1 or 0 to indicate whether g1 spatially intersects g2.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (18,38,'LOWER','Syntax:\nLOWER(str)\n\nReturns the string str with all characters changed to lowercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\n\nmysql> SELECT LOWER(\'QUADRATICALLY\');\n -> \'quadratically\'\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings\n(BINARY, VARBINARY, BLOB). To perform lettercase conversion, convert\nthe string to a nonbinary string:\n\nmysql> SET @str = BINARY \'New York\';\nmysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));\n+-------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\n+-------------+-----------------------------------+\n| New York | new york |\n+-------------+-----------------------------------+\n\nFor Unicode character sets, LOWER() and UPPER() work accounting to\nUnicode Collation Algorithm (UCA) 5.2.0 for xxx_unicode_520_ci\ncollations and for language-specific collations that are derived from\nthem. For other Unicode collations, LOWER() and UPPER() work accounting\nto Unicode Collation Algorithm (UCA) 4.0.0. See\nhttp://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (18,38,'LOWER','Syntax:\nLOWER(str)\n\nReturns the string str with all characters changed to lowercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\n\nmysql> SELECT LOWER(\'QUADRATICALLY\');\n -> \'quadratically\'\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings\n(BINARY, VARBINARY, BLOB). To perform lettercase conversion, convert\nthe string to a nonbinary string:\n\nmysql> SET @str = BINARY \'New York\';\nmysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));\n+-------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\n+-------------+-----------------------------------+\n| New York | new york |\n+-------------+-----------------------------------+\n\nFor collations of Unicode character sets, LOWER() and UPPER() work\naccording to the Unicode Collation Algorithm (UCA) version in the\ncollation name, if there is one, and UCA 4.0.0 if no version is\nspecified. For example, utf8_unicode_520_ci works according to UCA\n5.2.0, whereas utf8_unicode_ci works according to UCA 4.0.0. See\nhttp://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (19,40,'CREATE TRIGGER','Syntax:\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n TRIGGER trigger_name\n trigger_time trigger_event\n ON tbl_name FOR EACH ROW\n trigger_body\n\ntrigger_time: { BEFORE | AFTER }\n\ntrigger_event: { INSERT | UPDATE | DELETE }\n\nThis statement creates a new trigger. A trigger is a named database\nobject that is associated with a table, and that activates when a\nparticular event occurs for the table. The trigger becomes associated\nwith the table named tbl_name, which must refer to a permanent table.\nYou cannot associate a trigger with a TEMPORARY table or a view.\n\nTrigger names exist in the schema namespace, meaning that all triggers\nmust have unique names within a schema. Triggers in different schemas\ncan have the same name.\n\nThis section describes CREATE TRIGGER syntax. For additional\ndiscussion, see\nhttp://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html.\n\nCREATE TRIGGER requires the TRIGGER privilege for the table associated\nwith the trigger. The statement might also require the SUPER privilege,\ndepending on the DEFINER value, as described later in this section. If\nbinary logging is enabled, CREATE TRIGGER might require the SUPER\nprivilege, as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-logging.html.\n\nThe DEFINER clause determines the security context to be used when\nchecking access privileges at trigger activation time, as described\nlater in this section.\n\ntrigger_time is the trigger action time. It can be BEFORE or AFTER to\nindicate that the trigger activates before or after each row to be\nmodified.\n\ntrigger_event indicates the kind of operation that activates the\ntrigger. These trigger_event values are permitted:\n\no INSERT: The trigger activates whenever a new row is inserted into the\n table; for example, through INSERT, LOAD DATA, and REPLACE\n statements.\n\no UPDATE: The trigger activates whenever a row is modified; for\n example, through UPDATE statements.\n\no DELETE: The trigger activates whenever a row is deleted from the\n table; for example, through DELETE and REPLACE statements. DROP TABLE\n and TRUNCATE TABLE statements on the table do not activate this\n trigger, because they do not use DELETE. Dropping a partition does\n not activate DELETE triggers, either.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (20,32,'MONTH','Syntax:\nMONTH(date)\n\nReturns the month for date, in the range 1 to 12 for January to\nDecember, or 0 for dates such as \'0000-00-00\' or \'2008-00-00\' that have\na zero month part.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MONTH(\'2008-02-03\');\n -> 2\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (21,7,'ASYMMETRIC_ENCRYPT','Syntax:\nASYMMETRIC_ENCRYPT(algorithm, str, key_str)\n\nEncrypts a string using the given algorithm and key string, and returns\nthe resulting ciphertext as a binary string. If encryption fails, the\nresult is NULL.\n\nThe str length cannot be greater than the key_str length − 11, in\nbytes\n\nkey_str must be a valid key string in PEM format. algorithm indicates\nthe encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nTo encrypt a string, pass a private or public key string to\nASYMMETRIC_ENCRYPT(). To recover the original unencrypted string, pass\nthe encrypted string to ASYMMETRIC_DECRYPT(), along with the public or\nprivate key string correponding to the private or public key string\nused for encryption.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html\n\n','-- Generate private/public key pair\nSET @priv = CREATE_ASYMMETRIC_PRIV_KEY(\'RSA\', 1024);\nSET @pub = CREATE_ASYMMETRIC_PUB_KEY(\'RSA\', @priv);\n\n-- Encrypt using private key, decrypt using public key\nSET @ciphertext = ASYMMETRIC_ENCRYPT(\'RSA\', \'The quick brown fox\', @priv);\nSET @cleartext = ASYMMETRIC_DECRYPT(\'RSA\', @ciphertext, @pub);\n\n-- Encrypt using public key, decrypt using private key\nSET @ciphertext = ASYMMETRIC_ENCRYPT(\'RSA\', \'The quick brown fox\', @pub);\nSET @cleartext = ASYMMETRIC_DECRYPT(\'RSA\', @ciphertext, @priv);\n','http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html'); @@ -114,7 +114,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (34,32,'MINUTE','Syntax:\nMINUTE(time)\n\nReturns the minute for time, in the range 0 to 59.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MINUTE(\'2008-02-03 10:05:03\');\n -> 5\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (35,38,'MID','Syntax:\nMID(str,pos,len)\n\nMID(str,pos,len) is a synonym for SUBSTRING(str,pos,len).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (36,17,'CONNECTION_ID','Syntax:\nCONNECTION_ID()\n\nReturns the connection ID (thread ID) for the connection. Every\nconnection has an ID that is unique among the set of currently\nconnected clients.\n\nThe value returned by CONNECTION_ID() is the same type of value as\ndisplayed in the ID column of the INFORMATION_SCHEMA.PROCESSLIST table,\nthe Id column of SHOW PROCESSLIST output, and the PROCESSLIST_ID column\nof the Performance Schema threads table.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT CONNECTION_ID();\n -> 23786\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (37,28,'DELETE','Syntax:\nDELETE is a DML statement that removes rows from a table.\n\nSingle-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name\n [PARTITION (partition_name,...)]\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n\nThe DELETE statement deletes rows from tbl_name and returns the number\nof deleted rows. To check the number of deleted rows, call the\nROW_COUNT() function described in\nhttp://dev.mysql.com/doc/refman/5.6/en/information-functions.html.\n\nMain Clauses\n\nThe conditions in the optional WHERE clause identify which rows to\ndelete. With no WHERE clause, all rows are deleted.\n\nwhere_condition is an expression that evaluates to true for each row to\nbe deleted. It is specified as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/select.html.\n\nIf the ORDER BY clause is specified, the rows are deleted in the order\nthat is specified. The LIMIT clause places a limit on the number of\nrows that can be deleted. These clauses apply to single-table deletes,\nbut not multi-table deletes.\n\nMultiple-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n tbl_name[.*] [, tbl_name[.*]] ...\n FROM table_references\n [WHERE where_condition]\n\nOr:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n FROM tbl_name[.*] [, tbl_name[.*]] ...\n USING table_references\n [WHERE where_condition]\n\nPrivileges\n\nYou need the DELETE privilege on a table to delete rows from it. You\nneed only the SELECT privilege for any columns that are only read, such\nas those named in the WHERE clause.\n\nPerformance\n\nWhen you do not need to know the number of deleted rows, the TRUNCATE\nTABLE statement is a faster way to empty a table than a DELETE\nstatement with no WHERE clause. Unlike DELETE, TRUNCATE TABLE cannot be\nused within a transaction or if you have a lock on the table. See [HELP\nTRUNCATE TABLE] and [HELP LOCK].\n\nThe speed of delete operations may also be affected by factors\ndiscussed in http://dev.mysql.com/doc/refman/5.6/en/delete-speed.html.\n\nTo ensure that a given DELETE statement does not take too much time,\nthe MySQL-specific LIMIT row_count clause for DELETE specifies the\nmaximum number of rows to be deleted. If the number of rows to delete\nis larger than the limit, repeat the DELETE statement until the number\nof affected rows is less than the LIMIT value.\n\nSubqueries\n\nCurrently, you cannot delete from a table and select from the same\ntable in a subquery.\n\nPartitioned Tables\n\nBeginning with MySQL 5.6.2, DELETE supports explicit partition\nselection using the PARTITION option, which takes a comma-separated\nlist of the names of one or more partitions or subpartitions (or both)\nfrom which to select rows to be dropped. Partitions not included in the\nlist are ignored. Given a partitioned table t with a partition named\np0, executing the statement DELETE FROM t PARTITION (p0) has the same\neffect on the table as executing ALTER TABLE t TRUNCATE PARTITION (p0);\nin both cases, all rows in partition p0 are dropped.\n\nPARTITION can be used along with a WHERE condition, in which case the\ncondition is tested only on rows in the listed partitions. For example,\nDELETE FROM t PARTITION (p0) WHERE c < 5 deletes rows only from\npartition p0 for which the condition c < 5 is true; rows in any other\npartitions are not checked and thus not affected by the DELETE.\n\nThe PARTITION option can also be used in multiple-table DELETE\nstatements. You can use up to one such option per table named in the\nFROM option.\n\nSee http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html,\nfor more information and examples.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/delete.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/delete.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (37,28,'DELETE','Syntax:\nDELETE is a DML statement that removes rows from a table.\n\nSingle-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name\n [PARTITION (partition_name,...)]\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n\nThe DELETE statement deletes rows from tbl_name and returns the number\nof deleted rows. To check the number of deleted rows, call the\nROW_COUNT() function described in\nhttp://dev.mysql.com/doc/refman/5.6/en/information-functions.html.\n\nMain Clauses\n\nThe conditions in the optional WHERE clause identify which rows to\ndelete. With no WHERE clause, all rows are deleted.\n\nwhere_condition is an expression that evaluates to true for each row to\nbe deleted. It is specified as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/select.html.\n\nIf the ORDER BY clause is specified, the rows are deleted in the order\nthat is specified. The LIMIT clause places a limit on the number of\nrows that can be deleted. These clauses apply to single-table deletes,\nbut not multi-table deletes.\n\nMultiple-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n tbl_name[.*] [, tbl_name[.*]] ...\n FROM table_references\n [WHERE where_condition]\n\nOr:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n FROM tbl_name[.*] [, tbl_name[.*]] ...\n USING table_references\n [WHERE where_condition]\n\nPrivileges\n\nYou need the DELETE privilege on a table to delete rows from it. You\nneed only the SELECT privilege for any columns that are only read, such\nas those named in the WHERE clause.\n\nPerformance\n\nWhen you do not need to know the number of deleted rows, the TRUNCATE\nTABLE statement is a faster way to empty a table than a DELETE\nstatement with no WHERE clause. Unlike DELETE, TRUNCATE TABLE cannot be\nused within a transaction or if you have a lock on the table. See [HELP\nTRUNCATE TABLE] and [HELP LOCK].\n\nThe speed of delete operations may also be affected by factors\ndiscussed in http://dev.mysql.com/doc/refman/5.6/en/delete-speed.html.\n\nTo ensure that a given DELETE statement does not take too much time,\nthe MySQL-specific LIMIT row_count clause for DELETE specifies the\nmaximum number of rows to be deleted. If the number of rows to delete\nis larger than the limit, repeat the DELETE statement until the number\nof affected rows is less than the LIMIT value.\n\nSubqueries\n\nYou cannot delete from a table and select from the same table in a\nsubquery.\n\nPartitioned Tables\n\nBeginning with MySQL 5.6.2, DELETE supports explicit partition\nselection using the PARTITION option, which takes a comma-separated\nlist of the names of one or more partitions or subpartitions (or both)\nfrom which to select rows to be dropped. Partitions not included in the\nlist are ignored. Given a partitioned table t with a partition named\np0, executing the statement DELETE FROM t PARTITION (p0) has the same\neffect on the table as executing ALTER TABLE t TRUNCATE PARTITION (p0);\nin both cases, all rows in partition p0 are dropped.\n\nPARTITION can be used along with a WHERE condition, in which case the\ncondition is tested only on rows in the listed partitions. For example,\nDELETE FROM t PARTITION (p0) WHERE c < 5 deletes rows only from\npartition p0 for which the condition c < 5 is true; rows in any other\npartitions are not checked and thus not affected by the DELETE.\n\nThe PARTITION option can also be used in multiple-table DELETE\nstatements. You can use up to one such option per table named in the\nFROM option.\n\nSee http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html,\nfor more information and examples.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/delete.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/delete.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (38,24,'CLOSE','Syntax:\nCLOSE cursor_name\n\nThis statement closes a previously opened cursor. For an example, see\nhttp://dev.mysql.com/doc/refman/5.6/en/cursors.html.\n\nAn error occurs if the cursor is not open.\n\nIf not closed explicitly, a cursor is closed at the end of the BEGIN\n... END block in which it was declared.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/close.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/close.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (39,38,'REPLACE FUNCTION','Syntax:\nREPLACE(str,from_str,to_str)\n\nReturns the string str with all occurrences of the string from_str\nreplaced by the string to_str. REPLACE() performs a case-sensitive\nmatch when searching for from_str.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT REPLACE(\'www.mysql.com\', \'w\', \'Ww\');\n -> \'WwWwWw.mysql.com\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (40,29,'USE','Syntax:\nUSE db_name\n\nThe USE db_name statement tells MySQL to use the db_name database as\nthe default (current) database for subsequent statements. The database\nremains the default until the end of the session or another USE\nstatement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable; # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable; # selects from db2.mytable\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/use.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/use.html'); @@ -141,17 +141,17 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (61,38,'NOT LIKE','Syntax:\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nThis is the same as NOT (expr LIKE pat [ESCAPE \'escape_char\']).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (62,38,'SPACE','Syntax:\nSPACE(N)\n\nReturns a string consisting of N space characters.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT SPACE(6);\n -> \' \'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (63,16,'MAX','Syntax:\nMAX([DISTINCT] expr)\n\nReturns the maximum value of expr. MAX() may take a string argument; in\nsuch cases, it returns the maximum string value. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html. The DISTINCT\nkeyword can be used to find the maximum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nMAX() returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','mysql> SELECT student_name, MIN(test_score), MAX(test_score)\n -> FROM student\n -> GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (64,22,'CREATE FUNCTION UDF','Syntax:\nCREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nA user-defined function (UDF) is a way to extend MySQL with a new\nfunction that works like a native (built-in) MySQL function such as\nABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to\ninvoke the function. The RETURNS clause indicates the type of the\nfunction\'s return value. DECIMAL is a legal value after RETURNS, but\ncurrently DECIMAL functions return string values and should be written\nlike STRING functions.\n\nshared_library_name is the base name of the shared object file that\ncontains the code that implements the function. The file must be\nlocated in the plugin directory. This directory is given by the value\nof the plugin_dir system variable. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/udf-compiling.html.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary because CREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and\nshared library name. If you do not have this table, you should run the\nmysql_upgrade command to create it. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (64,22,'CREATE FUNCTION UDF','Syntax:\nCREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nA user-defined function (UDF) is a way to extend MySQL with a new\nfunction that works like a native (built-in) MySQL function such as\nABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to\ninvoke the function. The RETURNS clause indicates the type of the\nfunction\'s return value. DECIMAL is a legal value after RETURNS, but\ncurrently DECIMAL functions return string values and should be written\nlike STRING functions.\n\nshared_library_name is the base name of the shared library file that\ncontains the code that implements the function. The file must be\nlocated in the plugin directory. This directory is given by the value\nof the plugin_dir system variable. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/udf-compiling.html.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary because CREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and\nshared library name. If you do not have this table, you should run the\nmysql_upgrade command to create it. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (65,23,'TIMESTAMP','TIMESTAMP[(fsp)]\n\nA timestamp. The range is \'1970-01-01 00:00:01.000000\' UTC to\n\'2038-01-19 03:14:07.999999\' UTC. TIMESTAMP values are stored as the\nnumber of seconds since the epoch (\'1970-01-01 00:00:00\' UTC). A\nTIMESTAMP cannot represent the value \'1970-01-01 00:00:00\' because that\nis equivalent to 0 seconds from the epoch and the value 0 is reserved\nfor representing \'0000-00-00 00:00:00\', the "zero" TIMESTAMP value.\n\nAs of MySQL 5.6.4, an optional fsp value in the range from 0 to 6 may\nbe given to specify fractional seconds precision. A value of 0\nsignifies that there is no fractional part. If omitted, the default\nprecision is 0.\n\nThe way the server handles TIMESTAMP definitions depends on the value\nof the explicit_defaults_for_timestamp system variable (see\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html).\nBy default, explicit_defaults_for_timestamp is disabled and the server\nhandles TIMESTAMP as follows:\n\nUnless specified otherwise, the first TIMESTAMP column in a table is\ndefined to be automatically set to the date and time of the most recent\nmodification if not explicitly assigned a value. This makes TIMESTAMP\nuseful for recording the timestamp of an INSERT or UPDATE operation.\nYou can also set any TIMESTAMP column to the current date and time by\nassigning it a NULL value, unless it has been defined with the NULL\nattribute to permit NULL values.\n\nAutomatic initialization and updating to the current date and time can\nbe specified using DEFAULT CURRENT_TIMESTAMP and ON UPDATE\nCURRENT_TIMESTAMP column definition clauses. By default, the first\nTIMESTAMP column has these properties, as previously noted. As of MySQL\n5.6.5, any TIMESTAMP column in a table can be defined to have these\nproperties. Before 5.6.5, at most one TIMESTAMP column per table can\nhave them, but it is possible to suppress them for the first column and\ninstead assign them to a different TIMESTAMP column. See\nhttp://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html.\n\nIf explicit_defaults_for_timestamp is enabled, there is no automatic\nassignment of the DEFAULT CURRENT_TIMESTAMP or ON UPDATE\nCURRENT_TIMESTAMP attributes to any TIMESTAMP column. They must be\nincluded explicitly in the column definition. Also, any TIMESTAMP not\nexplicitly declared as NOT NULL permits NULL values.\n\nexplicit_defaults_for_timestamp is available as of MySQL 5.6.6. Before\n5.6.6, the server handles TIMESTAMP as discussed for\nexplicit_defaults_for_timestamp disabled. Those behaviors, while they\nremain the default, are nonstandard and are deprecated as of 5.6.6. For\ndiscussion regarding upgrading to an installation with\nexplicit_defaults_for_timestamp enabled, see\nhttp://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.h\ntml.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (66,7,'CREATE_ASYMMETRIC_PUB_KEY','Syntax:\nCREATE_ASYMMETRIC_PUB_KEY(algorithm, priv_key_str)\n\nDerives a public key from the given private key using the given\nalgorithm, and returns the key as a binary string in PEM format. If key\nderivation fails, the result is NULL.\n\npriv_key_str must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\', \'DH\'\n\nFor a usage example, see the description of\nCREATE_ASYMMETRIC_PRIV_KEY().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (67,27,'CACHE INDEX','Syntax:\nCACHE INDEX\n tbl_index_list [, tbl_index_list] ...\n [PARTITION (partition_list | ALL)]\n IN key_cache_name\n\ntbl_index_list:\n tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]\n\npartition_list:\n partition_name[, partition_name][, ...]\n\nThe CACHE INDEX statement assigns table indexes to a specific key\ncache. It is used only for MyISAM tables. After the indexes have been\nassigned, they can be preloaded into the cache if desired with LOAD\nINDEX INTO CACHE.\n\nThe following statement assigns indexes from the tables t1, t2, and t3\nto the key cache named hot_cache:\n\nmysql> CACHE INDEX t1, t2, t3 IN hot_cache;\n+---------+--------------------+----------+----------+\n| Table | Op | Msg_type | Msg_text |\n+---------+--------------------+----------+----------+\n| test.t1 | assign_to_keycache | status | OK |\n| test.t2 | assign_to_keycache | status | OK |\n| test.t3 | assign_to_keycache | status | OK |\n+---------+--------------------+----------+----------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/cache-index.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/cache-index.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (68,12,'COMPRESS','Syntax:\nCOMPRESS(string_to_compress)\n\nCompresses a string and returns the result as a binary string. This\nfunction requires MySQL to have been compiled with a compression\nlibrary such as zlib. Otherwise, the return value is always NULL. The\ncompressed string can be uncompressed with UNCOMPRESS().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',1000)));\n -> 21\nmysql> SELECT LENGTH(COMPRESS(\'\'));\n -> 0\nmysql> SELECT LENGTH(COMPRESS(\'a\'));\n -> 13\nmysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',16)));\n -> 15\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (69,28,'HANDLER','Syntax:\nHANDLER tbl_name OPEN [ [AS] alias]\n\nHANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ { FIRST | NEXT }\n [ WHERE where_condition ] [LIMIT ... ]\n\nHANDLER tbl_name CLOSE\n\nThe HANDLER statement provides direct access to table storage engine\ninterfaces. It is available for InnoDB and MyISAM tables.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/handler.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/handler.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (70,9,'HELP_DATE','This help information was generated from the MySQL 5.6 Reference Manual\non: 2015-09-18\n','',''); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (71,40,'RENAME TABLE','Syntax:\nRENAME TABLE tbl_name TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nThis statement renames one or more tables.\n\nThe rename operation is done atomically, which means that no other\nsession can access any of the tables while the rename is running. For\nexample, if you have an existing table old_table, you can create\nanother table new_table that has the same structure but is empty, and\nthen replace the existing table with the empty one as follows (assuming\nthat backup_table does not already exist):\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/rename-table.html\n\n','CREATE TABLE new_table (...);\nRENAME TABLE old_table TO backup_table, new_table TO old_table;\n','http://dev.mysql.com/doc/refman/5.6/en/rename-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (70,9,'HELP_DATE','This help information was generated from the MySQL 5.6 Reference Manual\non: 2016-08-25\n','',''); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (71,40,'RENAME TABLE','Syntax:\nRENAME TABLE tbl_name TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nThis statement renames one or more tables. The rename operation is done\natomically, which means that no other session can access any of the\ntables while the rename is running.\n\nFor example, a table named old_table can be renamed to new_table as\nshown here:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/rename-table.html\n\n','RENAME TABLE old_table TO new_table;\n','http://dev.mysql.com/doc/refman/5.6/en/rename-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (72,23,'BOOLEAN','BOOL, BOOLEAN\n\nThese types are synonyms for TINYINT(1). A value of zero is considered\nfalse. Nonzero values are considered true:\n\nmysql> SELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false |\n+------------------------+\n\nmysql> SELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nmysql> SELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0,\nrespectively, as shown here:\n\nmysql> SELECT IF(0 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true |\n+--------------------------------+\n\nmysql> SELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true |\n+-------------------------------+\n\nmysql> SELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false |\n+-------------------------------+\n\nmysql> SELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (73,3,'MOD','Syntax:\nMOD(N,M), N % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT MOD(234, 10);\n -> 4\nmysql> SELECT 253 % 7;\n -> 1\nmysql> SELECT MOD(29,9);\n -> 2\nmysql> SELECT 29 MOD 9;\n -> 2\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (74,37,'ST_GEOMETRYTYPE','ST_GeometryType(g)\n\nReturns a binary string indicating the name of the geometry type of\nwhich the geometry instance g is a member. The name corresponds to one\nof the instantiable Geometry subclasses.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\'));\n+------------------------------------------------+\n| ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\')) |\n+------------------------------------------------+\n| POINT |\n+------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (74,37,'ST_GEOMETRYTYPE','ST_GeometryType(g)\n\nReturns a binary string indicating the name of the geometry type of\nwhich the geometry instance g is a member, or NULL if the argument is\nNULL. The name corresponds to one of the instantiable Geometry\nsubclasses.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\'));\n+------------------------------------------------+\n| ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\')) |\n+------------------------------------------------+\n| POINT |\n+------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (75,29,'HELP STATEMENT','Syntax:\nHELP \'search_string\'\n\nThe HELP statement returns online information from the MySQL Reference\nmanual. Its proper operation requires that the help tables in the mysql\ndatabase be initialized with help topic information (see\nhttp://dev.mysql.com/doc/refman/5.6/en/server-side-help-support.html).\n\nThe HELP statement searches the help tables for the given search string\nand displays the result of the search. The search string is not case\nsensitive.\n\nThe search string can contain the wildcard characters "%" and "_".\nThese have the same meaning as for pattern-matching operations\nperformed with the LIKE operator. For example, HELP \'rep%\' returns a\nlist of topics that begin with rep.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/help.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/help.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (76,38,'UCASE','Syntax:\nUCASE(str)\n\nUCASE() is a synonym for UPPER().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (77,27,'SHOW BINLOG EVENTS','Syntax:\nSHOW BINLOG EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n\nShows the events in the binary log. If you do not specify \'log_name\',\nthe first binary log is displayed.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-binlog-events.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-binlog-events.html'); @@ -161,8 +161,8 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (81,38,'CHAR_LENGTH','Syntax:\nCHAR_LENGTH(str)\n\nReturns the length of the string str, measured in characters. A\nmultibyte character counts as a single character. This means that for a\nstring containing five 2-byte characters, LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (82,23,'DATE','DATE\n\nA date. The supported range is \'1000-01-01\' to \'9999-12-31\'. MySQL\ndisplays DATE values in \'YYYY-MM-DD\' format, but permits assignment of\nvalues to DATE columns using either strings or numbers.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (83,33,'ST_ASTEXT','ST_AsText(g), ST_AsWKT(g)\n\nConverts a value in internal geometry format to its WKT representation\nand returns the string result.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html\n\n','mysql> SET @g = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_GeomFromText(@g));\n+--------------------------------+\n| ST_AsText(ST_GeomFromText(@g)) |\n+--------------------------------+\n| LINESTRING(1 1,2 2,3 3) |\n+--------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (84,38,'EXTRACTVALUE','Syntax:\nExtractValue(xml_frag, xpath_expr)\n\nExtractValue() takes two string arguments, a fragment of XML markup\nxml_frag and an XPath expression xpath_expr (also known as a locator);\nit returns the text (CDATA) of the first text node which is a child of\nthe elements or elements matched by the XPath expression. In MySQL\n5.6.6 and earlier, the XPath expression could contain at most 127\ncharacters. This limitation was lifted in MySQL 5.6.7. (Bug #13007062,\nBug#62429)\n\nUsing this function is the equivalent of performing a match using the\nxpath_expr after appending /text(). In other words,\nExtractValue(\'Sakila\', \'/a/b\') and\nExtractValue(\'Sakila\', \'/a/b/text()\') produce the same\nresult.\n\nIf multiple matches are found, the content of the first child text node\nof each matching element is returned (in the order matched) as a\nsingle, space-delimited string.\n\nIf no matching text node is found for the expression (including the\nimplicit /text())---for whatever reason, as long as xpath_expr is\nvalid, and xml_frag consists of elements which are properly nested and\nclosed---an empty string is returned. No distinction is made between a\nmatch on an empty element and no match at all. This is by design.\n\nIf you need to determine whether no matching element was found in\nxml_frag or such an element was found but contained no child text\nnodes, you should test the result of an expression that uses the XPath\ncount() function. For example, both of these statements return an empty\nstring, as shown here:\n\nmysql> SELECT ExtractValue(\'\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'\', \'/a/b\') |\n+-------------------------------------+\n| |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'\', \'/a/b\') |\n+-------------------------------------+\n| |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nHowever, you can determine whether there was actually a matching\nelement using the following:\n\nmysql> SELECT ExtractValue(\'\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'\', \'count(/a/b)\') |\n+-------------------------------------+\n| 1 |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'\', \'count(/a/b)\') |\n+-------------------------------------+\n| 0 |\n+-------------------------------------+\n1 row in set (0.01 sec)\n\n*Important*: ExtractValue() returns only CDATA, and does not return any\ntags that might be contained within a matching tag, nor any of their\ncontent (see the result returned as val1 in the following example).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html\n\n','mysql> SELECT\n -> ExtractValue(\'cccddd\', \'/a\') AS val1,\n -> ExtractValue(\'cccddd\', \'/a/b\') AS val2,\n -> ExtractValue(\'cccddd\', \'//b\') AS val3,\n -> ExtractValue(\'cccddd\', \'/b\') AS val4,\n -> ExtractValue(\'cccdddeee\', \'//b\') AS val5;\n\n+------+------+------+------+---------+\n| val1 | val2 | val3 | val4 | val5 |\n+------+------+------+------+---------+\n| ccc | ddd | ddd | | ddd eee |\n+------+------+------+------+---------+\n','http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (85,12,'OLD_PASSWORD','Syntax:\nOLD_PASSWORD(str)\n\nOLD_PASSWORD() was added when the implementation of PASSWORD() was\nchanged in MySQL 4.1 to improve security. OLD_PASSWORD() returns the\nvalue of the pre-4.1 implementation of PASSWORD() as a string, and is\nintended to permit you to reset passwords for any pre-4.1 clients that\nneed to connect to your version 5.6 MySQL server without locking them\nout. See http://dev.mysql.com/doc/refman/5.6/en/password-hashing.html.\n\nThe return value is a nonbinary string in the connection character set.\n\n*Note*: Passwords that use the pre-4.1 hashing method are less secure\nthan passwords that use the native password hashing method and should\nbe avoided. Pre-4.1 passwords are deprecated and support for them will\nbe removed in a future MySQL release. Consequently, OLD_PASSWORD() is\nalso deprecated.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (84,38,'EXTRACTVALUE','Syntax:\nExtractValue(xml_frag, xpath_expr)\n\nExtractValue() takes two string arguments, a fragment of XML markup\nxml_frag and an XPath expression xpath_expr (also known as a locator);\nit returns the text (CDATA) of the first text node which is a child of\nthe elements or elements matched by the XPath expression. In MySQL\n5.6.6 and earlier, the XPath expression could contain at most 127\ncharacters. This limitation was lifted in MySQL 5.6.7. (Bug #13007062,\nBug#62429)\n\nUsing this function is the equivalent of performing a match using the\nxpath_expr after appending /text(). In other words,\nExtractValue(\'Sakila\', \'/a/b\') and\nExtractValue(\'Sakila\', \'/a/b/text()\') produce the same\nresult.\n\nIf multiple matches are found, the content of the first child text node\nof each matching element is returned (in the order matched) as a\nsingle, space-delimited string.\n\nIf no matching text node is found for the expression (including the\nimplicit /text())---for whatever reason, as long as xpath_expr is\nvalid, and xml_frag consists of elements which are properly nested and\nclosed---an empty string is returned. No distinction is made between a\nmatch on an empty element and no match at all. This is by design.\n\nIf you need to determine whether no matching element was found in\nxml_frag or such an element was found but contained no child text\nnodes, you should test the result of an expression that uses the XPath\ncount() function. For example, both of these statements return an empty\nstring, as shown here:\n\nmysql> SELECT ExtractValue(\'\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'\', \'/a/b\') |\n+-------------------------------------+\n| |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'\', \'/a/b\') |\n+-------------------------------------+\n| |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\n*Note*: In MySQL 5.6.28 and MySQL 5.6.29, when ExtractValue() failed to\nfind a match for the supplied expression, it returned NULL. This issue\nwas resolved in MySQL 5.6.30. (Bug #22552615)\n\nHowever, you can determine whether there was actually a matching\nelement using the following:\n\nmysql> SELECT ExtractValue(\'\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'\', \'count(/a/b)\') |\n+-------------------------------------+\n| 1 |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'\', \'count(/a/b)\') |\n+-------------------------------------+\n| 0 |\n+-------------------------------------+\n1 row in set (0.01 sec)\n\n*Important*: ExtractValue() returns only CDATA, and does not return any\ntags that might be contained within a matching tag, nor any of their\ncontent (see the result returned as val1 in the following example).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html\n\n','mysql> SELECT\n -> ExtractValue(\'cccddd\', \'/a\') AS val1,\n -> ExtractValue(\'cccddd\', \'/a/b\') AS val2,\n -> ExtractValue(\'cccddd\', \'//b\') AS val3,\n -> ExtractValue(\'cccddd\', \'/b\') AS val4,\n -> ExtractValue(\'cccdddeee\', \'//b\') AS val5;\n\n+------+------+------+------+---------+\n| val1 | val2 | val3 | val4 | val5 |\n+------+------+------+------+---------+\n| ccc | ddd | ddd | | ddd eee |\n+------+------+------+------+---------+\n','http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (85,12,'OLD_PASSWORD','Syntax:\nOLD_PASSWORD(str)\n\nOLD_PASSWORD() was added when the implementation of PASSWORD() was\nchanged in MySQL 4.1 to improve security. OLD_PASSWORD() returns the\nvalue of the pre-4.1 implementation of PASSWORD() as a string, and is\nintended to permit you to reset passwords for any pre-4.1 clients that\nneed to connect to your version MySQL 5.6 server without locking them\nout. See http://dev.mysql.com/doc/refman/5.6/en/password-hashing.html.\n\nThe return value is a nonbinary string in the connection character set.\n\n*Note*: Passwords that use the pre-4.1 hashing method are less secure\nthan passwords that use the native password hashing method and should\nbe avoided. Pre-4.1 passwords are deprecated and support for them will\nbe removed in a future MySQL release. Consequently, OLD_PASSWORD() is\nalso deprecated.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (86,38,'FORMAT','Syntax:\nFORMAT(X,D[,locale])\n\nFormats the number X to a format like \'#,###,###.##\', rounded to D\ndecimal places, and returns the result as a string. If D is 0, the\nresult has no decimal point or fractional part.\n\nThe optional third parameter enables a locale to be specified to be\nused for the result number\'s decimal point, thousands separator, and\ngrouping between separators. Permissible locale values are the same as\nthe legal values for the lc_time_names system variable (see\nhttp://dev.mysql.com/doc/refman/5.6/en/locale-support.html). If no\nlocale is specified, the default is \'en_US\'.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT FORMAT(12332.123456, 4);\n -> \'12,332.1235\'\nmysql> SELECT FORMAT(12332.1,4);\n -> \'12,332.1000\'\nmysql> SELECT FORMAT(12332.2,0);\n -> \'12,332\'\nmysql> SELECT FORMAT(12332.2,2,\'de_DE\');\n -> \'12.332,20\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (87,38,'BIT_LENGTH','Syntax:\nBIT_LENGTH(str)\n\nReturns the length of the string str in bits.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT BIT_LENGTH(\'text\');\n -> 32\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (88,2,'EXTERIORRING','ExteriorRing(poly)\n\nST_ExteriorRing() and ExteriorRing() are synonyms. For more\ninformation, see the description of ST_ExteriorRing().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html'); @@ -170,7 +170,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (90,20,'BETWEEN AND','Syntax:\nexpr BETWEEN min AND max\n\nIf expr is greater than or equal to min and expr is less than or equal\nto max, BETWEEN returns 1, otherwise it returns 0. This is equivalent\nto the expression (min <= expr AND expr <= max) if all the arguments\nare of the same type. Otherwise type conversion takes place according\nto the rules described in\nhttp://dev.mysql.com/doc/refman/5.6/en/type-conversion.html, but\napplied to all the three arguments.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;\n -> 1, 0\nmysql> SELECT 1 BETWEEN 2 AND 3;\n -> 0\nmysql> SELECT \'b\' BETWEEN \'a\' AND \'c\';\n -> 1\nmysql> SELECT 2 BETWEEN 2 AND \'3\';\n -> 1\nmysql> SELECT 2 BETWEEN 2 AND \'x-3\';\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (91,25,'MULTIPOLYGON','MultiPolygon(poly1,poly2,...)\n\nConstructs a MultiPolygon value from a set of Polygon or WKB Polygon\narguments.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (92,38,'LEFT','Syntax:\nLEFT(str,len)\n\nReturns the leftmost len characters from the string str, or NULL if any\nargument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT LEFT(\'foobarbar\', 5);\n -> \'fooba\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (93,13,'ST_ISCLOSED','ST_IsClosed(ls)\n\nFor a LineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, its ST_StartPoint() and ST_EndPoint() values are the same)\nand is simple (does not pass through the same point more than once).\n\nFor a MultiLineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, the ST_StartPoint() and ST_EndPoint() values are the same for\neach LineString in ls).\n\nST_IsClosed() returns 0 if ls is not closed, and NULL if ls is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls1 = \'LineString(1 1,2 2,3 3,2 2)\';\nmysql> SET @ls2 = \'LineString(1 1,2 2,3 3,1 1)\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls1)) |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls2)) |\n+------------------------------------+\n| 1 |\n+------------------------------------+\n\nmysql> SET @ls3 = \'MultiLineString((1 1,2 2,3 3),(4 4,5 5))\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls3)) |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (93,13,'ST_ISCLOSED','ST_IsClosed(ls)\n\nFor a LineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, its ST_StartPoint() and ST_EndPoint() values are the same).\n\nFor a MultiLineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, the ST_StartPoint() and ST_EndPoint() values are the same for\neach LineString in ls).\n\nST_IsClosed() returns 0 if ls is not closed, and NULL if ls is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls1 = \'LineString(1 1,2 2,3 3,2 2)\';\nmysql> SET @ls2 = \'LineString(1 1,2 2,3 3,1 1)\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls1)) |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls2)) |\n+------------------------------------+\n| 1 |\n+------------------------------------+\n\nmysql> SET @ls3 = \'MultiLineString((1 1,2 2,3 3),(4 4,5 5))\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls3)) |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (94,27,'FLUSH QUERY CACHE','You can defragment the query cache to better utilize its memory with\nthe FLUSH QUERY CACHE statement. The statement does not remove any\nqueries from the cache.\n\nThe RESET QUERY CACHE statement removes all query results from the\nquery cache. The FLUSH TABLES statement also does this.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/query-cache-status-and-maintenance.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/query-cache-status-and-maintenance.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (95,23,'SET DATA TYPE','SET(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA set. A string object that can have zero or more values, each of which\nmust be chosen from the list of values \'value1\', \'value2\', ... SET\nvalues are represented internally as integers.\n\nA SET column can have a maximum of 64 distinct members. A table can\nhave no more than 255 unique element list definitions among its ENUM\nand SET columns considered as a group. For more information on this\nlimit, see http://dev.mysql.com/doc/refman/5.6/en/limits-frm-file.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (96,3,'RAND','Syntax:\nRAND(), RAND(N)\n\nReturns a random floating-point value v in the range 0 <= v < 1.0. If a\nconstant integer argument N is specified, it is used as the seed value,\nwhich produces a repeatable sequence of column values. In the following\nexample, the sequences of values produced by RAND(3) are the same in\nboth places where they occur.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> CREATE TABLE t (i INT);\nQuery OK, 0 rows affected (0.42 sec)\n\nmysql> INSERT INTO t VALUES(1),(2),(3);\nQuery OK, 3 rows affected (0.00 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nmysql> SELECT i, RAND() FROM t;\n+------+------------------+\n| i | RAND() |\n+------+------------------+\n| 1 | 0.61914388706828 |\n| 2 | 0.93845168309142 |\n| 3 | 0.83482678498591 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND(3) FROM t;\n+------+------------------+\n| i | RAND(3) |\n+------+------------------+\n| 1 | 0.90576975597606 |\n| 2 | 0.37307905813035 |\n| 3 | 0.14808605345719 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND() FROM t;\n+------+------------------+\n| i | RAND() |\n+------+------------------+\n| 1 | 0.35877890638893 |\n| 2 | 0.28941420772058 |\n| 3 | 0.37073435016976 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND(3) FROM t;\n+------+------------------+\n| i | RAND(3) |\n+------+------------------+\n| 1 | 0.90576975597606 |\n| 2 | 0.37307905813035 |\n| 3 | 0.14808605345719 |\n+------+------------------+\n3 rows in set (0.01 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); @@ -189,15 +189,15 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (109,31,'OVERLAPS','Overlaps(g1,g2)\n\nMBROverlaps() and Overlaps() are synonyms. For more information, see\nthe description of MBROverlaps().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (110,8,'SET GLOBAL SQL_SLAVE_SKIP_COUNTER','Syntax:\nSET GLOBAL sql_slave_skip_counter = N\n\nThis statement skips the next N events from the master. This is useful\nfor recovering from replication stops caused by a statement.\n\nThis statement is valid only when the slave threads are not running.\nOtherwise, it produces an error.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-global-sql-slave-skip-counter.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-global-sql-slave-skip-counter.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (111,7,'MBREQUAL','MBREqual(g1,g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 are the same.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (112,34,'PROCEDURE ANALYSE','Syntax:\nANALYSE([max_elements[,max_memory]])\n\nANALYSE() examines the result from a query and returns an analysis of\nthe results that suggests optimal data types for each column that may\nhelp reduce table sizes. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query,\nand propose an optimal data type for the columns. This can be helpful\nfor checking your existing tables, or after importing new data. You may\nneed to try different settings for the arguments so that PROCEDURE\nANALYSE() does not suggest the ENUM data type when it is not\nappropriate.\n\nThe arguments are optional and are used as follows:\n\no max_elements (default 256) is the maximum number of distinct values\n that ANALYSE() notices per column. This is used by ANALYSE() to check\n whether the optimal data type should be of type ENUM; if there are\n more than max_elements distinct values, then ENUM is not a suggested\n type.\n\no max_memory (default 8192) is the maximum amount of memory that\n ANALYSE() should allocate per column while trying to find all\n distinct values.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/procedure-analyse.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/procedure-analyse.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (113,9,'HELP_VERSION','This help information was generated from the MySQL 5.6 Reference Manual\non: 2015-09-18 (revision: 44619)\n\nThis information applies to MySQL 5.6 through 5.6.28.\n','',''); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (112,34,'PROCEDURE ANALYSE','Syntax:\nANALYSE([max_elements[,max_memory]])\n\nANALYSE() examines the result from a query and returns an analysis of\nthe results that suggests optimal data types for each column that may\nhelp reduce table sizes. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query,\nand propose an optimal data type for the columns. This can be helpful\nfor checking your existing tables, or after importing new data. You may\nneed to try different settings for the arguments so that PROCEDURE\nANALYSE() does not suggest the ENUM data type when it is not\nappropriate.\n\nThe arguments are optional and are used as follows:\n\no max_elements (default 256) is the maximum number of distinct values\n that ANALYSE() notices per column. This is used by ANALYSE() to check\n whether the optimal data type should be of type ENUM; if there are\n more than max_elements distinct values, then ENUM is not a suggested\n type.\n\no max_memory (default 8192) is the maximum amount of memory that\n ANALYSE() should allocate per column while trying to find all\n distinct values.\n\nA PROCEDURE clause is not permitted in a UNION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/procedure-analyse.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/procedure-analyse.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (113,9,'HELP_VERSION','This help information was generated from the MySQL 5.6 Reference Manual\non: 2016-08-25 (revision: 48695)\n\nThis information applies to MySQL 5.6 through 5.6.34.\n','',''); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (114,38,'CHARACTER_LENGTH','Syntax:\nCHARACTER_LENGTH(str)\n\nCHARACTER_LENGTH() is a synonym for CHAR_LENGTH().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (115,27,'SHOW PRIVILEGES','Syntax:\nSHOW PRIVILEGES\n\nSHOW PRIVILEGES shows the list of system privileges that the MySQL\nserver supports. The exact list of privileges depends on the version of\nyour server.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-privileges.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-privileges.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (116,40,'CREATE TABLESPACE','Syntax:\nCREATE TABLESPACE tablespace_name\n ADD DATAFILE \'file_name\'\n USE LOGFILE GROUP logfile_group\n [EXTENT_SIZE [=] extent_size]\n [INITIAL_SIZE [=] initial_size]\n [AUTOEXTEND_SIZE [=] autoextend_size]\n [MAX_SIZE [=] max_size]\n [NODEGROUP [=] nodegroup_id]\n [WAIT]\n [COMMENT [=] comment_text]\n ENGINE [=] engine_name\n\nThis statement is used to create a tablespace, which can contain one or\nmore data files, providing storage space for tables. One data file is\ncreated and added to the tablespace using this statement. Additional\ndata files may be added to the tablespace by using the ALTER TABLESPACE\nstatement (see [HELP ALTER TABLESPACE]). For rules covering the naming\nof tablespaces, see\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html.\n\n*Note*: All MySQL Cluster Disk Data objects share the same namespace.\nThis means that each Disk Data object must be uniquely named (and not\nmerely each Disk Data object of a given type). For example, you cannot\nhave a tablespace and a log file group with the same name, or a\ntablespace and a data file with the same name.\n\nA log file group of one or more UNDO log files must be assigned to the\ntablespace to be created with the USE LOGFILE GROUP clause.\nlogfile_group must be an existing log file group created with CREATE\nLOGFILE GROUP (see [HELP CREATE LOGFILE GROUP]). Multiple tablespaces\nmay use the same log file group for UNDO logging.\n\nThe EXTENT_SIZE sets the size, in bytes, of the extents used by any\nfiles belonging to the tablespace. The default value is 1M. The minimum\nsize is 32K, and theoretical maximum is 2G, although the practical\nmaximum size depends on a number of factors. In most cases, changing\nthe extent size does not have any measurable effect on performance, and\nthe default value is recommended for all but the most unusual\nsituations.\n\nAn extent is a unit of disk space allocation. One extent is filled with\nas much data as that extent can contain before another extent is used.\nIn theory, up to 65,535 (64K) extents may used per data file; however,\nthe recommended maximum is 32,768 (32K). The recommended maximum size\nfor a single data file is 32G---that is, 32K extents x 1 MB per extent.\nIn addition, once an extent is allocated to a given partition, it\ncannot be used to store data from a different partition; an extent\ncannot store data from more than one partition. This means, for example\nthat a tablespace having a single datafile whose INITIAL_SIZE is 256 MB\nand whose EXTENT_SIZE is 128M has just two extents, and so can be used\nto store data from at most two different disk data table partitions.\n\nYou can see how many extents remain free in a given data file by\nquerying the INFORMATION_SCHEMA.FILES table, and so derive an estimate\nfor how much space remains free in the file. For further discussion and\nexamples, see http://dev.mysql.com/doc/refman/5.6/en/files-table.html.\n\nThe INITIAL_SIZE parameter sets the data file\'s total size in bytes.\nOnce the file has been created, its size cannot be changed; however,\nyou can add more data files to the tablespace using ALTER TABLESPACE\n... ADD DATAFILE. See [HELP ALTER TABLESPACE].\n\nINITIAL_SIZE is optional; its default value is 134217728 (128 MB).\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nWhen setting EXTENT_SIZE, you may optionally follow the number with a\none-letter abbreviation for an order of magnitude, similar to those\nused in my.cnf. Generally, this is one of the letters M (for megabytes)\nor G (for gigabytes). In MySQL Cluster NDB 7.3.2 and later, these\nabbreviations are also supported when specifying INITIAL_SIZE as well.\n(Bug #13116514, Bug #16104705, Bug #62858)\n\nINITIAL_SIZE, EXTENT_SIZE, and UNDO_BUFFER_SIZE are subject to rounding\nas follows:\n\no EXTENT_SIZE and UNDO_BUFFER_SIZE are each rounded up to the nearest\n whole multiple of 32K.\n\no INITIAL_SIZE is rounded down to the nearest whole multiple of 32K.\n\n For data files, INITIAL_SIZE is subject to further rounding; the\n result just obtained is rounded up to the nearest whole multiple of\n EXTENT_SIZE (after any rounding).\n\nThe rounding just described is done explicitly, and a warning is issued\nby the MySQL Server when any such rounding is performed. The rounded\nvalues are also used by the NDB kernel for calculating\nINFORMATION_SCHEMA.FILES column values and other purposes. However, to\navoid an unexpected result, we suggest that you always use whole\nmultiples of 32K in specifying these options.\n\nAUTOEXTEND_SIZE, MAX_SIZE, NODEGROUP, WAIT, and COMMENT are parsed but\nignored, and so currently have no effect. These options are intended\nfor future expansion.\n\nThe ENGINE parameter determines the storage engine which uses this\ntablespace, with engine_name being the name of the storage engine.\nCurrently, engine_name must be one of the values NDB or NDBCLUSTER.\n\nWhen CREATE TABLESPACE is used with ENGINE = NDB, a tablespace and\nassociated data file are created on each Cluster data node. You can\nverify that the data files were created and obtain information about\nthem by querying the INFORMATION_SCHEMA.FILES table. For example:\n\nmysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE TABLESPACE_NAME = \'newts\' AND FILE_TYPE = \'DATAFILE\';\n+--------------------+-------------+----------------+\n| LOGFILE_GROUP_NAME | FILE_NAME | EXTRA |\n+--------------------+-------------+----------------+\n| lg_3 | newdata.dat | CLUSTER_NODE=3 |\n| lg_3 | newdata.dat | CLUSTER_NODE=4 |\n+--------------------+-------------+----------------+\n2 rows in set (0.01 sec)\n\n(See http://dev.mysql.com/doc/refman/5.6/en/files-table.html.)\n\nCREATE TABLESPACE is useful only with Disk Data storage for MySQL\nCluster. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-disk-data.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-tablespace.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (117,4,'ST_GEOMFROMTEXT','ST_GeomFromText(wkt[,srid]), ST_GeometryFromText(wkt[,srid])\n\nConstructs a geometry value of any type using its WKT representation\nand SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (118,38,'INSERT FUNCTION','Syntax:\nINSERT(str,pos,len,newstr)\n\nReturns the string str, with the substring beginning at position pos\nand len characters long replaced by the string newstr. Returns the\noriginal string if pos is not within the length of the string. Replaces\nthe rest of the string from position pos if len is not within the\nlength of the rest of the string. Returns NULL if any argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT INSERT(\'Quadratic\', 3, 4, \'What\');\n -> \'QuWhattic\'\nmysql> SELECT INSERT(\'Quadratic\', -1, 4, \'What\');\n -> \'Quadratic\'\nmysql> SELECT INSERT(\'Quadratic\', 3, 100, \'What\');\n -> \'QuWhat\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (119,15,'XOR','Syntax:\nXOR\n\nLogical XOR. Returns NULL if either operand is NULL. For non-NULL\noperands, evaluates to 1 if an odd number of operands is nonzero,\notherwise 0 is returned.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/logical-operators.html\n\n','mysql> SELECT 1 XOR 1;\n -> 0\nmysql> SELECT 1 XOR 0;\n -> 1\nmysql> SELECT 1 XOR NULL;\n -> NULL\nmysql> SELECT 1 XOR 1 XOR 1;\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/logical-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (120,10,'GRANT','Syntax:\nGRANT\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n TO user_specification [, user_specification] ...\n [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]\n [WITH {GRANT OPTION | resource_option} ...]\n\nGRANT PROXY ON user_specification\n TO user_specification [, user_specification] ...\n [WITH GRANT OPTION]\n\nobject_type: {\n TABLE\n | FUNCTION\n | PROCEDURE\n}\n\npriv_level: {\n *\n | *.*\n | db_name.*\n | db_name.tbl_name\n | tbl_name\n | db_name.routine_name\n}\n\nuser_specification:\n user [ auth_option ]\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED BY PASSWORD \'hash_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n}\n\nssl_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n | MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\nThe GRANT statement grants privileges to MySQL user accounts. GRANT\nalso serves to specify other account characteristics such as use of\nsecure connections and limits on access to server resources.\n\nTo use GRANT, you must have the GRANT OPTION privilege, and you must\nhave the privileges that you are granting. When the read_only system\nvariable is enabled, GRANT additionally requires the SUPER privilege.\n\nThe REVOKE statement is related to GRANT and enables administrators to\nremove account privileges. See [HELP REVOKE].\n\nNormally, a database administrator first uses CREATE USER to create an\naccount, then GRANT to define its privileges and characteristics. For\nexample:\n\nCREATE USER \'jeffrey\'@\'localhost\' IDENTIFIED BY \'mypass\';\nGRANT ALL ON db1.* TO \'jeffrey\'@\'localhost\';\nGRANT SELECT ON db2.invoice TO \'jeffrey\'@\'localhost\';\nGRANT USAGE ON *.* TO \'jeffrey\'@\'localhost\' WITH MAX_QUERIES_PER_HOUR 90;\n\n*Note*: Examples shown here include no IDENTIFIED clause. It is assumed\nthat you establish passwords with CREATE USER at account-creation time\nto avoid creating insecure accounts.\n\nIf an account named in a GRANT statement does not already exist, GRANT\nmay create it under the conditions described later in the discussion of\nthe NO_AUTO_CREATE_USER SQL mode.\n\nFrom the mysql program, GRANT responds with Query OK, 0 rows affected\nwhen executed successfully. To determine what privileges result from\nthe operation, use SHOW GRANTS. See [HELP SHOW GRANTS].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/grant.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/grant.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (120,10,'GRANT','Syntax:\nGRANT\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n TO user_specification [, user_specification] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH {GRANT OPTION | resource_option} ...]\n\nGRANT PROXY ON user_specification\n TO user_specification [, user_specification] ...\n [WITH GRANT OPTION]\n\nobject_type: {\n TABLE\n | FUNCTION\n | PROCEDURE\n}\n\npriv_level: {\n *\n | *.*\n | db_name.*\n | db_name.tbl_name\n | tbl_name\n | db_name.routine_name\n}\n\nuser_specification:\n user [ auth_option ]\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED BY PASSWORD \'hash_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n}\n\ntls_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n | MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\nThe GRANT statement grants privileges to MySQL user accounts. GRANT\nalso serves to specify other account characteristics such as use of\nsecure connections and limits on access to server resources.\n\nTo use GRANT, you must have the GRANT OPTION privilege, and you must\nhave the privileges that you are granting. When the read_only system\nvariable is enabled, GRANT additionally requires the SUPER privilege.\n\nThe REVOKE statement is related to GRANT and enables administrators to\nremove account privileges. See [HELP REVOKE].\n\nNormally, a database administrator first uses CREATE USER to create an\naccount, then GRANT to define its privileges and characteristics. For\nexample:\n\nCREATE USER \'jeffrey\'@\'localhost\' IDENTIFIED BY \'mypass\';\nGRANT ALL ON db1.* TO \'jeffrey\'@\'localhost\';\nGRANT SELECT ON db2.invoice TO \'jeffrey\'@\'localhost\';\nGRANT USAGE ON *.* TO \'jeffrey\'@\'localhost\' WITH MAX_QUERIES_PER_HOUR 90;\n\n*Note*: Examples shown here include no IDENTIFIED clause. It is assumed\nthat you establish passwords with CREATE USER at account-creation time\nto avoid creating insecure accounts.\n\nIf an account named in a GRANT statement does not already exist, GRANT\nmay create it under the conditions described later in the discussion of\nthe NO_AUTO_CREATE_USER SQL mode.\n\nFrom the mysql program, GRANT responds with Query OK, 0 rows affected\nwhen executed successfully. To determine what privileges result from\nthe operation, use SHOW GRANTS. See [HELP SHOW GRANTS].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/grant.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/grant.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (121,7,'MBRINTERSECTS','MBRIntersects(g1,g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 intersect.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (122,20,'IS NOT','Syntax:\nIS NOT boolean_value\n\nTests a value against a boolean value, where boolean_value can be TRUE,\nFALSE, or UNKNOWN.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n -> 1, 1, 0\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (123,3,'SQRT','Syntax:\nSQRT(X)\n\nReturns the square root of a nonnegative number X.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT SQRT(4);\n -> 2\nmysql> SELECT SQRT(20);\n -> 4.4721359549996\nmysql> SELECT SQRT(-16);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); @@ -207,7 +207,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (127,19,'<<','Syntax:\n<<\n\nShifts a longlong (BIGINT) number to the left.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html\n\n','mysql> SELECT 1 << 2;\n -> 4\n','http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (128,27,'SHOW TABLE STATUS','Syntax:\nSHOW TABLE STATUS [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLE STATUS works likes SHOW TABLES, but provides a lot of\ninformation about each non-TEMPORARY table. You can also get this list\nusing the mysqlshow --status db_name command. The LIKE clause, if\npresent, indicates which table names to match. The WHERE clause can be\ngiven to select rows using more general conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-table-status.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-table-status.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (129,38,'ASCII','Syntax:\nASCII(str)\n\nReturns the numeric value of the leftmost character of the string str.\nReturns 0 if str is the empty string. Returns NULL if str is NULL.\nASCII() works for 8-bit characters.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT ASCII(\'2\');\n -> 50\nmysql> SELECT ASCII(2);\n -> 50\nmysql> SELECT ASCII(\'dx\');\n -> 100\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (130,3,'DIV','Syntax:\nDIV\n\nInteger division. Similar to FLOOR(), but is safe with BIGINT values.\n\nIn MySQL 5.6, if either operand has a noninteger type, the operands are\nconverted to DECIMAL and divided using DECIMAL arithmetic before\nconverting the result to BIGINT. If the result exceeds BIGINT range, an\nerror occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT 5 DIV 2;\n -> 2\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (130,3,'DIV','Syntax:\nDIV\n\nInteger division. Discards from the division result any fractional part\nto the right of the decimal point.\n\nIf either operand has a noninteger type, the operands are converted to\nDECIMAL and divided using DECIMAL arithmetic before converting the\nresult to BIGINT. If the result exceeds BIGINT range, an error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;\n -> 2, -2, -2, 2\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (131,27,'SHOW SLAVE STATUS','Syntax:\nSHOW SLAVE STATUS\n\nThis statement provides status information on essential parameters of\nthe slave threads. It requires either the SUPER or REPLICATION CLIENT\nprivilege.\n\nIf you issue this statement using the mysql client, you can use a \\G\nstatement terminator rather than a semicolon to obtain a more readable\nvertical layout:\n\nmysql> SHOW SLAVE STATUS\\G\n*************************** 1. row ***************************\n Slave_IO_State: Waiting for master to send event\n Master_Host: localhost\n Master_User: root\n Master_Port: 13000\n Connect_Retry: 60\n Master_Log_File: master-bin.000002\n Read_Master_Log_Pos: 1307\n Relay_Log_File: slave-relay-bin.000003\n Relay_Log_Pos: 1508\n Relay_Master_Log_File: master-bin.000002\n Slave_IO_Running: Yes\n Slave_SQL_Running: Yes\n Replicate_Do_DB:\n Replicate_Ignore_DB:\n Replicate_Do_Table:\n Replicate_Ignore_Table:\n Replicate_Wild_Do_Table:\n Replicate_Wild_Ignore_Table:\n Last_Errno: 0\n Last_Error:\n Skip_Counter: 0\n Exec_Master_Log_Pos: 1307\n Relay_Log_Space: 1858\n Until_Condition: None\n Until_Log_File:\n Until_Log_Pos: 0\n Master_SSL_Allowed: No\n Master_SSL_CA_File:\n Master_SSL_CA_Path:\n Master_SSL_Cert:\n Master_SSL_Cipher:\n Master_SSL_Key:\n Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n Last_IO_Errno: 0\n Last_IO_Error:\n Last_SQL_Errno: 0\n Last_SQL_Error:\n Replicate_Ignore_Server_Ids:\n Master_Server_Id: 1\n Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562\n Master_Info_File: /var/mysqld.2/data/master.info\n SQL_Delay: 0\n SQL_Remaining_Delay: NULL\n Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it\n Master_Retry_Count: 10\n Master_Bind:\n Last_IO_Error_Timestamp:\n Last_SQL_Error_Timestamp:\n Master_SSL_Crl:\n Master_SSL_Crlpath:\n Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5\n Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5\n Auto_Position: 1\n1 row in set (0.00 sec)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (132,35,'GEOMETRY','MySQL provides a standard way of creating spatial columns for geometry\ntypes, for example, with CREATE TABLE or ALTER TABLE. Spatial columns\nare supported for MyISAM, InnoDB, NDB, and ARCHIVE tables. See also the\nnotes about spatial indexes under [HELP SPATIAL].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/creating-spatial-columns.html\n\n','CREATE TABLE geom (g GEOMETRY);\n','http://dev.mysql.com/doc/refman/5.6/en/creating-spatial-columns.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (133,19,'&','Syntax:\n&\n\nBitwise AND:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html\n\n','mysql> SELECT 29 & 15;\n -> 13\n','http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html'); @@ -218,14 +218,14 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (138,23,'DOUBLE PRECISION','DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED]\n[ZEROFILL]\n\nThese types are synonyms for DOUBLE. Exception: If the REAL_AS_FLOAT\nSQL mode is enabled, REAL is a synonym for FLOAT rather than DOUBLE.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (139,38,'ORD','Syntax:\nORD(str)\n\nIf the leftmost character of the string str is a multibyte character,\nreturns the code for that character, calculated from the numeric values\nof its constituent bytes using this formula:\n\n (1st byte code)\n+ (2nd byte code * 256)\n+ (3rd byte code * 2562) ...\n\nIf the leftmost character is not a multibyte character, ORD() returns\nthe same value as the ASCII() function.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT ORD(\'2\');\n -> 50\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (140,37,'ENVELOPE','Envelope(g)\n\nST_Envelope() and Envelope() are synonyms. For more information, see\nthe description of ST_Envelope().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (141,37,'ST_ISEMPTY','ST_IsEmpty(g)\n\nThis function is a placeholder that returns 0 for any valid geometry\nvalue, 1 for any invalid geometry value or NULL.\n\nMySQL does not support GIS EMPTY values such as POINT EMPTY.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (141,37,'ST_ISEMPTY','ST_IsEmpty(g)\n\nThis function is a placeholder that returns 0 for any valid geometry\nvalue, 1 for any invalid geometry value, or NULL if the argument is\nNULL.\n\nMySQL does not support GIS EMPTY values such as POINT EMPTY.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (142,14,'INET_ATON','Syntax:\nINET_ATON(expr)\n\nGiven the dotted-quad representation of an IPv4 network address as a\nstring, returns an integer that represents the numeric value of the\naddress in network byte order (big endian). INET_ATON() returns NULL if\nit does not understand its argument.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT INET_ATON(\'10.0.5.9\');\n -> 167773449\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (143,37,'ISSIMPLE','IsSimple(g)\n\nST_IsSimple() and IsSimple() are synonyms. For more information, see\nthe description of ST_IsSimple().\n\nPrior to MySQL 5.6.1, IsSimple() always returns 0.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (144,3,'- BINARY','Syntax:\n-\n\nSubtraction:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT 3-5;\n -> -2\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (145,32,'CURRENT_TIME','Syntax:\nCURRENT_TIME, CURRENT_TIME([fsp])\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (146,4,'WKT DEFINITION','The Well-Known Text (WKT) representation of geometry values is designed\nfor exchanging geometry data in ASCII form. The OpenGIS specification\nprovides a Backus-Naur grammar that specifies the formal production\nrules for writing WKT values (see\nhttp://dev.mysql.com/doc/refman/5.6/en/spatial-extensions.html).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-data-formats.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-data-formats.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (147,11,'ST_Y','ST_Y(p)\n\nReturns the Y-coordinate value for the Point object p as a\ndouble-precision number.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-point-property-functions.html\n\n','mysql> SELECT ST_Y(POINT(56.7, 53.34));\n+--------------------------+\n| ST_Y(POINT(56.7, 53.34)) |\n+--------------------------+\n| 53.34 |\n+--------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-point-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (148,10,'REVOKE','Syntax:\nREVOKE\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n FROM user [, user] ...\n\nREVOKE ALL PRIVILEGES, GRANT OPTION\n FROM user [, user] ...\n\nREVOKE PROXY ON user\n FROM user [, user] ...\n\nThe REVOKE statement enables system administrators to revoke privileges\nfrom MySQL accounts.\n\nWhen the read_only system variable is enabled, REVOKE requires the\nSUPER privilege in addition to any other required privileges described\nin the following discussion.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.6/en/account-names.html. For example:\n\nREVOKE INSERT ON *.* FROM \'jeffrey\'@\'localhost\';\n\nIf you specify only the user name part of the account name, a host name\npart of \'%\' is used.\n\nFor details on the levels at which privileges exist, the permissible\npriv_type and priv_level values, and the syntax for specifying users\nand passwords, see [HELP GRANT]\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all\nglobal, database, table, column, and routine privileges for the named\nuser or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER\nprivilege or the UPDATE privilege for the mysql database.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/revoke.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/revoke.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (148,10,'REVOKE','Syntax:\nREVOKE\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n FROM user [, user] ...\n\nREVOKE ALL PRIVILEGES, GRANT OPTION\n FROM user [, user] ...\n\nREVOKE PROXY ON user\n FROM user [, user] ...\n\nThe REVOKE statement enables system administrators to revoke privileges\nfrom MySQL accounts.\n\nWhen the read_only system variable is enabled, REVOKE requires the\nSUPER privilege in addition to any other required privileges described\nin the following discussion.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.6/en/account-names.html. For example:\n\nREVOKE INSERT ON *.* FROM \'jeffrey\'@\'localhost\';\n\nIf you specify only the user name part of the account name, a host name\npart of \'%\' is used.\n\nFor details on the levels at which privileges exist, the permissible\npriv_type, priv_level, and object_type values, and the syntax for\nspecifying users and passwords, see [HELP GRANT]\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all\nglobal, database, table, column, and routine privileges for the named\nuser or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER\nprivilege or the UPDATE privilege for the mysql database.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/revoke.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/revoke.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (149,32,'LAST_DAY','Syntax:\nLAST_DAY(date)\n\nTakes a date or datetime value and returns the corresponding value for\nthe last day of the month. Returns NULL if the argument is invalid.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT LAST_DAY(\'2003-02-05\');\n -> \'2003-02-28\'\nmysql> SELECT LAST_DAY(\'2004-02-05\');\n -> \'2004-02-29\'\nmysql> SELECT LAST_DAY(\'2004-01-01 01:01:01\');\n -> \'2004-01-31\'\nmysql> SELECT LAST_DAY(\'2003-03-32\');\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (150,23,'MEDIUMINT','MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The\nunsigned range is 0 to 16777215.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (151,12,'RANDOM_BYTES','Syntax:\nRANDOM_BYTES(len)\n\nThis function returns a binary string of len random bytes generated\nusing the random number generator of the SSL library (OpenSSL or\nyaSSL). Permitted values of len range from 1 to 1024. For values\noutside that range, RANDOM_BYTES() generates a warning and returns\nNULL.\n\nRANDOM_BYTES() can be used to provide the initialization vector for the\nAES_DECRYPT() and AES_ENCRYPT() functions. For use in that context, len\nmust be at least 16. Larger values are permitted, but bytes in excess\nof 16 are ignored.\n\nRANDOM_BYTES() generates a random value, which makes its result\nnondeterministic. Consequently, statements that use this function are\nunsafe for statement-based replication and cannot be stored in the\nquery cache.\n\nThis function is available as of MySQL 5.6.17.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); @@ -233,8 +233,8 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (153,29,'EXPLAIN','Syntax:\n{EXPLAIN | DESCRIBE | DESC}\n tbl_name [col_name | wild]\n\n{EXPLAIN | DESCRIBE | DESC}\n [explain_type]\n explainable_stmt\n\nexplain_type: {\n EXTENDED\n | PARTITIONS\n | FORMAT = format_name\n}\n\nformat_name: {\n TRADITIONAL\n | JSON\n}\n\nexplainable_stmt: {\n SELECT statement\n | DELETE statement\n | INSERT statement\n | REPLACE statement\n | UPDATE statement\n}\n\nThe DESCRIBE and EXPLAIN statements are synonyms. In practice, the\nDESCRIBE keyword is more often used to obtain information about table\nstructure, whereas EXPLAIN is used to obtain a query execution plan\n(that is, an explanation of how MySQL would execute a query). The\nfollowing discussion uses the DESCRIBE and EXPLAIN keywords in\naccordance with those uses, but the MySQL parser treats them as\ncompletely synonymous.\n\nObtaining Table Structure Information\n\nDESCRIBE provides information about the columns in a table:\n\nmysql> DESCRIBE City;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | NO | | | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | NO | | 0 | |\n+------------+----------+------+-----+---------+----------------+\n\nDESCRIBE is a shortcut for SHOW COLUMNS. These statements also display\ninformation for views. The description for SHOW COLUMNS provides more\ninformation about the output columns. See [HELP SHOW COLUMNS].\n\nBy default, DESCRIBE displays information about all columns in the\ntable. col_name, if given, is the name of a column in the table. In\nthis case, the statement displays information only for the named\ncolumn. wild, if given, is a pattern string. It can contain the SQL "%"\nand "_" wildcard characters. In this case, the statement displays\noutput only for the columns with names matching the string. There is no\nneed to enclose the string within quotation marks unless it contains\nspaces or other special characters.\n\nThe DESCRIBE statement is provided for compatibility with Oracle.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements\nalso provide information about tables. See [HELP SHOW].\n\nObtaining Execution Plan Information\n\nThe EXPLAIN statement provides information about how MySQL executes\nstatements:\n\no As of MySQL 5.6.3, permitted explainable statements for EXPLAIN are\n SELECT, DELETE, INSERT, REPLACE, and UPDATE. Before MySQL 5.6.3,\n SELECT is the only explainable statement.\n\no When EXPLAIN is used with an explainable statement, MySQL displays\n information from the optimizer about the statement execution plan.\n That is, MySQL explains how it would process the statement, including\n information about how tables are joined and in which order. For\n information about using EXPLAIN to obtain execution plan information,\n see http://dev.mysql.com/doc/refman/5.6/en/explain-output.html.\n\no EXPLAIN EXTENDED can be used to obtain additional execution plan\n information. See\n http://dev.mysql.com/doc/refman/5.6/en/explain-extended.html.\n\no EXPLAIN PARTITIONS is useful for examining queries involving\n partitioned tables. See\n http://dev.mysql.com/doc/refman/5.6/en/partitioning-info.html.\n\no As of MySQL 5.6.5, the FORMAT option can be used to select the output\n format. TRADITIONAL presents the output in tabular format. This is\n the default if no FORMAT option is present. JSON format displays the\n information in JSON format. With FORMAT = JSON, the output includes\n extended and partition information.\n\nWith the help of EXPLAIN, you can see where you should add indexes to\ntables so that the statement executes faster by using indexes to find\nrows. You can also use EXPLAIN to check whether the optimizer joins the\ntables in an optimal order. To give a hint to the optimizer to use a\njoin order corresponding to the order in which the tables are named in\na SELECT statement, begin the statement with SELECT STRAIGHT_JOIN\nrather than just SELECT. (See\nhttp://dev.mysql.com/doc/refman/5.6/en/select.html.)\n\nIf you have a problem with indexes not being used when you believe that\nthey should be, run ANALYZE TABLE to update table statistics, such as\ncardinality of keys, that can affect the choices the optimizer makes.\nSee [HELP ANALYZE TABLE].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/explain.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/explain.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (154,3,'DEGREES','Syntax:\nDEGREES(X)\n\nReturns the argument X, converted from radians to degrees.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT DEGREES(PI());\n -> 180\nmysql> SELECT DEGREES(PI() / 2);\n -> 90\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (155,3,'- UNARY','Syntax:\n-\n\nUnary minus. This operator changes the sign of the operand.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT - 2;\n -> -2\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (156,23,'VARCHAR','[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,535. The effective maximum length\nof a VARCHAR is subject to the maximum row size (65,535 bytes, which is\nshared among all columns) and the character set used. For example, utf8\ncharacters can require up to three bytes per character, so a VARCHAR\ncolumn that uses the utf8 character set can be declared to be a maximum\nof 21,844 characters. See\nhttp://dev.mysql.com/doc/refman/5.6/en/column-count-limit.html.\n\nMySQL stores VARCHAR values as a 1-byte or 2-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A\nVARCHAR column uses one length byte if values require no more than 255\nbytes, two length bytes if values may require more than 255 bytes.\n\n*Note*: MySQL 5.6 follows the standard SQL specification, and does not\nremove trailing spaces from VARCHAR values.\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the\nstandard SQL way to define that a VARCHAR column should use some\npredefined character set. MySQL 4.1 and up uses utf8 as this predefined\ncharacter set.\nhttp://dev.mysql.com/doc/refman/5.6/en/charset-national.html. NVARCHAR\nis shorthand for NATIONAL VARCHAR.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (157,38,'UNHEX','Syntax:\n\nUNHEX(str)\n\nFor a string argument str, UNHEX(str) interprets each pair of\ncharacters in the argument as a hexadecimal number and converts it to\nthe byte represented by the number. The return value is a binary\nstring.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT UNHEX(\'4D7953514C\');\n -> \'MySQL\'\nmysql> SELECT 0x4D7953514C;\n -> \'MySQL\'\nmysql> SELECT UNHEX(HEX(\'string\'));\n -> \'string\'\nmysql> SELECT HEX(UNHEX(\'1267\'));\n -> \'1267\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (156,23,'VARCHAR','[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,535. The effective maximum length\nof a VARCHAR is subject to the maximum row size (65,535 bytes, which is\nshared among all columns) and the character set used. For example, utf8\ncharacters can require up to three bytes per character, so a VARCHAR\ncolumn that uses the utf8 character set can be declared to be a maximum\nof 21,844 characters. See\nhttp://dev.mysql.com/doc/refman/5.6/en/column-count-limit.html.\n\nMySQL stores VARCHAR values as a 1-byte or 2-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A\nVARCHAR column uses one length byte if values require no more than 255\nbytes, two length bytes if values may require more than 255 bytes.\n\n*Note*: MySQL follows the standard SQL specification, and does not\nremove trailing spaces from VARCHAR values.\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the\nstandard SQL way to define that a VARCHAR column should use some\npredefined character set. MySQL uses utf8 as this predefined character\nset. http://dev.mysql.com/doc/refman/5.6/en/charset-national.html.\nNVARCHAR is shorthand for NATIONAL VARCHAR.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (157,38,'UNHEX','Syntax:\n\nUNHEX(str)\n\nFor a string argument str, UNHEX(str) interprets each pair of\ncharacters in the argument as a hexadecimal number and converts it to\nthe byte represented by the number. The return value is a binary\nstring.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT UNHEX(\'4D7953514C\');\n -> \'MySQL\'\nmysql> SELECT X\'4D7953514C\';\n -> \'MySQL\'\nmysql> SELECT UNHEX(HEX(\'string\'));\n -> \'string\'\nmysql> SELECT HEX(UNHEX(\'1267\'));\n -> \'1267\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (158,40,'DROP TRIGGER','Syntax:\nDROP TRIGGER [IF EXISTS] [schema_name.]trigger_name\n\nThis statement drops a trigger. The schema (database) name is optional.\nIf the schema is omitted, the trigger is dropped from the default\nschema. DROP TRIGGER requires the TRIGGER privilege for the table\nassociated with the trigger.\n\nUse IF EXISTS to prevent an error from occurring for a trigger that\ndoes not exist. A NOTE is generated for a nonexistent trigger when\nusing IF EXISTS. See [HELP SHOW WARNINGS].\n\nTriggers for a table are also dropped if you drop the table.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-trigger.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (159,8,'RESET MASTER','Syntax:\nRESET MASTER\n\nDeletes all binary log files listed in the index file, resets the\nbinary log index file to be empty, and creates a new binary log file.\n\nIn MySQL 5.6.5 and later, RESET MASTER also clears the values of the\ngtid_purged system variable (known as gtid_lost in MySQL 5.6.8 and\nearlier) as well as the global value of the gtid_executed (gtid_done,\nprior to MySQL 5.6.9) system variable (but not its session value); that\nis, executing this statement sets each of these values to an empty\nstring (\'\').\n\nThis statement is intended to be used only when the master is started\nfor the first time.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/reset-master.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/reset-master.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (160,3,'PI','Syntax:\nPI()\n\nReturns the value of π (pi). The default number of decimal places\ndisplayed is seven, but MySQL uses the full double-precision value\ninternally.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT PI();\n -> 3.141593\nmysql> SELECT PI()+0.000000000000000000;\n -> 3.141592653589793116\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); @@ -249,11 +249,11 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (169,38,'INSTR','Syntax:\nINSTR(str,substr)\n\nReturns the position of the first occurrence of substring substr in\nstring str. This is the same as the two-argument form of LOCATE(),\nexcept that the order of the arguments is reversed.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT INSTR(\'foobarbar\', \'bar\');\n -> 4\nmysql> SELECT INSTR(\'xbar\', \'foobar\');\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (170,20,'>=','Syntax:\n>=\n\nGreater than or equal:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 2 >= 2;\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (171,3,'EXP','Syntax:\nEXP(X)\n\nReturns the value of e (the base of natural logarithms) raised to the\npower of X. The inverse of this function is LOG() (using a single\nargument only) or LN().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT EXP(2);\n -> 7.3890560989307\nmysql> SELECT EXP(-2);\n -> 0.13533528323661\nmysql> SELECT EXP(0);\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (172,37,'ST_ISSIMPLE','ST_IsSimple(g)\n\nReturns 1 if the geometry value g has no anomalous geometric points,\nsuch as self-intersection or self-tangency. ST_IsSimple() returns 0 if\nthe argument is not simple, and NULL if it is NULL.\n\nThe description of each instantiable geometric class given earlier in\nthe chapter includes the specific conditions that cause an instance of\nthat class to be classified as not simple. (See [HELP Geometry\nhierarchy].)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (172,37,'ST_ISSIMPLE','ST_IsSimple(g)\n\nReturns 1 if the geometry value g has no anomalous geometric points,\nsuch as self-intersection or self-tangency. ST_IsSimple() returns 0 if\nthe argument is not simple, and NULL if the argument is NULL.\n\nThe description of each instantiable geometric class given earlier in\nthe chapter includes the specific conditions that cause an instance of\nthat class to be classified as not simple. (See [HELP Geometry\nhierarchy].)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (173,13,'POINTN','PointN(ls,N)\n\nST_PointN() and PointN() are synonyms. For more information, see the\ndescription of ST_PointN().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (174,38,'OCT','Syntax:\nOCT(N)\n\nReturns a string representation of the octal value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,8). Returns\nNULL if N is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT OCT(12);\n -> \'14\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (175,32,'SYSDATE','Syntax:\nSYSDATE([fsp])\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\'\nor YYYYMMDDHHMMSS format, depending on whether the function is used in\na string or numeric context.\n\nAs of MySQL 5.6.4, if the fsp argument is given to specify a fractional\nseconds precision from 0 to 6, the return value includes a fractional\nseconds part of that many digits. Before 5.6.4, any argument is\nignored.\n\nSYSDATE() returns the time at which it executes. This differs from the\nbehavior for NOW(), which returns a constant time that indicates the\ntime at which the statement began to execute. (Within a stored function\nor trigger, NOW() returns the time at which the function or triggering\nstatement began to execute.)\n\nmysql> SELECT NOW(), SLEEP(2), NOW();\n+---------------------+----------+---------------------+\n| NOW() | SLEEP(2) | NOW() |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 |\n+---------------------+----------+---------------------+\n\nmysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();\n+---------------------+----------+---------------------+\n| SYSDATE() | SLEEP(2) | SYSDATE() |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 |\n+---------------------+----------+---------------------+\n\nIn addition, the SET TIMESTAMP statement affects the value returned by\nNOW() but not by SYSDATE(). This means that timestamp settings in the\nbinary log have no effect on invocations of SYSDATE().\n\nBecause SYSDATE() can return different values even within the same\nstatement, and is not affected by SET TIMESTAMP, it is nondeterministic\nand therefore unsafe for replication if statement-based binary logging\nis used. If that is a problem, you can use row-based logging.\n\nAlternatively, you can use the --sysdate-is-now option to cause\nSYSDATE() to be an alias for NOW(). This works if the option is used on\nboth the master and the slave.\n\nThe nondeterministic nature of SYSDATE() also means that indexes cannot\nbe used for evaluating expressions that refer to it.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (176,5,'UNINSTALL PLUGIN','Syntax:\nUNINSTALL PLUGIN plugin_name\n\nThis statement removes an installed server plugin. It requires the\nDELETE privilege for the mysql.plugin table.\n\nplugin_name must be the name of some plugin that is listed in the\nmysql.plugin table. The server executes the plugin\'s deinitialization\nfunction and removes the row for the plugin from the mysql.plugin\ntable, so that subsequent server restarts will not load and initialize\nthe plugin. UNINSTALL PLUGIN does not remove the plugin\'s shared\nlibrary file.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/uninstall-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/uninstall-plugin.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (176,5,'UNINSTALL PLUGIN','Syntax:\nUNINSTALL PLUGIN plugin_name\n\nThis statement removes an installed server plugin. It requires the\nDELETE privilege for the mysql.plugin system table. UNINSTALL PLUGIN is\nthe complement of INSTALL PLUGIN.\n\nplugin_name must be the name of some plugin that is listed in the\nmysql.plugin table. The server executes the plugin\'s deinitialization\nfunction and removes the row for the plugin from the mysql.plugin\ntable, so that subsequent server restarts will not load and initialize\nthe plugin. UNINSTALL PLUGIN does not remove the plugin\'s shared\nlibrary file.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/uninstall-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/uninstall-plugin.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (177,33,'ASBINARY','AsBinary(g), AsWKB(g)\n\nST_AsBinary(), ST_AsWKB(), AsBinary(), and AsWKB() are synonyms. For\nmore information, see the description of ST_AsBinary().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (178,27,'SHOW TABLES','Syntax:\nSHOW [FULL] TABLES [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLES lists the non-TEMPORARY tables in a given database. You can\nalso get this list using the mysqlshow db_name command. The LIKE\nclause, if present, indicates which table names to match. The WHERE\nclause can be given to select rows using more general conditions, as\ndiscussed in http://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nMatching performed by the LIKE clause is dependent on the setting of\nthe lower_case_table_names system variable.\n\nThis statement also lists any views in the database. The FULL modifier\nis supported such that SHOW FULL TABLES displays a second output\ncolumn. Values for the second column are BASE TABLE for a table and\nVIEW for a view.\n\nIf you have no privileges for a base table or view, it does not show up\nin the output from SHOW TABLES or mysqlshow db_name.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-tables.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (179,32,'MAKEDATE','Syntax:\nMAKEDATE(year,dayofyear)\n\nReturns a date, given year and day-of-year values. dayofyear must be\ngreater than 0 or the result is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);\n -> \'2011-01-31\', \'2011-02-01\'\nmysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);\n -> \'2011-12-31\', \'2014-12-31\'\nmysql> SELECT MAKEDATE(2011,0);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); @@ -261,10 +261,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (181,7,'MBROVERLAPS','MBROverlaps(g1,g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 overlap. The term spatially overlaps is\nused if two geometries intersect and their intersection results in a\ngeometry of the same dimension but not equal to either of the given\ngeometries.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (182,33,'ST_LINEFROMWKB','ST_LineFromWKB(wkb[,srid]), ST_LineStringFromWKB(wkb[,srid])\n\nConstructs a LineString value using its WKB representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (183,7,'ASYMMETRIC_DERIVE','Syntax:\nASYMMETRIC_DERIVE(pub_key_str, priv_key_str)\n\nDerives a symmetric key using the private key of one party and the\npublic key of another, and returns the resulting key as a binary\nstring. If key derivation fails, the result is NULL.\n\npub_key_str and priv_key_str must be valid key strings in PEM format.\nThey must be created using the DH algorithm.\n\nSuppose that you have two pairs of public and private keys:\n\nSET @dhp = CREATE_DH_PARAMETERS(1024);\nSET @priv1 = CREATE_ASYMMETRIC_PRIV_KEY(\'DH\', @dhp);\nSET @pub1 = CREATE_ASYMMETRIC_PUB_KEY(\'DH\', @priv1);\nSET @priv2 = CREATE_ASYMMETRIC_PRIV_KEY(\'DH\', @dhp);\nSET @pub2 = CREATE_ASYMMETRIC_PUB_KEY(\'DH\', @priv2);\n\nSuppose further that you use the private key from one pair and the\npublic key from the other pair to create a symmetric key string. Then\nthis symmetric key identity relationship holds:\n\nASYMMETRIC_DERIVE(@pub1, @priv2) = ASYMMETRIC_DERIVE(@pub2, @priv1)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (184,28,'INSERT SELECT','Syntax:\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name \n [PARTITION (partition_name,...)]\n [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table\nfrom one or many tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n SELECT tbl_temp1.fld_order_id\n FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/insert-select.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/insert-select.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (184,28,'INSERT SELECT','Syntax:\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table\nfrom one or many tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n SELECT tbl_temp1.fld_order_id\n FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/insert-select.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/insert-select.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (185,40,'CREATE PROCEDURE','Syntax:\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n PROCEDURE sp_name ([proc_parameter[,...]])\n [characteristic ...] routine_body\n\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n FUNCTION sp_name ([func_parameter[,...]])\n RETURNS type\n [characteristic ...] routine_body\n\nproc_parameter:\n [ IN | OUT | INOUT ] param_name type\n\nfunc_parameter:\n param_name type\n\ntype:\n Any valid MySQL data type\n\ncharacteristic:\n COMMENT \'string\'\n | LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n\nroutine_body:\n Valid SQL routine statement\n\nThese statements create stored routines. By default, a routine is\nassociated with the default database. To associate the routine\nexplicitly with a given database, specify the name as db_name.sp_name\nwhen you create it.\n\nThe CREATE FUNCTION statement is also used in MySQL to support UDFs\n(user-defined functions). See\nhttp://dev.mysql.com/doc/refman/5.6/en/adding-functions.html. A UDF can\nbe regarded as an external stored function. Stored functions share\ntheir namespace with UDFs. See\nhttp://dev.mysql.com/doc/refman/5.6/en/function-resolution.html, for\nthe rules describing how the server interprets references to different\nkinds of functions.\n\nTo invoke a stored procedure, use the CALL statement (see [HELP CALL]).\nTo invoke a stored function, refer to it in an expression. The function\nreturns a value during expression evaluation.\n\nCREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE\nprivilege. They might also require the SUPER privilege, depending on\nthe DEFINER value, as described later in this section. If binary\nlogging is enabled, CREATE FUNCTION might require the SUPER privilege,\nas described in\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-logging.html.\n\nBy default, MySQL automatically grants the ALTER ROUTINE and EXECUTE\nprivileges to the routine creator. This behavior can be changed by\ndisabling the automatic_sp_privileges system variable. See\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-routines-privileges.html.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be\nused when checking access privileges at routine execution time, as\ndescribed later in this section.\n\nIf the routine name is the same as the name of a built-in SQL function,\na syntax error occurs unless you use a space between the name and the\nfollowing parenthesis when defining the routine or invoking it later.\nFor this reason, avoid using the names of existing SQL functions for\nyour own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always permissible to have spaces after a stored\nroutine name, regardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present.\nIf there are no parameters, an empty parameter list of () should be\nused. Parameter names are not case sensitive.\n\nEach parameter is an IN parameter by default. To specify otherwise for\na parameter, use the keyword OUT or INOUT before the parameter name.\n\n*Note*: Specifying a parameter as IN, OUT, or INOUT is valid only for a\nPROCEDURE. For a FUNCTION, parameters are always regarded as IN\nparameters.\n\nAn IN parameter passes a value into a procedure. The procedure might\nmodify the value, but the modification is not visible to the caller\nwhen the procedure returns. An OUT parameter passes a value from the\nprocedure back to the caller. Its initial value is NULL within the\nprocedure, and its value is visible to the caller when the procedure\nreturns. An INOUT parameter is initialized by the caller, can be\nmodified by the procedure, and any change made by the procedure is\nvisible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the\nCALL statement that invokes the procedure so that you can obtain its\nvalue when the procedure returns. If you are calling the procedure from\nwithin another stored procedure or function, you can also pass a\nroutine parameter or local routine variable as an IN or INOUT\nparameter.\n\nRoutine parameters cannot be referenced in statements prepared within\nthe routine; see\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-program-restrictions.html\n.\n\nThe following example shows a simple stored procedure that uses an OUT\nparameter:\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE simpleproc (OUT param1 INT)\n -> BEGIN\n -> SELECT COUNT(*) INTO param1 FROM t;\n -> END//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter ;\n\nmysql> CALL simpleproc(@a);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @a;\n+------+\n| @a |\n+------+\n| 3 |\n+------+\n1 row in set (0.00 sec)\n\nThe example uses the mysql client delimiter command to change the\nstatement delimiter from ; to // while the procedure is being defined.\nThis enables the ; delimiter used in the procedure body to be passed\nthrough to the server rather than being interpreted by mysql itself.\nSee\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-defining.html.\n\nThe RETURNS clause may be specified only for a FUNCTION, for which it\nis mandatory. It indicates the return type of the function, and the\nfunction body must contain a RETURN value statement. If the RETURN\nstatement returns a value of a different type, the value is coerced to\nthe proper type. For example, if a function specifies an ENUM or SET\nvalue in the RETURNS clause, but the RETURN statement returns an\ninteger, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nThe following example function takes a parameter, performs an operation\nusing an SQL function, and returns the result. In this case, it is\nunnecessary to use delimiter because the function definition contains\nno internal ; statement delimiters:\n\nmysql> CREATE FUNCTION hello (s CHAR(20))\nmysql> RETURNS CHAR(50) DETERMINISTIC\n -> RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world! |\n+----------------+\n1 row in set (0.00 sec)\n\nParameter types and function return types can be declared to use any\nvalid data type. The COLLATE attribute can be used if preceded by the\nCHARACTER SET attribute.\n\nThe routine_body consists of a valid SQL routine statement. This can be\na simple statement such as SELECT or INSERT, or a compound statement\nwritten using BEGIN and END. Compound statements can contain\ndeclarations, loops, and other control structure statements. The syntax\nfor these statements is described in\nhttp://dev.mysql.com/doc/refman/5.6/en/sql-syntax-compound-statements.h\ntml.\n\nMySQL permits routines to contain DDL statements, such as CREATE and\nDROP. MySQL also permits stored procedures (but not stored functions)\nto contain SQL transaction statements such as COMMIT. Stored functions\nmay not contain statements that perform explicit or implicit commit or\nrollback. Support for these statements is not required by the SQL\nstandard, which states that each DBMS vendor may decide whether to\npermit them.\n\nStatements that return a result set can be used within a stored\nprocedure but not within a stored function. This prohibition includes\nSELECT statements that do not have an INTO var_list clause and other\nstatements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that\ncan be determined at function definition time to return a result set, a\nNot allowed to return a result set from a function error occurs\n(ER_SP_NO_RETSET). For statements that can be determined only at\nruntime to return a result set, a PROCEDURE %s can\'t return a result\nset in the given context error occurs (ER_SP_BADSELECT).\n\nUSE statements within stored routines are not permitted. When a routine\nis invoked, an implicit USE db_name is performed (and undone when the\nroutine terminates). The causes the routine to have the given default\ndatabase while it executes. References to objects in databases other\nthan the routine default database should be qualified with the\nappropriate database name.\n\nFor additional information about statements that are not permitted in\nstored routines, see\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-program-restrictions.html\n.\n\nFor information about invoking stored procedures from within programs\nwritten in a language that has a MySQL interface, see [HELP CALL].\n\nMySQL stores the sql_mode system variable setting in effect when a\nroutine is created or altered, and always executes the routine with\nthis setting in force, regardless of the current server SQL mode when\nthe routine begins executing.\n\nThe switch from the SQL mode of the invoker to that of the routine\noccurs after evaluation of arguments and assignment of the resulting\nvalues to routine parameters. If you define a routine in strict SQL\nmode but invoke it in nonstrict mode, assignment of arguments to\nroutine parameters does not take place in strict mode. If you require\nthat expressions passed to a routine be assigned in strict SQL mode,\nyou should invoke the routine with strict mode in effect.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (186,7,'SQL_THREAD_WAIT_AFTER_GTIDS','Syntax:\nSQL_THREAD_WAIT_AFTER_GTIDS(gtid_set[, timeout])\n\nSQL_THREAD_WAIT_AFTER_GTIDS() was added in MySQL 5.6.5, and replaced by\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() in MySQL 5.6.9. (Bug #14775984)\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (187,24,'GET DIAGNOSTICS','Syntax:\nGET [CURRENT] DIAGNOSTICS\n{\n statement_information_item\n [, statement_information_item] ... \n | CONDITION condition_number\n condition_information_item\n [, condition_information_item] ...\n}\n\nstatement_information_item:\n target = statement_information_item_name\n\ncondition_information_item:\n target = condition_information_item_name\n\nstatement_information_item_name:\n NUMBER\n | ROW_COUNT\n\ncondition_information_item_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | RETURNED_SQLSTATE\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\ncondition_number, target:\n (see following discussion)\n\nSQL statements produce diagnostic information that populates the\ndiagnostics area. The GET DIAGNOSTICS statement enables applications to\ninspect this information. It is available as of MySQL 5.6.4. (You can\nalso use SHOW WARNINGS or SHOW ERRORS to see conditions or errors.)\n\nNo special privileges are required to execute GET DIAGNOSTICS.\n\nThe keyword CURRENT means to retrieve information from the current\ndiagnostics area. In MySQL, it has no effect because that is the\ndefault behavior.\n\nGET DIAGNOSTICS is typically used in a handler within a stored program,\nbut it is a MySQL extension that it is permitted outside handler\ncontext to check the execution of any SQL statement. For example, if\nyou invoke the mysql client program, you can enter these statements at\nthe prompt:\n\nmysql> DROP TABLE test.no_such_table;\nERROR 1051 (42S02): Unknown table \'test.no_such_table\'\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;\nmysql> SELECT @p1, @p2;\n+-------+------------------------------------+\n| @p1 | @p2 |\n+-------+------------------------------------+\n| 42S02 | Unknown table \'test.no_such_table\' |\n+-------+------------------------------------+\n\nFor a description of the diagnostics area, see\nhttp://dev.mysql.com/doc/refman/5.6/en/diagnostics-area.html. Briefly,\nit contains two kinds of information:\n\no Statement information, such as the number of conditions that occurred\n or the affected-rows count.\n\no Condition information, such as the error code and message. If a\n statement raises multiple conditions, this part of the diagnostics\n area has a condition area for each one. If a statement raises no\n conditions, this part of the diagnostics area is empty.\n\nFor a statement that produces three conditions, the diagnostics area\ncontains statement and condition information like this:\n\nStatement information:\n row count\n ... other statement information items ...\nCondition area list:\n Condition area 1:\n error code for condition 1\n error message for condition 1\n ... other condition information items ...\n Condition area 2:\n error code for condition 2:\n error message for condition 2\n ... other condition information items ...\n Condition area 3:\n error code for condition 3\n error message for condition 3\n ... other condition information items ...\n\nGET DIAGNOSTICS can obtain either statement or condition information,\nbut not both in the same statement:\n\no To obtain statement information, retrieve the desired statement items\n into target variables. This instance of GET DIAGNOSTICS assigns the\n number of available conditions and the rows-affected count to the\n user variables @p1 and @p2:\n\nGET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT;\n\no To obtain condition information, specify the condition number and\n retrieve the desired condition items into target variables. This\n instance of GET DIAGNOSTICS assigns the SQLSTATE value and error\n message to the user variables @p3 and @p4:\n\nGET DIAGNOSTICS CONDITION 1\n @p3 = RETURNED_SQLSTATE, @p4 = MESSAGE_TEXT;\n\nThe retrieval list specifies one or more target = item_name\nassignments, separated by commas. Each assignment names a target\nvariable and either a statement_information_item_name or\ncondition_information_item_name designator, depending on whether the\nstatement retrieves statement or condition information.\n\nValid target designators for storing item information can be stored\nprocedure or function parameters, stored program local variables\ndeclared with DECLARE, or user-defined variables.\n\nValid condition_number designators can be stored procedure or function\nparameters, stored program local variables declared with DECLARE,\nuser-defined variables, system variables, or literals. A character\nliteral may include a _charset introducer. A warning occurs if the\ncondition number is not in the range from 1 to the number of condition\nareas that have information. In this case, the warning is added to the\ndiagnostics area without clearing it.\n\nCurrently, when a condition occurs, MySQL does not populate all\ncondition items recognized by GET DIAGNOSTICS. For example:\n\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p5 = SCHEMA_NAME, @p6 = TABLE_NAME;\nmysql> SELECT @p5, @p6;\n+------+------+\n| @p5 | @p6 |\n+------+------+\n| | |\n+------+------+\n\nIn standard SQL, if there are multiple conditions, the first condition\nrelates to the SQLSTATE value returned for the previous SQL statement.\nIn MySQL, this is not guaranteed. To get the main error, you cannot do\nthis:\n\nGET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;\n\nInstead, retrieve the condition count first, then use it to specify\nwhich condition number to inspect:\n\nGET DIAGNOSTICS @cno = NUMBER;\nGET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;\n\nFor information about permissible statement and condition information\nitems, and which ones are populated when a condition occurs, see\nhttp://dev.mysql.com/doc/refman/5.6/en/diagnostics-area.html#diagnostic\ns-area-information-items.\n\nHere is an example that uses GET DIAGNOSTICS and an exception handler\nin stored procedure context to assess the outcome of an insert\noperation. If the insert was successful, the procedure uses GET\nDIAGNOSTICS to get the rows-affected count. This shows that you can use\nGET DIAGNOSTICS multiple times to retrieve information about a\nstatement as long as the diagnostics area has not been cleared.\n\nCREATE PROCEDURE do_insert(value INT)\nBEGIN\n -- Declare variables to hold diagnostics area information\n DECLARE code CHAR(5) DEFAULT \'00000\';\n DECLARE msg TEXT;\n DECLARE rows INT;\n DECLARE result TEXT;\n -- Declare exception handler for failed insert\n DECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n BEGIN\n GET DIAGNOSTICS CONDITION 1\n code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;\n END;\n\n -- Perform the insert\n INSERT INTO t1 (int_col) VALUES(value);\n -- Check whether the insert was successful\n IF code = \'00000\' THEN\n GET DIAGNOSTICS rows = ROW_COUNT;\n SET result = CONCAT(\'insert succeeded, row count = \',rows);\n ELSE\n SET result = CONCAT(\'insert failed, error = \',code,\', message = \',msg);\n END IF;\n -- Say what happened\n SELECT result;\nEND;\n\nSuppose that t1.int_col is an integer column that is declared as NOT\nNULL. The procedure produces these results when invoked to insert\nnon-NULL and NULL values, respectively:\n\nmysql> CALL do_insert(1);\n+---------------------------------+\n| result |\n+---------------------------------+\n| insert succeeded, row count = 1 |\n+---------------------------------+\n\nmysql> CALL do_insert(NULL);\n+-------------------------------------------------------------------------+\n| result |\n+-------------------------------------------------------------------------+\n| insert failed, error = 23000, message = Column \'int_col\' cannot be null |\n+-------------------------------------------------------------------------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (187,24,'GET DIAGNOSTICS','Syntax:\nGET [CURRENT] DIAGNOSTICS\n{\n statement_information_item\n [, statement_information_item] ...\n | CONDITION condition_number\n condition_information_item\n [, condition_information_item] ...\n}\n\nstatement_information_item:\n target = statement_information_item_name\n\ncondition_information_item:\n target = condition_information_item_name\n\nstatement_information_item_name:\n NUMBER\n | ROW_COUNT\n\ncondition_information_item_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | RETURNED_SQLSTATE\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\ncondition_number, target:\n (see following discussion)\n\nSQL statements produce diagnostic information that populates the\ndiagnostics area. The GET DIAGNOSTICS statement enables applications to\ninspect this information. It is available as of MySQL 5.6.4. (You can\nalso use SHOW WARNINGS or SHOW ERRORS to see conditions or errors.)\n\nNo special privileges are required to execute GET DIAGNOSTICS.\n\nThe keyword CURRENT means to retrieve information from the current\ndiagnostics area. In MySQL, it has no effect because that is the\ndefault behavior.\n\nGET DIAGNOSTICS is typically used in a handler within a stored program,\nbut it is a MySQL extension that it is permitted outside handler\ncontext to check the execution of any SQL statement. For example, if\nyou invoke the mysql client program, you can enter these statements at\nthe prompt:\n\nmysql> DROP TABLE test.no_such_table;\nERROR 1051 (42S02): Unknown table \'test.no_such_table\'\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;\nmysql> SELECT @p1, @p2;\n+-------+------------------------------------+\n| @p1 | @p2 |\n+-------+------------------------------------+\n| 42S02 | Unknown table \'test.no_such_table\' |\n+-------+------------------------------------+\n\nFor a description of the diagnostics area, see\nhttp://dev.mysql.com/doc/refman/5.6/en/diagnostics-area.html. Briefly,\nit contains two kinds of information:\n\no Statement information, such as the number of conditions that occurred\n or the affected-rows count.\n\no Condition information, such as the error code and message. If a\n statement raises multiple conditions, this part of the diagnostics\n area has a condition area for each one. If a statement raises no\n conditions, this part of the diagnostics area is empty.\n\nFor a statement that produces three conditions, the diagnostics area\ncontains statement and condition information like this:\n\nStatement information:\n row count\n ... other statement information items ...\nCondition area list:\n Condition area 1:\n error code for condition 1\n error message for condition 1\n ... other condition information items ...\n Condition area 2:\n error code for condition 2:\n error message for condition 2\n ... other condition information items ...\n Condition area 3:\n error code for condition 3\n error message for condition 3\n ... other condition information items ...\n\nGET DIAGNOSTICS can obtain either statement or condition information,\nbut not both in the same statement:\n\no To obtain statement information, retrieve the desired statement items\n into target variables. This instance of GET DIAGNOSTICS assigns the\n number of available conditions and the rows-affected count to the\n user variables @p1 and @p2:\n\nGET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT;\n\no To obtain condition information, specify the condition number and\n retrieve the desired condition items into target variables. This\n instance of GET DIAGNOSTICS assigns the SQLSTATE value and error\n message to the user variables @p3 and @p4:\n\nGET DIAGNOSTICS CONDITION 1\n @p3 = RETURNED_SQLSTATE, @p4 = MESSAGE_TEXT;\n\nThe retrieval list specifies one or more target = item_name\nassignments, separated by commas. Each assignment names a target\nvariable and either a statement_information_item_name or\ncondition_information_item_name designator, depending on whether the\nstatement retrieves statement or condition information.\n\nValid target designators for storing item information can be stored\nprocedure or function parameters, stored program local variables\ndeclared with DECLARE, or user-defined variables.\n\nValid condition_number designators can be stored procedure or function\nparameters, stored program local variables declared with DECLARE,\nuser-defined variables, system variables, or literals. A character\nliteral may include a _charset introducer. A warning occurs if the\ncondition number is not in the range from 1 to the number of condition\nareas that have information. In this case, the warning is added to the\ndiagnostics area without clearing it.\n\nWhen a condition occurs, MySQL does not populate all condition items\nrecognized by GET DIAGNOSTICS. For example:\n\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p5 = SCHEMA_NAME, @p6 = TABLE_NAME;\nmysql> SELECT @p5, @p6;\n+------+------+\n| @p5 | @p6 |\n+------+------+\n| | |\n+------+------+\n\nIn standard SQL, if there are multiple conditions, the first condition\nrelates to the SQLSTATE value returned for the previous SQL statement.\nIn MySQL, this is not guaranteed. To get the main error, you cannot do\nthis:\n\nGET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;\n\nInstead, retrieve the condition count first, then use it to specify\nwhich condition number to inspect:\n\nGET DIAGNOSTICS @cno = NUMBER;\nGET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;\n\nFor information about permissible statement and condition information\nitems, and which ones are populated when a condition occurs, see\nhttp://dev.mysql.com/doc/refman/5.6/en/diagnostics-area.html#diagnostic\ns-area-information-items.\n\nHere is an example that uses GET DIAGNOSTICS and an exception handler\nin stored procedure context to assess the outcome of an insert\noperation. If the insert was successful, the procedure uses GET\nDIAGNOSTICS to get the rows-affected count. This shows that you can use\nGET DIAGNOSTICS multiple times to retrieve information about a\nstatement as long as the diagnostics area has not been cleared.\n\nCREATE PROCEDURE do_insert(value INT)\nBEGIN\n -- Declare variables to hold diagnostics area information\n DECLARE code CHAR(5) DEFAULT \'00000\';\n DECLARE msg TEXT;\n DECLARE rows INT;\n DECLARE result TEXT;\n -- Declare exception handler for failed insert\n DECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n BEGIN\n GET DIAGNOSTICS CONDITION 1\n code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;\n END;\n\n -- Perform the insert\n INSERT INTO t1 (int_col) VALUES(value);\n -- Check whether the insert was successful\n IF code = \'00000\' THEN\n GET DIAGNOSTICS rows = ROW_COUNT;\n SET result = CONCAT(\'insert succeeded, row count = \',rows);\n ELSE\n SET result = CONCAT(\'insert failed, error = \',code,\', message = \',msg);\n END IF;\n -- Say what happened\n SELECT result;\nEND;\n\nSuppose that t1.int_col is an integer column that is declared as NOT\nNULL. The procedure produces these results when invoked to insert\nnon-NULL and NULL values, respectively:\n\nmysql> CALL do_insert(1);\n+---------------------------------+\n| result |\n+---------------------------------+\n| insert succeeded, row count = 1 |\n+---------------------------------+\n\nmysql> CALL do_insert(NULL);\n+-------------------------------------------------------------------------+\n| result |\n+-------------------------------------------------------------------------+\n| insert failed, error = 23000, message = Column \'int_col\' cannot be null |\n+-------------------------------------------------------------------------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (188,38,'NOT REGEXP','Syntax:\nexpr NOT REGEXP pat, expr NOT RLIKE pat\n\nThis is the same as NOT (expr REGEXP pat).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/regexp.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/regexp.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (189,24,'LEAVE','Syntax:\nLEAVE label\n\nThis statement is used to exit the flow control construct that has the\ngiven label. If the label is for the outermost stored program block,\nLEAVE exits the program.\n\nLEAVE can be used within BEGIN ... END or loop constructs (LOOP,\nREPEAT, WHILE).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/leave.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/leave.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (190,20,'NOT IN','Syntax:\nexpr NOT IN (value,...)\n\nThis is the same as NOT (expr IN (value,...)).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); @@ -298,11 +298,11 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (218,13,'ST_NUMPOINTS','ST_NumPoints(ls)\n\nReturns the number of Point objects in the LineString value ls.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));\n+------------------------------------+\n| ST_NumPoints(ST_GeomFromText(@ls)) |\n+------------------------------------+\n| 3 |\n+------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (219,32,'TIME FUNCTION','Syntax:\nTIME(expr)\n\nExtracts the time part of the time or datetime expression expr and\nreturns it as a string.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT TIME(\'2003-12-31 01:02:03\');\n -> \'01:02:03\'\nmysql> SELECT TIME(\'2003-12-31 01:02:03.000123\');\n -> \'01:02:03.000123\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (220,32,'DATE_ADD','Syntax:\nDATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)\n\nThese functions perform date arithmetic. The date argument specifies\nthe starting date or datetime value. expr is an expression specifying\nthe interval value to be added or subtracted from the starting date.\nexpr is a string; it may start with a "-" for negative intervals. unit\nis a keyword indicating the units in which the expression should be\ninterpreted.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND;\n -> \'2009-01-01 00:00:00\'\nmysql> SELECT INTERVAL 1 DAY + \'2008-12-31\';\n -> \'2009-01-01\'\nmysql> SELECT \'2005-01-01\' - INTERVAL 1 SECOND;\n -> \'2004-12-31 23:59:59\'\nmysql> SELECT DATE_ADD(\'2000-12-31 23:59:59\',\n -> INTERVAL 1 SECOND);\n -> \'2001-01-01 00:00:00\'\nmysql> SELECT DATE_ADD(\'2010-12-31 23:59:59\',\n -> INTERVAL 1 DAY);\n -> \'2011-01-01 23:59:59\'\nmysql> SELECT DATE_ADD(\'2100-12-31 23:59:59\',\n -> INTERVAL \'1:1\' MINUTE_SECOND);\n -> \'2101-01-01 00:01:00\'\nmysql> SELECT DATE_SUB(\'2005-01-01 00:00:00\',\n -> INTERVAL \'1 1:1:1\' DAY_SECOND);\n -> \'2004-12-30 22:58:59\'\nmysql> SELECT DATE_ADD(\'1900-01-01 00:00:00\',\n -> INTERVAL \'-1 10\' DAY_HOUR);\n -> \'1899-12-30 14:00:00\'\nmysql> SELECT DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY);\n -> \'1997-12-02\'\nmysql> SELECT DATE_ADD(\'1992-12-31 23:59:59.000002\',\n -> INTERVAL \'1.999999\' SECOND_MICROSECOND);\n -> \'1993-01-01 00:00:01.000001\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (221,37,'ST_ENVELOPE','ST_Envelope(g)\n\nReturns the minimum bounding rectangle (MBR) for the geometry value g.\nThe result is returned as a Polygon value that is defined by the corner\npoints of the bounding box:\n\nPOLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\'))) |\n+----------------------------------------------------------------+\n| POLYGON((1 1,2 1,2 2,1 2,1 1)) |\n+----------------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (222,38,'LIKE','Syntax:\nexpr LIKE pat [ESCAPE \'escape_char\']\n\nPattern matching using a SQL pattern. Returns 1 (TRUE) or 0 (FALSE). If\neither expr or pat is NULL, the result is NULL.\n\nThe pattern need not be a literal string. For example, it can be\nspecified as a string expression or table column.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html\n\n','mysql> SELECT \'David!\' LIKE \'David_\';\n -> 1\nmysql> SELECT \'David!\' LIKE \'%D%v%\';\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (221,37,'ST_ENVELOPE','ST_Envelope(g)\n\nReturns the minimum bounding rectangle (MBR) for the geometry value g,\nor NULL if the argument is NULL. The result is returned as a Polygon\nvalue that is defined by the corner points of the bounding box:\n\nPOLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\'))) |\n+----------------------------------------------------------------+\n| POLYGON((1 1,2 1,2 2,1 2,1 1)) |\n+----------------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (222,38,'LIKE','Syntax:\nexpr LIKE pat [ESCAPE \'escape_char\']\n\nPattern matching using an SQL pattern. Returns 1 (TRUE) or 0 (FALSE).\nIf either expr or pat is NULL, the result is NULL.\n\nThe pattern need not be a literal string. For example, it can be\nspecified as a string expression or table column.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html\n\n','mysql> SELECT \'David!\' LIKE \'David_\';\n -> 1\nmysql> SELECT \'David!\' LIKE \'%D%v%\';\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (223,25,'MULTIPOINT','MultiPoint(pt1,pt2,...)\n\nConstructs a MultiPoint value using Point or WKB Point arguments.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (224,19,'>>','Syntax:\n>>\n\nShifts a longlong (BIGINT) number to the right.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html\n\n','mysql> SELECT 4 >> 2;\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (225,24,'FETCH','Syntax:\nFETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...\n\nThis statement fetches the next row for the SELECT statement associated\nwith the specified cursor (which must be open), and advances the cursor\npointer. If a row exists, the fetched columns are stored in the named\nvariables. The number of columns retrieved by the SELECT statement must\nmatch the number of output variables specified in the FETCH statement.\n\nIf no more rows are available, a No Data condition occurs with SQLSTATE\nvalue \'02000\'. To detect this condition, you can set up a handler for\nit (or for a NOT FOUND condition). For an example, see\nhttp://dev.mysql.com/doc/refman/5.6/en/cursors.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/fetch.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/fetch.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (225,24,'FETCH','Syntax:\nFETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...\n\nThis statement fetches the next row for the SELECT statement associated\nwith the specified cursor (which must be open), and advances the cursor\npointer. If a row exists, the fetched columns are stored in the named\nvariables. The number of columns retrieved by the SELECT statement must\nmatch the number of output variables specified in the FETCH statement.\n\nIf no more rows are available, a No Data condition occurs with SQLSTATE\nvalue \'02000\'. To detect this condition, you can set up a handler for\nit (or for a NOT FOUND condition). For an example, see\nhttp://dev.mysql.com/doc/refman/5.6/en/cursors.html.\n\nBe aware that another operation, such as a SELECT or another FETCH, may\nalso cause the handler to execute by raising the same condition. If it\nis necessary to distinguish which operation raised the condition, place\nthe operation within its own BEGIN ... END block so that it can be\nassociated with its own handler.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/fetch.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/fetch.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (226,30,'TRUE FALSE','The constants TRUE and FALSE evaluate to 1 and 0, respectively. The\nconstant names can be written in any lettercase.\n\nmysql> SELECT TRUE, true, FALSE, false;\n -> 1, 1, 0, 0\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/boolean-literals.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/boolean-literals.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (227,7,'MBRWITHIN','MBRWithin(g1,g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\nis within the minimum bounding rectangle of g2. This tests the opposite\nrelationship as MBRContains().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nmysql> SET @g2 = ST_GeomFromText(\'Polygon((0 0,0 5,5 5,5 0,0 0))\');\nmysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);\n+--------------------+--------------------+\n| MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |\n+--------------------+--------------------+\n| 1 | 0 |\n+--------------------+--------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mysql-specific.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (228,17,'SESSION_USER','Syntax:\nSESSION_USER()\n\nSESSION_USER() is a synonym for USER().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); @@ -316,11 +316,11 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (236,14,'IS_IPV4_COMPAT','Syntax:\nIS_IPV4_COMPAT(expr)\n\nThis function takes an IPv6 address represented in numeric form as a\nbinary string, as returned by INET6_ATON(). It returns 1 if the\nargument is a valid IPv4-compatible IPv6 address, 0 otherwise.\nIPv4-compatible addresses have the form ::ipv4_address.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV4_COMPAT(INET6_ATON(\'::10.0.5.9\'));\n -> 1\nmysql> SELECT IS_IPV4_COMPAT(INET6_ATON(\'::ffff:10.0.5.9\'));\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (237,40,'DROP FUNCTION','The DROP FUNCTION statement is used to drop stored functions and\nuser-defined functions (UDFs):\n\no For information about dropping stored functions, see [HELP DROP\n PROCEDURE].\n\no For information about dropping user-defined functions, see [HELP DROP\n FUNCTION UDF].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-function.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-function.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (238,4,'ST_POLYFROMTEXT','ST_PolyFromText(wkt[,srid]), ST_PolygonFromText(wkt[,srid])\n\nConstructs a Polygon value using its WKT representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (239,16,'STDDEV','Syntax:\nSTDDEV(expr)\n\nReturns the population standard deviation of expr. This function is\nprovided for compatibility with Oracle. The standard SQL function\nSTDDEV_POP() can be used instead.\n\nThis function returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (239,16,'STDDEV','Syntax:\nSTDDEV(expr)\n\nReturns the population standard deviation of expr. This function is\nprovided for compatibility with Oracle. The standard SQL function\nSTDDEV_POP() can be used instead.\n\nSTDDEV() returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (240,32,'PERIOD_ADD','Syntax:\nPERIOD_ADD(P,N)\n\nAdds N months to period P (in the format YYMM or YYYYMM). Returns a\nvalue in the format YYYYMM.\n\n*Note*: The period argument P is not a date value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_ADD(200801,2);\n -> 200803\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (241,38,'RIGHT','Syntax:\nRIGHT(str,len)\n\nReturns the rightmost len characters from the string str, or NULL if\nany argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT RIGHT(\'foobarbar\', 4);\n -> \'rbar\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (242,40,'DROP TABLESPACE','Syntax:\nDROP TABLESPACE tablespace_name\n ENGINE [=] engine_name\n\nThis statement drops a tablespace that was previously created using\nCREATE TABLESPACE (see [HELP CREATE TABLESPACE]).\n\n*Important*: The tablespace to be dropped must not contain any data\nfiles; in other words, before you can drop a tablespace, you must first\ndrop each of its data files using ALTER TABLESPACE ... DROP DATAFILE\n(see [HELP ALTER TABLESPACE]).\n\nThe ENGINE clause (required) specifies the storage engine used by the\ntablespace. Currently, the only accepted values for engine_name are NDB\nand NDBCLUSTER.\n\nDROP TABLESPACE is useful only with Disk Data storage for MySQL\nCluster. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-disk-data.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-tablespace.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (243,21,'CHECK TABLE','Syntax:\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {\n FOR UPGRADE\n | QUICK\n | FAST\n | MEDIUM\n | EXTENDED\n | CHANGED\n}\n\nCHECK TABLE checks a table or tables for errors. CHECK TABLE works for\nInnoDB, MyISAM, ARCHIVE, and CSV tables. For MyISAM tables, the key\nstatistics are updated as well.\n\nTo check a table, you must have some privilege for it.\n\nCHECK TABLE can also check views for problems, such as tables that are\nreferenced in the view definition that no longer exist.\n\nCHECK TABLE is supported for partitioned tables, and you can use ALTER\nTABLE ... CHECK PARTITION to check one or more partitions; for more\ninformation, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html.\n\nIn MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing\nthis statement. (Bug #16062608, Bug #16715809, Bug #69045)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/check-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/check-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (243,21,'CHECK TABLE','Syntax:\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {\n FOR UPGRADE\n | QUICK\n | FAST\n | MEDIUM\n | EXTENDED\n | CHANGED\n}\n\nCHECK TABLE checks a table or tables for errors. CHECK TABLE works for\nInnoDB, MyISAM, ARCHIVE, and CSV tables. For MyISAM tables, the key\nstatistics are updated as well.\n\nBefore running CHECK TABLE on InnoDB tables, see\nhttp://dev.mysql.com/doc/refman/5.6/en/check-table.html#check-table-inn\nodb.\n\nTo check a table, you must have some privilege for it.\n\nCHECK TABLE can also check views for problems, such as tables that are\nreferenced in the view definition that no longer exist.\n\nCHECK TABLE is supported for partitioned tables, and you can use ALTER\nTABLE ... CHECK PARTITION to check one or more partitions; for more\ninformation, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html.\n\nIn MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing\nthis statement. (Bug #16062608, Bug #16715809, Bug #69045)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/check-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/check-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (244,38,'BIN','Syntax:\nBIN(N)\n\nReturns a string representation of the binary value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,2). Returns\nNULL if N is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT BIN(12);\n -> \'1100\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (245,25,'MULTILINESTRING','MultiLineString(ls1,ls2,...)\n\nConstructs a MultiLineString value using LineString or WKB LineString\narguments.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (246,27,'SHOW RELAYLOG EVENTS','Syntax:\nSHOW RELAYLOG EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n\nShows the events in the relay log of a replication slave. If you do not\nspecify \'log_name\', the first relay log is displayed. This statement\nhas no effect on the master.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-relaylog-events.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-relaylog-events.html'); @@ -336,7 +336,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (256,33,'ST_POINTFROMWKB','ST_PointFromWKB(wkb[,srid])\n\nConstructs a Point value using its WKB representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (257,31,'ST_WITHIN','ST_Within(g1,g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially within g2. This\ntests the opposite relationship as ST_Contains().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (258,3,'ACOS','Syntax:\nACOS(X)\n\nReturns the arc cosine of X, that is, the value whose cosine is X.\nReturns NULL if X is not in the range -1 to 1.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT ACOS(1);\n -> 0\nmysql> SELECT ACOS(1.0001);\n -> NULL\nmysql> SELECT ACOS(0);\n -> 1.5707963267949\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (259,8,'ISOLATION','Syntax:\nSET [GLOBAL | SESSION] TRANSACTION\n transaction_characteristic [, transaction_characteristic] ...\n\ntransaction_characteristic:\n ISOLATION LEVEL level\n | READ WRITE\n | READ ONLY\n\nlevel:\n REPEATABLE READ\n | READ COMMITTED\n | READ UNCOMMITTED\n | SERIALIZABLE\n\nThis statement specifies transaction characteristics. It takes a list\nof one or more characteristic values separated by commas. These\ncharacteristics set the transaction isolation level or access mode. The\nisolation level is used for operations on InnoDB tables. The access\nmode may be specified as of MySQL 5.6.5 and indicates whether\ntransactions operate in read/write or read-only mode.\n\nIn addition, SET TRANSACTION can include an optional GLOBAL or SESSION\nkeyword to indicate the scope of the statement.\n\nScope of Transaction Characteristics\n\nYou can set transaction characteristics globally, for the current\nsession, or for the next transaction:\n\no With the GLOBAL keyword, the statement applies globally for all\n subsequent sessions. Existing sessions are unaffected.\n\no With the SESSION keyword, the statement applies to all subsequent\n transactions performed within the current session.\n\no Without any SESSION or GLOBAL keyword, the statement applies to the\n next (not started) transaction performed within the current session.\n Subsequent transactions revert to using the SESSION isolation level.\n\nA global change to transaction characteristics requires the SUPER\nprivilege. Any session is free to change its session characteristics\n(even in the middle of a transaction), or the characteristics for its\nnext transaction.\n\nSET TRANSACTION without GLOBAL or SESSION is not permitted while there\nis an active transaction:\n\nmysql> START TRANSACTION;\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\nERROR 1568 (25001): Transaction characteristics can\'t be changed\nwhile a transaction is in progress\n\nTo set the global default isolation level at server startup, use the\n--transaction-isolation=level option to mysqld on the command line or\nin an option file. Values of level for this option use dashes rather\nthan spaces, so the permissible values are READ-UNCOMMITTED,\nREAD-COMMITTED, REPEATABLE-READ, or SERIALIZABLE. For example, to set\nthe default isolation level to REPEATABLE READ, use these lines in the\n[mysqld] section of an option file:\n\n[mysqld]\ntransaction-isolation = REPEATABLE-READ\n\nIt is possible to check or set the global and session transaction\nisolation levels at runtime by using the tx_isolation system variable:\n\nSELECT @@GLOBAL.tx_isolation, @@tx_isolation;\nSET GLOBAL tx_isolation=\'REPEATABLE-READ\';\nSET SESSION tx_isolation=\'SERIALIZABLE\';\n\nSimilarly, to set the transaction access mode at server startup or at\nruntime, use the --transaction-read-only option or tx_read_only system\nvariable. By default, these are OFF (the mode is read/write) but can be\nset to ON for a default mode of read only.\n\nSetting the global or session value of tx_isolation or tx_read_only is\nequivalent to setting the isolation level or access mode with SET\nGLOBAL TRANSACTION or SET SESSION TRANSACTION.\n\nDetails and Usage of Isolation Levels\n\nInnoDB supports each of the transaction isolation levels described here\nusing different locking strategies. You can enforce a high degree of\nconsistency with the default REPEATABLE READ level, for operations on\ncrucial data where ACID compliance is important. Or you can relax the\nconsistency rules with READ COMMITTED or even READ UNCOMMITTED, in\nsituations such as bulk reporting where precise consistency and\nrepeatable results are less important than minimizing the amount of\noverhead for locking. SERIALIZABLE enforces even stricter rules than\nREPEATABLE READ, and is used mainly in specialized situations, such as\nwith XA transactions and for troubleshooting issues with concurrency\nand deadlocks.\n\nFor full information about how these isolation levels work with InnoDB\ntransactions, see\nhttp://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-model.html.\nIn particular, for additional information about InnoDB record-level\nlocks and how it uses them to execute various types of statements, see\nhttp://dev.mysql.com/doc/refman/5.6/en/innodb-record-level-locks.html\nand http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html.\n\nThe following list describes how MySQL supports the different\ntransaction levels. The list goes from the most commonly used level to\nthe least used.\n\no REPEATABLE READ\n\n This is the default isolation level for InnoDB. For consistent reads,\n there is an important difference from the READ COMMITTED isolation\n level: All consistent reads within the same transaction read the\n snapshot established by the first read. This convention means that if\n you issue several plain (nonlocking) SELECT statements within the\n same transaction, these SELECT statements are consistent also with\n respect to each other. See\n http://dev.mysql.com/doc/refman/5.6/en/innodb-consistent-read.html.\n\n For locking reads (SELECT with FOR UPDATE or LOCK IN SHARE MODE),\n UPDATE, and DELETE statements, locking depends on whether the\n statement uses a unique index with a unique search condition, or a\n range-type search condition. For a unique index with a unique search\n condition, InnoDB locks only the index record found, not the gap\n before it. For other search conditions, InnoDB locks the index range\n scanned, using gap locks or next-key locks to block insertions by\n other sessions into the gaps covered by the range.\n\no READ COMMITTED\n\n A somewhat Oracle-like isolation level with respect to consistent\n (nonlocking) reads: Each consistent read, even within the same\n transaction, sets and reads its own fresh snapshot. See\n http://dev.mysql.com/doc/refman/5.6/en/innodb-consistent-read.html.\n\n For locking reads (SELECT with FOR UPDATE or LOCK IN SHARE MODE),\n UPDATE statements, and DELETE statements, InnoDB locks only index\n records, not the gaps before them, and thus permits the free\n insertion of new records next to locked records.\n\n *Note*: In MySQL 5.6, when READ COMMITTED isolation level is used, or\n the deprecated innodb_locks_unsafe_for_binlog system variable is\n enabled, there is no InnoDB gap locking except for foreign-key\n constraint checking and duplicate-key checking. Also, record locks\n for nonmatching rows are released after MySQL has evaluated the WHERE\n condition. If you use READ COMMITTED or enable\n innodb_locks_unsafe_for_binlog, you must use row-based binary\n logging.\n\no READ UNCOMMITTED\n\n SELECT statements are performed in a nonlocking fashion, but a\n possible earlier version of a row might be used. Thus, using this\n isolation level, such reads are not consistent. This is also called a\n dirty read. Otherwise, this isolation level works like READ\n COMMITTED.\n\no SERIALIZABLE\n\n This level is like REPEATABLE READ, but InnoDB implicitly converts\n all plain SELECT statements to SELECT ... LOCK IN SHARE MODE if\n autocommitis disabled. If autocommit is enabled, the SELECT is its\n own transaction. It therefore is known to be read only and can be\n serialized if performed as a consistent (nonlocking) read and need\n not block for other transactions. (To force a plain SELECT to block\n if other transactions have modified the selected rows, disable\n autocommit.)\n\nTransaction Access Mode\n\nAs of MySQL 5.6.5, the transaction access mode may be specified with\nSET TRANSACTION. By default, a transaction takes place in read/write\nmode, with both reads and writes permitted to tables used in the\ntransaction. This mode may be specified explicitly using an access mode\nof READ WRITE.\n\nIf the transaction access mode is set to READ ONLY, changes to tables\nare prohibited. This may enable storage engines to make performance\nimprovements that are possible when writes are not permitted.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the\nsame statement.\n\nIn read-only mode, it remains possible to change tables created with\nthe TEMPORARY keyword using DML statements. Changes made with DDL\nstatements are not permitted, just as with permanent tables.\n\nThe READ WRITE and READ ONLY access modes also may be specified for an\nindividual transaction using the START TRANSACTION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (259,8,'ISOLATION','Syntax:\nSET [GLOBAL | SESSION] TRANSACTION\n transaction_characteristic [, transaction_characteristic] ...\n\ntransaction_characteristic:\n ISOLATION LEVEL level\n | READ WRITE\n | READ ONLY\n\nlevel:\n REPEATABLE READ\n | READ COMMITTED\n | READ UNCOMMITTED\n | SERIALIZABLE\n\nThis statement specifies transaction characteristics. It takes a list\nof one or more characteristic values separated by commas. These\ncharacteristics set the transaction isolation level or access mode. The\nisolation level is used for operations on InnoDB tables. The access\nmode may be specified as of MySQL 5.6.5 and indicates whether\ntransactions operate in read/write or read-only mode.\n\nIn addition, SET TRANSACTION can include an optional GLOBAL or SESSION\nkeyword to indicate the scope of the statement.\n\nScope of Transaction Characteristics\n\nYou can set transaction characteristics globally, for the current\nsession, or for the next transaction:\n\no With the GLOBAL keyword, the statement applies globally for all\n subsequent sessions. Existing sessions are unaffected.\n\no With the SESSION keyword, the statement applies to all subsequent\n transactions performed within the current session.\n\no Without any SESSION or GLOBAL keyword, the statement applies to the\n next (not started) transaction performed within the current session.\n Subsequent transactions revert to using the SESSION isolation level.\n\nA global change to transaction characteristics requires the SUPER\nprivilege. Any session is free to change its session characteristics\n(even in the middle of a transaction), or the characteristics for its\nnext transaction.\n\nSET TRANSACTION without GLOBAL or SESSION is not permitted while there\nis an active transaction:\n\nmysql> START TRANSACTION;\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\nERROR 1568 (25001): Transaction characteristics can\'t be changed\nwhile a transaction is in progress\n\nTo set the global default isolation level at server startup, use the\n--transaction-isolation=level option to mysqld on the command line or\nin an option file. Values of level for this option use dashes rather\nthan spaces, so the permissible values are READ-UNCOMMITTED,\nREAD-COMMITTED, REPEATABLE-READ, or SERIALIZABLE. For example, to set\nthe default isolation level to REPEATABLE READ, use these lines in the\n[mysqld] section of an option file:\n\n[mysqld]\ntransaction-isolation = REPEATABLE-READ\n\nIt is possible to check or set the global and session transaction\nisolation levels at runtime by using the tx_isolation system variable:\n\nSELECT @@GLOBAL.tx_isolation, @@tx_isolation;\nSET GLOBAL tx_isolation=\'REPEATABLE-READ\';\nSET SESSION tx_isolation=\'SERIALIZABLE\';\n\nSimilarly, to set the transaction access mode at server startup or at\nruntime, use the --transaction-read-only option or tx_read_only system\nvariable. By default, these are OFF (the mode is read/write) but can be\nset to ON for a default mode of read only.\n\nSetting the global or session value of tx_isolation or tx_read_only is\nequivalent to setting the isolation level or access mode with SET\nGLOBAL TRANSACTION or SET SESSION TRANSACTION.\n\nTransaction Isolation Levels\n\nFor information about transaction isolation levels, see\nhttp://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-isolation-lev\nels.html.\n\nTransaction Access Mode\n\nAs of MySQL 5.6.5, the transaction access mode may be specified with\nSET TRANSACTION. By default, a transaction takes place in read/write\nmode, with both reads and writes permitted to tables used in the\ntransaction. This mode may be specified explicitly using an access mode\nof READ WRITE.\n\nIf the transaction access mode is set to READ ONLY, changes to tables\nare prohibited. This may enable storage engines to make performance\nimprovements that are possible when writes are not permitted.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the\nsame statement.\n\nIn read-only mode, it remains possible to change tables created with\nthe TEMPORARY keyword using DML statements. Changes made with DDL\nstatements are not permitted, just as with permanent tables.\n\nThe READ WRITE and READ ONLY access modes also may be specified for an\nindividual transaction using the START TRANSACTION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (260,3,'SIN','Syntax:\nSIN(X)\n\nReturns the sine of X, where X is given in radians.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT SIN(PI());\n -> 1.2246063538224e-16\nmysql> SELECT ROUND(SIN(PI()));\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (261,26,'ST_BUFFER','ST_Buffer(g,d)\n\nReturns a geometry that represents all points whose distance from the\ngeometry value g is less than or equal to a distance of d.\n\nST_Buffer() supports negative distances for polygons, multipolygons,\nand geometry collections containing polygons or multipolygons. For\npoint, multipoint, linestring, multilinestring, and geometry\ncollections not containing any polygons or multipolygons, ST_Buffer()\nwith a negative distance returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (262,26,'BUFFER','Buffer(g,d)\n\nST_Buffer() and Buffer() are synonyms. For more information, see the\ndescription of ST_Buffer().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html'); @@ -348,13 +348,13 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (268,21,'REPAIR TABLE','Syntax:\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [QUICK] [EXTENDED] [USE_FRM]\n\nREPAIR TABLE repairs a possibly corrupted table, for certain storage\nengines only. By default, it has the same effect as myisamchk --recover\ntbl_name. REPAIR TABLE works for MyISAM, ARCHIVE, and CSV tables. See\nhttp://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html\nhttp://dev.mysql.com/doc/refman/5.6/en/archive-storage-engine.html, and\nhttp://dev.mysql.com/doc/refman/5.6/en/csv-storage-engine.html. This\nstatement does not work with views.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nREPAIR TABLE is supported for partitioned tables. However, the USE_FRM\noption cannot be used with this statement on a partitioned table.\n\nIn MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing\nthis statement. (Bug #16062608, Bug #16715809, Bug #69045)\n\nYou can use ALTER TABLE ... REPAIR PARTITION to repair one or more\npartitions; for more information, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/repair-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/repair-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (269,18,'MERGE','The MERGE storage engine, also known as the MRG_MyISAM engine, is a\ncollection of identical MyISAM tables that can be used as one.\n"Identical" means that all tables have identical column and index\ninformation. You cannot merge MyISAM tables in which the columns are\nlisted in a different order, do not have exactly the same columns, or\nhave the indexes in different order. However, any or all of the MyISAM\ntables can be compressed with myisampack. See\nhttp://dev.mysql.com/doc/refman/5.6/en/myisampack.html. Differences in\ntable options such as AVG_ROW_LENGTH, MAX_ROWS, or PACK_KEYS do not\nmatter.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/merge-storage-engine.html\n\n','mysql> CREATE TABLE t1 (\n -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> message CHAR(20)) ENGINE=MyISAM;\nmysql> CREATE TABLE t2 (\n -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> message CHAR(20)) ENGINE=MyISAM;\nmysql> INSERT INTO t1 (message) VALUES (\'Testing\'),(\'table\'),(\'t1\');\nmysql> INSERT INTO t2 (message) VALUES (\'Testing\'),(\'table\'),(\'t2\');\nmysql> CREATE TABLE total (\n -> a INT NOT NULL AUTO_INCREMENT,\n -> message CHAR(20), INDEX(a))\n -> ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;\n','http://dev.mysql.com/doc/refman/5.6/en/merge-storage-engine.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (270,31,'ST_DISTANCE','ST_Distance(g1,g2)\n\nReturns the distance between g1 and g2.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @g1 = POINT(1,1), @g2 = POINT(2,2);\nmysql> SELECT ST_Distance(@g1, @g2);\n+-----------------------+\n| ST_Distance(@g1, @g2) |\n+-----------------------+\n| 1.4142135623730951 |\n+-----------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (271,40,'CREATE TABLE','Syntax:\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...)\n [table_options]\n [partition_options]\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)]\n [table_options]\n [partition_options]\n select_statement\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_tbl_name | (LIKE old_tbl_name) }\n\ncreate_definition:\n col_name column_definition\n | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)\n [index_option] ...\n | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]\n [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name,...) reference_definition\n | CHECK (expr)\n\ncolumn_definition:\n data_type [NOT NULL | NULL] [DEFAULT default_value]\n [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]\n [COMMENT \'string\']\n [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]\n [STORAGE {DISK|MEMORY|DEFAULT}]\n [reference_definition]\n\ndata_type:\n BIT[(length)]\n | TINYINT[(length)] [UNSIGNED] [ZEROFILL]\n | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]\n | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]\n | INT[(length)] [UNSIGNED] [ZEROFILL]\n | INTEGER[(length)] [UNSIGNED] [ZEROFILL]\n | BIGINT[(length)] [UNSIGNED] [ZEROFILL]\n | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | DATE\n | TIME[(fsp)]\n | TIMESTAMP[(fsp)]\n | DATETIME[(fsp)]\n | YEAR\n | CHAR[(length)] [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | VARCHAR(length) [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | BINARY[(length)]\n | VARBINARY(length)\n | TINYBLOB\n | BLOB\n | MEDIUMBLOB\n | LONGBLOB\n | TINYTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | TEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | MEDIUMTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | LONGTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | ENUM(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | SET(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | spatial_type\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nreference_definition:\n REFERENCES tbl_name (index_col_name,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n ENGINE [=] engine_name\n | AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | CONNECTION [=] \'connect_string\'\n | DATA DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | INDEX DIRECTORY [=] \'absolute path to directory\'\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)\n | RANGE{(expr) | COLUMNS(column_list)}\n | LIST{(expr) | COLUMNS(column_list)} }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\n\npartition_definition:\n PARTITION partition_name\n [VALUES \n {LESS THAN {(expr | value_list) | MAXVALUE} \n | \n IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n [(subpartition_definition [, subpartition_definition] ...)]\n\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n\nselect_statement:\n [IGNORE | REPLACE] [AS] SELECT ... (Some valid select statement)\n\nCREATE TABLE creates a table with the given name. You must have the\nCREATE privilege for the table.\n\nRules for permissible table names are given in\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html. By default,\nthe table is created in the default database, using the InnoDB storage\nengine. An error occurs if the table exists, if there is no default\ndatabase, or if the database does not exist.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (271,40,'CREATE TABLE','Syntax:\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...)\n [table_options]\n [partition_options]\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)]\n [table_options]\n [partition_options]\n [IGNORE | REPLACE]\n [AS] query_expression\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_tbl_name | (LIKE old_tbl_name) }\n\ncreate_definition:\n col_name column_definition\n | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)\n [index_option] ...\n | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]\n [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name,...) reference_definition\n | CHECK (expr)\n\ncolumn_definition:\n data_type [NOT NULL | NULL] [DEFAULT default_value]\n [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]\n [COMMENT \'string\']\n [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]\n [STORAGE {DISK|MEMORY|DEFAULT}]\n [reference_definition]\n\ndata_type:\n BIT[(length)]\n | TINYINT[(length)] [UNSIGNED] [ZEROFILL]\n | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]\n | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]\n | INT[(length)] [UNSIGNED] [ZEROFILL]\n | INTEGER[(length)] [UNSIGNED] [ZEROFILL]\n | BIGINT[(length)] [UNSIGNED] [ZEROFILL]\n | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | DATE\n | TIME[(fsp)]\n | TIMESTAMP[(fsp)]\n | DATETIME[(fsp)]\n | YEAR\n | CHAR[(length)] [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | VARCHAR(length) [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | BINARY[(length)]\n | VARBINARY(length)\n | TINYBLOB\n | BLOB\n | MEDIUMBLOB\n | LONGBLOB\n | TINYTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | TEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | MEDIUMTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | LONGTEXT [BINARY]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | ENUM(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | SET(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | spatial_type\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nreference_definition:\n REFERENCES tbl_name (index_col_name,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n ENGINE [=] engine_name\n | AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | CONNECTION [=] \'connect_string\'\n | DATA DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | INDEX DIRECTORY [=] \'absolute path to directory\'\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)\n | RANGE{(expr) | COLUMNS(column_list)}\n | LIST{(expr) | COLUMNS(column_list)} }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\n\npartition_definition:\n PARTITION partition_name\n [VALUES\n {LESS THAN {(expr | value_list) | MAXVALUE}\n |\n IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n [(subpartition_definition [, subpartition_definition] ...)]\n\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n\nquery_expression:\n SELECT ... (Some valid select or union statement)\n\nCREATE TABLE creates a table with the given name. You must have the\nCREATE privilege for the table.\n\nRules for permissible table names are given in\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html. By default,\nthe table is created in the default database, using the InnoDB storage\nengine. An error occurs if the table exists, if there is no default\ndatabase, or if the database does not exist.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (272,32,'MICROSECOND','Syntax:\nMICROSECOND(expr)\n\nReturns the microseconds from the time or datetime expression expr as a\nnumber in the range from 0 to 999999.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MICROSECOND(\'12:00:00.123456\');\n -> 123456\nmysql> SELECT MICROSECOND(\'2009-12-31 23:59:59.000010\');\n -> 10\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (273,40,'CREATE SERVER','Syntax:\nCREATE SERVER server_name\n FOREIGN DATA WRAPPER wrapper_name\n OPTIONS (option [, option] ...)\n\noption:\n { HOST character-literal\n | DATABASE character-literal\n | USER character-literal\n | PASSWORD character-literal\n | SOCKET character-literal\n | OWNER character-literal\n | PORT numeric-literal }\n\nThis statement creates the definition of a server for use with the\nFEDERATED storage engine. The CREATE SERVER statement creates a new row\nin the servers table in the mysql database. This statement requires the\nSUPER privilege.\n\nThe server_name should be a unique reference to the server. Server\ndefinitions are global within the scope of the server, it is not\npossible to qualify the server definition to a specific database.\nserver_name has a maximum length of 64 characters (names longer than 64\ncharacters are silently truncated), and is case insensitive. You may\nspecify the name as a quoted string.\n\nThe wrapper_name should be mysql, and may be quoted with single\nquotation marks. Other values for wrapper_name are not currently\nsupported.\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are\nsilently truncated to 64 characters. Numeric literals must be a number\nbetween 0 and 9999, default value is 0.\n\n*Note*: The OWNER option is currently not applied, and has no effect on\nthe ownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table\nthat can later be used with the CREATE TABLE statement when creating a\nFEDERATED table. The options that you specify will be used to populate\nthe columns in the mysql.servers table. The table columns are\nServer_name, Host, Db, Username, Password, Port and Socket.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-server.html\n\n','CREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\n','http://dev.mysql.com/doc/refman/5.6/en/create-server.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (274,33,'ST_POLYFROMWKB','ST_PolyFromWKB(wkb[,srid]), ST_PolygonFromWKB(wkb[,srid])\n\nConstructs a Polygon value using its WKB representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (275,32,'MAKETIME','Syntax:\nMAKETIME(hour,minute,second)\n\nReturns a time value calculated from the hour, minute, and second\narguments.\n\nAs of MySQL 5.6.4, the second argument can have a fractional part.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MAKETIME(12,15,30);\n -> \'12:15:30\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (276,32,'CURDATE','Syntax:\nCURDATE()\n\nReturns the current date as a value in \'YYYY-MM-DD\' or YYYYMMDD format,\ndepending on whether the function is used in a string or numeric\ncontext.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT CURDATE();\n -> \'2008-06-13\'\nmysql> SELECT CURDATE() + 0;\n -> 20080613\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (277,10,'SET PASSWORD','Syntax:\nSET PASSWORD [FOR user] = password_option\n\npassword_option: {\n PASSWORD(\'auth_string\')\n | OLD_PASSWORD(\'auth_string\')\n | \'hash_string\'\n}\n\nThe SET PASSWORD statement assigns a password to a MySQL user account:\n\no With no FOR user clause, this statement sets the password for the\n current user:\n\nSET PASSWORD = password_option;\n\n Any client who connects to the server using a nonanonymous account\n can change the password for that account. To see which account the\n server authenticated you as, invoke the CURRENT_USER() function:\n\nSELECT CURRENT_USER();\n\n Permitted old_passwords values are described later in this section.\n\no With a FOR user clause, this statement sets the password for the\n named account, which must exist:\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = password_option;\n\n In this case, you must have the UPDATE privilege for the mysql\n database.\n\nWhen the read_only system variable is enabled, SET PASSWORD requires\nthe SUPER privilege in addition to any other required privileges.\n\nIf a FOR user clause is given, the account name uses the format\ndescribed in http://dev.mysql.com/doc/refman/5.6/en/account-names.html.\nThe user value should be given as \'user_name\'@\'host_name\', where\n\'user_name\' and \'host_name\' are exactly as listed in the User and Host\ncolumns of the account\'s mysql.user table row. If you specify only a\nuser name, a host name of \'%\' is used. For example, to set the password\nfor an account with User and Host column values of \'bob\' and\n\'%.example.org\', write the statement like this:\n\nSET PASSWORD FOR \'bob\'@\'%.example.org\' = PASSWORD(\'cleartext password\');\n\nThe password can be specified in these ways:\n\no Using the PASSWORD() function\n\n The \'auth_string\' function argument is the cleartext (unencrypted)\n password. PASSWORD() hashes the password and returns the encrypted\n password string for storage in the mysql.user account row.\n\n The old_passwords system variable value determines the hashing method\n used by PASSWORD(). If SET PASSWORD rejects the password as not being\n in the correct format, it may be necessary to change old_passwords to\n change the hashing method. For example, if the account uses the\n mysql_native_password plugin, the old_passwords value must be 0:\n\nSET old_passwords = 0;\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'mypass\');\n\n If the old_passwords value differs from that required by the\n authentication plugin, the hashed password value returned by\n PASSWORD() is not acceptable for that plugin, and attempts to set the\n password produce an error. For example:\n\nmysql> SET old_passwords = 1;\nmysql> SET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'mypass\');\nERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number\n\n Permitted old_passwords values are described later in this section.\n\no Using the OLD_PASSWORD() function:\n\n The \'auth_string\' function argument is the cleartext (unencrypted)\n password. OLD_PASSWORD() hashes the password using pre-4.1 hashing\n and returns the encrypted password string for storage in the\n mysql.user account row. This hashing method is appropriate only for\n accounts that use the mysql_old_password authentication plugin.\n\no Using an already encrypted password string\n\n The password is specified as a string literal. It must represent the\n already encrypted password value, in the hash format required by the\n authentication method used for the account.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-password.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-password.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (277,10,'SET PASSWORD','Syntax:\nSET PASSWORD [FOR user] = password_option\n\npassword_option: {\n PASSWORD(\'auth_string\')\n | OLD_PASSWORD(\'auth_string\')\n | \'hash_string\'\n}\n\nThe SET PASSWORD statement assigns a password to a MySQL user account,\nspecified as either a cleartext (unencrypted) or encrypted value:\n\no \'auth_string\' represents a cleartext password.\n\no \'hash_string\' represents an encrypted password.\n\nSET PASSWORD can be used with or without an explicitly named user\naccount:\n\no With a FOR user clause, the statement sets the password for the named\n account, which must exist:\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = password_option;\n\n In this case, you must have the UPDATE privilege for the mysql\n database.\n\no With no FOR user clause, the statement sets the password for the\n current user:\n\nSET PASSWORD = password_option;\n\n Any client who connects to the server using a nonanonymous account\n can change the password for that account. To see which account the\n server authenticated you as, invoke the CURRENT_USER() function:\n\nSELECT CURRENT_USER();\n\nWhen the read_only system variable is enabled, SET PASSWORD requires\nthe SUPER privilege in addition to any other required privileges.\n\nIf a FOR user clause is given, the account name uses the format\ndescribed in http://dev.mysql.com/doc/refman/5.6/en/account-names.html.\nThe user value should be given as \'user_name\'@\'host_name\', where\n\'user_name\' and \'host_name\' are exactly as listed in the User and Host\ncolumns of the account\'s mysql.user table row. If you specify only a\nuser name, a host name of \'%\' is used. For example, to set the password\nfor an account with User and Host column values of \'bob\' and\n\'%.example.org\', write the statement like this:\n\nSET PASSWORD FOR \'bob\'@\'%.example.org\' = PASSWORD(\'auth_string\');\n\nThe password can be specified in these ways:\n\no Using the PASSWORD() function\n\n The \'auth_string\' function argument is the cleartext (unencrypted)\n password. PASSWORD() hashes the password and returns the encrypted\n password string for storage in the mysql.user account row.\n\n The PASSWORD() function hashes the password using the hashing method\n determined by the value of the old_passwords system variable value.\n If SET PASSWORD rejects the hashed password value returned by\n PASSWORD() as not being in the correct format, it may be necessary to\n change old_passwords to change the hashing method. For example, if\n the account uses the mysql_native_password plugin, the old_passwords\n value must be 0:\n\nSET old_passwords = 0;\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'mypass\');\n\n If the old_passwords value differs from that required by the\n authentication plugin, the hashed password value returned by\n PASSWORD() is not acceptable for that plugin, and attempts to set the\n password produce an error. For example:\n\nmysql> SET old_passwords = 1;\nmysql> SET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'mypass\');\nERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number\n\n Permitted old_passwords values are described later in this section.\n\no Using the OLD_PASSWORD() function:\n\n The \'auth_string\' function argument is the cleartext (unencrypted)\n password. OLD_PASSWORD() hashes the password using pre-4.1 hashing\n and returns the encrypted password string for storage in the\n mysql.user account row. This hashing method is appropriate only for\n accounts that use the mysql_old_password authentication plugin.\n\no Using an already encrypted password string\n\n The password is specified as a string literal. It must represent the\n already encrypted password value, in the hash format required by the\n authentication method used for the account.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-password.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-password.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (278,17,'DATABASE','Syntax:\nDATABASE()\n\nReturns the default (current) database name as a string in the utf8\ncharacter set. If there is no default database, DATABASE() returns\nNULL. Within a stored routine, the default database is the database\nthat the routine is associated with, which is not necessarily the same\nas the database that is the default in the calling context.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT DATABASE();\n -> \'test\'\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (279,6,'IF FUNCTION','Syntax:\nIF(expr1,expr2,expr3)\n\nIf expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns\nexpr2; otherwise it returns expr3. IF() returns a numeric or string\nvalue, depending on the context in which it is used.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html\n\n','mysql> SELECT IF(1>2,2,3);\n -> 3\nmysql> SELECT IF(1<2,\'yes\',\'no\');\n -> \'yes\'\nmysql> SELECT IF(STRCMP(\'test\',\'test1\'),\'no\',\'yes\');\n -> \'no\'\n','http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (280,33,'POINTFROMWKB','PointFromWKB(wkb[,srid])\n\nST_PointFromWKB() and PointFromWKB() are synonyms. For more\ninformation, see the description of ST_PointFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); @@ -371,10 +371,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (291,38,'MAKE_SET','Syntax:\nMAKE_SET(bits,str1,str2,...)\n\nReturns a set value (a string containing substrings separated by ","\ncharacters) consisting of the strings that have the corresponding bit\nin bits set. str1 corresponds to bit 0, str2 to bit 1, and so on. NULL\nvalues in str1, str2, ... are not appended to the result.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT MAKE_SET(1,\'a\',\'b\',\'c\');\n -> \'a\'\nmysql> SELECT MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\');\n -> \'hello,world\'\nmysql> SELECT MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\');\n -> \'hello\'\nmysql> SELECT MAKE_SET(0,\'a\',\'b\',\'c\');\n -> \'\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (292,38,'FIND_IN_SET','Syntax:\nFIND_IN_SET(str,strlist)\n\nReturns a value in the range of 1 to N if the string str is in the\nstring list strlist consisting of N substrings. A string list is a\nstring composed of substrings separated by "," characters. If the first\nargument is a constant string and the second is a column of type SET,\nthe FIND_IN_SET() function is optimized to use bit arithmetic. Returns\n0 if str is not in strlist or if strlist is the empty string. Returns\nNULL if either argument is NULL. This function does not work properly\nif the first argument contains a comma (",") character.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT FIND_IN_SET(\'b\',\'a,b,c,d\');\n -> 2\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (293,16,'MIN','Syntax:\nMIN([DISTINCT] expr)\n\nReturns the minimum value of expr. MIN() may take a string argument; in\nsuch cases, it returns the minimum string value. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html. The DISTINCT\nkeyword can be used to find the minimum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nMIN() returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','mysql> SELECT student_name, MIN(test_score), MAX(test_score)\n -> FROM student\n -> GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (294,28,'REPLACE','Syntax:\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)] \n [(col_name,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)] \n SET col_name={expr | DEFAULT}, ...\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)] \n [(col_name,...)]\n SELECT ...\n\nREPLACE works exactly like INSERT, except that if an old row in the\ntable has the same value as a new row for a PRIMARY KEY or a UNIQUE\nindex, the old row is deleted before the new row is inserted. See [HELP\nINSERT].\n\nREPLACE is a MySQL extension to the SQL standard. It either inserts, or\ndeletes and inserts. For another MySQL extension to standard SQL---that\neither inserts or updates---see\nhttp://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html.\n\n*Note*: REPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE\nindex. Otherwise, it becomes equivalent to INSERT, because there is no\nindex to be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values specified in the\nREPLACE statement. Any missing columns are set to their default values,\njust as happens for INSERT. You cannot refer to values from the current\nrow and use them in the new row. If you use an assignment such as SET\ncol_name = col_name + 1, the reference to the column name on the right\nhand side is treated as DEFAULT(col_name), so the assignment is\nequivalent to SET col_name = DEFAULT(col_name) + 1.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for\nthe table.\n\nBeginning with MySQL 5.6.2, REPLACE supports explicit partition\nselection using the PARTITION option with a comma-separated list of\nnames of partitions, subpartitions, or both. As with INSERT, if it is\nnot possible to insert the new row into any of these partitions or\nsubpartitions, the REPLACE statement fails with the error Found a row\nnot matching the given partition set. See\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html, for\nmore information.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/replace.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/replace.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (294,28,'REPLACE','Syntax:\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n [(col_name,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n SET col_name={expr | DEFAULT}, ...\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n [(col_name,...)]\n SELECT ...\n\nREPLACE works exactly like INSERT, except that if an old row in the\ntable has the same value as a new row for a PRIMARY KEY or a UNIQUE\nindex, the old row is deleted before the new row is inserted. See [HELP\nINSERT].\n\nREPLACE is a MySQL extension to the SQL standard. It either inserts, or\ndeletes and inserts. For another MySQL extension to standard SQL---that\neither inserts or updates---see\nhttp://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html.\n\n*Note*: REPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE\nindex. Otherwise, it becomes equivalent to INSERT, because there is no\nindex to be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values specified in the\nREPLACE statement. Any missing columns are set to their default values,\njust as happens for INSERT. You cannot refer to values from the current\nrow and use them in the new row. If you use an assignment such as SET\ncol_name = col_name + 1, the reference to the column name on the right\nhand side is treated as DEFAULT(col_name), so the assignment is\nequivalent to SET col_name = DEFAULT(col_name) + 1.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for\nthe table.\n\nBeginning with MySQL 5.6.2, REPLACE supports explicit partition\nselection using the PARTITION option with a comma-separated list of\nnames of partitions, subpartitions, or both. As with INSERT, if it is\nnot possible to insert the new row into any of these partitions or\nsubpartitions, the REPLACE statement fails with the error Found a row\nnot matching the given partition set. See\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html, for\nmore information.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/replace.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/replace.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (295,32,'CURRENT_TIMESTAMP','Syntax:\nCURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp])\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (296,26,'ST_SYMDIFFERENCE','ST_SymDifference(g1, g2)\n\nReturns a geometry that represents the point set symmetric difference\nof the geometry values g1 and g2, which is defined as:\n\ng1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)\n\nOr, in function call notation:\n\nST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = POINT(1,1), @g2 = POINT(2,2);\nmysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));\n+---------------------------------------+\n| ST_AsText(ST_SymDifference(@g1, @g2)) |\n+---------------------------------------+\n| MULTIPOINT(1 1,2 2) |\n+---------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (297,7,'GTID_SUBSET','Syntax:\nGTID_SUBSET(subset,set)\n\nGiven two sets of global transaction IDs subset and set, returns true\n(1) if all GTIDs in subset are also in set. Returns false (0)\notherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 0\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (297,7,'GTID_SUBSET','Syntax:\nGTID_SUBSET(subset,set)\n\nGiven two sets of global transaction IDs subset and set, returns true\n(1) if all GTIDs in subset are also in set. Returns false (0)\notherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 0\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (298,16,'VAR_SAMP','Syntax:\nVAR_SAMP(expr)\n\nReturns the sample variance of expr. That is, the denominator is the\nnumber of rows minus one.\n\nVAR_SAMP() returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (299,23,'DATETIME','DATETIME[(fsp)]\n\nA date and time combination. The supported range is \'1000-01-01\n00:00:00.000000\' to \'9999-12-31 23:59:59.999999\'. MySQL displays\nDATETIME values in \'YYYY-MM-DD HH:MM:SS[.fraction]\' format, but permits\nassignment of values to DATETIME columns using either strings or\nnumbers.\n\nAs of MySQL 5.6.4, an optional fsp value in the range from 0 to 6 may\nbe given to specify fractional seconds precision. A value of 0\nsignifies that there is no fractional part. If omitted, the default\nprecision is 0.\n\nAs of MySQL 5.6.5, automatic initialization and updating to the current\ndate and time for DATETIME columns can be specified using DEFAULT and\nON UPDATE column definition clauses, as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (300,23,'INTEGER','INTEGER[(M)] [UNSIGNED] [ZEROFILL]\n\nThis type is a synonym for INT.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); @@ -386,12 +386,12 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (306,32,'WEEK','Syntax:\nWEEK(date[,mode])\n\nThis function returns the week number for date. The two-argument form\nof WEEK() enables you to specify whether the week starts on Sunday or\nMonday and whether the return value should be in the range from 0 to 53\nor from 1 to 53. If the mode argument is omitted, the value of the\ndefault_week_format system variable is used. See\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT WEEK(\'2008-02-20\');\n -> 7\nmysql> SELECT WEEK(\'2008-02-20\',0);\n -> 7\nmysql> SELECT WEEK(\'2008-02-20\',1);\n -> 8\nmysql> SELECT WEEK(\'2008-12-31\',1);\n -> 53\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (307,22,'DROP FUNCTION UDF','Syntax:\nDROP FUNCTION function_name\n\nThis statement drops the user-defined function (UDF) named\nfunction_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql\ndatabase. This is because DROP FUNCTION removes a row from the\nmysql.func system table that records the function\'s name, type, and\nshared library name.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-function-udf.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (308,38,'UPDATEXML','Syntax:\nUpdateXML(xml_target, xpath_expr, new_xml)\n\nThis function replaces a single portion of a given fragment of XML\nmarkup xml_target with a new XML fragment new_xml, and then returns the\nchanged XML. The portion of xml_target that is replaced matches an\nXPath expression xpath_expr supplied by the user. In MySQL 5.6.6 and\nearlier, the XPath expression could contain at most 127 characters.\nThis limitation is lifted in MySQL 5.6.7. (Bug #13007062, Bug #62429)\n\nIf no expression matching xpath_expr is found, or if multiple matches\nare found, the function returns the original xml_target XML fragment.\nAll three arguments should be strings.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html\n\n','mysql> SELECT\n -> UpdateXML(\'ccc\', \'/a\', \'fff\') AS val1,\n -> UpdateXML(\'ccc\', \'/b\', \'fff\') AS val2,\n -> UpdateXML(\'ccc\', \'//b\', \'fff\') AS val3,\n -> UpdateXML(\'ccc\', \'/a/d\', \'fff\') AS val4,\n -> UpdateXML(\'ccc\', \'/a/d\', \'fff\') AS val5\n -> \\G\n\n*************************** 1. row ***************************\nval1: fff\nval2: ccc\nval3: fff\nval4: cccfff\nval5: ccc\n','http://dev.mysql.com/doc/refman/5.6/en/xml-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (309,8,'RESET SLAVE','Syntax:\nRESET SLAVE [ALL]\n\nRESET SLAVE makes the slave forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean\nstart: It clears the master info and relay log info repositories,\ndeletes all the relay log files, and starts a new relay log file. It\nalso resets to 0 the replication delay specified with the MASTER_DELAY\noption to CHANGE MASTER TO. To use RESET SLAVE, the slave replication\nthreads must be stopped (use STOP SLAVE if necessary).\n\n*Note*: All relay log files are deleted, even if they have not been\ncompletely executed by the slave SQL thread. (This is a condition\nlikely to exist on a replication slave if you have issued a STOP SLAVE\nstatement or if the slave is highly loaded.)\n\nIn MySQL 5.6 (unlike the case in MySQL 5.1 and earlier), RESET SLAVE\ndoes not change any replication connection parameters such as master\nhost, master port, master user, or master password, which are retained\nin memory. This means that START SLAVE can be issued without requiring\na CHANGE MASTER TO statement following RESET SLAVE.\n\nConnection parameters are reset if the slave mysqld is shut down\nfollowing RESET SLAVE. In MySQL 5.6.3 and later, you can instead use\nRESET SLAVE ALL to reset these connection parameters (Bug #11809016).\n\nRESET SLAVE ALL does not clear the IGNORE_SERVER_IDS list set by CHANGE\nMASTER TO. This issue is fixed in MySQL 5.7. (Bug #18816897)\n\nIn MySQL 5.6.7 and later, RESET SLAVE causes an implicit commit of an\nongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nIf the slave SQL thread was in the middle of replicating temporary\ntables when it was stopped, and RESET SLAVE is issued, these replicated\ntemporary tables are deleted on the slave.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/reset-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/reset-slave.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (309,8,'RESET SLAVE','Syntax:\nRESET SLAVE [ALL]\n\nRESET SLAVE makes the slave forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean\nstart: It clears the master info and relay log info repositories,\ndeletes all the relay log files, and starts a new relay log file. It\nalso resets to 0 the replication delay specified with the MASTER_DELAY\noption to CHANGE MASTER TO. To use RESET SLAVE, the slave replication\nthreads must be stopped (use STOP SLAVE if necessary).\n\n*Note*: All relay log files are deleted, even if they have not been\ncompletely executed by the slave SQL thread. (This is a condition\nlikely to exist on a replication slave if you have issued a STOP SLAVE\nstatement or if the slave is highly loaded.)\n\nIn MySQL 5.6 (unlike the case in MySQL 5.1 and earlier), RESET SLAVE\ndoes not change any replication connection parameters such as master\nhost, master port, master user, or master password, which are retained\nin memory. This means that START SLAVE can be issued without requiring\na CHANGE MASTER TO statement following RESET SLAVE.\n\nConnection parameters are reset if the slave mysqld is shut down\nfollowing RESET SLAVE. In MySQL 5.6.3 and later, you can instead use\nRESET SLAVE ALL to reset these connection parameters (Bug #11809016).\n\nRESET SLAVE ALL does not clear the IGNORE_SERVER_IDS list set by CHANGE\nMASTER TO. This issue is fixed in MySQL 5.7. (Bug #18816897)\n\nIn MySQL 5.6.7 and later, RESET SLAVE causes an implicit commit of an\nongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nIf the slave SQL thread was in the middle of replicating temporary\ntables when it was stopped, and RESET SLAVE is issued, these replicated\ntemporary tables are deleted on the slave.\n\n*Note*: When used on a MySQL Cluster replication slave SQL node, RESET\nSLAVE clears the mysql.ndb_apply_status table. You should keep in mind\nwhen using this statement that ndb_apply_status uses the NDB storage\nengine and so is shared by all SQL nodes attached to the slave cluster.\nBeginning with MySQL Cluster NDB 7.4.9, you can override this behavior\nby issuing SET GLOBAL @@ndb_clear_apply_status=OFF prior to executing\nRESET SLAVE, which keeps the slave from purging the ndb_apply_status\ntable in such cases.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/reset-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/reset-slave.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (310,32,'DAY','Syntax:\nDAY(date)\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (311,14,'UUID','Syntax:\nUUID()\n\nReturns a Universal Unique Identifier (UUID) generated according to\n"DCE 1.1: Remote Procedure Call" (Appendix A) CAE (Common Applications\nEnvironment) Specifications published by The Open Group in October 1997\n(Document Number C706,\nhttp://www.opengroup.org/public/pubs/catalog/c706.htm).\n\nA UUID is designed as a number that is globally unique in space and\ntime. Two calls to UUID() are expected to generate two different\nvalues, even if these calls are performed on two separate computers\nthat are not connected to each other.\n\nA UUID is a 128-bit number represented by a utf8 string of five\nhexadecimal numbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format:\n\no The first three numbers are generated from a timestamp.\n\no The fourth number preserves temporal uniqueness in case the timestamp\n value loses monotonicity (for example, due to daylight saving time).\n\no The fifth number is an IEEE 802 node number that provides spatial\n uniqueness. A random number is substituted if the latter is not\n available (for example, because the host computer has no Ethernet\n card, or we do not know how to find the hardware address of an\n interface on your operating system). In this case, spatial uniqueness\n cannot be guaranteed. Nevertheless, a collision should have very low\n probability.\n\n Currently, the MAC address of an interface is taken into account only\n on FreeBSD and Linux. On other operating systems, MySQL uses a\n randomly generated 48-bit number.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID();\n -> \'6ccd780c-baba-1026-9564-0040f4311e29\'\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (311,14,'UUID','Syntax:\nUUID()\n\nReturns a Universal Unique Identifier (UUID) generated according to RFC\n4122, "A Universally Unique IDentifier (UUID) URN Namespace"\n(http://www.ietf.org/rfc/rfc4122.txt).\n\nA UUID is designed as a number that is globally unique in space and\ntime. Two calls to UUID() are expected to generate two different\nvalues, even if these calls are performed on two separate devices not\nconnected to each other.\n\n*Warning*: Although UUID() values are intended to be unique, they are\nnot necessarily unguessable or unpredictable. If unpredictability is\nrequired, UUID values should be generated some other way.\n\nUUID() returns a value that conforms to UUID version 1 as described in\nRFC 4122. The value is a 128-bit number represented as a utf8 string of\nfive hexadecimal numbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\nformat:\n\no The first three numbers are generated from the low, middle, and high\n parts of a timestamp. The high part also includes the UUID version\n number.\n\no The fourth number preserves temporal uniqueness in case the timestamp\n value loses monotonicity (for example, due to daylight saving time).\n\no The fifth number is an IEEE 802 node number that provides spatial\n uniqueness. A random number is substituted if the latter is not\n available (for example, because the host device has no Ethernet card,\n or it is unknown how to find the hardware address of an interface on\n the host operating system). In this case, spatial uniqueness cannot\n be guaranteed. Nevertheless, a collision should have very low\n probability.\n\n The MAC address of an interface is taken into account only on FreeBSD\n and Linux. On other operating systems, MySQL uses a randomly\n generated 48-bit number.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID();\n -> \'6ccd780c-baba-1026-9564-0040f4311e29\'\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (312,25,'LINESTRING','LineString(pt1,pt2,...)\n\nConstructs a LineString value from a number of Point or WKB Point\narguments. If the number of arguments is less than two, the return\nvalue is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-mysql-specific-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (313,14,'SLEEP','Syntax:\nSLEEP(duration)\n\nSleeps (pauses) for the number of seconds given by the duration\nargument, then returns 0. If SLEEP() is interrupted, it returns 1. The\nduration may have a fractional part.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (314,40,'CREATE LOGFILE GROUP','Syntax:\nCREATE LOGFILE GROUP logfile_group\n ADD UNDOFILE \'undo_file\'\n [INITIAL_SIZE [=] initial_size]\n [UNDO_BUFFER_SIZE [=] undo_buffer_size]\n [REDO_BUFFER_SIZE [=] redo_buffer_size]\n [NODEGROUP [=] nodegroup_id]\n [WAIT]\n [COMMENT [=] comment_text]\n ENGINE [=] engine_name\n\nThis statement creates a new log file group named logfile_group having\na single UNDO file named \'undo_file\'. A CREATE LOGFILE GROUP statement\nhas one and only one ADD UNDOFILE clause. For rules covering the naming\nof log file groups, see\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html.\n\n*Note*: All MySQL Cluster Disk Data objects share the same namespace.\nThis means that each Disk Data object must be uniquely named (and not\nmerely each Disk Data object of a given type). For example, you cannot\nhave a tablespace and a log file group with the same name, or a\ntablespace and a data file with the same name.\n\nIn MySQL Cluster NDB 7.3 and later, you can have only one log file\ngroup per Cluster at any given time. (See Bug #16386)\n\nThe optional INITIAL_SIZE parameter sets the UNDO file\'s initial size;\nif not specified, it defaults to 128M (128 megabytes). The optional\nUNDO_BUFFER_SIZE parameter sets the size used by the UNDO buffer for\nthe log file group; The default value for UNDO_BUFFER_SIZE is 8M (eight\nmegabytes); this value cannot exceed the amount of system memory\navailable. Both of these parameters are specified in bytes. In MySQL\nCluster NDB 7.3.2 and later, you may optionally follow either or both\nof these with a one-letter abbreviation for an order of magnitude,\nsimilar to those used in my.cnf. Generally, this is one of the letters\nM (for megabytes) or G (for gigabytes). Prior to MySQL Cluster NDB\n7.3.2, the values for these options could only be specified using\ndigits. (Bug #13116514, Bug #16104705, Bug #62858)\n\nMemory used for UNDO_BUFFER_SIZE comes from the global pool whose size\nis determined by the value of the SharedGlobalMemory data node\nconfiguration parameter. This includes any default value implied for\nthis option by the setting of the InitialLogFileGroup data node\nconfiguration parameter.\n\nThe maximum permitted for UNDO_BUFFER_SIZE is 629145600 (600 MB).\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nThe minimum allowed value for INITIAL_SIZE is 1048576 (1 MB).\n\nThe ENGINE option determines the storage engine to be used by this log\nfile group, with engine_name being the name of the storage engine. In\nMySQL 5.6, this must be NDB (or NDBCLUSTER). If ENGINE is not set,\nMySQL tries to use the engine specified by the default_storage_engine\nserver system variable (formerly storage_engine). In any case, if the\nengine is not specified as NDB or NDBCLUSTER, the CREATE LOGFILE GROUP\nstatement appears to succeed but actually fails to create the log file\ngroup, as shown here:\n\nmysql> CREATE LOGFILE GROUP lg1 \n -> ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+-------+------+------------------------------------------------------------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------------------------------------------------------------+\n| Error | 1478 | Table storage engine \'InnoDB\' does not support the create option \'TABLESPACE or LOGFILE GROUP\' |\n+-------+------+------------------------------------------------------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> DROP LOGFILE GROUP lg1 ENGINE = NDB; \nERROR 1529 (HY000): Failed to drop LOGFILE GROUP\n\nmysql> CREATE LOGFILE GROUP lg1 \n -> ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M\n -> ENGINE = NDB;\nQuery OK, 0 rows affected (2.97 sec)\n\nThe fact that the CREATE LOGFILE GROUP statement does not actually\nreturn an error when a non-NDB storage engine is named, but rather\nappears to succeed, is a known issue which we hope to address in a\nfuture release of MySQL Cluster.\n\nREDO_BUFFER_SIZE, NODEGROUP, WAIT, and COMMENT are parsed but ignored,\nand so have no effect in MySQL 5.6. These options are intended for\nfuture expansion.\n\nWhen used with ENGINE [=] NDB, a log file group and associated UNDO log\nfile are created on each Cluster data node. You can verify that the\nUNDO files were created and obtain information about them by querying\nthe INFORMATION_SCHEMA.FILES table. For example:\n\nmysql> SELECT LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE FILE_NAME = \'undo_10.dat\';\n+--------------------+----------------------+----------------+\n| LOGFILE_GROUP_NAME | LOGFILE_GROUP_NUMBER | EXTRA |\n+--------------------+----------------------+----------------+\n| lg_3 | 11 | CLUSTER_NODE=3 |\n| lg_3 | 11 | CLUSTER_NODE=4 |\n+--------------------+----------------------+----------------+\n2 rows in set (0.06 sec)\n\nCREATE LOGFILE GROUP is useful only with Disk Data storage for MySQL\nCluster. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-disk-data.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (313,14,'SLEEP','Syntax:\nSLEEP(duration)\n\nSleeps (pauses) for the number of seconds given by the duration\nargument, then returns 0. If SLEEP() is interrupted, it returns 1. The\nduration may have a fractional part.\n\nWhen sleep returns normally (without interruption), it returns 0:\n\nmysql> SELECT SLEEP(1000);\n+-------------+\n| SLEEP(1000) |\n+-------------+\n| 0 |\n+-------------+\n\nWhen SLEEP() is the only thing invoked by a query that is interrupted,\nit returns 1 and the query itself returns no error. This statement is\ninterrupted using KILL QUERY from another session:\n\nmysql> SELECT SLEEP(1000);\n+-------------+\n| SLEEP(1000) |\n+-------------+\n| 1 |\n+-------------+\n\nWhen SLEEP() is only part of a query that is interrupted, the query\nreturns an error. This statement is interrupted using KILL QUERY from\nanother session:\n\nmysql> SELECT 1 FROM t1 WHERE SLEEP(1000);\nERROR 1317 (70100): Query execution was interrupted\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (314,40,'CREATE LOGFILE GROUP','Syntax:\nCREATE LOGFILE GROUP logfile_group\n ADD UNDOFILE \'undo_file\'\n [INITIAL_SIZE [=] initial_size]\n [UNDO_BUFFER_SIZE [=] undo_buffer_size]\n [REDO_BUFFER_SIZE [=] redo_buffer_size]\n [NODEGROUP [=] nodegroup_id]\n [WAIT]\n [COMMENT [=] comment_text]\n ENGINE [=] engine_name\n\nThis statement creates a new log file group named logfile_group having\na single UNDO file named \'undo_file\'. A CREATE LOGFILE GROUP statement\nhas one and only one ADD UNDOFILE clause. For rules covering the naming\nof log file groups, see\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html.\n\n*Note*: All MySQL Cluster Disk Data objects share the same namespace.\nThis means that each Disk Data object must be uniquely named (and not\nmerely each Disk Data object of a given type). For example, you cannot\nhave a tablespace and a log file group with the same name, or a\ntablespace and a data file with the same name.\n\nIn MySQL Cluster NDB 7.3 and later, you can have only one log file\ngroup per Cluster at any given time. (See Bug #16386)\n\nThe optional INITIAL_SIZE parameter sets the UNDO file\'s initial size;\nif not specified, it defaults to 128M (128 megabytes). The optional\nUNDO_BUFFER_SIZE parameter sets the size used by the UNDO buffer for\nthe log file group; The default value for UNDO_BUFFER_SIZE is 8M (eight\nmegabytes); this value cannot exceed the amount of system memory\navailable. Both of these parameters are specified in bytes. In MySQL\nCluster NDB 7.3.2 and later, you may optionally follow either or both\nof these with a one-letter abbreviation for an order of magnitude,\nsimilar to those used in my.cnf. Generally, this is one of the letters\nM (for megabytes) or G (for gigabytes). Prior to MySQL Cluster NDB\n7.3.2, the values for these options could only be specified using\ndigits. (Bug #13116514, Bug #16104705, Bug #62858)\n\nMemory used for UNDO_BUFFER_SIZE comes from the global pool whose size\nis determined by the value of the SharedGlobalMemory data node\nconfiguration parameter. This includes any default value implied for\nthis option by the setting of the InitialLogFileGroup data node\nconfiguration parameter.\n\nThe maximum permitted for UNDO_BUFFER_SIZE is 629145600 (600 MB).\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nThe minimum allowed value for INITIAL_SIZE is 1048576 (1 MB).\n\nThe ENGINE option determines the storage engine to be used by this log\nfile group, with engine_name being the name of the storage engine. In\nMySQL 5.6, this must be NDB (or NDBCLUSTER). If ENGINE is not set,\nMySQL tries to use the engine specified by the default_storage_engine\nserver system variable (formerly storage_engine). In any case, if the\nengine is not specified as NDB or NDBCLUSTER, the CREATE LOGFILE GROUP\nstatement appears to succeed but actually fails to create the log file\ngroup, as shown here:\n\nmysql> CREATE LOGFILE GROUP lg1\n -> ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+-------+------+------------------------------------------------------------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------------------------------------------------------------+\n| Error | 1478 | Table storage engine \'InnoDB\' does not support the create option \'TABLESPACE or LOGFILE GROUP\' |\n+-------+------+------------------------------------------------------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> DROP LOGFILE GROUP lg1 ENGINE = NDB; \nERROR 1529 (HY000): Failed to drop LOGFILE GROUP\n\nmysql> CREATE LOGFILE GROUP lg1\n -> ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M\n -> ENGINE = NDB;\nQuery OK, 0 rows affected (2.97 sec)\n\nThe fact that the CREATE LOGFILE GROUP statement does not actually\nreturn an error when a non-NDB storage engine is named, but rather\nappears to succeed, is a known issue which we hope to address in a\nfuture release of MySQL Cluster.\n\nREDO_BUFFER_SIZE, NODEGROUP, WAIT, and COMMENT are parsed but ignored,\nand so have no effect in MySQL 5.6. These options are intended for\nfuture expansion.\n\nWhen used with ENGINE [=] NDB, a log file group and associated UNDO log\nfile are created on each Cluster data node. You can verify that the\nUNDO files were created and obtain information about them by querying\nthe INFORMATION_SCHEMA.FILES table. For example:\n\nmysql> SELECT LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE FILE_NAME = \'undo_10.dat\';\n+--------------------+----------------------+----------------+\n| LOGFILE_GROUP_NAME | LOGFILE_GROUP_NUMBER | EXTRA |\n+--------------------+----------------------+----------------+\n| lg_3 | 11 | CLUSTER_NODE=3 |\n| lg_3 | 11 | CLUSTER_NODE=4 |\n+--------------------+----------------------+----------------+\n2 rows in set (0.06 sec)\n\nCREATE LOGFILE GROUP is useful only with Disk Data storage for MySQL\nCluster. See\nhttp://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-disk-data.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-logfile-group.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (315,6,'NULLIF','Syntax:\nNULLIF(expr1,expr2)\n\nReturns NULL if expr1 = expr2 is true, otherwise returns expr1. This is\nthe same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html\n\n','mysql> SELECT NULLIF(1,1);\n -> NULL\nmysql> SELECT NULLIF(1,2);\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (316,3,'ROUND','Syntax:\nROUND(X), ROUND(X,D)\n\nRounds the argument X to D decimal places. The rounding algorithm\ndepends on the data type of X. D defaults to 0 if not specified. D can\nbe negative to cause D digits left of the decimal point of the value X\nto become zero.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT ROUND(-1.23);\n -> -1\nmysql> SELECT ROUND(-1.58);\n -> -2\nmysql> SELECT ROUND(1.58);\n -> 2\nmysql> SELECT ROUND(1.298, 1);\n -> 1.3\nmysql> SELECT ROUND(1.298, 0);\n -> 1\nmysql> SELECT ROUND(23.298, -1);\n -> 20\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (317,32,'TIMEDIFF','Syntax:\nTIMEDIFF(expr1,expr2)\n\nTIMEDIFF() returns expr1 − expr2 expressed as a time value. expr1 and\nexpr2 are time or date-and-time expressions, but both must be of the\nsame type.\n\nThe result returned by TIMEDIFF() is limited to the range allowed for\nTIME values. Alternatively, you can use either of the functions\nTIMESTAMPDIFF() and UNIX_TIMESTAMP(), both of which return integers.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT TIMEDIFF(\'2000:01:01 00:00:00\',\n -> \'2000:01:01 00:00:00.000001\');\n -> \'-00:00:00.000001\'\nmysql> SELECT TIMEDIFF(\'2008-12-31 23:59:59.000001\',\n -> \'2008-12-30 01:01:01.000002\');\n -> \'46:58:57.999999\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); @@ -400,7 +400,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (320,32,'ADDTIME','Syntax:\nADDTIME(expr1,expr2)\n\nADDTIME() adds expr2 to expr1 and returns the result. expr1 is a time\nor datetime expression, and expr2 is a time expression.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\');\n -> \'2008-01-02 01:01:01.000001\'\nmysql> SELECT ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n -> \'03:00:01.999997\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (321,38,'UPPER','Syntax:\nUPPER(str)\n\nReturns the string str with all characters changed to uppercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\n\nmysql> SELECT UPPER(\'Hej\');\n -> \'HEJ\'\n\nSee the description of LOWER() for information that also applies to\nUPPER(). This included information about how to perform lettercase\nconversion of binary strings (BINARY, VARBINARY, BLOB) for which these\nfunctions are ineffective, and information about case folding for\nUnicode character sets.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (322,23,'MEDIUMBLOB','MEDIUMBLOB\n\nA BLOB column with a maximum length of 16,777,215 (224 − 1) bytes.\nEach MEDIUMBLOB value is stored using a 3-byte length prefix that\nindicates the number of bytes in the value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (323,32,'FROM_UNIXTIME','Syntax:\nFROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)\n\nReturns a representation of the unix_timestamp argument as a value in\n\'YYYY-MM-DD HH:MM:SS\' or YYYYMMDDHHMMSS format, depending on whether\nthe function is used in a string or numeric context. The value is\nexpressed in the current time zone. unix_timestamp is an internal\ntimestamp value such as is produced by the UNIX_TIMESTAMP() function.\n\nIf format is given, the result is formatted according to the format\nstring, which is used the same way as listed in the entry for the\nDATE_FORMAT() function.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT FROM_UNIXTIME(1196440219);\n -> \'2007-11-30 10:30:19\'\nmysql> SELECT FROM_UNIXTIME(1196440219) + 0;\n -> 20071130103019.000000\nmysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),\n -> \'%Y %D %M %h:%i:%s %x\');\n -> \'2007 30th November 10:30:59 2007\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (323,32,'FROM_UNIXTIME','Syntax:\nFROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)\n\nReturns a representation of the unix_timestamp argument as a value in\n\'YYYY-MM-DD HH:MM:SS\' or YYYYMMDDHHMMSS format, depending on whether\nthe function is used in a string or numeric context. The value is\nexpressed in the current time zone. unix_timestamp is an internal\ntimestamp value such as is produced by the UNIX_TIMESTAMP() function.\n\nIf format is given, the result is formatted according to the format\nstring, which is used the same way as listed in the entry for the\nDATE_FORMAT() function.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT FROM_UNIXTIME(1447430881);\n -> \'2015-11-13 10:08:01\'\nmysql> SELECT FROM_UNIXTIME(1447430881) + 0;\n -> 20151113100801\nmysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),\n -> \'%Y %D %M %h:%i:%s %x\');\n -> \'2015 13th November 10:08:01 2015\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (324,12,'SHA2','Syntax:\nSHA2(str, hash_length)\n\nCalculates the SHA-2 family of hash functions (SHA-224, SHA-256,\nSHA-384, and SHA-512). The first argument is the cleartext string to be\nhashed. The second argument indicates the desired bit length of the\nresult, which must have a value of 224, 256, 384, 512, or 0 (which is\nequivalent to 256). If either argument is NULL or the hash length is\nnot one of the permitted values, the return value is NULL. Otherwise,\nthe function result is a hash value containing the desired number of\nbits. See the notes at the beginning of this section about storing hash\nvalues efficiently.\n\nThe return value is a nonbinary string in the connection character set.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SELECT SHA2(\'abc\', 224);\n -> \'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7\'\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (325,6,'IFNULL','Syntax:\nIFNULL(expr1,expr2)\n\nIf expr1 is not NULL, IFNULL() returns expr1; otherwise it returns\nexpr2. IFNULL() returns a numeric or string value, depending on the\ncontext in which it is used.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html\n\n','mysql> SELECT IFNULL(1,0);\n -> 1\nmysql> SELECT IFNULL(NULL,10);\n -> 10\nmysql> SELECT IFNULL(1/0,10);\n -> 10\nmysql> SELECT IFNULL(1/0,\'yes\');\n -> \'yes\'\n','http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (326,27,'SHOW FUNCTION CODE','Syntax:\nSHOW FUNCTION CODE func_name\n\nThis statement is similar to SHOW PROCEDURE CODE but for stored\nfunctions. See [HELP SHOW PROCEDURE CODE].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-function-code.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-function-code.html'); @@ -422,11 +422,11 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (342,3,'*','Syntax:\n*\n\nMultiplication:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT 3*5;\n -> 15\nmysql> SELECT 18014398509481984*18014398509481984.0;\n -> 324518553658426726783156020576256.0\nmysql> SELECT 18014398509481984*18014398509481984;\n -> out-of-range error\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (343,33,'ST_ASBINARY','ST_AsBinary(g), ST_AsWKB(g)\n\nConverts a value in internal geometry format to its WKB representation\nand returns the binary result.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html\n\n','SELECT ST_AsBinary(g) FROM geom;\n','http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (344,38,'TO_BASE64','Syntax:\nTO_BASE64(str)\n\nConverts the string argument to base-64 encoded form and returns the\nresult as a character string with the connection character set and\ncollation. If the argument is not a string, it is converted to a string\nbefore conversion takes place. The result is NULL if the argument is\nNULL. Base-64 encoded strings can be decoded using the FROM_BASE64()\nfunction.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n -> \'JWJj\', \'abc\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (345,12,'DES_DECRYPT','Syntax:\nDES_DECRYPT(crypt_str[,key_str])\n\nDecrypts a string encrypted with DES_ENCRYPT(). If an error occurs,\nthis function returns NULL.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.6/en/ssl-connections.html.\n\nIf no key_str argument is given, DES_DECRYPT() examines the first byte\nof the encrypted string to determine the DES key number that was used\nto encrypt the original string, and then reads the key from the DES key\nfile to decrypt the message. For this to work, the user must have the\nSUPER privilege. The key file can be specified with the --des-key-file\nserver option.\n\nIf you pass this function a key_str argument, that string is used as\nthe key for decrypting the message.\n\nIf the crypt_str argument does not appear to be an encrypted string,\nMySQL returns the given crypt_str.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (345,12,'DES_DECRYPT','Syntax:\nDES_DECRYPT(crypt_str[,key_str])\n\nDecrypts a string encrypted with DES_ENCRYPT(). If an error occurs,\nthis function returns NULL.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.6/en/secure-connections.html.\n\nIf no key_str argument is given, DES_DECRYPT() examines the first byte\nof the encrypted string to determine the DES key number that was used\nto encrypt the original string, and then reads the key from the DES key\nfile to decrypt the message. For this to work, the user must have the\nSUPER privilege. The key file can be specified with the --des-key-file\nserver option.\n\nIf you pass this function a key_str argument, that string is used as\nthe key for decrypting the message.\n\nIf the crypt_str argument does not appear to be an encrypted string,\nMySQL returns the given crypt_str.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (346,2,'ST_AREA','ST_Area(poly)\n\nReturns a double-precision number indicating the area of the argument,\nas measured in its spatial reference system. For arguments of dimension\n0 or 1, the result is 0.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly = \'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@poly));\n+---------------------------------+\n| ST_Area(ST_GeomFromText(@poly)) |\n+---------------------------------+\n| 4 |\n+---------------------------------+\n\nmysql> SET @mpoly =\n -> \'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@mpoly));\n+----------------------------------+\n| ST_Area(ST_GeomFromText(@mpoly)) |\n+----------------------------------+\n| 8 |\n+----------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (347,13,'ENDPOINT','EndPoint(ls)\n\nST_EndPoint() and EndPoint() are synonyms. For more information, see\nthe description of ST_EndPoint().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (348,16,'COUNT','Syntax:\nCOUNT(expr)\n\nReturns a count of the number of non-NULL values of expr in the rows\nretrieved by a SELECT statement. The result is a BIGINT value.\n\nCOUNT() returns 0 if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','mysql> SELECT student.student_name,COUNT(*)\n -> FROM student,course\n -> WHERE student.student_id=course.student_id\n -> GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (349,28,'INSERT','Syntax:\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)] \n [(col_name,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n SET col_name={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)] \n [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nINSERT inserts new rows into an existing table. The INSERT ... VALUES\nand INSERT ... SET forms of the statement insert rows based on\nexplicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT ... SELECT is discussed\nfurther in [HELP INSERT SELECT].\n\nIn MySQL 5.6.2 and later, when inserting into a partitioned table, you\ncan control which partitions and subpartitions accept new rows. The\nPARTITION option takes a comma-separated list of the names of one or\nmore partitions or subpartitions (or both) of the table. If any of the\nrows to be inserted by a given INSERT statement do not match one of the\npartitions listed, the INSERT statement fails with the error Found a\nrow not matching the given partition set. See\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html, for\nmore information and examples.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/insert.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/insert.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (349,28,'INSERT','Syntax:\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n [(col_name,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n SET col_name={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name,...)]\n [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col_name=expr\n [, col_name=expr] ... ]\n\nINSERT inserts new rows into an existing table. The INSERT ... VALUES\nand INSERT ... SET forms of the statement insert rows based on\nexplicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT ... SELECT is discussed\nfurther in [HELP INSERT SELECT].\n\nIn MySQL 5.6.2 and later, when inserting into a partitioned table, you\ncan control which partitions and subpartitions accept new rows. The\nPARTITION option takes a comma-separated list of the names of one or\nmore partitions or subpartitions (or both) of the table. If any of the\nrows to be inserted by a given INSERT statement do not match one of the\npartitions listed, the INSERT statement fails with the error Found a\nrow not matching the given partition set. See\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html, for\nmore information and examples.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/insert.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/insert.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (350,4,'MLINEFROMTEXT','MLineFromText(wkt[,srid]), MultiLineStringFromText(wkt[,srid])\n\nConstructs a MultiLineString value using its WKT representation and\nSRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (351,33,'GEOMCOLLFROMWKB','GeomCollFromWKB(wkb[,srid]), GeometryCollectionFromWKB(wkb[,srid])\n\nST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB(),\nGeomCollFromWKB(), and GeometryCollectionFromWKB() are synonyms. For\nmore information, see the description of ST_GeomCollFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (352,23,'TINYTEXT','TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 255 (28 − 1) characters. The\neffective maximum length is less if the value contains multibyte\ncharacters. Each TINYTEXT value is stored using a 1-byte length prefix\nthat indicates the number of bytes in the value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); @@ -435,12 +435,12 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (355,12,'DECODE','Syntax:\nDECODE(crypt_str,pass_str)\n\nDecrypts the encrypted string crypt_str using pass_str as the password.\ncrypt_str should be a string returned from ENCODE().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (356,20,'<=>','Syntax:\n<=>\n\nNULL-safe equal. This operator performs an equality comparison like the\n= operator, but returns 1 rather than NULL if both operands are NULL,\nand 0 rather than NULL if one operand is NULL.\n\nThe <=> operator is equivalent to the standard SQL IS NOT DISTINCT FROM\noperator.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n -> 1, 1, 0\nmysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;\n -> 1, NULL, NULL\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (357,27,'RESET','Syntax:\nRESET reset_option [, reset_option] ...\n\nThe RESET statement is used to clear the state of various server\noperations. You must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement. See [HELP\nFLUSH].\n\nThe RESET statement causes an implicit commit. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nIn MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing\nthis statement. (Bug #16062608, Bug #16715809, Bug #69045)\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/reset.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/reset.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (358,14,'GET_LOCK','Syntax:\nGET_LOCK(str,timeout)\n\nTries to obtain a lock with a name given by the string str, using a\ntimeout of timeout seconds. A negative timeout value means infinite\ntimeout. The lock is exclusive. While held by one session, other\nsessions cannot obtain a lock of the same name.\n\nReturns 1 if the lock was obtained successfully, 0 if the attempt timed\nout (for example, because another client has previously locked the\nname), or NULL if an error occurred (such as running out of memory or\nthe thread was killed with mysqladmin kill).\n\nA lock obtained with GET_LOCK() is released explicitly by executing\nRELEASE_LOCK() or implicitly when your session terminates (either\nnormally or abnormally).\n\nLocks obtained with GET_LOCK() are not released when transactions\ncommit or roll back.\n\nGET_LOCK() can be used to implement application locks or to simulate\nrecord locks. Names are locked on a server-wide basis. If a name has\nbeen locked within one session, GET_LOCK() blocks any request by\nanother session for a lock with the same name. This enables clients\nthat agree on a given lock name to use the name to perform cooperative\nadvisory locking. But be aware that it also enables a client that is\nnot among the set of cooperating clients to lock a name, either\ninadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of\nthis is to use lock names that are database-specific or\napplication-specific. For example, use lock names of the form\ndb_name.str or app_name.str.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT GET_LOCK(\'lock1\',10);\n -> 1\nmysql> SELECT IS_FREE_LOCK(\'lock2\');\n -> 1\nmysql> SELECT GET_LOCK(\'lock2\',10);\n -> 1\nmysql> SELECT RELEASE_LOCK(\'lock2\');\n -> 1\nmysql> SELECT RELEASE_LOCK(\'lock1\');\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (358,14,'GET_LOCK','Syntax:\nGET_LOCK(str,timeout)\n\nTries to obtain a lock with a name given by the string str, using a\ntimeout of timeout seconds. A negative timeout value means infinite\ntimeout. The lock is exclusive. While held by one session, other\nsessions cannot obtain a lock of the same name.\n\nReturns 1 if the lock was obtained successfully, 0 if the attempt timed\nout (for example, because another client has previously locked the\nname), or NULL if an error occurred (such as running out of memory or\nthe thread was killed with mysqladmin kill).\n\nA lock obtained with GET_LOCK() is released explicitly by executing\nRELEASE_LOCK() or implicitly when your session terminates (either\nnormally or abnormally).\n\nLocks obtained with GET_LOCK() are not released when transactions\ncommit or roll back.\n\n*Important*: The behavior of GET_LOCK() changes in MySQL 5.7. In\nconsideration of future upgrades, limit the str value to 64 characters\nor less and do not rely on subsequent calls to GET_LOCK() releasing\nprevious locks.\n\nGET_LOCK() can be used to implement application locks or to simulate\nrecord locks. Names are locked on a server-wide basis. If a name has\nbeen locked within one session, GET_LOCK() blocks any request by\nanother session for a lock with the same name. This enables clients\nthat agree on a given lock name to use the name to perform cooperative\nadvisory locking. But be aware that it also enables a client that is\nnot among the set of cooperating clients to lock a name, either\ninadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of\nthis is to use lock names that are database-specific or\napplication-specific. For example, use lock names of the form\ndb_name.str or app_name.str.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT GET_LOCK(\'lock1\',10);\n -> 1\nmysql> SELECT IS_FREE_LOCK(\'lock2\');\n -> 1\nmysql> SELECT GET_LOCK(\'lock2\',10);\n -> 1\nmysql> SELECT RELEASE_LOCK(\'lock2\');\n -> 1\nmysql> SELECT RELEASE_LOCK(\'lock1\');\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (359,23,'BIGINT','BIGINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nSERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (360,32,'CURTIME','Syntax:\nCURTIME([fsp])\n\nReturns the current time as a value in \'HH:MM:SS\' or HHMMSS format,\ndepending on whether the function is used in a string or numeric\ncontext. The value is expressed in the current time zone.\n\nAs of MySQL 5.6.4, if the fsp argument is given to specify a fractional\nseconds precision from 0 to 6, the return value includes a fractional\nseconds part of that many digits. Before 5.6.4, any argument is\nignored.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT CURTIME();\n -> \'23:50:26\'\nmysql> SELECT CURTIME() + 0;\n -> 235026.000000\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (361,37,'ST_DIMENSION','ST_Dimension(g)\n\nReturns the inherent dimension of the geometry value g. The result can\nbe −1, 0, 1, or 2. The meaning of these values is given in\nhttp://dev.mysql.com/doc/refman/5.6/en/gis-class-geometry.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------------+\n| ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------------+\n| 1 |\n+------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (362,27,'SET','Syntax:\nSET variable_assignment [, variable_assignment] ...\n\nvariable_assignment:\n user_var_name = expr\n | [GLOBAL | SESSION] system_var_name = expr\n | [@@global. | @@session. | @@]system_var_name = expr\n\nThe SET statement assigns values to different types of variables that\naffect the operation of the server or your client.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-statement.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-statement.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (363,3,'CONV','Syntax:\nCONV(N,from_base,to_base)\n\nConverts numbers between different number bases. Returns a string\nrepresentation of the number N, converted from base from_base to base\nto_base. Returns NULL if any argument is NULL. The argument N is\ninterpreted as an integer, but may be specified as an integer or a\nstring. The minimum base is 2 and the maximum base is 36. If to_base is\na negative number, N is regarded as a signed number. Otherwise, N is\ntreated as unsigned. CONV() works with 64-bit precision.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT CONV(\'a\',16,2);\n -> \'1010\'\nmysql> SELECT CONV(\'6E\',18,8);\n -> \'172\'\nmysql> SELECT CONV(-17,10,-18);\n -> \'-H\'\nmysql> SELECT CONV(10+\'10\'+\'10\'+0xa,10,10);\n -> \'40\'\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (361,37,'ST_DIMENSION','ST_Dimension(g)\n\nReturns the inherent dimension of the geometry value g, or NULL if the\nargument is NULL. The dimension can be −1, 0, 1, or 2. The meaning of\nthese values is given in\nhttp://dev.mysql.com/doc/refman/5.6/en/gis-class-geometry.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------------+\n| ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------------+\n| 1 |\n+------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (362,27,'SET','Syntax:\nSET variable_assignment [, variable_assignment] ...\n\nvariable_assignment:\n user_var_name = expr\n | [GLOBAL | SESSION]\n system_var_name = expr\n | [@@global. | @@session. | @@]\n system_var_name = expr\n\nThe SET statement assigns values to different types of variables that\naffect the operation of the server or your client.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/set-statement.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/set-statement.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (363,3,'CONV','Syntax:\nCONV(N,from_base,to_base)\n\nConverts numbers between different number bases. Returns a string\nrepresentation of the number N, converted from base from_base to base\nto_base. Returns NULL if any argument is NULL. The argument N is\ninterpreted as an integer, but may be specified as an integer or a\nstring. The minimum base is 2 and the maximum base is 36. If from_base\nis a negative number, N is regarded as a signed number. Otherwise, N is\ntreated as unsigned. CONV() works with 64-bit precision.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT CONV(\'a\',16,2);\n -> \'1010\'\nmysql> SELECT CONV(\'6E\',18,8);\n -> \'172\'\nmysql> SELECT CONV(-17,10,-18);\n -> \'-H\'\nmysql> SELECT CONV(10+\'10\'+\'10\'+X\'0a\',10,10);\n -> \'40\'\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (364,28,'LOAD XML','Syntax:\nLOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE [db_name.]tbl_name\n [CHARACTER SET charset_name]\n [ROWS IDENTIFIED BY \'\']\n [IGNORE number {LINES | ROWS}]\n [(field_name_or_user_var,...)]\n [SET col_name = expr,...]\n\nThe LOAD XML statement reads data from an XML file into a table. The\nfile_name must be given as a literal string. The tagname in the\noptional ROWS IDENTIFIED BY clause must also be given as a literal\nstring, and must be surrounded by angle brackets (< and >).\n\nLOAD XML acts as the complement of running the mysql client in XML\noutput mode (that is, starting the client with the --xml option). To\nwrite data from a table to an XML file, you can invoke the mysql client\nwith the --xml and -e options from the system shell, as shown here:\n\nshell> mysql --xml -e \'SELECT * FROM mydb.mytable\' > file.xml\n\nTo read the file back into a table, use LOAD XML INFILE. By default,\nthe element is considered to be the equivalent of a database\ntable row; this can be changed using the ROWS IDENTIFIED BY clause.\n\nThis statement supports three different XML formats:\n\no Column names as attributes and column values as attribute values:\n\n\n\no Column names as tags and column values as the content of these tags:\n\n\n value1\n value2\n\n\no Column names are the name attributes of tags, and values are\n the contents of these tags:\n\n\n value1\n value2\n\n\n This is the format used by other MySQL tools, such as mysqldump.\n\nAll three formats can be used in the same XML file; the import routine\nautomatically detects the format for each row and interprets it\ncorrectly. Tags are matched based on the tag or attribute name and the\ncolumn name.\n\nPrior to MySQL 5.6.27, LOAD XML did not handle empty XML elements in\nthe form correctly. (Bug #67542, Bug #16171518)\n\nThe following clauses work essentially the same way for LOAD XML as\nthey do for LOAD DATA:\n\no LOW_PRIORITY or CONCURRENT\n\no LOCAL\n\no REPLACE or IGNORE\n\no CHARACTER SET\n\no SET\n\nSee [HELP LOAD DATA], for more information about these clauses.\n\n(field_name_or_user_var, ...) is a comma-separated list of one or more\nXML fields or user variables. The name of a user variable used for this\npurpose must match the name of a field from the XML file, prefixed with\n@. You can use field names to select only desired fields. User\nvariables can be employed to store the corresponding field values for\nsubsequent re-use.\n\nThe IGNORE number LINES or IGNORE number ROWS clause causes the first\nnumber rows in the XML file to be skipped. It is analogous to the LOAD\nDATA statement\'s IGNORE ... LINES clause.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/load-xml.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/load-xml.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (365,15,'ASSIGN-VALUE','Syntax:\n:=\n\nAssignment operator. Causes the user variable on the left hand side of\nthe operator to take on the value to its right. The value on the right\nhand side may be a literal value, another variable storing a value, or\nany legal expression that yields a scalar value, including the result\nof a query (provided that this value is a scalar value). You can\nperform multiple assignments in the same SET statement. You can perform\nmultiple assignments in the same statement-\n\nUnlike =, the := operator is never interpreted as a comparison\noperator. This means you can use := in any valid SQL statement (not\njust in SET statements) to assign a value to a variable.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html\n\n','mysql> SELECT @var1, @var2;\n -> NULL, NULL\nmysql> SELECT @var1 := 1, @var2;\n -> 1, NULL\nmysql> SELECT @var1, @var2;\n -> 1, NULL\nmysql> SELECT @var1, @var2 := @var1;\n -> 1, 1\nmysql> SELECT @var1, @var2;\n -> 1, 1\n\nmysql> SELECT @var1:=COUNT(*) FROM t1;\n -> 4\nmysql> SELECT @var1;\n -> 4\n','http://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (366,27,'SHOW OPEN TABLES','Syntax:\nSHOW OPEN TABLES [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW OPEN TABLES lists the non-TEMPORARY tables that are currently open\nin the table cache. See\nhttp://dev.mysql.com/doc/refman/5.6/en/table-cache.html. The FROM\nclause, if present, restricts the tables shown to those present in the\ndb_name database. The LIKE clause, if present, indicates which table\nnames to match. The WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-open-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-open-tables.html'); @@ -458,7 +458,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (378,23,'TEXT','TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 65,535 (216 − 1) characters.\nThe effective maximum length is less if the value contains multibyte\ncharacters. Each TEXT value is stored using a 2-byte length prefix that\nindicates the number of bytes in the value.\n\nAn optional length M can be given for this type. If this is done, MySQL\ncreates the column as the smallest TEXT type large enough to hold\nvalues M characters long.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (379,19,'~','Syntax:\n~\n\nInvert all bits.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html\n\n','mysql> SELECT 5 & ~1;\n -> 4\n','http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (380,3,'ASIN','Syntax:\nASIN(X)\n\nReturns the arc sine of X, that is, the value whose sine is X. Returns\nNULL if X is not in the range -1 to 1.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT ASIN(0.2);\n -> 0.20135792079033\nmysql> SELECT ASIN(\'foo\');\n\n+-------------+\n| ASIN(\'foo\') |\n+-------------+\n| 0 |\n+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+---------+------+-----------------------------------------+\n| Level | Code | Message |\n+---------+------+-----------------------------------------+\n| Warning | 1292 | Truncated incorrect DOUBLE value: \'foo\' |\n+---------+------+-----------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (381,17,'ROW_COUNT','Syntax:\nROW_COUNT()\n\nIn MySQL 5.6, ROW_COUNT() returns a value as follows:\n\no DDL statements: 0. This applies to statements such as CREATE TABLE or\n DROP TABLE.\n\no DML statements other than SELECT: The number of affected rows. This\n applies to statements such as UPDATE, INSERT, or DELETE (as before),\n but now also to statements such as ALTER TABLE and LOAD DATA INFILE.\n\no SELECT: -1 if the statement returns a result set, or the number of\n rows "affected" if it does not. For example, for SELECT * FROM t1,\n ROW_COUNT() returns -1. For SELECT * FROM t1 INTO OUTFILE\n \'file_name\', ROW_COUNT() returns the number of rows written to the\n file.\n\no SIGNAL statements: 0.\n\nFor UPDATE statements, the affected-rows value by default is the number\nof rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to\nmysql_real_connect() when connecting to mysqld, the affected-rows value\nis the number of rows "found"; that is, matched by the WHERE clause.\n\nFor REPLACE statements, the affected-rows value is 2 if the new row\nreplaced an old row, because in this case, one row was inserted after\nthe duplicate was deleted.\n\nFor INSERT ... ON DUPLICATE KEY UPDATE statements, the affected-rows\nvalue per row is 1 if the row is inserted as a new row, 2 if an\nexisting row is updated, and 0 if an existing row is set to its current\nvalues. If you specify the CLIENT_FOUND_ROWS flag, the affected-rows\nvalue is 1 (not 0) if an existing row is set to its current values.\n\nThe ROW_COUNT() value is similar to the value from the\nmysql_affected_rows() C API function and the row count that the mysql\nclient displays following statement execution.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> INSERT INTO t VALUES(1),(2),(3);\nQuery OK, 3 rows affected (0.00 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> DELETE FROM t WHERE i IN(1,2);\nQuery OK, 2 rows affected (0.00 sec)\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 2 |\n+-------------+\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (381,17,'ROW_COUNT','Syntax:\nROW_COUNT()\n\nROW_COUNT() returns a value as follows:\n\no DDL statements: 0. This applies to statements such as CREATE TABLE or\n DROP TABLE.\n\no DML statements other than SELECT: The number of affected rows. This\n applies to statements such as UPDATE, INSERT, or DELETE (as before),\n but now also to statements such as ALTER TABLE and LOAD DATA INFILE.\n\no SELECT: -1 if the statement returns a result set, or the number of\n rows "affected" if it does not. For example, for SELECT * FROM t1,\n ROW_COUNT() returns -1. For SELECT * FROM t1 INTO OUTFILE\n \'file_name\', ROW_COUNT() returns the number of rows written to the\n file.\n\no SIGNAL statements: 0.\n\nFor UPDATE statements, the affected-rows value by default is the number\nof rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to\nmysql_real_connect() when connecting to mysqld, the affected-rows value\nis the number of rows "found"; that is, matched by the WHERE clause.\n\nFor REPLACE statements, the affected-rows value is 2 if the new row\nreplaced an old row, because in this case, one row was inserted after\nthe duplicate was deleted.\n\nFor INSERT ... ON DUPLICATE KEY UPDATE statements, the affected-rows\nvalue per row is 1 if the row is inserted as a new row, 2 if an\nexisting row is updated, and 0 if an existing row is set to its current\nvalues. If you specify the CLIENT_FOUND_ROWS flag, the affected-rows\nvalue is 1 (not 0) if an existing row is set to its current values.\n\nThe ROW_COUNT() value is similar to the value from the\nmysql_affected_rows() C API function and the row count that the mysql\nclient displays following statement execution.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> INSERT INTO t VALUES(1),(2),(3);\nQuery OK, 3 rows affected (0.00 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> DELETE FROM t WHERE i IN(1,2);\nQuery OK, 2 rows affected (0.00 sec)\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 2 |\n+-------------+\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (382,3,'SIGN','Syntax:\nSIGN(X)\n\nReturns the sign of the argument as -1, 0, or 1, depending on whether X\nis negative, zero, or positive.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT SIGN(-32);\n -> -1\nmysql> SELECT SIGN(0);\n -> 0\nmysql> SELECT SIGN(234);\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (383,23,'FLOAT','FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]\n\nA small (single-precision) floating-point number. Permissible values\nare -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to\n3.402823466E+38. These are the theoretical limits, based on the IEEE\nstandard. The actual range might be slightly smaller depending on your\nhardware or operating system.\n\nM is the total number of digits and D is the number of digits following\nthe decimal point. If M and D are omitted, values are stored to the\nlimits permitted by the hardware. A single-precision floating-point\nnumber is accurate to approximately 7 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nUsing FLOAT might give you some unexpected problems because all\ncalculations in MySQL are done with double precision. See\nhttp://dev.mysql.com/doc/refman/5.6/en/no-matching-rows.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (384,17,'CHARSET','Syntax:\nCHARSET(str)\n\nReturns the character set of the string argument.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT CHARSET(\'abc\');\n -> \'latin1\'\nmysql> SELECT CHARSET(CONVERT(\'abc\' USING utf8));\n -> \'utf8\'\nmysql> SELECT CHARSET(USER());\n -> \'utf8\'\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); @@ -467,27 +467,27 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (387,32,'DAYOFYEAR','Syntax:\nDAYOFYEAR(date)\n\nReturns the day of the year for date, in the range 1 to 366.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFYEAR(\'2007-02-03\');\n -> 34\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (388,3,'%','Syntax:\nN % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M. For more\ninformation, see the description for the MOD() function in\nhttp://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (389,33,'ASTEXT','AsText(g), AsWKT(g)\n\nST_AsText(), ST_AsWKT(), AsText(), and AsWKT() are synonyms. For more\ninformation, see the description of ST_AsText().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-format-conversion-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (390,24,'DECLARE CONDITION','Syntax:\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n\nThe DECLARE ... CONDITION statement declares a named error condition,\nassociating a name with a condition that needs specific handling. The\nname can be referred to in a subsequent DECLARE ... HANDLER statement\n(see [HELP DECLARE HANDLER]).\n\nCondition declarations must appear before cursor or handler\ndeclarations.\n\nThe condition_value for DECLARE ... CONDITION can be a MySQL error code\n(a number) or an SQLSTATE value (a 5-character string literal). You\nshould not use MySQL error code 0 or SQLSTATE values that begin with\n\'00\', because those indicate success rather than an error condition.\nFor a list of MySQL error codes and SQLSTATE values, see\nhttp://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-condition.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/declare-condition.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (390,24,'DECLARE CONDITION','Syntax:\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n\nThe DECLARE ... CONDITION statement declares a named error condition,\nassociating a name with a condition that needs specific handling. The\nname can be referred to in a subsequent DECLARE ... HANDLER statement\n(see [HELP DECLARE HANDLER]).\n\nCondition declarations must appear before cursor or handler\ndeclarations.\n\nThe condition_value for DECLARE ... CONDITION indicates the specific\ncondition or class of conditions to associate with the condition name.\nIt can take the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code.\n\n Do not use MySQL error code 0 because that indicates success rather\n than an error condition. For a list of MySQL error codes, see\n http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n indicating an SQLSTATE value.\n\n Do not use SQLSTATE values that begin with \'00\' because those\n indicate success rather than an error condition. For a list of\n SQLSTATE values, see\n http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\nCondition names referred to in SIGNAL or use RESIGNAL statements must\nbe associated with SQLSTATE values, not MySQL error codes.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-condition.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/declare-condition.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (391,32,'MONTHNAME','Syntax:\nMONTHNAME(date)\n\nReturns the full name of the month for date. The language used for the\nname is controlled by the value of the lc_time_names system variable\n(http://dev.mysql.com/doc/refman/5.6/en/locale-support.html).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT MONTHNAME(\'2008-02-03\');\n -> \'February\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (392,26,'NUMGEOMETRIES','NumGeometries(gc)\n\nST_NumGeometries() and NumGeometries() are synonyms. For more\ninformation, see the description of ST_NumGeometries().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-geometrycollection-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-geometrycollection-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (393,32,'TIMESTAMP FUNCTION','Syntax:\nTIMESTAMP(expr), TIMESTAMP(expr1,expr2)\n\nWith a single argument, this function returns the date or datetime\nexpression expr as a datetime value. With two arguments, it adds the\ntime expression expr2 to the date or datetime expression expr1 and\nreturns the result as a datetime value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMP(\'2003-12-31\');\n -> \'2003-12-31 00:00:00\'\nmysql> SELECT TIMESTAMP(\'2003-12-31 12:00:00\',\'12:00:00\');\n -> \'2004-01-01 00:00:00\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (394,40,'DROP DATABASE','Syntax:\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDROP DATABASE drops all tables in the database and deletes the\ndatabase. Be very careful with this statement! To use DROP DATABASE,\nyou need the DROP privilege on the database. DROP SCHEMA is a synonym\nfor DROP DATABASE.\n\n*Important*: When a database is dropped, user privileges on the\ndatabase are not automatically dropped. See [HELP GRANT].\n\nIF EXISTS is used to prevent an error from occurring if the database\ndoes not exist.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-database.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-database.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (395,8,'CHANGE MASTER TO','Syntax:\nCHANGE MASTER TO option [, option] ...\n\noption:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_RETRY_COUNT = count\n | MASTER_DELAY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | MASTER_AUTO_POSITION = {0|1}\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | IGNORE_SERVER_IDS = (server_id_list)\n\nserver_id_list:\n [server_id [, server_id] ... ]\n\nCHANGE MASTER TO changes the parameters that the slave server uses for\nconnecting to the master server, for reading the master binary log, and\nreading the slave relay log. It also updates the contents of the master\ninfo and relay log info repositories (see\nhttp://dev.mysql.com/doc/refman/5.6/en/slave-logs.html). To use CHANGE\nMASTER TO, the slave replication threads must be stopped (use STOP\nSLAVE if necessary). In MySQL 5.6.11 and later, gtid_next must also be\nset to AUTOMATIC (Bug #16062608).\n\nOptions not specified retain their value, except as indicated in the\nfollowing discussion. Thus, in most cases, there is no need to specify\noptions that do not change. For example, if the password to connect to\nyour MySQL master has changed, you just need to issue these statements\nto tell the slave about the new password:\n\nSTOP SLAVE; -- if replication was running\nCHANGE MASTER TO MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE; -- if you want to restart replication\n\nMASTER_HOST, MASTER_USER, MASTER_PASSWORD, and MASTER_PORT provide\ninformation to the slave about how to connect to its master:\n\no MASTER_HOST and MASTER_PORT are the host name (or IP address) of the\n master host and its TCP/IP port.\n\n *Note*: Replication cannot use Unix socket files. You must be able to\n connect to the master MySQL server using TCP/IP.\n\n If you specify the MASTER_HOST or MASTER_PORT option, the slave\n assumes that the master server is different from before (even if the\n option value is the same as its current value.) In this case, the old\n values for the master binary log file name and position are\n considered no longer applicable, so if you do not specify\n MASTER_LOG_FILE and MASTER_LOG_POS in the statement,\n MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4 are silently appended to it.\n\n Setting MASTER_HOST=\'\' (that is, setting its value explicitly to an\n empty string) is not the same as not setting MASTER_HOST at all.\n Beginning with MySQL 5.5, trying to set MASTER_HOST to an empty\n string fails with an error. Previously, setting MASTER_HOST to an\n empty string caused START SLAVE subsequently to fail. (Bug #28796)\n\n In MySQL 5.6.5 and later, values used for MASTER_HOST and other\n CHANGE MASTER TO options are checked for linefeed (\\n or 0x0A)\n characters; the presence of such characters in these values causes\n the statement to fail with ER_MASTER_INFO. (Bug #11758581, Bug\n #50801)\n\no MASTER_USER and MASTER_PASSWORD are the user name and password of the\n account to use for connecting to the master.\n\n In MySQL 5.6.4 and later, MASTER_USER cannot be made empty; setting\n MASTER_USER = \'\' or leaving it unset when setting a value for\n MASTER_PASSWORD causes an error (Bug #13427949).\n\n The password used for a MySQL Replication slave account in a CHANGE\n MASTER TO statement is limited to 32 characters in length; if the\n password is longer, the statement succeeds, but any excess characters\n are silently truncated. This is an issue specific to MySQL\n Replication, which is fixed in MySQL 5.7. (Bug #11752299, Bug #43439)\n\n The text of a running CHANGE MASTER TO statement, including values\n for MASTER_USER and MASTER_PASSWORD, can be seen in the output of a\n concurrent SHOW PROCESSLIST statement. (The complete text of a START\n SLAVE statement is also visible to SHOW PROCESSLIST.)\n\nThe MASTER_SSL_xxx options provide information about using SSL for the\nconnection. They correspond to the --ssl-xxx options described in\nhttp://dev.mysql.com/doc/refman/5.6/en/ssl-options.html, and\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-solutions-ssl.html.\nThese options can be changed even on slaves that are compiled without\nSSL support. They are saved to the master info repository, but are\nignored if the slave does not have SSL support enabled. MASTER_SSL_CRL\nand MASTER_SSL_CRLPATH were added in MySQL 5.6.3.\n\nMASTER_CONNECT_RETRY specifies how many seconds to wait between connect\nretries. The default is 60.\n\nMASTER_RETRY_COUNT, added in MySQL 5.6.1, limits the number of\nreconnection attempts and updates the value of the Master_Retry_Count\ncolumn in the output of SHOW SLAVE STATUS (also added in MySQL 5.6.1).\nThe default value is 24 * 3600 = 86400. MASTER_RETRY_COUNT is intended\nto replace the older --master-retry-count server option, and is now the\npreferred method for setting this limit. You are encouraged not to rely\non --master-retry-count in new applications and, when upgrading to\nMySQL 5.6.1 or later from earlier versions of MySQL, to update any\nexisting applications that rely on it, so that they use CHANGE MASTER\nTO ... MASTER_RETRY_COUNT instead.\n\nMASTER_DELAY specifies how many seconds behind the master the slave\nmust lag. An event received from the master is not executed until at\nleast interval seconds later than its execution on the master. The\ndefault is 0. An error occurs if interval is not a nonnegative integer\nin the range from 0 to 231−1. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html. This\noption was added in MySQL 5.6.0.\n\nMASTER_BIND is for use on replication slaves having multiple network\ninterfaces, and determines which of the slave\'s network interfaces is\nchosen for connecting to the master.\n\nThe address configured with this option, if any, can be seen in the\nMaster_Bind column of the output from SHOW SLAVE STATUS. If you are\nusing slave status log tables (server started with\n--master-info-repository=TABLE), the value can also be seen as the\nMaster_bind column of the mysql.slave_master_info table.\n\nThe ability to bind a replication slave to a specific network interface\nwas added in MySQL 5.6.2. This is also supported by MySQL Cluster NDB\n7.3.1 and later.\n\nMASTER_HEARTBEAT_PERIOD sets the interval in seconds between\nreplication heartbeats. Whenever the master\'s binary log is updated\nwith an event, the waiting period for the next heartbeat is reset.\ninterval is a decimal value having the range 0 to 4294967 seconds and a\nresolution in milliseconds; the smallest nonzero value is 0.001.\nHeartbeats are sent by the master only if there are no unsent events in\nthe binary log file for a period longer than interval.\n\nIf you are logging master connection information to tables,\nMASTER_HEARTBEAT_PERIOD can be seen as the value of the Heartbeat\ncolumn of the mysql.slave_master_info table.\n\nSetting interval to 0 disables heartbeats altogether. The default value\nfor interval is equal to the value of slave_net_timeout divided by 2.\n\nSetting @@global.slave_net_timeout to a value less than that of the\ncurrent heartbeat interval results in a warning being issued. The\neffect of issuing RESET SLAVE on the heartbeat interval is to reset it\nto the default value.\n\nMASTER_LOG_FILE and MASTER_LOG_POS are the coordinates at which the\nslave I/O thread should begin reading from the master the next time the\nthread starts. RELAY_LOG_FILE and RELAY_LOG_POS are the coordinates at\nwhich the slave SQL thread should begin reading from the relay log the\nnext time the thread starts. If you specify either of MASTER_LOG_FILE\nor MASTER_LOG_POS, you cannot specify RELAY_LOG_FILE or RELAY_LOG_POS.\nIn MySQL 5.6.5 and later, if you specify either of MASTER_LOG_FILE or\nMASTER_LOG_POS, you also cannot specify MASTER_AUTO_POSITION = 1\n(described later in this section). If neither of MASTER_LOG_FILE or\nMASTER_LOG_POS is specified, the slave uses the last coordinates of the\nslave SQL thread before CHANGE MASTER TO was issued. This ensures that\nthere is no discontinuity in replication, even if the slave SQL thread\nwas late compared to the slave I/O thread, when you merely want to\nchange, say, the password to use.\n\nMASTER_AUTO_POSITION was added in MySQL 5.6.5. If MASTER_AUTO_POSITION\n= 1 is used with CHANGE MASTER TO, the slave attempts to connect to the\nmaster using the GTID-based replication protocol.\n\nWhen using GTIDs, the slave tells the master which transactions it has\nalready received, executed, or both. To compute this set, it reads the\nglobal value of gtid_executed and the value of the Retrieved_gtid_set\ncolumn from SHOW SLAVE STATUS. Since the GTID of the last transmitted\ntransaction is included in Retrieved_gtid_set even if the transaction\nwas only partially transmitted, the last received GTID is subtracted\nfrom this set. Thus, the slave computes the following set:\n\nUNION(@@global.gtid_executed, Retrieved_gtid_set - last_received_GTID)\n\nThis set is sent to the master as part of the initial handshake, and\nthe master sends back all transactions that it has executed which are\nnot part of the set. If any of these transactions have been already\npurged from the master\'s binary log, the master sends the error\nER_MASTER_HAS_PURGED_REQUIRED_GTIDS to the slave, and replication does\nnot start.\n\nWhen GTID-based replication is employed, the coordinates represented by\nMASTER_LOG_FILE and MASTER_LOG_POS are not used, and global transaction\nidentifiers are used instead. Thus the use of either or both of these\noptions together with MASTER_AUTO_POSITION causes an error.\n\nBeginning with MySQL 5.6.10, you can see whether replication is running\nwith autopositioning enabled by checking the output of SHOW SLAVE\nSTATUS. (Bug #15992220)\n\ngtid_mode must also be enabled before issuing CHANGE MASTER TO ...\nMASTER_AUTO_POSITION = 1. Otherwise, the statement fails with an error.\n\nTo revert to the older file-based replication protocol after using\nGTIDs, you can issue a new CHANGE MASTER TO statement that specifies\nMASTER_AUTO_POSITION = 0, as well as at least one of MASTER_LOG_FILE or\nMASTER_LOG_POSITION.\n\nCHANGE MASTER TO deletes all relay log files and starts a new one,\nunless you specify RELAY_LOG_FILE or RELAY_LOG_POS. In that case, relay\nlog files are kept; the relay_log_purge global variable is set silently\nto 0.\n\nPrior to MySQL 5.6.2, RELAY_LOG_FILE required an absolute path.\nBeginning with MySQL 5.6.2, the path can be relative, in which case it\nis assumed to be relative to the slave\'s data directory. (Bug #12190)\n\nIGNORE_SERVER_IDS takes a comma-separated list of 0 or more server IDs.\nEvents originating from the corresponding servers are ignored, with the\nexception of log rotation and deletion events, which are still recorded\nin the relay log.\n\nIn circular replication, the originating server normally acts as the\nterminator of its own events, so that they are not applied more than\nonce. Thus, this option is useful in circular replication when one of\nthe servers in the circle is removed. Suppose that you have a circular\nreplication setup with 4 servers, having server IDs 1, 2, 3, and 4, and\nserver 3 fails. When bridging the gap by starting replication from\nserver 2 to server 4, you can include IGNORE_SERVER_IDS = (3) in the\nCHANGE MASTER TO statement that you issue on server 4 to tell it to use\nserver 2 as its master instead of server 3. Doing so causes it to\nignore and not to propagate any statements that originated with the\nserver that is no longer in use.\n\nWhen a CHANGE MASTER TO statement is issued without any\nIGNORE_SERVER_IDS option, any existing list is preserved. To clear the\nlist of ignored servers, it is necessary to use the option with an\nempty list:\n\nCHANGE MASTER TO IGNORE_SERVER_IDS = ();\n\nRESET SLAVE ALL has no effect on the server ID list. This issue is\nfixed in MySQL 5.7. (Bug #18816897)\n\nIf IGNORE_SERVER_IDS contains the server\'s own ID and the server was\nstarted with the --replicate-same-server-id option enabled, an error\nresults.\n\nIn MySQL 5.6, the master info repository and the output of SHOW SLAVE\nSTATUS provide the list of servers that are currently ignored. For more\ninformation, see\nhttp://dev.mysql.com/doc/refman/5.6/en/slave-logs-status.html, and\n[HELP SHOW SLAVE STATUS].\n\nIn MySQL 5.6, invoking CHANGE MASTER TO causes the previous values for\nMASTER_HOST, MASTER_PORT, MASTER_LOG_FILE, and MASTER_LOG_POS to be\nwritten to the error log, along with other information about the\nslave\'s state prior to execution.\n\nIn MySQL 5.6.7 and later, CHANGE MASTER TO causes an implicit commit of\nan ongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nCHANGE MASTER TO is useful for setting up a slave when you have the\nsnapshot of the master and have recorded the master binary log\ncoordinates corresponding to the time of the snapshot. After loading\nthe snapshot into the slave to synchronize it with the master, you can\nrun CHANGE MASTER TO MASTER_LOG_FILE=\'log_name\', MASTER_LOG_POS=log_pos\non the slave to specify the coordinates at which the slave should begin\nreading the master binary log.\n\nThe following example changes the master server the slave uses and\nestablishes the master binary log coordinates from which the slave\nbegins reading. This is used when you want to set up the slave to\nreplicate the master:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.mycompany.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'bigs3cret\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\n\nThe next example shows an operation that is less frequently employed.\nIt is used when the slave has relay log files that you want it to\nexecute again for some reason. To do this, the master need not be\nreachable. You need only use CHANGE MASTER TO and start the SQL thread\n(START SLAVE SQL_THREAD):\n\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/change-master-to.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/change-master-to.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (396,27,'SHOW GRANTS','Syntax:\nSHOW GRANTS [FOR user]\n\nThis statement lists the GRANT statement or statements that must be\nissued to duplicate the privileges that are granted to a MySQL user\naccount. SHOW GRANTS requires the SELECT privilege for the mysql\ndatabase, except to see the privileges for the current user.\n\nThe account is named using the same format as for the GRANT statement;\nfor example, \'jeffrey\'@\'localhost\'. If you specify only the user name\npart of the account name, a host name part of \'%\' is used. For\nadditional information about specifying account names, see [HELP\nGRANT].\n\nmysql> SHOW GRANTS FOR \'root\'@\'localhost\';\n+---------------------------------------------------------------------+\n| Grants for root@localhost |\n+---------------------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION |\n+---------------------------------------------------------------------+\n\nTo list the privileges granted to the account that you are using to\nconnect to the server, you can use any of the following statements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is\nused in DEFINER context, such as within a stored procedure that is\ndefined with SQL SECURITY DEFINER), the grants displayed are those of\nthe definer and not the invoker.\n\nSHOW GRANTS displays only the privileges granted explicitly to the\nnamed account. Other privileges might be available to the account, but\nthey are not displayed. For example, if an anonymous account exists,\nthe named account might be able to use its privileges, but SHOW GRANTS\nwill not display them.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-grants.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-grants.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (395,8,'CHANGE MASTER TO','Syntax:\nCHANGE MASTER TO option [, option] ...\n\noption:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_RETRY_COUNT = count\n | MASTER_DELAY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | MASTER_AUTO_POSITION = {0|1}\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | IGNORE_SERVER_IDS = (server_id_list)\n\nserver_id_list:\n [server_id [, server_id] ... ]\n\nCHANGE MASTER TO changes the parameters that the slave server uses for\nconnecting to the master server, for reading the master binary log, and\nreading the slave relay log. It also updates the contents of the master\ninfo and relay log info repositories (see\nhttp://dev.mysql.com/doc/refman/5.6/en/slave-logs.html). To use CHANGE\nMASTER TO, the slave replication threads must be stopped (use STOP\nSLAVE if necessary). In MySQL 5.6.11 and later, gtid_next must also be\nset to AUTOMATIC (Bug #16062608).\n\nOptions not specified retain their value, except as indicated in the\nfollowing discussion. Thus, in most cases, there is no need to specify\noptions that do not change. For example, if the password to connect to\nyour MySQL master has changed, issue these statements to tell the slave\nabout the new password:\n\nSTOP SLAVE; -- if replication was running\nCHANGE MASTER TO MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE; -- if you want to restart replication\n\nMASTER_HOST, MASTER_USER, MASTER_PASSWORD, and MASTER_PORT provide\ninformation to the slave about how to connect to its master:\n\no MASTER_HOST and MASTER_PORT are the host name (or IP address) of the\n master host and its TCP/IP port.\n\n *Note*: Replication cannot use Unix socket files. You must be able to\n connect to the master MySQL server using TCP/IP.\n\n If you specify the MASTER_HOST or MASTER_PORT option, the slave\n assumes that the master server is different from before (even if the\n option value is the same as its current value.) In this case, the old\n values for the master binary log file name and position are\n considered no longer applicable, so if you do not specify\n MASTER_LOG_FILE and MASTER_LOG_POS in the statement,\n MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4 are silently appended to it.\n\n Setting MASTER_HOST=\'\' (that is, setting its value explicitly to an\n empty string) is not the same as not setting MASTER_HOST at all.\n Beginning with MySQL 5.5, trying to set MASTER_HOST to an empty\n string fails with an error. Previously, setting MASTER_HOST to an\n empty string caused START SLAVE subsequently to fail. (Bug #28796)\n\n In MySQL 5.6.5 and later, values used for MASTER_HOST and other\n CHANGE MASTER TO options are checked for linefeed (\\n or 0x0A)\n characters; the presence of such characters in these values causes\n the statement to fail with ER_MASTER_INFO. (Bug #11758581, Bug\n #50801)\n\no MASTER_USER and MASTER_PASSWORD are the user name and password of the\n account to use for connecting to the master.\n\n In MySQL 5.6.4 and later, MASTER_USER cannot be made empty; setting\n MASTER_USER = \'\' or leaving it unset when setting a value for\n MASTER_PASSWORD causes an error (Bug #13427949).\n\n The password used for a MySQL Replication slave account in a CHANGE\n MASTER TO statement is limited to 32 characters in length; if the\n password is longer, the statement succeeds, but any excess characters\n are silently truncated. This is an issue specific to MySQL\n Replication, which is fixed in MySQL 5.7. (Bug #11752299, Bug #43439)\n\n The text of a running CHANGE MASTER TO statement, including values\n for MASTER_USER and MASTER_PASSWORD, can be seen in the output of a\n concurrent SHOW PROCESSLIST statement. (The complete text of a START\n SLAVE statement is also visible to SHOW PROCESSLIST.)\n\nThe MASTER_SSL_xxx options provide information about using SSL for the\nconnection. They correspond to the --ssl-xxx options described in\nhttp://dev.mysql.com/doc/refman/5.6/en/secure-connection-options.html,\nand\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-solutions-secure-con\nnections.html. These options can be changed even on slaves that are\ncompiled without SSL support. They are saved to the master info\nrepository, but are ignored if the slave does not have SSL support\nenabled. MASTER_SSL_CRL and MASTER_SSL_CRLPATH were added in MySQL\n5.6.3.\n\nMASTER_CONNECT_RETRY specifies how many seconds to wait between connect\nretries. The default is 60.\n\nMASTER_RETRY_COUNT, added in MySQL 5.6.1, limits the number of\nreconnection attempts and updates the value of the Master_Retry_Count\ncolumn in the output of SHOW SLAVE STATUS (also added in MySQL 5.6.1).\nThe default value is 24 * 3600 = 86400. MASTER_RETRY_COUNT is intended\nto replace the older --master-retry-count server option, and is now the\npreferred method for setting this limit. You are encouraged not to rely\non --master-retry-count in new applications and, when upgrading to\nMySQL 5.6.1 or later from earlier versions of MySQL, to update any\nexisting applications that rely on it, so that they use CHANGE MASTER\nTO ... MASTER_RETRY_COUNT instead.\n\nMASTER_DELAY specifies how many seconds behind the master the slave\nmust lag. An event received from the master is not executed until at\nleast interval seconds later than its execution on the master. The\ndefault is 0. An error occurs if interval is not a nonnegative integer\nin the range from 0 to 231−1. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html. This\noption was added in MySQL 5.6.0.\n\nMASTER_BIND is for use on replication slaves having multiple network\ninterfaces, and determines which of the slave\'s network interfaces is\nchosen for connecting to the master.\n\nThe address configured with this option, if any, can be seen in the\nMaster_Bind column of the output from SHOW SLAVE STATUS. If you are\nusing slave status log tables (server started with\n--master-info-repository=TABLE), the value can also be seen as the\nMaster_bind column of the mysql.slave_master_info table.\n\nThe ability to bind a replication slave to a specific network interface\nwas added in MySQL 5.6.2. This is also supported by MySQL Cluster NDB\n7.3.1 and later.\n\nMASTER_HEARTBEAT_PERIOD sets the interval in seconds between\nreplication heartbeats. Whenever the master\'s binary log is updated\nwith an event, the waiting period for the next heartbeat is reset.\ninterval is a decimal value having the range 0 to 4294967 seconds and a\nresolution in milliseconds; the smallest nonzero value is 0.001.\nHeartbeats are sent by the master only if there are no unsent events in\nthe binary log file for a period longer than interval.\n\nIf you are logging master connection information to tables,\nMASTER_HEARTBEAT_PERIOD can be seen as the value of the Heartbeat\ncolumn of the mysql.slave_master_info table.\n\nSetting interval to 0 disables heartbeats altogether. The default value\nfor interval is equal to the value of slave_net_timeout divided by 2.\n\nSetting @@global.slave_net_timeout to a value less than that of the\ncurrent heartbeat interval results in a warning being issued. The\neffect of issuing RESET SLAVE on the heartbeat interval is to reset it\nto the default value.\n\nMASTER_LOG_FILE and MASTER_LOG_POS are the coordinates at which the\nslave I/O thread should begin reading from the master the next time the\nthread starts. RELAY_LOG_FILE and RELAY_LOG_POS are the coordinates at\nwhich the slave SQL thread should begin reading from the relay log the\nnext time the thread starts. If you specify either of MASTER_LOG_FILE\nor MASTER_LOG_POS, you cannot specify RELAY_LOG_FILE or RELAY_LOG_POS.\nIn MySQL 5.6.5 and later, if you specify either of MASTER_LOG_FILE or\nMASTER_LOG_POS, you also cannot specify MASTER_AUTO_POSITION = 1\n(described later in this section). If neither of MASTER_LOG_FILE or\nMASTER_LOG_POS is specified, the slave uses the last coordinates of the\nslave SQL thread before CHANGE MASTER TO was issued. This ensures that\nthere is no discontinuity in replication, even if the slave SQL thread\nwas late compared to the slave I/O thread, when you merely want to\nchange, say, the password to use.\n\nMASTER_AUTO_POSITION was added in MySQL 5.6.5. If MASTER_AUTO_POSITION\n= 1 is used with CHANGE MASTER TO, the slave attempts to connect to the\nmaster using the GTID-based replication protocol.\n\nWhen using GTIDs, the slave tells the master which transactions it has\nalready received, executed, or both. To compute this set, it reads the\nglobal value of gtid_executed and the value of the Retrieved_gtid_set\ncolumn from SHOW SLAVE STATUS. Since the GTID of the last transmitted\ntransaction is included in Retrieved_gtid_set even if the transaction\nwas only partially transmitted, the last received GTID is subtracted\nfrom this set. Thus, the slave computes the following set:\n\nUNION(@@global.gtid_executed, Retrieved_gtid_set - last_received_GTID)\n\nThis set is sent to the master as part of the initial handshake, and\nthe master sends back all transactions that it has executed which are\nnot part of the set. If any of these transactions have been already\npurged from the master\'s binary log, the master sends the error\nER_MASTER_HAS_PURGED_REQUIRED_GTIDS to the slave, and replication does\nnot start.\n\nWhen GTID-based replication is employed, the coordinates represented by\nMASTER_LOG_FILE and MASTER_LOG_POS are not used, and global transaction\nidentifiers are used instead. Thus the use of either or both of these\noptions together with MASTER_AUTO_POSITION causes an error.\n\nBeginning with MySQL 5.6.10, you can see whether replication is running\nwith autopositioning enabled by checking the output of SHOW SLAVE\nSTATUS. (Bug #15992220)\n\ngtid_mode must also be enabled before issuing CHANGE MASTER TO ...\nMASTER_AUTO_POSITION = 1. Otherwise, the statement fails with an error.\n\nTo revert to the older file-based replication protocol after using\nGTIDs, you can issue a new CHANGE MASTER TO statement that specifies\nMASTER_AUTO_POSITION = 0, as well as at least one of MASTER_LOG_FILE or\nMASTER_LOG_POS.\n\nCHANGE MASTER TO deletes all relay log files and starts a new one,\nunless you specify RELAY_LOG_FILE or RELAY_LOG_POS. In that case, relay\nlog files are kept; the relay_log_purge global variable is set silently\nto 0.\n\nPrior to MySQL 5.6.2, RELAY_LOG_FILE required an absolute path.\nBeginning with MySQL 5.6.2, the path can be relative, in which case it\nis assumed to be relative to the slave\'s data directory. (Bug #12190)\n\nIGNORE_SERVER_IDS takes a comma-separated list of 0 or more server IDs.\nEvents originating from the corresponding servers are ignored, with the\nexception of log rotation and deletion events, which are still recorded\nin the relay log.\n\nIn circular replication, the originating server normally acts as the\nterminator of its own events, so that they are not applied more than\nonce. Thus, this option is useful in circular replication when one of\nthe servers in the circle is removed. Suppose that you have a circular\nreplication setup with 4 servers, having server IDs 1, 2, 3, and 4, and\nserver 3 fails. When bridging the gap by starting replication from\nserver 2 to server 4, you can include IGNORE_SERVER_IDS = (3) in the\nCHANGE MASTER TO statement that you issue on server 4 to tell it to use\nserver 2 as its master instead of server 3. Doing so causes it to\nignore and not to propagate any statements that originated with the\nserver that is no longer in use.\n\nWhen a CHANGE MASTER TO statement is issued without any\nIGNORE_SERVER_IDS option, any existing list is preserved. To clear the\nlist of ignored servers, it is necessary to use the option with an\nempty list:\n\nCHANGE MASTER TO IGNORE_SERVER_IDS = ();\n\nRESET SLAVE ALL has no effect on the server ID list. This issue is\nfixed in MySQL 5.7. (Bug #18816897)\n\nIf IGNORE_SERVER_IDS contains the server\'s own ID and the server was\nstarted with the --replicate-same-server-id option enabled, an error\nresults.\n\nIn MySQL 5.6, the master info repository and the output of SHOW SLAVE\nSTATUS provide the list of servers that are currently ignored. For more\ninformation, see\nhttp://dev.mysql.com/doc/refman/5.6/en/slave-logs-status.html, and\n[HELP SHOW SLAVE STATUS].\n\nIn MySQL 5.6, invoking CHANGE MASTER TO causes the previous values for\nMASTER_HOST, MASTER_PORT, MASTER_LOG_FILE, and MASTER_LOG_POS to be\nwritten to the error log, along with other information about the\nslave\'s state prior to execution.\n\nIn MySQL 5.6.7 and later, CHANGE MASTER TO causes an implicit commit of\nan ongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nCHANGE MASTER TO is useful for setting up a slave when you have the\nsnapshot of the master and have recorded the master binary log\ncoordinates corresponding to the time of the snapshot. After loading\nthe snapshot into the slave to synchronize it with the master, you can\nrun CHANGE MASTER TO MASTER_LOG_FILE=\'log_name\', MASTER_LOG_POS=log_pos\non the slave to specify the coordinates at which the slave should begin\nreading the master binary log.\n\nThe following example changes the master server the slave uses and\nestablishes the master binary log coordinates from which the slave\nbegins reading. This is used when you want to set up the slave to\nreplicate the master:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.mycompany.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'bigs3cret\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\n\nThe next example shows an operation that is less frequently employed.\nIt is used when the slave has relay log files that you want it to\nexecute again for some reason. To do this, the master need not be\nreachable. You need only use CHANGE MASTER TO and start the SQL thread\n(START SLAVE SQL_THREAD):\n\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/change-master-to.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/change-master-to.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (396,27,'SHOW GRANTS','Syntax:\nSHOW GRANTS [FOR user]\n\nThis statement displays the GRANT statement or statements that must be\nissued to duplicate the privileges that are granted to a MySQL user\naccount. SHOW GRANTS requires the SELECT privilege for the mysql\ndatabase, except to see the privileges for the current user.\n\nFor output that includes an IDENTIFIED BY PASSWORD clause displaying an\naccount password hash value, the SUPER privilege is required to see the\nactual hash value. Otherwise, the value displays as .\n\nTo name the account, use the same format as for the GRANT statement;\nfor example, \'jeffrey\'@\'localhost\'. If you specify only the user name\npart of the account name, a host name part of \'%\' is used. For\nadditional information about specifying account names, see [HELP\nGRANT].\n\nmysql> SHOW GRANTS FOR \'root\'@\'localhost\';\n+---------------------------------------------------------------------+\n| Grants for root@localhost |\n+---------------------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION |\n+---------------------------------------------------------------------+\n\nTo display the privileges granted to the account that you are using to\nconnect to the server, you can use any of the following statements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is\nused in DEFINER context, such as within a stored procedure that is\ndefined with SQL SECURITY DEFINER), the grants displayed are those of\nthe definer and not the invoker.\n\nSHOW GRANTS displays only the privileges granted explicitly to the\nnamed account. Other privileges that might be available to the account\nare not displayed. For example, if an anonymous account exists, the\nnamed account might be able to use its privileges, but SHOW GRANTS will\nnot display them.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-grants.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-grants.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (397,3,'CRC32','Syntax:\nCRC32(expr)\n\nComputes a cyclic redundancy check value and returns a 32-bit unsigned\nvalue. The result is NULL if the argument is NULL. The argument is\nexpected to be a string and (if possible) is treated as one if it is\nnot.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT CRC32(\'MySQL\');\n -> 3259397556\nmysql> SELECT CRC32(\'mysql\');\n -> 2501908538\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (398,13,'STARTPOINT','StartPoint(ls)\n\nST_StartPoint() and StartPoint() are synonyms. For more information,\nsee the description of ST_StartPoint().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (399,4,'MPOLYFROMTEXT','MPolyFromText(wkt[,srid]), MultiPolygonFromText(wkt[,srid])\n\nConstructs a MultiPolygon value using its WKT representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (400,24,'DECLARE VARIABLE','Syntax:\nDECLARE var_name [, var_name] ... type [DEFAULT value]\n\nThis statement declares local variables within stored programs. To\nprovide a default value for a variable, include a DEFAULT clause. The\nvalue can be specified as an expression; it need not be a constant. If\nthe DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect\nto data type and overflow checking. See [HELP CREATE PROCEDURE].\n\nVariable declarations must appear before cursor or handler\ndeclarations.\n\nLocal variable names are not case sensitive. Permissible characters and\nquoting rules are the same as for other identifiers, as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html.\n\nThe scope of a local variable is the BEGIN ... END block within which\nit is declared. The variable can be referred to in blocks nested within\nthe declaring block, except those blocks that declare a variable with\nthe same name.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-local-variable.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/declare-local-variable.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (400,24,'DECLARE VARIABLE','Syntax:\nDECLARE var_name [, var_name] ... type [DEFAULT value]\n\nThis statement declares local variables within stored programs. To\nprovide a default value for a variable, include a DEFAULT clause. The\nvalue can be specified as an expression; it need not be a constant. If\nthe DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect\nto data type and overflow checking. See [HELP CREATE PROCEDURE].\n\nVariable declarations must appear before cursor or handler\ndeclarations.\n\nLocal variable names are not case sensitive. Permissible characters and\nquoting rules are the same as for other identifiers, as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/identifiers.html.\n\nThe scope of a local variable is the BEGIN ... END block within which\nit is declared. The variable can be referred to in blocks nested within\nthe declaring block, except those blocks that declare a variable with\nthe same name.\n\nFor examples of variable declarations, see\nhttp://dev.mysql.com/doc/refman/5.6/en/local-variable-scope.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-local-variable.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/declare-local-variable.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (401,20,'NOT BETWEEN','Syntax:\nexpr NOT BETWEEN min AND max\n\nThis is the same as NOT (expr BETWEEN min AND max).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (402,32,'YEARWEEK','Syntax:\nYEARWEEK(date), YEARWEEK(date,mode)\n\nReturns year and week for a date. The mode argument works exactly like\nthe mode argument to WEEK(). The year in the result may be different\nfrom the year in the date argument for the first and the last week of\nthe year.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT YEARWEEK(\'1987-01-01\');\n -> 198653\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (402,32,'YEARWEEK','Syntax:\nYEARWEEK(date), YEARWEEK(date,mode)\n\nReturns year and week for a date. The year in the result may be\ndifferent from the year in the date argument for the first and the last\nweek of the year.\n\nThe mode argument works exactly like the mode argument to WEEK(). For\nthe single-argument syntax, a mode value of 0 is used. Unlike WEEK(),\nthe value of default_week_format does not influence YEARWEEK().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT YEARWEEK(\'1987-01-01\');\n -> 198652\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (403,16,'BIT_OR','Syntax:\nBIT_OR(expr)\n\nReturns the bitwise OR of all bits in expr. The calculation is\nperformed with 64-bit (BIGINT) precision.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (404,3,'LOG10','Syntax:\nLOG10(X)\n\nReturns the base-10 logarithm of X.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT LOG10(2);\n -> 0.30102999566398\nmysql> SELECT LOG10(100);\n -> 2\nmysql> SELECT LOG10(-100);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (405,23,'DECIMAL','DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]\n\nA packed "exact" fixed-point number. M is the total number of digits\n(the precision) and D is the number of digits after the decimal point\n(the scale). The decimal point and (for negative numbers) the "-" sign\nare not counted in M. If D is 0, values have no decimal point or\nfractional part. The maximum number of digits (M) for DECIMAL is 65.\nThe maximum number of supported decimals (D) is 30. If D is omitted,\nthe default is 0. If M is omitted, the default is 10.\n\nUNSIGNED, if specified, disallows negative values.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with\na precision of 65 digits.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (405,23,'DECIMAL','DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]\n\nA packed "exact" fixed-point number. M is the total number of digits\n(the precision) and D is the number of digits after the decimal point\n(the scale). The decimal point and (for negative numbers) the - sign\nare not counted in M. If D is 0, values have no decimal point or\nfractional part. The maximum number of digits (M) for DECIMAL is 65.\nThe maximum number of supported decimals (D) is 30. If D is omitted,\nthe default is 0. If M is omitted, the default is 10.\n\nUNSIGNED, if specified, disallows negative values.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with\na precision of 65 digits.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (406,40,'CREATE FUNCTION','The CREATE FUNCTION statement is used to create stored functions and\nuser-defined functions (UDFs):\n\no For information about creating stored functions, see [HELP CREATE\n PROCEDURE].\n\no For information about creating user-defined functions, see [HELP\n CREATE FUNCTION UDF].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-function.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-function.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (407,20,'<','Syntax:\n<\n\nLess than:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 2 < 2;\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (408,12,'MD5','Syntax:\nMD5(str)\n\nCalculates an MD5 128-bit checksum for the string. The value is\nreturned as a string of 32 hex digits, or NULL if the argument was\nNULL. The return value can, for example, be used as a hash key. See the\nnotes at the beginning of this section about storing hash values\nefficiently.\n\nThe return value is a nonbinary string in the connection character set.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SELECT MD5(\'testing\');\n -> \'ae2b1fca515949e5d54fb22b8ed95575\'\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (409,32,'DAYOFMONTH','Syntax:\nDAYOFMONTH(date)\n\nReturns the day of the month for date, in the range 1 to 31, or 0 for\ndates such as \'0000-00-00\' or \'2008-00-00\' that have a zero day part.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFMONTH(\'2007-02-03\');\n -> 3\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (410,32,'UNIX_TIMESTAMP','Syntax:\nUNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)\n\nIf called with no argument, returns a Unix timestamp (seconds since\n\'1970-01-01 00:00:00\' UTC) as an unsigned integer. If UNIX_TIMESTAMP()\nis called with a date argument, it returns the value of the argument as\nseconds since \'1970-01-01 00:00:00\' UTC. date may be a DATE string, a\nDATETIME string, a TIMESTAMP, or a number in the format YYMMDD or\nYYYYMMDD. The server interprets date as a value in the current time\nzone and converts it to an internal value in UTC. Clients can set their\ntime zone as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT UNIX_TIMESTAMP();\n -> 1196440210\nmysql> SELECT UNIX_TIMESTAMP(\'2007-11-30 10:30:19\');\n -> 1196440219\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (410,32,'UNIX_TIMESTAMP','Syntax:\nUNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)\n\nIf called with no argument, returns a Unix timestamp (seconds since\n\'1970-01-01 00:00:00\' UTC). As of MySQL 5.6.4, the return value is an\ninteger if no argument is given or the argument does not include a\nfractional seconds part, or DECIMAL if an argument is given that\nincludes a fractional seconds part. Before MySQL 5.6.4, the return\nvalue is an integer.\n\nIf UNIX_TIMESTAMP() is called with a date argument, it returns the\nvalue of the argument as seconds since \'1970-01-01 00:00:00\' UTC. date\nmay be a DATE string, a DATETIME string, a TIMESTAMP, or a number in\nthe format YYMMDD or YYYYMMDD, optionally including a fractional\nseconds part. (Before MySQL 5.6.4, any fractional seconds part is\nignored.) The server interprets date as a value in the current time\nzone and converts it to an internal value in UTC. Clients can set their\ntime zone as described in\nhttp://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT UNIX_TIMESTAMP();\n -> 1447431666\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19\');\n -> 1447431619\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19.012\');\n -> 1447431619.012\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (411,26,'ST_INTERSECTION','ST_Intersection(g1, g2)\n\nReturns a geometry that represents the point set intersection of the\ngeometry values g1 and g2.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'LineString(1 1, 3 3)\');\nmysql> SET @g2 = ST_GeomFromText(\'LineString(1 3, 3 1)\');\nmysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));\n+--------------------------------------+\n| ST_AsText(ST_Intersection(@g1, @g2)) |\n+--------------------------------------+\n| POINT(2 2) |\n+--------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/spatial-operator-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (412,10,'RENAME USER','Syntax:\nRENAME USER old_user TO new_user\n [, old_user TO new_user] ...\n\nThe RENAME USER statement renames existing MySQL accounts. An error\noccurs for old accounts that do not exist or new accounts that already\nexist.\n\nTo use RENAME USER, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql database. When the read_only system\nvariable is enabled, RENAME USER additionally requires the SUPER\nprivilege.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.6/en/account-names.html. For example:\n\nRENAME USER \'jeffrey\'@\'localhost\' TO \'jeff\'@\'127.0.0.1\';\n\nIf you specify only the user name part of the account name, a host name\npart of \'%\' is used.\n\nRENAME USER causes the privileges held by the old user to be those held\nby the new user. However, RENAME USER does not automatically drop or\ninvalidate databases or objects within them that the old user created.\nThis includes stored programs or views for which the DEFINER attribute\nnames the old user. Attempts to access such objects may produce an\nerror if they execute in definer security context. (For information\nabout security context, see\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-security.html.)\n\nThe privilege changes take effect as indicated in\nhttp://dev.mysql.com/doc/refman/5.6/en/privilege-changes.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/rename-user.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/rename-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (413,13,'NUMPOINTS','NumPoints(ls)\n\nST_NumPoints() and NumPoints() are synonyms. For more information, see\nthe description of ST_NumPoints().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-linestring-property-functions.html'); @@ -504,9 +504,9 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (424,4,'GEOMCOLLFROMTEXT','GeomCollFromText(wkt[,srid]), GeometryCollectionFromText(wkt[,srid])\n\nST_GeomCollFromText(), ST_GeometryCollectionFromText(),\nGeomCollFromText(), and GeometryCollectionFromText() are synonyms. For\nmore information, see the description of ST_GeomCollFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (425,2,'ST_INTERIORRINGN','ST_InteriorRingN(poly,N)\n\nReturns the N-th interior ring for the Polygon value poly as a\nLineString. Rings are numbered beginning with 1.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n -> \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));\n+-------------------------------------------------------+\n| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |\n+-------------------------------------------------------+\n| LINESTRING(1 1,1 2,2 2,2 1,1 1) |\n+-------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (426,17,'LAST_INSERT_ID','Syntax:\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nWith no argument, LAST_INSERT_ID() returns a 64-bit value representing\nthe first automatically generated value successfully inserted for an\nAUTO_INCREMENT column as a result of the most recently executed INSERT\nstatement. The value has a type of BIGINT UNSIGNED as of MySQL 5.6.9,\nBIGINT (signed) before that. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nWith an argument, LAST_INSERT_ID() returns an unsigned integer as of\nMySQL 5.6.9, a signed integer before that.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT\nvalue, you can get the value like this:\n\nmysql> SELECT LAST_INSERT_ID();\n -> 195\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value\nwith one statement, and then refer to LAST_INSERT_ID() in a\nmultiple-row INSERT statement that inserts rows into a table with its\nown AUTO_INCREMENT column. The value of LAST_INSERT_ID() will remain\nstable in the second statement; its value for the second and later rows\nis not affected by the earlier row insertions. (However, if you mix\nreferences to LAST_INSERT_ID() and LAST_INSERT_ID(expr), the effect is\nundefined.)\n\nIf the previous statement returned an error, the value of\nLAST_INSERT_ID() is undefined. For transactional tables, if the\nstatement is rolled back due to an error, the value of LAST_INSERT_ID()\nis left undefined. For manual ROLLBACK, the value of LAST_INSERT_ID()\nis not restored to that before the transaction; it remains as it was at\nthe point of the ROLLBACK.\n\nPrior to MySQL 5.6.15, this function was not replicated correctly if\nreplication filtering rules were in use. (Bug #17234370, Bug #69861)\n\nWithin the body of a stored routine (procedure or function) or a\ntrigger, the value of LAST_INSERT_ID() changes the same way as for\nstatements executed outside the body of these kinds of objects. The\neffect of a stored routine or trigger upon the value of\nLAST_INSERT_ID() that is seen by following statements depends on the\nkind of routine:\n\no If a stored procedure executes statements that change the value of\n LAST_INSERT_ID(), the changed value is seen by statements that follow\n the procedure call.\n\no For stored functions and triggers that change the value, the value is\n restored when the function or trigger ends, so following statements\n will not see a changed value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (427,3,'FLOOR','Syntax:\nFLOOR(X)\n\nReturns the largest integer value not greater than X.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT FLOOR(1.23);\n -> 1\nmysql> SELECT FLOOR(-1.23);\n -> -2\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (427,3,'FLOOR','Syntax:\nFLOOR(X)\n\nReturns the largest integer value not greater than X.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT FLOOR(1.23), FLOOR(-1.23);\n -> 1, -2\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (428,3,'COS','Syntax:\nCOS(X)\n\nReturns the cosine of X, where X is given in radians.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT COS(PI());\n -> -1\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (429,16,'STD','Syntax:\nSTD(expr)\n\nReturns the population standard deviation of expr. This is an extension\nto standard SQL. The standard SQL function STDDEV_POP() can be used\ninstead.\n\nThis function returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (429,16,'STD','Syntax:\nSTD(expr)\n\nReturns the population standard deviation of expr. This is an extension\nto standard SQL. The standard SQL function STDDEV_POP() can be used\ninstead.\n\nSTD() returns NULL if there were no matching rows.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (430,32,'DATE FUNCTION','Syntax:\nDATE(expr)\n\nExtracts the date part of the date or datetime expression expr.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT DATE(\'2003-12-31 01:02:03\');\n -> \'2003-12-31\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (431,3,'TAN','Syntax:\nTAN(X)\n\nReturns the tangent of X, where X is given in radians.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT TAN(PI());\n -> -1.2246063538224e-16\nmysql> SELECT TAN(PI()+1);\n -> 1.5574077246549\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (432,32,'WEEKOFYEAR','Syntax:\nWEEKOFYEAR(date)\n\nReturns the calendar week of the date as a number in the range from 1\nto 53. WEEKOFYEAR() is a compatibility function that is equivalent to\nWEEK(date,3).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKOFYEAR(\'2008-02-20\');\n -> 8\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); @@ -536,13 +536,13 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (456,27,'SHOW CREATE DATABASE','Syntax:\nSHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n\nShows the CREATE DATABASE statement that creates the named database. If\nthe SHOW statement includes an IF NOT EXISTS clause, the output too\nincludes such a clause. SHOW CREATE SCHEMA is a synonym for SHOW CREATE\nDATABASE.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-create-database.html\n\n','mysql> SHOW CREATE DATABASE test\\G\n*************************** 1. row ***************************\n Database: test\nCreate Database: CREATE DATABASE `test`\n /*!40100 DEFAULT CHARACTER SET latin1 */\n\nmysql> SHOW CREATE SCHEMA test\\G\n*************************** 1. row ***************************\n Database: test\nCreate Database: CREATE DATABASE `test`\n /*!40100 DEFAULT CHARACTER SET latin1 */\n','http://dev.mysql.com/doc/refman/5.6/en/show-create-database.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (457,15,'!','Syntax:\nNOT, !\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnonzero, and NOT NULL returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/logical-operators.html\n\n','mysql> SELECT NOT 10;\n -> 0\nmysql> SELECT NOT 0;\n -> 1\nmysql> SELECT NOT NULL;\n -> NULL\nmysql> SELECT ! (1+1);\n -> 0\nmysql> SELECT ! 1+1;\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/logical-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (458,23,'DOUBLE','DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]\n\nA normal-size (double-precision) floating-point number. Permissible\nvalues are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and\n2.2250738585072014E-308 to 1.7976931348623157E+308. These are the\ntheoretical limits, based on the IEEE standard. The actual range might\nbe slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following\nthe decimal point. If M and D are omitted, values are stored to the\nlimits permitted by the hardware. A double-precision floating-point\nnumber is accurate to approximately 15 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (459,24,'DECLARE HANDLER','Syntax:\nDECLARE handler_action HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_action:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n\nThe DECLARE ... HANDLER statement specifies a handler that deals with\none or more conditions. If one of these conditions occurs, the\nspecified statement executes. statement can be a simple statement such\nas SET var_name = value, or a compound statement written using BEGIN\nand END (see [HELP BEGIN END]).\n\nHandler declarations must appear after variable or condition\ndeclarations.\n\nThe handler_action value indicates what action the handler takes after\nexecution of the handler statement:\n\no CONTINUE: Execution of the current program continues.\n\no EXIT: Execution terminates for the BEGIN ... END compound statement\n in which the handler is declared. This is true even if the condition\n occurs in an inner block.\n\no UNDO: Not supported.\n\nThe condition_value for DECLARE ... HANDLER indicates the specific\ncondition or class of conditions that activates the handler:\n\no A MySQL error code (a number) or an SQLSTATE value (a 5-character\n string literal). You should not use MySQL error code 0 or SQLSTATE\n values that begin with \'00\', because those indicate success rather\n than an error condition. For a list of MySQL error codes and SQLSTATE\n values, see\n http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\no A condition name previously specified with DECLARE ... CONDITION. A\n condition name can be associated with a MySQL error code or SQLSTATE\n value. See [HELP DECLARE CONDITION].\n\no SQLWARNING is shorthand for the class of SQLSTATE values that begin\n with \'01\'.\n\no NOT FOUND is shorthand for the class of SQLSTATE values that begin\n with \'02\'. This is relevant within the context of cursors and is used\n to control what happens when a cursor reaches the end of a data set.\n If no more rows are available, a No Data condition occurs with\n SQLSTATE value \'02000\'. To detect this condition, you can set up a\n handler for it (or for a NOT FOUND condition). For an example, see\n http://dev.mysql.com/doc/refman/5.6/en/cursors.html. This condition\n also occurs for SELECT ... INTO var_list statements that retrieve no\n rows.\n\no SQLEXCEPTION is shorthand for the class of SQLSTATE values that do\n not begin with \'00\', \'01\', or \'02\'.\n\nFor information about how the server chooses handlers when a condition\noccurs, see http://dev.mysql.com/doc/refman/5.6/en/handler-scope.html.\n\nIf a condition occurs for which no handler has been declared, the\naction taken depends on the condition class:\n\no For SQLEXCEPTION conditions, the stored program terminates at the\n statement that raised the condition, as if there were an EXIT\n handler. If the program was called by another stored program, the\n calling program handles the condition using the handler selection\n rules applied to its own handlers.\n\no For SQLWARNING conditions, the program continues executing, as if\n there were a CONTINUE handler.\n\no For NOT FOUND conditions, if the condition was raised normally, the\n action is CONTINUE. If it was raised by SIGNAL or RESIGNAL, the\n action is EXIT.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-handler.html\n\n','mysql> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE handlerdemo ()\n -> BEGIN\n -> DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n -> SET @x = 1;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 2;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 3;\n -> END;\n -> //\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CALL handlerdemo()//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @x//\n +------+\n | @x |\n +------+\n | 3 |\n +------+\n 1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/declare-handler.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (459,24,'DECLARE HANDLER','Syntax:\nDECLARE handler_action HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_action:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n\nThe DECLARE ... HANDLER statement specifies a handler that deals with\none or more conditions. If one of these conditions occurs, the\nspecified statement executes. statement can be a simple statement such\nas SET var_name = value, or a compound statement written using BEGIN\nand END (see [HELP BEGIN END]).\n\nHandler declarations must appear after variable or condition\ndeclarations.\n\nThe handler_action value indicates what action the handler takes after\nexecution of the handler statement:\n\no CONTINUE: Execution of the current program continues.\n\no EXIT: Execution terminates for the BEGIN ... END compound statement\n in which the handler is declared. This is true even if the condition\n occurs in an inner block.\n\no UNDO: Not supported.\n\nThe condition_value for DECLARE ... HANDLER indicates the specific\ncondition or class of conditions that activates the handler. It can\ntake the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code,\n such as 1051 to specify "unknown table":\n\nDECLARE CONTINUE HANDLER FOR 1051\n BEGIN\n -- body of handler\n END;\n\n Do not use MySQL error code 0 because that indicates success rather\n than an error condition. For a list of MySQL error codes, see\n http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n indicating an SQLSTATE value, such as \'42S01\' to specify "unknown\n table":\n\nDECLARE CONTINUE HANDLER FOR SQLSTATE \'42S02\'\n BEGIN\n -- body of handler\n END;\n\n Do not use SQLSTATE values that begin with \'00\' because those\n indicate success rather than an error condition. For a list of\n SQLSTATE values, see\n http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html.\n\no condition_name: A condition name previously specified with DECLARE\n ... CONDITION. A condition name can be associated with a MySQL error\n code or SQLSTATE value. See [HELP DECLARE CONDITION].\n\no SQLWARNING: Shorthand for the class of SQLSTATE values that begin\n with \'01\'.\n\nDECLARE CONTINUE HANDLER FOR SQLWARNING\n BEGIN\n -- body of handler\n END;\n\no NOT FOUND: Shorthand for the class of SQLSTATE values that begin with\n \'02\'. This is relevant within the context of cursors and is used to\n control what happens when a cursor reaches the end of a data set. If\n no more rows are available, a No Data condition occurs with SQLSTATE\n value \'02000\'. To detect this condition, you can set up a handler for\n it or for a NOT FOUND condition.\n\nDECLARE CONTINUE HANDLER FOR NOT FOUND\n BEGIN\n -- body of handler\n END;\n\n For another example, see\n http://dev.mysql.com/doc/refman/5.6/en/cursors.html. The NOT FOUND\n condition also occurs for SELECT ... INTO var_list statements that\n retrieve no rows.\n\no SQLEXCEPTION: Shorthand for the class of SQLSTATE values that do not\n begin with \'00\', \'01\', or \'02\'.\n\nDECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n BEGIN\n -- body of handler\n END;\n\nFor information about how the server chooses handlers when a condition\noccurs, see http://dev.mysql.com/doc/refman/5.6/en/handler-scope.html.\n\nIf a condition occurs for which no handler has been declared, the\naction taken depends on the condition class:\n\no For SQLEXCEPTION conditions, the stored program terminates at the\n statement that raised the condition, as if there were an EXIT\n handler. If the program was called by another stored program, the\n calling program handles the condition using the handler selection\n rules applied to its own handlers.\n\no For SQLWARNING conditions, the program continues executing, as if\n there were a CONTINUE handler.\n\no For NOT FOUND conditions, if the condition was raised normally, the\n action is CONTINUE. If it was raised by SIGNAL or RESIGNAL, the\n action is EXIT.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-handler.html\n\n','mysql> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE handlerdemo ()\n -> BEGIN\n -> DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n -> SET @x = 1;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 2;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 3;\n -> END;\n -> //\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CALL handlerdemo()//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @x//\n +------+\n | @x |\n +------+\n | 3 |\n +------+\n 1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/declare-handler.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (460,23,'TIME','TIME[(fsp)]\n\nA time. The range is \'-838:59:59.000000\' to \'838:59:59.000000\'. MySQL\ndisplays TIME values in \'HH:MM:SS[.fraction]\' format, but permits\nassignment of values to TIME columns using either strings or numbers.\n\nAs of MySQL 5.6.4, an optional fsp value in the range from 0 to 6 may\nbe given to specify fractional seconds precision. A value of 0\nsignifies that there is no fractional part. If omitted, the default\nprecision is 0.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (461,17,'SYSTEM_USER','Syntax:\nSYSTEM_USER()\n\nSYSTEM_USER() is a synonym for USER().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (462,32,'CURRENT_DATE','Syntax:\nCURRENT_DATE, CURRENT_DATE()\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (463,40,'TRUNCATE TABLE','Syntax:\nTRUNCATE [TABLE] tbl_name\n\nTRUNCATE TABLE empties a table completely. It requires the DROP\nprivilege.\n\nLogically, TRUNCATE TABLE is similar to a DELETE statement that deletes\nall rows, or a sequence of DROP TABLE and CREATE TABLE statements. To\nachieve high performance, it bypasses the DML method of deleting data.\nThus, it cannot be rolled back, it does not cause ON DELETE triggers to\nfire, and it cannot be performed for InnoDB tables with parent-child\nforeign key relationships.\n\nAlthough TRUNCATE TABLE is similar to DELETE, it is classified as a DDL\nstatement rather than a DML statement. It differs from DELETE in the\nfollowing ways in MySQL 5.6:\n\no Truncate operations drop and re-create the table, which is much\n faster than deleting rows one by one, particularly for large tables.\n\no Truncate operations cause an implicit commit, and so cannot be rolled\n back.\n\no Truncation operations cannot be performed if the session holds an\n active table lock.\n\no TRUNCATE TABLE fails for an InnoDB table or NDB table if there are\n any FOREIGN KEY constraints from other tables that reference the\n table. Foreign key constraints between columns of the same table are\n permitted.\n\no Truncation operations do not return a meaningful value for the number\n of deleted rows. The usual result is "0 rows affected," which should\n be interpreted as "no information."\n\no As long as the table format file tbl_name.frm is valid, the table can\n be re-created as an empty table with TRUNCATE TABLE, even if the data\n or index files have become corrupted.\n\no Any AUTO_INCREMENT value is reset to its start value. This is true\n even for MyISAM and InnoDB, which normally do not reuse sequence\n values.\n\no When used with partitioned tables, TRUNCATE TABLE preserves the\n partitioning; that is, the data and index files are dropped and\n re-created, while the partition definitions (.par) file is\n unaffected.\n\no The TRUNCATE TABLE statement does not invoke ON DELETE triggers.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/truncate-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/truncate-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (464,2,'AREA','Area(poly)\n\nST_Area() and Area() are synonyms. For more information, see the\ndescription of ST_Area().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (465,8,'START SLAVE','Syntax:\nSTART SLAVE [thread_types] [until_option] [connection_options]\n\nthread_types:\n [thread_type [, thread_type] ... ]\n\nthread_type: \n IO_THREAD | SQL_THREAD\n\nuntil_option:\n UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set\n | MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos\n | RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos\n | SQL_AFTER_MTS_GAPS }\n\nconnection_options: \n [USER=\'user_name\'] [PASSWORD=\'user_pass\'] [DEFAULT_AUTH=\'plugin_name\'] [PLUGIN_DIR=\'plugin_dir\']\n\n\ngtid_set:\n uuid_set [, uuid_set] ...\n | \'\'\n\nuuid_set:\n uuid:interval[:interval]...\n\nuuid:\n hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh\n\nh:\n [0-9,A-F]\n\ninterval:\n n[-n]\n\n (n >= 1) \n\nSTART SLAVE with no thread_type options starts both of the slave\nthreads. The I/O thread reads events from the master server and stores\nthem in the relay log. The SQL thread reads events from the relay log\nand executes them. START SLAVE requires the SUPER privilege.\n\nIf START SLAVE succeeds in starting the slave threads, it returns\nwithout any error. However, even in that case, it might be that the\nslave threads start and then later stop (for example, because they do\nnot manage to connect to the master or read its binary log, or some\nother problem). START SLAVE does not warn you about this. You must\ncheck the slave\'s error log for error messages generated by the slave\nthreads, or check that they are running satisfactorily with SHOW SLAVE\nSTATUS.\n\nIn MySQL 5.6.7 and later, START SLAVE causes an implicit commit of an\nongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nBeginning with MySQL 5.6.11, gtid_next must be set to AUTOMATIC before\nissuing this statement (Bug #16062608).\n\nMySQL 5.6.4 and later supports pluggable user-password authentication\nwith START SLAVE with the USER, PASSWORD, DEFAULT_AUTH and PLUGIN_DIR\noptions, as described in the following list:\n\no USER: User name. Cannot be set to an empty or null string, or left\n unset if PASSWORD is used.\n\no PASSWORD: Password.\n\no DEFAULT_AUTH: Name of plugin; default is MySQL native authentication.\n\no PLUGIN_DIR: Location of plugin.\n\nStarting with MySQL 5.6.4, you cannot use the SQL_THREAD option when\nspecifying any of USER, PASSWORD, DEFAULT_AUTH, or PLUGIN_DIR, unless\nthe IO_THREAD option is also provided (Bug #13083642).\n\nSee\nhttp://dev.mysql.com/doc/refman/5.6/en/pluggable-authentication.html,\nfor more information.\n\nIf an insecure connection is used with any these options, the server\nissues the warning Sending passwords in plain text without SSL/TLS is\nextremely insecure.\n\nStarting with MySQL 5.6.6, START SLAVE ... UNTIL supports two\nadditional options for use with global transaction identifiers (GTIDs)\n(see http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html).\nEach of these takes a set of one or more global transaction identifiers\ngtid_set as an argument (see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html#\nreplication-gtids-concepts-gtid-sets, for more information).\n\nWhen no thread_type is specified, START SLAVE UNTIL SQL_BEFORE_GTIDS\ncauses the slave SQL thread to process transactions until it has\nreached the first transaction whose GTID is listed in the gtid_set.\nSTART SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads to process\nall transactions until the last transaction in the gtid_set has been\nprocessed by both threads. In other words, START SLAVE UNTIL\nSQL_BEFORE_GTIDS causes the slave SQL thread to process all\ntransactions occurring before the first GTID in the gtid_set is\nreached, and START SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads\nto handle all transactions, including those whose GTIDs are found in\ngtid_set, until each has encountered a transaction whose GTID is not\npart of the set. SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS each support the\nSQL_THREAD and IO_THREAD options, although using IO_THREAD with them\ncurrently has no effect.\n\nFor example, START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56 causes the slave SQL thread\nto process all transactions originating from the master whose\nserver_uuid is 3E11FA47-71CA-11E1-9E33-C80AA9429562 until it encounters\nthe transaction having sequence number 11; it then stops without\nprocessing this transaction. In other words, all transactions up to and\nincluding the transaction with sequence number 10 are processed.\nExecuting START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56, on the other hand, would\ncause the slave SQL thread to obtain all transactions just mentioned\nfrom the master, including all of the transactions having the sequence\nnumbers 11 through 56, and then to stop without processing any\nadditional transactions; that is, the transaction having sequence\nnumber 56 would be the last transaction fetched by the slave SQL\nthread.\n\nPrior to MySQL 5.6.14, SQL_AFTER_GTIDS did not stop the slave once the\nindicated transaction was completed, but waited until another GTID\nevent was received (Bug #14767986).\n\n*Note*: The SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS keywords are present\nin the MySQL 5.6.5 server; however, neither of them functioned\ncorrectly as options with START SLAVE [SQL_THREAD | IO_THREAD] UNTIL in\nthat version, and are therefore supported beginning only with MySQL\n5.6.6. (Bug#13810456)\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS is available in MySQL 5.6.6 or\nlater. This statement causes a multi-threaded slave\'s SQL threads to\nrun until no more gaps are found in the relay log, and then to stop.\nThis statement can take an SQL_THREAD option, but the effects of the\nstatement remain unchanged. It has no effect on the slave I/O thread\n(and cannot be used with the IO_THREAD option). START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS should be used before switching the slave from\nmulti-threaded mode to single-threaded mode (that is, when resetting\nslave_parallel_workers back to 0 from a positive, nonzero value) after\nslave has failed with errors in multi-threaded mode.\n\nTo change a failed multi-threaded slave to single-threaded mode, you\ncan issue the following series of statements, in the order shown:\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS;\n\nSET @@GLOBAL.slave_parallel_workers = 0;\n\nSTART SLAVE SQL_THREAD;\n\nIf you were running the failed multi-threaded slave with\nrelay_log_recovery enabled, then you must issue START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS prior to executing CHANGE MASTER TO. Otherwise the\nlatter statement fails.\n\n*Note*: It is possible to view the entire text of a running START SLAVE\n... statement, including any USER or PASSWORD values used, in the\noutput of SHOW PROCESSLIST. This is also true for the text of a running\nCHANGE MASTER TO statement, including any values it employs for\nMASTER_USER or MASTER_PASSWORD.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/start-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/start-slave.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (465,8,'START SLAVE','Syntax:\nSTART SLAVE [thread_types] [until_option] [connection_options]\n\nthread_types:\n [thread_type [, thread_type] ... ]\n\nthread_type:\n IO_THREAD | SQL_THREAD\n\nuntil_option:\n UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set\n | MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos\n | RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos\n | SQL_AFTER_MTS_GAPS }\n\nconnection_options:\n [USER=\'user_name\'] [PASSWORD=\'user_pass\'] [DEFAULT_AUTH=\'plugin_name\'] [PLUGIN_DIR=\'plugin_dir\']\n\n\ngtid_set:\n uuid_set [, uuid_set] ...\n | \'\'\n\nuuid_set:\n uuid:interval[:interval]...\n\nuuid:\n hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh\n\nh:\n [0-9,A-F]\n\ninterval:\n n[-n]\n\n (n >= 1)\n\nSTART SLAVE with no thread_type options starts both of the slave\nthreads. The I/O thread reads events from the master server and stores\nthem in the relay log. The SQL thread reads events from the relay log\nand executes them. START SLAVE requires the SUPER privilege.\n\nIf START SLAVE succeeds in starting the slave threads, it returns\nwithout any error. However, even in that case, it might be that the\nslave threads start and then later stop (for example, because they do\nnot manage to connect to the master or read its binary log, or some\nother problem). START SLAVE does not warn you about this. You must\ncheck the slave\'s error log for error messages generated by the slave\nthreads, or check that they are running satisfactorily with SHOW SLAVE\nSTATUS.\n\nIn MySQL 5.6.7 and later, START SLAVE causes an implicit commit of an\nongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html.\n\nBeginning with MySQL 5.6.11, gtid_next must be set to AUTOMATIC before\nissuing this statement (Bug #16062608).\n\nMySQL 5.6.4 and later supports pluggable user-password authentication\nwith START SLAVE with the USER, PASSWORD, DEFAULT_AUTH and PLUGIN_DIR\noptions, as described in the following list:\n\no USER: User name. Cannot be set to an empty or null string, or left\n unset if PASSWORD is used.\n\no PASSWORD: Password.\n\no DEFAULT_AUTH: Name of plugin; default is MySQL native authentication.\n\no PLUGIN_DIR: Location of plugin.\n\nStarting with MySQL 5.6.4, you cannot use the SQL_THREAD option when\nspecifying any of USER, PASSWORD, DEFAULT_AUTH, or PLUGIN_DIR, unless\nthe IO_THREAD option is also provided (Bug #13083642).\n\nSee\nhttp://dev.mysql.com/doc/refman/5.6/en/pluggable-authentication.html,\nfor more information.\n\nIf an insecure connection is used with any these options, the server\nissues the warning Sending passwords in plain text without SSL/TLS is\nextremely insecure.\n\nStarting with MySQL 5.6.6, START SLAVE ... UNTIL supports two\nadditional options for use with global transaction identifiers (GTIDs)\n(see http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html).\nEach of these takes a set of one or more global transaction identifiers\ngtid_set as an argument (see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html#\nreplication-gtids-concepts-gtid-sets, for more information).\n\nWhen no thread_type is specified, START SLAVE UNTIL SQL_BEFORE_GTIDS\ncauses the slave SQL thread to process transactions until it has\nreached the first transaction whose GTID is listed in the gtid_set.\nSTART SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads to process\nall transactions until the last transaction in the gtid_set has been\nprocessed by both threads. In other words, START SLAVE UNTIL\nSQL_BEFORE_GTIDS causes the slave SQL thread to process all\ntransactions occurring before the first GTID in the gtid_set is\nreached, and START SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads\nto handle all transactions, including those whose GTIDs are found in\ngtid_set, until each has encountered a transaction whose GTID is not\npart of the set. SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS each support the\nSQL_THREAD and IO_THREAD options, although using IO_THREAD with them\ncurrently has no effect.\n\nFor example, START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56 causes the slave SQL thread\nto process all transactions originating from the master whose\nserver_uuid is 3E11FA47-71CA-11E1-9E33-C80AA9429562 until it encounters\nthe transaction having sequence number 11; it then stops without\nprocessing this transaction. In other words, all transactions up to and\nincluding the transaction with sequence number 10 are processed.\nExecuting START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56, on the other hand, would\ncause the slave SQL thread to obtain all transactions just mentioned\nfrom the master, including all of the transactions having the sequence\nnumbers 11 through 56, and then to stop without processing any\nadditional transactions; that is, the transaction having sequence\nnumber 56 would be the last transaction fetched by the slave SQL\nthread.\n\nPrior to MySQL 5.6.14, SQL_AFTER_GTIDS did not stop the slave once the\nindicated transaction was completed, but waited until another GTID\nevent was received (Bug #14767986).\n\n*Note*: The SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS keywords are present\nin the MySQL 5.6.5 server; however, neither of them functioned\ncorrectly as options with START SLAVE [SQL_THREAD | IO_THREAD] UNTIL in\nthat version, and are therefore supported beginning only with MySQL\n5.6.6. (Bug#13810456)\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS is available in MySQL 5.6.6 or\nlater. This statement causes a multi-threaded slave\'s SQL threads to\nrun until no more gaps are found in the relay log, and then to stop.\nThis statement can take an SQL_THREAD option, but the effects of the\nstatement remain unchanged. It has no effect on the slave I/O thread\n(and cannot be used with the IO_THREAD option). START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS should be used before switching the slave from\nmulti-threaded mode to single-threaded mode (that is, when resetting\nslave_parallel_workers back to 0 from a positive, nonzero value) after\nslave has failed with errors in multi-threaded mode.\n\nTo change a failed multi-threaded slave to single-threaded mode, you\ncan issue the following series of statements, in the order shown:\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS;\n\nSET @@GLOBAL.slave_parallel_workers = 0;\n\nSTART SLAVE SQL_THREAD;\n\nIf you were running the failed multi-threaded slave with\nrelay_log_recovery enabled, then you must issue START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS prior to executing CHANGE MASTER TO. Otherwise the\nlatter statement fails.\n\n*Note*: It is possible to view the entire text of a running START SLAVE\n... statement, including any USER or PASSWORD values used, in the\noutput of SHOW PROCESSLIST. This is also true for the text of a running\nCHANGE MASTER TO statement, including any values it employs for\nMASTER_USER or MASTER_PASSWORD.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/start-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/start-slave.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (466,27,'SHOW WARNINGS','Syntax:\nSHOW WARNINGS [LIMIT [offset,] row_count]\nSHOW COUNT(*) WARNINGS\n\nSHOW WARNINGS is a diagnostic statement that displays information about\nthe conditions (errors, warnings, and notes) resulting from executing a\nstatement in the current session. Warnings are generated for DML\nstatements such as INSERT, UPDATE, and LOAD DATA INFILE as well as DDL\nstatements such as CREATE TABLE and ALTER TABLE.\n\nThe LIMIT clause has the same syntax as for the SELECT statement. See\nhttp://dev.mysql.com/doc/refman/5.6/en/select.html.\n\nSHOW WARNINGS is also used following EXPLAIN EXTENDED, to display the\nextra information generated by EXPLAIN when the EXTENDED keyword is\nused. See http://dev.mysql.com/doc/refman/5.6/en/explain-extended.html.\n\nSHOW WARNINGS displays information about the conditions resulting from\nthe most recent statement in the current session that generated\nmessages. It shows nothing if the most recent statement used a table\nand generated no messages. (That is, statements that use a table but\ngenerate no messages clear the message list.) Statements that do not\nuse tables and do not generate messages have no effect on the message\nlist.\n\nThe SHOW COUNT(*) WARNINGS diagnostic statement displays the total\nnumber of errors, warnings, and notes. You can also retrieve this\nnumber from the warning_count system variable:\n\nSHOW COUNT(*) WARNINGS;\nSELECT @@warning_count;\n\nA related diagnostic statement, SHOW ERRORS, shows only error\nconditions (it excludes warnings and notes), and SHOW COUNT(*) ERRORS\nstatement displays the total number of errors. See [HELP SHOW ERRORS].\nGET DIAGNOSTICS can be used to examine information for individual\nconditions. See [HELP GET DIAGNOSTICS].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-warnings.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-warnings.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (467,4,'ST_LINEFROMTEXT','ST_LineFromText(wkt[,srid]), ST_LineStringFromText(wkt[,srid])\n\nConstructs a LineString value using its WKT representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (468,10,'DROP USER','Syntax:\nDROP USER user [, user] ...\n\nThe DROP USER statement removes one or more MySQL accounts and their\nprivileges. It removes privilege rows for the account from all grant\ntables. An error occurs for accounts that do not exist.\n\nTo use DROP USER, you must have the global CREATE USER privilege or the\nDELETE privilege for the mysql database. When the read_only system\nvariable is enabled, DROP USER additionally requires the SUPER\nprivilege.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.6/en/account-names.html. For example:\n\nDROP USER \'jeffrey\'@\'localhost\';\n\nIf you specify only the user name part of the account name, a host name\npart of \'%\' is used.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-user.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-user.html'); @@ -559,7 +559,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (479,11,'ST_X','ST_X(p)\n\nReturns the X-coordinate value for the Point object p as a\ndouble-precision number.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-point-property-functions.html\n\n','mysql> SELECT ST_X(POINT(56.7, 53.34));\n+--------------------------+\n| ST_X(POINT(56.7, 53.34)) |\n+--------------------------+\n| 56.7 |\n+--------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-point-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (480,32,'TIMESTAMPADD','Syntax:\nTIMESTAMPADD(unit,interval,datetime_expr)\n\nAdds the integer expression interval to the date or datetime expression\ndatetime_expr. The unit for interval is given by the unit argument,\nwhich should be one of the following values: MICROSECOND\n(microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or\nYEAR.\n\nThe unit value may be specified using one of keywords as shown, or with\na prefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMPADD(MINUTE,1,\'2003-01-02\');\n -> \'2003-01-02 00:01:00\'\nmysql> SELECT TIMESTAMPADD(WEEK,1,\'2003-01-02\');\n -> \'2003-01-09\'\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (481,3,'TRUNCATE','Syntax:\nTRUNCATE(X,D)\n\nReturns the number X, truncated to D decimal places. If D is 0, the\nresult has no decimal point or fractional part. D can be negative to\ncause D digits left of the decimal point of the value X to become zero.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT TRUNCATE(1.223,1);\n -> 1.2\nmysql> SELECT TRUNCATE(1.999,1);\n -> 1.9\nmysql> SELECT TRUNCATE(1.999,0);\n -> 1\nmysql> SELECT TRUNCATE(-1.999,1);\n -> -1.9\nmysql> SELECT TRUNCATE(122,-2);\n -> 100\nmysql> SELECT TRUNCATE(10.28*100,0);\n -> 1028\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (482,27,'SHOW','SHOW has many forms that provide information about databases, tables,\ncolumns, or status information about the server. This section describes\nthose following:\n\nSHOW AUTHORS\nSHOW {BINARY | MASTER} LOGS\nSHOW BINLOG EVENTS [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\nSHOW CHARACTER SET [like_or_where]\nSHOW COLLATION [like_or_where]\nSHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]\nSHOW CONTRIBUTORS\nSHOW CREATE DATABASE db_name\nSHOW CREATE EVENT event_name\nSHOW CREATE FUNCTION func_name\nSHOW CREATE PROCEDURE proc_name\nSHOW CREATE TABLE tbl_name\nSHOW CREATE TRIGGER trigger_name\nSHOW CREATE VIEW view_name\nSHOW DATABASES [like_or_where]\nSHOW ENGINE engine_name {STATUS | MUTEX}\nSHOW [STORAGE] ENGINES\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW EVENTS\nSHOW FUNCTION CODE func_name\nSHOW FUNCTION STATUS [like_or_where]\nSHOW GRANTS FOR user\nSHOW INDEX FROM tbl_name [FROM db_name]\nSHOW MASTER STATUS\nSHOW OPEN TABLES [FROM db_name] [like_or_where]\nSHOW PLUGINS\nSHOW PROCEDURE CODE proc_name\nSHOW PROCEDURE STATUS [like_or_where]\nSHOW PRIVILEGES\nSHOW [FULL] PROCESSLIST\nSHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]\nSHOW PROFILES\nSHOW SLAVE HOSTS\nSHOW SLAVE STATUS\nSHOW [GLOBAL | SESSION] STATUS [like_or_where]\nSHOW TABLE STATUS [FROM db_name] [like_or_where]\nSHOW [FULL] TABLES [FROM db_name] [like_or_where]\nSHOW TRIGGERS [FROM db_name] [like_or_where]\nSHOW [GLOBAL | SESSION] VARIABLES [like_or_where]\nSHOW WARNINGS [LIMIT [offset,] row_count]\n\nlike_or_where:\n LIKE \'pattern\'\n | WHERE expr\n\nIf the syntax for a given SHOW statement includes a LIKE \'pattern\'\npart, \'pattern\' is a string that can contain the SQL "%" and "_"\nwildcard characters. The pattern is useful for restricting statement\noutput to matching values.\n\nSeveral SHOW statements also accept a WHERE clause that provides more\nflexibility in specifying which rows to display. See\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (482,27,'SHOW','SHOW has many forms that provide information about databases, tables,\ncolumns, or status information about the server. This section describes\nthose following:\n\nSHOW AUTHORS\nSHOW {BINARY | MASTER} LOGS\nSHOW BINLOG EVENTS [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\nSHOW CHARACTER SET [like_or_where]\nSHOW COLLATION [like_or_where]\nSHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]\nSHOW CONTRIBUTORS\nSHOW CREATE DATABASE db_name\nSHOW CREATE EVENT event_name\nSHOW CREATE FUNCTION func_name\nSHOW CREATE PROCEDURE proc_name\nSHOW CREATE TABLE tbl_name\nSHOW CREATE TRIGGER trigger_name\nSHOW CREATE VIEW view_name\nSHOW DATABASES [like_or_where]\nSHOW ENGINE engine_name {STATUS | MUTEX}\nSHOW [STORAGE] ENGINES\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW EVENTS\nSHOW FUNCTION CODE func_name\nSHOW FUNCTION STATUS [like_or_where]\nSHOW GRANTS FOR user\nSHOW INDEX FROM tbl_name [FROM db_name]\nSHOW MASTER STATUS\nSHOW OPEN TABLES [FROM db_name] [like_or_where]\nSHOW PLUGINS\nSHOW PROCEDURE CODE proc_name\nSHOW PROCEDURE STATUS [like_or_where]\nSHOW PRIVILEGES\nSHOW [FULL] PROCESSLIST\nSHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]\nSHOW PROFILES\nSHOW RELAYLOG EVENTS [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\nSHOW SLAVE HOSTS\nSHOW SLAVE STATUS\nSHOW [GLOBAL | SESSION] STATUS [like_or_where]\nSHOW TABLE STATUS [FROM db_name] [like_or_where]\nSHOW [FULL] TABLES [FROM db_name] [like_or_where]\nSHOW TRIGGERS [FROM db_name] [like_or_where]\nSHOW [GLOBAL | SESSION] VARIABLES [like_or_where]\nSHOW WARNINGS [LIMIT [offset,] row_count]\n\nlike_or_where:\n LIKE \'pattern\'\n | WHERE expr\n\nIf the syntax for a given SHOW statement includes a LIKE \'pattern\'\npart, \'pattern\' is a string that can contain the SQL "%" and "_"\nwildcard characters. The pattern is useful for restricting statement\noutput to matching values.\n\nSeveral SHOW statements also accept a WHERE clause that provides more\nflexibility in specifying which rows to display. See\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (483,27,'SHOW VARIABLES','Syntax:\nSHOW [GLOBAL | SESSION] VARIABLES\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW VARIABLES shows the values of MySQL system variables (see\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html).\nThis statement does not require any privilege. It requires only the\nability to connect to the server.\n\nSystem variable information is also available from these sources:\n\no The GLOBAL_VARIABLES and SESSION_VARIABLES tables. See\n http://dev.mysql.com/doc/refman/5.6/en/variables-table.html.\n\no The mysqladmin variables command. See\n http://dev.mysql.com/doc/refman/5.6/en/mysqladmin.html.\n\nFor SHOW VARIABLES, a LIKE clause, if present, indicates which variable\nnames to match. A WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html.\n\nSHOW VARIABLES accepts an optional GLOBAL or SESSION variable scope\nmodifier:\n\no With a GLOBAL modifier, the statement displays global system variable\n values. These are the values used to initialize the corresponding\n session variables for new connections to MySQL. If a variable has no\n global value, no value is displayed.\n\no With a SESSION modifier, the statement displays the system varaible\n values that are in effect for the current connection. If a variable\n has no session value, the global value is displayed. LOCAL is a\n synonym for SESSION.\n\no If no modifier is present, the default is SESSION.\n\nThe scope for each system variable is listed at\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\nSHOW VARIABLES is subject to a version-dependent display-width limit.\nFor variables with very long values that are not completely displayed,\nuse SELECT as a workaround. For example:\n\nSELECT @@GLOBAL.innodb_data_file_path;\n\nMost system variables can be set at server startup (read-only variables\nsuch as version_comment are exceptions). Many can be changed at runtime\nwith the SET statement. See\nhttp://dev.mysql.com/doc/refman/5.6/en/using-system-variables.html, and\n[HELP SET].\nWith a LIKE clause, the statement displays only rows for those\nvariables with names that match the pattern. To obtain the row for a\nspecific variable, use a LIKE clause as shown:\n\nSHOW VARIABLES LIKE \'max_join_size\';\nSHOW SESSION VARIABLES LIKE \'max_join_size\';\n\nTo get a list of variables whose name match a pattern, use the "%"\nwildcard character in a LIKE clause:\n\nSHOW VARIABLES LIKE \'%size%\';\nSHOW GLOBAL VARIABLES LIKE \'%size%\';\n\nWildcard characters can be used in any position within the pattern to\nbe matched. Strictly speaking, because "_" is a wildcard that matches\nany single character, you should escape it as "\\_" to match it\nliterally. In practice, this is rarely necessary.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-variables.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-variables.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (484,27,'BINLOG','Syntax:\nBINLOG \'str\'\n\nBINLOG is an internal-use statement. It is generated by the mysqlbinlog\nprogram as the printable representation of certain events in binary log\nfiles. (See http://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog.html.)\nThe \'str\' value is a base 64-encoded string the that server decodes to\ndetermine the data change indicated by the corresponding event. This\nstatement requires the SUPER privilege.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/binlog.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/binlog.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (485,31,'ST_DISJOINT','ST_Disjoint(g1,g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially disjoint from (does\nnot intersect) g2.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html'); @@ -570,7 +570,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (490,16,'GROUP_CONCAT','Syntax:\nGROUP_CONCAT(expr)\n\nThis function returns a string result with the concatenated non-NULL\nvalues from a group. It returns NULL if there are no non-NULL values.\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [SEPARATOR str_val])\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html\n\n','mysql> SELECT student_name,\n -> GROUP_CONCAT(test_score)\n -> FROM student\n -> GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (491,17,'BENCHMARK','Syntax:\nBENCHMARK(count,expr)\n\nThe BENCHMARK() function executes the expression expr repeatedly count\ntimes. It may be used to time how quickly MySQL processes the\nexpression. The result value is always 0. The intended use is from\nwithin the mysql client, which reports query execution times:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\'));\n+----------------------------------------------+\n| BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\')) |\n+----------------------------------------------+\n| 0 |\n+----------------------------------------------+\n1 row in set (4.74 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (492,38,'FROM_BASE64','Syntax:\nFROM_BASE64(str)\n\nTakes a string encoded with the base-64 encoded rules used by\nTO_BASE64() and returns the decoded result as a binary string. The\nresult is NULL if the argument is NULL or not a valid base-64 string.\nSee the description of TO_BASE64() for details about the encoding and\ndecoding rules.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n -> \'JWJj\', \'abc\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (493,27,'SHOW ENGINE','Syntax:\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nSHOW ENGINE displays operational information about a storage engine. It\nrequires the PROCESS privilege. The statement has these variants:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE {NDB | NDBCLUSTER} STATUS\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n\nSHOW ENGINE INNODB STATUS displays extensive information from the\nstandard InnoDB Monitor about the state of the InnoDB storage engine.\nFor information about the standard monitor and other InnoDB Monitors\nthat provide information about InnoDB processing, see\nhttp://dev.mysql.com/doc/refman/5.6/en/innodb-monitors.html.\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex and rw-lock statistics.\nStatement output has the following columns:\n\n*Note*: Most SHOW ENGINE INNODB MUTEX output is removed in 5.6.14. SHOW\nENGINE INNODB MUTEX output is removed entirely in MySQL 5.7.2. InnoDB\nmutexes can be monitored using Performance Schema tables. For an\nexample, see\nhttp://dev.mysql.com/doc/refman/5.6/en/monitor-innodb-mutex-waits-perfo\nrmance-schema.html.\n\no Type\n\n Always InnoDB.\n\no Name\n\n The source file where the mutex is implemented, and the line number\n in the file where the mutex is created. The line number is specific\n to your version of MySQL.\n\no Status\n\n The mutex status. This field displays several values if WITH_DEBUG\n was defined at MySQL compilation time. If WITH_DEBUG was not defined,\n the statement displays only the os_waits value. In the latter case\n (without WITH_DEBUG), the information on which the output is based is\n insufficient to distinguish regular mutexes and mutexes that protect\n rw-locks (which permit multiple readers or a single writer).\n Consequently, the output may appear to contain multiple rows for the\n same mutex.\n\n o count indicates how many times the mutex was requested.\n\n o spin_waits indicates how many times the spinlock had to run.\n\n o spin_rounds indicates the number of spinlock rounds. (spin_rounds\n divided by spin_waits provides the average round count.)\n\n o os_waits indicates the number of operating system waits. This\n occurs when the spinlock did not work (the mutex was not locked\n during the spinlock and it was necessary to yield to the operating\n system and wait).\n\n o os_yields indicates the number of times a thread trying to lock a\n mutex gave up its timeslice and yielded to the operating system (on\n the presumption that permitting other threads to run will free the\n mutex so that it can be locked).\n\n o os_wait_times indicates the amount of time (in ms) spent in\n operating system waits. In MySQL 5.6 timing is disabled and this\n value is always 0.\n\nSHOW ENGINE INNODB MUTEX skips the mutexes and rw-locks of buffer pool\nblocks, as the amount of output can be overwhelming on systems with a\nlarge buffer pool. (There is one mutex and one rw-lock in each 16K\nbuffer pool block, and there are 65,536 blocks per gigabyte.) SHOW\nENGINE INNODB MUTEX also does not list any mutexes or rw-locks that\nhave never been waited on (os_waits=0). Thus, SHOW ENGINE INNODB MUTEX\nonly displays information about mutexes and rw-locks outside of the\nbuffer pool that have caused at least one OS-level wait.\n\nSHOW ENGINE INNODB MUTEX information can be used to diagnose system\nproblems. For example, large values of spin_waits and spin_rounds may\nindicate scalability problems.\n\nUse SHOW ENGINE PERFORMANCE_SCHEMA STATUS to inspect the internal\noperation of the Performance Schema code:\n\nmysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\\G\n...\n*************************** 3. row ***************************\n Type: performance_schema\n Name: events_waits_history.row_size\nStatus: 76\n*************************** 4. row ***************************\n Type: performance_schema\n Name: events_waits_history.row_count\nStatus: 10000\n*************************** 5. row ***************************\n Type: performance_schema\n Name: events_waits_history.memory\nStatus: 760000\n...\n*************************** 57. row ***************************\n Type: performance_schema\n Name: performance_schema.memory\nStatus: 26459600\n...\n\nThis statement is intended to help the DBA understand the effects that\ndifferent Performance Schema options have on memory requirements.\n\nName values consist of two parts, which name an internal buffer and a\nbuffer attribute, respectively. Interpret buffer names as follows:\n\no An internal buffer that is not exposed as a table is named within\n parentheses. Examples: (pfs_cond_class).row_size,\n (pfs_mutex_class).memory.\n\no An internal buffer that is exposed as a table in the\n performance_schema database is named after the table, without\n parentheses. Examples: events_waits_history.row_size,\n mutex_instances.row_count.\n\no A value that applies to the Performance Schema as a whole begins with\n performance_schema. Example: performance_schema.memory.\n\nBuffer attributes have these meanings:\n\no row_size is the size of the internal record used by the\n implementation, such as the size of a row in a table. row_size values\n cannot be changed.\n\no row_count is the number of internal records, such as the number of\n rows in a table. row_count values can be changed using Performance\n Schema configuration options.\n\no For a table, tbl_name.memory is the product of row_size and\n row_count. For the Performance Schema as a whole,\n performance_schema.memory is the sum of all the memory used (the sum\n of all other memory values).\n\nIn some cases, there is a direct relationship between a Performance\nSchema configuration parameter and a SHOW ENGINE value. For example,\nevents_waits_history_long.row_count corresponds to\nperformance_schema_events_waits_history_long_size. In other cases, the\nrelationship is more complex. For example,\nevents_waits_history.row_count corresponds to\nperformance_schema_events_waits_history_size (the number of rows per\nthread) multiplied by performance_schema_max_thread_instances ( the\nnumber of threads).\n\nSHOW ENGINE NDB STATUS If the server has the NDB storage engine\nenabled, SHOW ENGINE NDB STATUS displays cluster status information\nsuch as the number of connected data nodes, the cluster connectstring,\nand cluster binary log epochs, as well as counts of various Cluster API\nobjects created by the MySQL Server when connected to the cluster.\nSample output from this statement is shown here:\n\nmysql> SHOW ENGINE NDB STATUS;\n+------------+-----------------------+--------------------------------------------------+\n| Type | Name | Status |\n+------------+-----------------------+--------------------------------------------------+\n| ndbcluster | connection | cluster_node_id=7,\n connected_host=192.168.0.103, connected_port=1186, number_of_data_nodes=4,\n number_of_ready_data_nodes=3, connect_count=0 |\n| ndbcluster | NdbTransaction | created=6, free=0, sizeof=212 |\n| ndbcluster | NdbOperation | created=8, free=8, sizeof=660 |\n| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744 |\n| ndbcluster | NdbIndexOperation | created=0, free=0, sizeof=664 |\n| ndbcluster | NdbRecAttr | created=1285, free=1285, sizeof=60 |\n| ndbcluster | NdbApiSignal | created=16, free=16, sizeof=136 |\n| ndbcluster | NdbLabel | created=0, free=0, sizeof=196 |\n| ndbcluster | NdbBranch | created=0, free=0, sizeof=24 |\n| ndbcluster | NdbSubroutine | created=0, free=0, sizeof=68 |\n| ndbcluster | NdbCall | created=0, free=0, sizeof=16 |\n| ndbcluster | NdbBlob | created=1, free=1, sizeof=264 |\n| ndbcluster | NdbReceiver | created=4, free=0, sizeof=68 |\n| ndbcluster | binlog | latest_epoch=155467, latest_trans_epoch=148126,\n latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,\n latest_applied_binlog_epoch=0 |\n+------------+-----------------------+--------------------------------------------------+\n\nThe rows with connection and binlog in the Name column were added to\nthe output of this statement in MySQL 5.1. The Status column in each of\nthese rows provides information about the MySQL server\'s connection to\nthe cluster and about the cluster binary log\'s status, respectively.\nThe Status information is in the form of comma-delimited set of\nname/value pairs.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-engine.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-engine.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (493,27,'SHOW ENGINE','Syntax:\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nSHOW ENGINE displays operational information about a storage engine. It\nrequires the PROCESS privilege. The statement has these variants:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE {NDB | NDBCLUSTER} STATUS\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n\nSHOW ENGINE INNODB STATUS displays extensive information from the\nstandard InnoDB Monitor about the state of the InnoDB storage engine.\nFor information about the standard monitor and other InnoDB Monitors\nthat provide information about InnoDB processing, see\nhttp://dev.mysql.com/doc/refman/5.6/en/innodb-monitors.html.\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex and rw-lock statistics.\n\n*Note*: Most SHOW ENGINE INNODB MUTEX output is removed in 5.6.14. SHOW\nENGINE INNODB MUTEX output is removed entirely in MySQL 5.7.2. InnoDB\nmutexes can be monitored using Performance Schema tables. For an\nexample, see\nhttp://dev.mysql.com/doc/refman/5.6/en/monitor-innodb-mutex-waits-perfo\nrmance-schema.html.\n\no Type\n\n Always InnoDB.\n\no Name\n\n The source file where the mutex is implemented, and the line number\n in the file where the mutex is created. The line number is specific\n to your version of MySQL.\n\no Status\n\n The mutex status. This field displays several values if WITH_DEBUG\n was defined at MySQL compilation time. If WITH_DEBUG was not defined,\n the statement displays only the os_waits value. In the latter case\n (without WITH_DEBUG), the information on which the output is based is\n insufficient to distinguish regular mutexes and mutexes that protect\n rw-locks (which permit multiple readers or a single writer).\n Consequently, the output may appear to contain multiple rows for the\n same mutex.\n\n o count indicates how many times the mutex was requested.\n\n o spin_waits indicates how many times the spinlock had to run.\n\n o spin_rounds indicates the number of spinlock rounds. (spin_rounds\n divided by spin_waits provides the average round count.)\n\n o os_waits indicates the number of operating system waits. This\n occurs when the spinlock did not work (the mutex was not locked\n during the spinlock and it was necessary to yield to the operating\n system and wait).\n\n o os_yields indicates the number of times a thread trying to lock a\n mutex gave up its timeslice and yielded to the operating system (on\n the presumption that permitting other threads to run will free the\n mutex so that it can be locked).\n\n o os_wait_times indicates the amount of time (in ms) spent in\n operating system waits. In MySQL 5.6 timing is disabled and this\n value is always 0.\n\nSHOW ENGINE INNODB MUTEX skips the mutexes and rw-locks of buffer pool\nblocks, as the amount of output can be overwhelming on systems with a\nlarge buffer pool. (There is one mutex and one rw-lock in each 16K\nbuffer pool block, and there are 65,536 blocks per gigabyte.) SHOW\nENGINE INNODB MUTEX also does not list any mutexes or rw-locks that\nhave never been waited on (os_waits=0). Thus, SHOW ENGINE INNODB MUTEX\nonly displays information about mutexes and rw-locks outside of the\nbuffer pool that have caused at least one OS-level wait.\n\nSHOW ENGINE INNODB MUTEX information can be used to diagnose system\nproblems. For example, large values of spin_waits and spin_rounds may\nindicate scalability problems.\n\nUse SHOW ENGINE PERFORMANCE_SCHEMA STATUS to inspect the internal\noperation of the Performance Schema code:\n\nmysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\\G\n...\n*************************** 3. row ***************************\n Type: performance_schema\n Name: events_waits_history.row_size\nStatus: 76\n*************************** 4. row ***************************\n Type: performance_schema\n Name: events_waits_history.row_count\nStatus: 10000\n*************************** 5. row ***************************\n Type: performance_schema\n Name: events_waits_history.memory\nStatus: 760000\n...\n*************************** 57. row ***************************\n Type: performance_schema\n Name: performance_schema.memory\nStatus: 26459600\n...\n\nThis statement is intended to help the DBA understand the effects that\ndifferent Performance Schema options have on memory requirements.\n\nName values consist of two parts, which name an internal buffer and a\nbuffer attribute, respectively. Interpret buffer names as follows:\n\no An internal buffer that is not exposed as a table is named within\n parentheses. Examples: (pfs_cond_class).row_size,\n (pfs_mutex_class).memory.\n\no An internal buffer that is exposed as a table in the\n performance_schema database is named after the table, without\n parentheses. Examples: events_waits_history.row_size,\n mutex_instances.row_count.\n\no A value that applies to the Performance Schema as a whole begins with\n performance_schema. Example: performance_schema.memory.\n\nBuffer attributes have these meanings:\n\no row_size is the size of the internal record used by the\n implementation, such as the size of a row in a table. row_size values\n cannot be changed.\n\no row_count is the number of internal records, such as the number of\n rows in a table. row_count values can be changed using Performance\n Schema configuration options.\n\no For a table, tbl_name.memory is the product of row_size and\n row_count. For the Performance Schema as a whole,\n performance_schema.memory is the sum of all the memory used (the sum\n of all other memory values).\n\nIn some cases, there is a direct relationship between a Performance\nSchema configuration parameter and a SHOW ENGINE value. For example,\nevents_waits_history_long.row_count corresponds to\nperformance_schema_events_waits_history_long_size. In other cases, the\nrelationship is more complex. For example,\nevents_waits_history.row_count corresponds to\nperformance_schema_events_waits_history_size (the number of rows per\nthread) multiplied by performance_schema_max_thread_instances ( the\nnumber of threads).\n\nSHOW ENGINE NDB STATUS If the server has the NDB storage engine\nenabled, SHOW ENGINE NDB STATUS displays cluster status information\nsuch as the number of connected data nodes, the cluster connectstring,\nand cluster binary log epochs, as well as counts of various Cluster API\nobjects created by the MySQL Server when connected to the cluster.\nSample output from this statement is shown here:\n\nmysql> SHOW ENGINE NDB STATUS;\n+------------+-----------------------+--------------------------------------------------+\n| Type | Name | Status |\n+------------+-----------------------+--------------------------------------------------+\n| ndbcluster | connection | cluster_node_id=7,\n connected_host=192.168.0.103, connected_port=1186, number_of_data_nodes=4,\n number_of_ready_data_nodes=3, connect_count=0 |\n| ndbcluster | NdbTransaction | created=6, free=0, sizeof=212 |\n| ndbcluster | NdbOperation | created=8, free=8, sizeof=660 |\n| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744 |\n| ndbcluster | NdbIndexOperation | created=0, free=0, sizeof=664 |\n| ndbcluster | NdbRecAttr | created=1285, free=1285, sizeof=60 |\n| ndbcluster | NdbApiSignal | created=16, free=16, sizeof=136 |\n| ndbcluster | NdbLabel | created=0, free=0, sizeof=196 |\n| ndbcluster | NdbBranch | created=0, free=0, sizeof=24 |\n| ndbcluster | NdbSubroutine | created=0, free=0, sizeof=68 |\n| ndbcluster | NdbCall | created=0, free=0, sizeof=16 |\n| ndbcluster | NdbBlob | created=1, free=1, sizeof=264 |\n| ndbcluster | NdbReceiver | created=4, free=0, sizeof=68 |\n| ndbcluster | binlog | latest_epoch=155467, latest_trans_epoch=148126,\n latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,\n latest_applied_binlog_epoch=0 |\n+------------+-----------------------+--------------------------------------------------+\n\nThe Status column in each of these rows provides information about the\nMySQL server\'s connection to the cluster and about the cluster binary\nlog\'s status, respectively. The Status information is in the form of\ncomma-delimited set of name/value pairs.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-engine.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-engine.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (494,14,'NAME_CONST','Syntax:\nNAME_CONST(name,value)\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments\nshould be constants.\n\nmysql> SELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n| 14 |\n+--------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (495,14,'RELEASE_LOCK','Syntax:\nRELEASE_LOCK(str)\n\nReleases the lock named by the string str that was obtained with\nGET_LOCK(). Returns 1 if the lock was released, 0 if the lock was not\nestablished by this thread (in which case the lock is not released),\nand NULL if the named lock did not exist. The lock does not exist if it\nwas never obtained by a call to GET_LOCK() or if it has previously been\nreleased.\n\nThe DO statement is convenient to use with RELEASE_LOCK(). See [HELP\nDO].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (496,32,'WEEKDAY','Syntax:\nWEEKDAY(date)\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 =\nSunday).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKDAY(\'2008-02-03 22:23:00\');\n -> 6\nmysql> SELECT WEEKDAY(\'2007-11-06\');\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); @@ -588,9 +588,9 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (508,38,'POSITION','Syntax:\nPOSITION(substr IN str)\n\nPOSITION(substr IN str) is a synonym for LOCATE(substr,str).\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (509,14,'IS_USED_LOCK','Syntax:\nIS_USED_LOCK(str)\n\nChecks whether the lock named str is in use (that is, locked). If so,\nit returns the connection identifier of the client session that holds\nthe lock. Otherwise, it returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (510,4,'POLYFROMTEXT','PolyFromText(wkt[,srid]), PolygonFromText(wkt[,srid])\n\nST_PolyFromText(), ST_PolygonFromText(), PolyFromText(), and\nPolygonFromText() are synonyms. For more information, see the\ndescription of ST_PolyFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (511,37,'ST_SRID','ST_SRID(g)\n\nReturns an integer indicating the Spatial Reference System ID for the\ngeometry value g.\n\nIn MySQL, the SRID value is just an integer associated with the\ngeometry value. All calculations are done assuming Euclidean (planar)\ngeometry.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------------+\n| ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------------+\n| 101 |\n+-----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (511,37,'ST_SRID','ST_SRID(g)\n\nReturns an integer indicating the Spatial Reference System ID for the\ngeometry value g, or NULL if the argument is NULL.\n\nIn MySQL, the SRID value is just an integer associated with the\ngeometry value. All calculations are done assuming Euclidean (planar)\ngeometry.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------------+\n| ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------------+\n| 101 |\n+-----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (512,10,'ALTER USER','Syntax:\nALTER USER user_specification [, user_specification] ...\n\nuser_specification:\n user PASSWORD EXPIRE\n\nThe ALTER USER statement modifies MySQL accounts. An error occurs if\nyou try to modify a nonexistent account.\n\nTo use ALTER USER, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql database. When the read_only system\nvariable is enabled, ALTER USER additionally requires the SUPER\nprivilege.\n\n*Warning*: ALTER USER was added in MySQL 5.6.6. However, in 5.6.6,\nALTER USER also sets the Password column to the empty string, so do not\nuse this statement until 5.6.7.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.6/en/account-names.html. If you\nspecify only the user name part of the account name, a host name part\nof \'%\' is used. It is also possible to specify CURRENT_USER or\nCURRENT_USER() to refer to the account associated with the current\nsession.\n\nFor each account, ALTER USER expires its password. For example:\n\nALTER USER \'jeffrey\'@\'localhost\' PASSWORD EXPIRE;\n\nPassword expiration for an account affects the corresponding row of the\nmysql.user table: The server sets the password_expired column to \'Y\'.\n\nA client session operates in restricted mode if the account password\nhas been expired. In restricted mode, operations performed within the\nsession result in an error until the user establishes a new account\npassword:\n\nmysql> SELECT 1;\nERROR 1820 (HY000): You must SET PASSWORD before executing this statement\n\nmysql> SET PASSWORD = PASSWORD(\'new_password\');\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SELECT 1;\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n1 row in set (0.00 sec)\n\nAs of MySQL 5.6.8, this restricted mode of operation permits SET\nstatements, which is useful if the account password has a hashing\nformat that requires old_passwords to be set to a value different from\nits default before using SET PASSWORD.\n\nIt is possible for an administrative user to reset the account\npassword, but any existing sessions for the account remain restricted.\nA client using the account must disconnect and reconnect before\nstatements can be executed successfully.\n\n*Note*: It is possible to "reset" a password by setting it to its\ncurrent value. As a matter of good policy, it is preferable to choose a\ndifferent password.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/alter-user.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/alter-user.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (513,12,'DES_ENCRYPT','Syntax:\nDES_ENCRYPT(str[,{key_num|key_str}])\n\nEncrypts the string with the given key using the Triple-DES algorithm.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.6/en/ssl-connections.html.\n\nThe encryption key to use is chosen based on the second argument to\nDES_ENCRYPT(), if one was given. With no argument, the first key from\nthe DES key file is used. With a key_num argument, the given key number\n(0 to 9) from the DES key file is used. With a key_str argument, the\ngiven key string is used to encrypt str.\n\nThe key file can be specified with the --des-key-file server option.\n\nThe return string is a binary string where the first character is\nCHAR(128 | key_num). If an error occurs, DES_ENCRYPT() returns NULL.\n\nThe 128 is added to make it easier to recognize an encrypted key. If\nyou use a string key, key_num is 127.\n\nThe string length for the result is given by this formula:\n\nnew_len = orig_len + (8 - (orig_len % 8)) + 1\n\nEach line in the DES key file has the following format:\n\nkey_num des_key_str\n\nEach key_num value must be a number in the range from 0 to 9. Lines in\nthe file may be in any order. des_key_str is the string that is used to\nencrypt the message. There should be at least one space between the\nnumber and the key. The first key is the default key that is used if\nyou do not specify any key argument to DES_ENCRYPT().\n\nYou can tell MySQL to read new key values from the key file with the\nFLUSH DES_KEY_FILE statement. This requires the RELOAD privilege.\n\nOne benefit of having a set of default keys is that it gives\napplications a way to check for the existence of encrypted column\nvalues, without giving the end user the right to decrypt those values.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SELECT customer_address FROM customer_table \n > WHERE crypted_credit_card = DES_ENCRYPT(\'credit_card_number\');\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (513,12,'DES_ENCRYPT','Syntax:\nDES_ENCRYPT(str[,{key_num|key_str}])\n\nEncrypts the string with the given key using the Triple-DES algorithm.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.6/en/secure-connections.html.\n\nThe encryption key to use is chosen based on the second argument to\nDES_ENCRYPT(), if one was given. With no argument, the first key from\nthe DES key file is used. With a key_num argument, the given key number\n(0 to 9) from the DES key file is used. With a key_str argument, the\ngiven key string is used to encrypt str.\n\nThe key file can be specified with the --des-key-file server option.\n\nThe return string is a binary string where the first character is\nCHAR(128 | key_num). If an error occurs, DES_ENCRYPT() returns NULL.\n\nThe 128 is added to make it easier to recognize an encrypted key. If\nyou use a string key, key_num is 127.\n\nThe string length for the result is given by this formula:\n\nnew_len = orig_len + (8 - (orig_len % 8)) + 1\n\nEach line in the DES key file has the following format:\n\nkey_num des_key_str\n\nEach key_num value must be a number in the range from 0 to 9. Lines in\nthe file may be in any order. des_key_str is the string that is used to\nencrypt the message. There should be at least one space between the\nnumber and the key. The first key is the default key that is used if\nyou do not specify any key argument to DES_ENCRYPT().\n\nYou can tell MySQL to read new key values from the key file with the\nFLUSH DES_KEY_FILE statement. This requires the RELOAD privilege.\n\nOne benefit of having a set of default keys is that it gives\napplications a way to check for the existence of encrypted column\nvalues, without giving the end user the right to decrypt those values.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SELECT customer_address FROM customer_table \n > WHERE crypted_credit_card = DES_ENCRYPT(\'credit_card_number\');\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (514,3,'CEIL','Syntax:\nCEIL(X)\n\nCEIL() is a synonym for CEILING().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (515,7,'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS','Syntax:\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout])\n\nWait until the slave SQL thread has executed all of the transactions\nwhose global transaction identifiers are contained in gtid_set (see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html,\nfor a definition of "GTID sets"), or until timeout seconds have\nelapsed, whichever occurs first. timeout is optional; the default\ntimeout is 0 seconds, in which case the master simply waits until all\nof the transactions in the GTID set have been executed.\n\nPrior to MySQL 5.6.9, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() was named\nSQL_THREAD_WAIT_AFTER_GTIDS(). (Bug #14775984)\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\');\n -> 5\n','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (516,38,'LENGTH','Syntax:\nLENGTH(str)\n\nReturns the length of the string str, measured in bytes. A multibyte\ncharacter counts as multiple bytes. This means that for a string\ncontaining five 2-byte characters, LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT LENGTH(\'text\');\n -> 4\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); @@ -601,10 +601,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (521,19,'|','Syntax:\n|\n\nBitwise OR:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html\n\n','mysql> SELECT 29 | 15;\n -> 31\n','http://dev.mysql.com/doc/refman/5.6/en/bit-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (522,7,'ASYMMETRIC_SIGN','Syntax:\nASYMMETRIC_SIGN(algorithm, digest_str, priv_key_str, digest_type)\n\nSigns a digest string using a private key string, and returns the\nsignature as a binary string. If signing fails, the result is NULL.\n\ndigest_str is the digest string. It can be generated by calling\nCREATE_DIGEST(). digest_type indicates the digest algorithm used to\ngenerate the digest string.\n\npriv_key_str is the private key string to use for signing the digest\nstring. It must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\'\n\nSupported digest_type values: \'SHA224\', \'SHA256\', \'SHA384\', \'SHA512\'\n\nFor a usage example, see the description of ASYMMETRIC_VERIFY().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (523,4,'GEOMFROMTEXT','GeomFromText(wkt[,srid]), GeometryFromText(wkt[,srid])\n\nST_GeomFromText(), ST_GeometryFromText(), GeomFromText(), and\nGeometryFromText() are synonyms. For more information, see the\ndescription of ST_GeomFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (524,14,'UUID_SHORT','Syntax:\nUUID_SHORT()\n\nReturns a "short" universal identifier as a 64-bit unsigned integer\n(rather than a string-form 128-bit identifier as returned by the UUID()\nfunction).\n\nThe value of UUID_SHORT() is guaranteed to be unique if the following\nconditions hold:\n\no The server_id of the current host is unique among your set of master\n and slave servers\n\no server_id is between 0 and 255\n\no You do not set back your system time for your server between mysqld\n restarts\n\no You do not invoke UUID_SHORT() on average more than 16 million times\n per second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n (server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID_SHORT();\n -> 92395783831158784\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (524,14,'UUID_SHORT','Syntax:\nUUID_SHORT()\n\nReturns a "short" universal identifier as a 64-bit unsigned integer.\nValues returned by UUID_SHORT() differ from the string-format 128-bit\nidentifiers returned by the UUID() function and have different\nuniqueness properties. The value of UUID_SHORT() is guaranteed to be\nunique if the following conditions hold:\n\no The server_id value of the current server is between 0 and 255 and is\n unique among your set of master and slave servers\n\no You do not set back the system time for your server host between\n mysqld restarts\n\no You invoke UUID_SHORT() on average fewer than 16 million times per\n second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n (server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID_SHORT();\n -> 92395783831158784\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (525,32,'DATEDIFF','Syntax:\nDATEDIFF(expr1,expr2)\n\nDATEDIFF() returns expr1 − expr2 expressed as a value in days from\none date to the other. expr1 and expr2 are date or date-and-time\nexpressions. Only the date parts of the values are used in the\ncalculation.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\');\n -> 1\nmysql> SELECT DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\');\n -> -31\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (526,40,'DROP PROCEDURE','Syntax:\nDROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name\n\nThis statement is used to drop a stored procedure or function. That is,\nthe specified routine is removed from the server. You must have the\nALTER ROUTINE privilege for the routine. (If the\nautomatic_sp_privileges system variable is enabled, that privilege and\nEXECUTE are granted automatically to the routine creator when the\nroutine is created and dropped from the creator when the routine is\ndropped. See\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-routines-privileges.html.\n)\n\nThe IF EXISTS clause is a MySQL extension. It prevents an error from\noccurring if the procedure or function does not exist. A warning is\nproduced that can be viewed with SHOW WARNINGS.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/drop-procedure.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/drop-procedure.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (527,5,'INSTALL PLUGIN','Syntax:\nINSTALL PLUGIN plugin_name SONAME \'shared_library_name\'\n\nThis statement installs a server plugin. It requires the INSERT\nprivilege for the mysql.plugin table.\n\nplugin_name is the name of the plugin as defined in the plugin\ndescriptor structure contained in the library file (see\nhttp://dev.mysql.com/doc/refman/5.6/en/plugin-data-structures.html).\nPlugin names are not case sensitive. For maximal compatibility, plugin\nnames should be limited to ASCII letters, digits, and underscore\nbecause they are used in C source files, shell command lines, M4 and\nBourne shell scripts, and SQL environments.\n\nshared_library_name is the name of the shared library that contains the\nplugin code. The name includes the file name extension (for example,\nlibmyplugin.so, libmyplugin.dll, or libmyplugin.dylib).\n\nThe shared library must be located in the plugin directory (the\ndirectory named by the plugin_dir system variable). The library must be\nin the plugin directory itself, not in a subdirectory. By default,\nplugin_dir is the plugin directory under the directory named by the\npkglibdir configuration variable, but it can be changed by setting the\nvalue of plugin_dir at server startup. For example, set its value in a\nmy.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\n\nIf the value of plugin_dir is a relative path name, it is taken to be\nrelative to the MySQL base directory (the value of the basedir system\nvariable).\n\nINSTALL PLUGIN loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its\ninitialization function, which handles any setup that the plugin must\nperform before it can be used. When the server shuts down, it executes\nthe deinitialization function for each plugin that is loaded so that\nthe plugin has a chance to perform any final cleanup.\n\nINSTALL PLUGIN also registers the plugin by adding a line that\nindicates the plugin name and library file name to the mysql.plugin\ntable. At server startup, the server loads and initializes any plugin\nthat is listed in the mysql.plugin table. This means that a plugin is\ninstalled with INSTALL PLUGIN only once, not every time the server\nstarts. Plugin loading at startup does not occur if the server is\nstarted with the --skip-grant-tables option.\n\nA plugin library can contain multiple plugins. For each of them to be\ninstalled, use a separate INSTALL PLUGIN statement. Each statement\nnames a different plugin, but all of them specify the same library\nname.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/install-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/install-plugin.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (527,5,'INSTALL PLUGIN','Syntax:\nINSTALL PLUGIN plugin_name SONAME \'shared_library_name\'\n\nThis statement installs a server plugin. It requires the INSERT\nprivilege for the mysql.plugin system table.\n\nplugin_name is the name of the plugin as defined in the plugin\ndescriptor structure contained in the library file (see\nhttp://dev.mysql.com/doc/refman/5.6/en/plugin-data-structures.html).\nPlugin names are not case sensitive. For maximal compatibility, plugin\nnames should be limited to ASCII letters, digits, and underscore\nbecause they are used in C source files, shell command lines, M4 and\nBourne shell scripts, and SQL environments.\n\nshared_library_name is the name of the shared library that contains the\nplugin code. The name includes the file name extension (for example,\nlibmyplugin.so, libmyplugin.dll, or libmyplugin.dylib).\n\nThe shared library must be located in the plugin directory (the\ndirectory named by the plugin_dir system variable). The library must be\nin the plugin directory itself, not in a subdirectory. By default,\nplugin_dir is the plugin directory under the directory named by the\npkglibdir configuration variable, but it can be changed by setting the\nvalue of plugin_dir at server startup. For example, set its value in a\nmy.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\n\nIf the value of plugin_dir is a relative path name, it is taken to be\nrelative to the MySQL base directory (the value of the basedir system\nvariable).\n\nINSTALL PLUGIN loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its\ninitialization function, which handles any setup that the plugin must\nperform before it can be used. When the server shuts down, it executes\nthe deinitialization function for each plugin that is loaded so that\nthe plugin has a chance to perform any final cleanup.\n\nINSTALL PLUGIN also registers the plugin by adding a line that\nindicates the plugin name and library file name to the mysql.plugin\ntable. At server startup, the server loads and initializes any plugin\nthat is listed in the mysql.plugin table. This means that a plugin is\ninstalled with INSTALL PLUGIN only once, not every time the server\nstarts. Plugin loading at startup does not occur if the server is\nstarted with the --skip-grant-tables option.\n\nA plugin library can contain multiple plugins. For each of them to be\ninstalled, use a separate INSTALL PLUGIN statement. Each statement\nnames a different plugin, but all of them specify the same library\nname.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/install-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/install-plugin.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (528,28,'LOAD DATA','Syntax:\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE tbl_name\n [PARTITION (partition_name,...)]\n [CHARACTER SET charset_name]\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n [IGNORE number {LINES | ROWS}]\n [(col_name_or_user_var,...)]\n [SET col_name = expr,...]\n\nThe LOAD DATA INFILE statement reads rows from a text file into a table\nat a very high speed. LOAD DATA INFILE is the complement of SELECT ...\nINTO OUTFILE. (See\nhttp://dev.mysql.com/doc/refman/5.6/en/select-into.html.) To write data\nfrom a table to a file, use SELECT ... INTO OUTFILE. To read the file\nback into a table, use LOAD DATA INFILE. The syntax of the FIELDS and\nLINES clauses is the same for both statements. Both clauses are\noptional, but FIELDS must precede LINES if both are specified.\n\nYou can also load data files by using the mysqlimport utility; it\noperates by sending a LOAD DATA INFILE statement to the server. The\n--local option causes mysqlimport to read data files from the client\nhost. You can specify the --compress option to get better performance\nover slow networks if the client and server support the compressed\nprotocol. See http://dev.mysql.com/doc/refman/5.6/en/mysqlimport.html.\n\nFor more information about the efficiency of INSERT versus LOAD DATA\nINFILE and speeding up LOAD DATA INFILE, see\nhttp://dev.mysql.com/doc/refman/5.6/en/insert-speed.html.\n\nThe file name must be given as a literal string. On Windows, specify\nbackslashes in path names as forward slashes or doubled backslashes.\nThe character_set_filesystem system variable controls the\ninterpretation of the file name.\n\nIn MySQL 5.6.2 and later, LOAD DATA supports explicit partition\nselection using the PARTITION option with a comma-separated list of\nmore or more names of partitions, subpartitions, or both. When this\noption is used, if any rows from the file cannot be inserted into any\nof the partitions or subpartitions named in the list, the statement\nfails with the error Found a row not matching the given partition set.\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html.\n\nFor partitioned tables using storage engines that employ table locks,\nsuch as MyISAM, LOAD DATA cannot prune any partition locks. This does\nnot apply to tables using storage engines which employ row-level\nlocking, such as InnoDB. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-limitations-locking\n.html.\n\nThe server uses the character set indicated by the\ncharacter_set_database system variable to interpret the information in\nthe file. SET NAMES and the setting of character_set_client do not\naffect interpretation of input. If the contents of the input file use a\ncharacter set that differs from the default, it is usually preferable\nto specify the character set of the file by using the CHARACTER SET\nclause. A character set of binary specifies "no conversion."\n\nLOAD DATA INFILE interprets all fields in the file as having the same\ncharacter set, regardless of the data types of the columns into which\nfield values are loaded. For proper interpretation of file contents,\nyou must ensure that it was written with the correct character set. For\nexample, if you write a data file with mysqldump -T or by issuing a\nSELECT ... INTO OUTFILE statement in mysql, be sure to use a\n--default-character-set option so that output is written in the\ncharacter set to be used when the file is loaded with LOAD DATA INFILE.\n\n*Note*: It is not possible to load data files that use the ucs2, utf16,\nutf16le, or utf32 character set.\n\nIf you use LOW_PRIORITY, execution of the LOAD DATA statement is\ndelayed until no other clients are reading from the table. This affects\nonly storage engines that use only table-level locking (such as MyISAM,\nMEMORY, and MERGE).\n\nIf you specify CONCURRENT with a MyISAM table that satisfies the\ncondition for concurrent inserts (that is, it contains no free blocks\nin the middle), other threads can retrieve data from the table while\nLOAD DATA is executing. This option affects the performance of LOAD\nDATA a bit, even if no other thread is using the table at the same\ntime.\n\nWith row-based replication, CONCURRENT is replicated regardless of\nMySQL version. With statement-based replication CONCURRENT is not\nreplicated prior to MySQL 5.5.1 (see Bug #34628). For more information,\nsee\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-features-load-data.h\ntml.\n\nThe LOCAL keyword affects expected location of the file and error\nhandling, as described later. LOCAL works only if your server and your\nclient both have been configured to permit it. For example, if mysqld\nwas started with --local-infile=0, LOCAL does not work. See\nhttp://dev.mysql.com/doc/refman/5.6/en/load-data-local.html.\n\nThe LOCAL keyword affects where the file is expected to be found:\n\no If LOCAL is specified, the file is read by the client program on the\n client host and sent to the server. The file can be given as a full\n path name to specify its exact location. If given as a relative path\n name, the name is interpreted relative to the directory in which the\n client program was started.\n\n When using LOCAL with LOAD DATA, a copy of the file is created in the\n server\'s temporary directory. This is not the directory determined by\n the value of tmpdir or slave_load_tmpdir, but rather the operating\n system\'s temporary directory, and is not configurable in the MySQL\n Server. (Typically the system temporary directory is /tmp on Linux\n systems and C:\\WINDOWS\\TEMP on Windows.) Lack of sufficient space for\n the copy in this directory can cause the LOAD DATA LOCAL statement to\n fail.\n\no If LOCAL is not specified, the file must be located on the server\n host and is read directly by the server. The server uses the\n following rules to locate the file:\n\n o If the file name is an absolute path name, the server uses it as\n given.\n\n o If the file name is a relative path name with one or more leading\n components, the server searches for the file relative to the\n server\'s data directory.\n\n o If a file name with no leading components is given, the server\n looks for the file in the database directory of the default\n database.\n\nIn the non-LOCAL case, these rules mean that a file named as\n./myfile.txt is read from the server\'s data directory, whereas the file\nnamed as myfile.txt is read from the database directory of the default\ndatabase. For example, if db1 is the default database, the following\nLOAD DATA statement reads the file data.txt from the database directory\nfor db1, even though the statement explicitly loads the file into a\ntable in the db2 database:\n\nLOAD DATA INFILE \'data.txt\' INTO TABLE db2.my_table;\n\nFor security reasons, when reading text files located on the server,\nthe files must either reside in the database directory or be readable\nby the user account used to run the server. Also, to use LOAD DATA\nINFILE on server files, you must have the FILE privilege. See\nhttp://dev.mysql.com/doc/refman/5.6/en/privileges-provided.html. For\nnon-LOCAL load operations, if the secure_file_priv system variable is\nset to a nonempty directory name, the file to be loaded must be located\nin that directory.\n\nUsing LOCAL is a bit slower than letting the server access the files\ndirectly, because the contents of the file must be sent over the\nconnection by the client to the server. On the other hand, you do not\nneed the FILE privilege to load local files.\n\nLOCAL also affects error handling:\n\no With LOAD DATA INFILE, data-interpretation and duplicate-key errors\n terminate the operation.\n\no With LOAD DATA LOCAL INFILE, data-interpretation and duplicate-key\n errors become warnings and the operation continues because the server\n has no way to stop transmission of the file in the middle of the\n operation. For duplicate-key errors, this is the same as if IGNORE is\n specified. IGNORE is explained further later in this section.\n\nThe REPLACE and IGNORE keywords control handling of input rows that\nduplicate existing rows on unique key values:\n\no If you specify REPLACE, input rows replace existing rows. In other\n words, rows that have the same value for a primary key or unique\n index as an existing row. See [HELP REPLACE].\n\no If you specify IGNORE, rows that duplicate an existing row on a\n unique key value are discarded.\n\no If you do not specify either option, the behavior depends on whether\n the LOCAL keyword is specified. Without LOCAL, an error occurs when a\n duplicate key value is found, and the rest of the text file is\n ignored. With LOCAL, the default behavior is the same as if IGNORE is\n specified; this is because the server has no way to stop transmission\n of the file in the middle of the operation.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/load-data.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/load-data.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (529,24,'DECLARE CURSOR','Syntax:\nDECLARE cursor_name CURSOR FOR select_statement\n\nThis statement declares a cursor and associates it with a SELECT\nstatement that retrieves the rows to be traversed by the cursor. To\nfetch the rows later, use a FETCH statement. The number of columns\nretrieved by the SELECT statement must match the number of output\nvariables specified in the FETCH statement.\n\nThe SELECT statement cannot have an INTO clause.\n\nCursor declarations must appear before handler declarations and after\nvariable and condition declarations.\n\nA stored program may contain multiple cursor declarations, but each\ncursor declared in a given block must have a unique name. For an\nexample, see http://dev.mysql.com/doc/refman/5.6/en/cursors.html.\n\nFor information available through SHOW statements, it is possible in\nmany cases to obtain equivalent information by using a cursor with an\nINFORMATION_SCHEMA table.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/declare-cursor.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/declare-cursor.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (530,32,'LOCALTIME','Syntax:\nLOCALTIME, LOCALTIME([fsp])\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); @@ -616,27 +616,27 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (536,37,'DIMENSION','Dimension(g)\n\nST_Dimension() and Dimension() are synonyms. For more information, see\nthe description of ST_Dimension().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (537,23,'BIT','BIT[(M)]\n\nA bit-field type. M indicates the number of bits per value, from 1 to\n64. The default is 1 if M is omitted.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (538,31,'EQUALS','Equals(g1,g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially equal to g2.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-mbr.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (539,8,'XA','Syntax:\nXA {START|BEGIN} xid [JOIN|RESUME]\n\nXA END xid [SUSPEND [FOR MIGRATE]]\n\nXA PREPARE xid\n\nXA COMMIT xid [ONE PHASE]\n\nXA ROLLBACK xid\n\nXA RECOVER\n\nFor XA START, the JOIN and RESUME clauses are not supported.\n\nFor XA END the SUSPEND [FOR MIGRATE] clause is not supported.\n\nEach XA statement begins with the XA keyword, and most of them require\nan xid value. An xid is an XA transaction identifier. It indicates\nwhich transaction the statement applies to. xid values are supplied by\nthe client, or generated by the MySQL server. An xid value has from one\nto three parts:\n\nxid: gtrid [, bqual [, formatID ]]\n\ngtrid is a global transaction identifier, bqual is a branch qualifier,\nand formatID is a number that identifies the format used by the gtrid\nand bqual values. As indicated by the syntax, bqual and formatID are\noptional. The default bqual value is \'\' if not given. The default\nformatID value is 1 if not given.\n\ngtrid and bqual must be string literals, each up to 64 bytes (not\ncharacters) long. gtrid and bqual can be specified in several ways. You\ncan use a quoted string (\'ab\'), hex string (0x6162, X\'ab\'), or bit\nvalue (b\'nnnn\').\n\nformatID is an unsigned integer.\n\nThe gtrid and bqual values are interpreted in bytes by the MySQL\nserver\'s underlying XA support routines. However, while an SQL\nstatement containing an XA statement is being parsed, the server works\nwith some specific character set. To be safe, write gtrid and bqual as\nhex strings.\n\nxid values typically are generated by the Transaction Manager. Values\ngenerated by one TM must be different from values generated by other\nTMs. A given TM must be able to recognize its own xid values in a list\nof values returned by the XA RECOVER statement.\n\nFor XA START xid starts an XA transaction with the given xid value.\nEach XA transaction must have a unique xid value, so the value must not\ncurrently be used by another XA transaction. Uniqueness is assessed\nusing the gtrid and bqual values. All following XA statements for the\nXA transaction must be specified using the same xid value as that given\nin the XA START statement. If you use any of those statements but\nspecify an xid value that does not correspond to some existing XA\ntransaction, an error occurs.\n\nOne or more XA transactions can be part of the same global transaction.\nAll XA transactions within a given global transaction must use the same\ngtrid value in the xid value. For this reason, gtrid values must be\nglobally unique so that there is no ambiguity about which global\ntransaction a given XA transaction is part of. The bqual part of the\nxid value must be different for each XA transaction within a global\ntransaction. (The requirement that bqual values be different is a\nlimitation of the current MySQL XA implementation. It is not part of\nthe XA specification.)\n\nThe XA RECOVER statement returns information for those XA transactions\non the MySQL server that are in the PREPARED state. (See\nhttp://dev.mysql.com/doc/refman/5.6/en/xa-states.html.) The output\nincludes a row for each such XA transaction on the server, regardless\nof which client started it.\n\nXA RECOVER output rows look like this (for an example xid value\nconsisting of the parts \'abc\', \'def\', and 7):\n\nmysql> XA RECOVER;\n+----------+--------------+--------------+--------+\n| formatID | gtrid_length | bqual_length | data |\n+----------+--------------+--------------+--------+\n| 7 | 3 | 3 | abcdef |\n+----------+--------------+--------------+--------+\n\nThe output columns have the following meanings:\n\no formatID is the formatID part of the transaction xid\n\no gtrid_length is the length in bytes of the gtrid part of the xid\n\no bqual_length is the length in bytes of the bqual part of the xid\n\no data is the concatenation of the gtrid and bqual parts of the xid\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/xa-statements.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/xa-statements.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (539,8,'XA','Syntax:\nXA {START|BEGIN} xid [JOIN|RESUME]\n\nXA END xid [SUSPEND [FOR MIGRATE]]\n\nXA PREPARE xid\n\nXA COMMIT xid [ONE PHASE]\n\nXA ROLLBACK xid\n\nXA RECOVER\n\nFor XA START, the JOIN and RESUME clauses are not supported.\n\nFor XA END the SUSPEND [FOR MIGRATE] clause is not supported.\n\nEach XA statement begins with the XA keyword, and most of them require\nan xid value. An xid is an XA transaction identifier. It indicates\nwhich transaction the statement applies to. xid values are supplied by\nthe client, or generated by the MySQL server. An xid value has from one\nto three parts:\n\nxid: gtrid [, bqual [, formatID ]]\n\ngtrid is a global transaction identifier, bqual is a branch qualifier,\nand formatID is a number that identifies the format used by the gtrid\nand bqual values. As indicated by the syntax, bqual and formatID are\noptional. The default bqual value is \'\' if not given. The default\nformatID value is 1 if not given.\n\ngtrid and bqual must be string literals, each up to 64 bytes (not\ncharacters) long. gtrid and bqual can be specified in several ways. You\ncan use a quoted string (\'ab\'), hex string (X\'6162\', 0x6162), or bit\nvalue (b\'nnnn\').\n\nformatID is an unsigned integer.\n\nThe gtrid and bqual values are interpreted in bytes by the MySQL\nserver\'s underlying XA support routines. However, while an SQL\nstatement containing an XA statement is being parsed, the server works\nwith some specific character set. To be safe, write gtrid and bqual as\nhex strings.\n\nxid values typically are generated by the Transaction Manager. Values\ngenerated by one TM must be different from values generated by other\nTMs. A given TM must be able to recognize its own xid values in a list\nof values returned by the XA RECOVER statement.\n\nFor XA START xid starts an XA transaction with the given xid value.\nEach XA transaction must have a unique xid value, so the value must not\ncurrently be used by another XA transaction. Uniqueness is assessed\nusing the gtrid and bqual values. All following XA statements for the\nXA transaction must be specified using the same xid value as that given\nin the XA START statement. If you use any of those statements but\nspecify an xid value that does not correspond to some existing XA\ntransaction, an error occurs.\n\nOne or more XA transactions can be part of the same global transaction.\nAll XA transactions within a given global transaction must use the same\ngtrid value in the xid value. For this reason, gtrid values must be\nglobally unique so that there is no ambiguity about which global\ntransaction a given XA transaction is part of. The bqual part of the\nxid value must be different for each XA transaction within a global\ntransaction. (The requirement that bqual values be different is a\nlimitation of the current MySQL XA implementation. It is not part of\nthe XA specification.)\n\nThe XA RECOVER statement returns information for those XA transactions\non the MySQL server that are in the PREPARED state. (See\nhttp://dev.mysql.com/doc/refman/5.6/en/xa-states.html.) The output\nincludes a row for each such XA transaction on the server, regardless\nof which client started it.\n\nXA RECOVER output rows look like this (for an example xid value\nconsisting of the parts \'abc\', \'def\', and 7):\n\nmysql> XA RECOVER;\n+----------+--------------+--------------+--------+\n| formatID | gtrid_length | bqual_length | data |\n+----------+--------------+--------------+--------+\n| 7 | 3 | 3 | abcdef |\n+----------+--------------+--------------+--------+\n\nThe output columns have the following meanings:\n\no formatID is the formatID part of the transaction xid\n\no gtrid_length is the length in bytes of the gtrid part of the xid\n\no bqual_length is the length in bytes of the bqual part of the xid\n\no data is the concatenation of the gtrid and bqual parts of the xid\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/xa-statements.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/xa-statements.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (540,2,'CENTROID','Centroid(mpoly)\n\nST_Centroid() and Centroid() are synonyms. For more information, see\nthe description of ST_Centroid().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (541,38,'OCTET_LENGTH','Syntax:\nOCTET_LENGTH(str)\n\nOCTET_LENGTH() is a synonym for LENGTH().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (542,32,'UTC_TIMESTAMP','Syntax:\nUTC_TIMESTAMP, UTC_TIMESTAMP([fsp])\n\nReturns the current UTC date and time as a value in \'YYYY-MM-DD\nHH:MM:SS\' or YYYYMMDDHHMMSS format, depending on whether the function\nis used in a string or numeric context.\n\nAs of MySQL 5.6.4, if the fsp argument is given to specify a fractional\nseconds precision from 0 to 6, the return value includes a fractional\nseconds part of that many digits. Before 5.6.4, any argument is\nignored.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;\n -> \'2003-08-14 18:08:04\', 20030814180804.000000\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (543,12,'AES_ENCRYPT','Syntax:\nAES_ENCRYPT(str,key_str[,init_vector])\n\nAES_ENCRYPT() and AES_DECRYPT() implement encryption and decryption of\ndata using the official AES (Advanced Encryption Standard) algorithm,\npreviously known as "Rijndael." The AES standard permits various key\nlengths. By default these functions implement AES with a 128-bit key\nlength. As of MySQL 5.6.17, key lengths of 196 or 256 bits can be used,\nas described later. The key length is a trade off between performance\nand security.\n\nAES_ENCRYPT() encrypts the string str using the key string key_str and\nreturns a binary string containing the encrypted output. AES_DECRYPT()\ndecrypts the encrypted string crypt_str using the key string key_str\nand returns the original cleartext string. If either function argument\nis NULL, the function returns NULL.\n\nThe str and crypt_str arguments can be any length, and padding is\nautomatically added to str so it is a multiple of a block as required\nby block-based algorithms such as AES. This padding is automatically\nremoved by the AES_DECRYPT() function. The length of crypt_str can be\ncalculated using this formula:\n\n16 * (trunc(string_length / 16) + 1)\n\nFor a key length of 128 bits, the most secure way to pass a key to the\nkey_str argument is to create a truly random 128-bit value and pass it\nas a binary value. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\',UNHEX(\'F3229A0B371ED2D9441B830D21A390C3\')));\n\nA passphrase can be used to generate an AES key by hashing the\npassphrase. For example:\n\nINSERT INTO t VALUES (1,AES_ENCRYPT(\'text\', SHA2(\'My secret passphrase\',512)));\n\nDo not pass a password or passphrase directly to crypt_str, hash it\nfirst. Previous versions of this documentation suggested the former\napproach, but it is no longer recommended as the examples shown here\nare more secure.\n\nIf AES_DECRYPT() detects invalid data or incorrect padding, it returns\nNULL. However, it is possible for AES_DECRYPT() to return a non-NULL\nvalue (possibly garbage) if the input data or the key is invalid.\n\nAs of MySQL 5.6.17, AES_ENCRYPT() and AES_DECRYPT() permit control of\nthe block encryption mode and take an optional init_vector\ninitialization vector argument:\n\no The block_encryption_mode system variable controls the mode for\n block-based encryption algorithms. Its default value is aes-128-ecb,\n which signifies encryption using a key length of 128 bits and ECB\n mode. For a description of the permitted values of this variable, see\n http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\no The optional init_vector argument provides an initialization vector\n for block encryption modes that require it.\n\nFor modes that require the optional init_vector argument, it must be 16\nbytes or longer (bytes in excess of 16 are ignored). An error occurs if\ninit_vector is missing.\n\nFor modes that do not require init_vector, it is ignored and a warning\nis generated if it is specified.\n\nA random string of bytes to use for the initialization vector can be\nproduced by calling RANDOM_BYTES(16). For encryption modes that require\nan initialization vector, the same vector must be used for encryption\nand decryption.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SET block_encryption_mode = \'aes-256-cbc\';\nmysql> SET @key_str = SHA2(\'My secret passphrase\',512);\nmysql> SET @init_vector = RANDOM_BYTES(16);\nmysql> SET @crypt_str = AES_ENCRYPT(\'text\',@key_str,@init_vector);\nmysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);\n+-----------------------------------------------+\n| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |\n+-----------------------------------------------+\n| text |\n+-----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (543,12,'AES_ENCRYPT','Syntax:\nAES_ENCRYPT(str,key_str[,init_vector])\n\nAES_ENCRYPT() and AES_DECRYPT() implement encryption and decryption of\ndata using the official AES (Advanced Encryption Standard) algorithm,\npreviously known as "Rijndael." The AES standard permits various key\nlengths. By default these functions implement AES with a 128-bit key\nlength. As of MySQL 5.6.17, key lengths of 196 or 256 bits can be used,\nas described later. The key length is a trade off between performance\nand security.\n\nAES_ENCRYPT() encrypts the string str using the key string key_str and\nreturns a binary string containing the encrypted output. AES_DECRYPT()\ndecrypts the encrypted string crypt_str using the key string key_str\nand returns the original cleartext string. If either function argument\nis NULL, the function returns NULL.\n\nThe str and crypt_str arguments can be any length, and padding is\nautomatically added to str so it is a multiple of a block as required\nby block-based algorithms such as AES. This padding is automatically\nremoved by the AES_DECRYPT() function. The length of crypt_str can be\ncalculated using this formula:\n\n16 * (trunc(string_length / 16) + 1)\n\nFor a key length of 128 bits, the most secure way to pass a key to the\nkey_str argument is to create a truly random 128-bit value and pass it\nas a binary value. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\',UNHEX(\'F3229A0B371ED2D9441B830D21A390C3\')));\n\nA passphrase can be used to generate an AES key by hashing the\npassphrase. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\', UNHEX(SHA2(\'My secret passphrase\',512))));\n\nDo not pass a password or passphrase directly to crypt_str, hash it\nfirst. Previous versions of this documentation suggested the former\napproach, but it is no longer recommended as the examples shown here\nare more secure.\n\nIf AES_DECRYPT() detects invalid data or incorrect padding, it returns\nNULL. However, it is possible for AES_DECRYPT() to return a non-NULL\nvalue (possibly garbage) if the input data or the key is invalid.\n\nAs of MySQL 5.6.17, AES_ENCRYPT() and AES_DECRYPT() permit control of\nthe block encryption mode and take an optional init_vector\ninitialization vector argument:\n\no The block_encryption_mode system variable controls the mode for\n block-based encryption algorithms. Its default value is aes-128-ecb,\n which signifies encryption using a key length of 128 bits and ECB\n mode. For a description of the permitted values of this variable, see\n http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\no The optional init_vector argument provides an initialization vector\n for block encryption modes that require it.\n\nFor modes that require the optional init_vector argument, it must be 16\nbytes or longer (bytes in excess of 16 are ignored). An error occurs if\ninit_vector is missing.\n\nFor modes that do not require init_vector, it is ignored and a warning\nis generated if it is specified.\n\nA random string of bytes to use for the initialization vector can be\nproduced by calling RANDOM_BYTES(16). For encryption modes that require\nan initialization vector, the same vector must be used for encryption\nand decryption.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html\n\n','mysql> SET block_encryption_mode = \'aes-256-cbc\';\nmysql> SET @key_str = SHA2(\'My secret passphrase\',512);\nmysql> SET @init_vector = RANDOM_BYTES(16);\nmysql> SET @crypt_str = AES_ENCRYPT(\'text\',@key_str,@init_vector);\nmysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);\n+-----------------------------------------------+\n| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |\n+-----------------------------------------------+\n| text |\n+-----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (544,3,'+','Syntax:\n+\n\nAddition:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html\n\n','mysql> SELECT 3+5;\n -> 8\n','http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (545,7,'GTID_SUBTRACT','Syntax:\nGTID_SUBTRACT(set,subset)\n\nGiven two sets of global transaction IDs subset and set, returns only\nthose GTIDs from set that are not in subset.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\', \n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57\n1 row in set (0.01 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (545,7,'GTID_SUBTRACT','Syntax:\nGTID_SUBTRACT(set,subset)\n\nGiven two sets of global transaction IDs subset and set, returns only\nthose GTIDs from set that are not in subset.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57\n1 row in set (0.01 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (546,14,'INET_NTOA','Syntax:\nINET_NTOA(expr)\n\nGiven a numeric IPv4 network address in network byte order, returns the\ndotted-quad string representation of the address as a nonbinary string\nin the connection character set. INET_NTOA() returns NULL if it does\nnot understand its argument.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT INET_NTOA(167773449);\n -> \'10.0.5.9\'\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (547,32,'DAYOFWEEK','Syntax:\nDAYOFWEEK(date)\n\nReturns the weekday index for date (1 = Sunday, 2 = Monday, ..., 7 =\nSaturday). These index values correspond to the ODBC standard.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFWEEK(\'2007-02-03\');\n -> 7\n','http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (548,3,'CEILING','Syntax:\nCEILING(X)\n\nReturns the smallest integer value not less than X.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT CEILING(1.23);\n -> 2\nmysql> SELECT CEILING(-1.23);\n -> -1\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (549,27,'SHOW PROCESSLIST','Syntax:\nSHOW [FULL] PROCESSLIST\n\nSHOW PROCESSLIST shows you which threads are running. You can also get\nthis information from the INFORMATION_SCHEMA PROCESSLIST table or the\nmysqladmin processlist command. If you have the PROCESS privilege, you\ncan see all threads. Otherwise, you can see only your own threads (that\nis, threads associated with the MySQL account that you are using). If\nyou do not use the FULL keyword, only the first 100 characters of each\nstatement are shown in the Info field.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-processlist.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-processlist.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (550,33,'LINEFROMWKB','LineFromWKB(wkb[,srid]), LineStringFromWKB(wkb[,srid])\n\nST_LineFromWKB(), ST_LineStringFromWKB(), LineFromWKB(), and\nLineStringFromWKB() are synonyms. For more information, see the\ndescription of ST_LineFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (551,37,'GEOMETRYTYPE','GeometryType(g)\n\nST_GeometryType() and GeometryType() are synonyms. For more\ninformation, see the description of ST_GeometryType().\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (552,40,'CREATE VIEW','Syntax:\nCREATE\n [OR REPLACE]\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nThe CREATE VIEW statement creates a new view, or replaces an existing\nview if the OR REPLACE clause is given. If the view does not exist,\nCREATE OR REPLACE VIEW is the same as CREATE VIEW. If the view does\nexist, CREATE OR REPLACE VIEW is the same as ALTER VIEW.\n\nThe select_statement is a SELECT statement that provides the definition\nof the view. (Selecting from the view selects, in effect, using the\nSELECT statement.) The select_statement can select from base tables or\nother views.\n\nThe view definition is "frozen" at creation time. Changes to the\nunderlying tables afterward do not affect the view definition. For\nexample, if a view is defined as SELECT * on a table, new columns added\nto the table later do not become part of the view.\n\nThe ALGORITHM clause affects how MySQL processes the view. The DEFINER\nand SQL SECURITY clauses specify the security context to be used when\nchecking access privileges at view invocation time. The WITH CHECK\nOPTION clause can be given to constrain inserts or updates to rows in\ntables referenced by the view. These clauses are described later in\nthis section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the\nview, and some privilege for each column selected by the SELECT\nstatement. For columns used elsewhere in the SELECT statement, you must\nhave the SELECT privilege. If the OR REPLACE clause is present, you\nmust also have the DROP privilege for the view. CREATE VIEW might also\nrequire the SUPER privilege, depending on the DEFINER value, as\ndescribed later in this section.\n\nWhen a view is referenced, privilege checking occurs as described later\nin this section.\n\nA view belongs to a database. By default, a new view is created in the\ndefault database. To create the view explicitly in a given database,\nuse db_name.view_name syntax to qualify the view name with the database\nname:\n\nmysql> CREATE VIEW test.v AS SELECT * FROM t;\n\nWithin a database, base tables and views share the same namespace, so a\nbase table and a view cannot have the same name.\n\nColumns retrieved by the SELECT statement can be simple references to\ntable columns, or expressions that use functions, constant values,\noperators, and so forth.\n\nA view must have unique column names with no duplicates, just like a\nbase table. By default, the names of the columns retrieved by the\nSELECT statement are used for the view column names. To define explicit\nnames for the view columns, the optional column_list clause can be\ngiven as a list of comma-separated identifiers. The number of names in\ncolumn_list must be the same as the number of columns retrieved by the\nSELECT statement.\n\nUnqualified table or view names in the SELECT statement are interpreted\nwith respect to the default database. A view can refer to tables or\nviews in other databases by qualifying the table or view name with the\nappropriate database name.\n\nA view can be created from many kinds of SELECT statements. It can\nrefer to base tables or other views. It can use joins, UNION, and\nsubqueries. The SELECT need not even refer to any tables.\n\nThe following example defines a view that selects two columns from\nanother table as well as an expression calculated from those columns:\n\nmysql> CREATE TABLE t (qty INT, price INT);\nmysql> INSERT INTO t VALUES(3, 50);\nmysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\nmysql> SELECT * FROM v;\n+------+-------+-------+\n| qty | price | value |\n+------+-------+-------+\n| 3 | 50 | 150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\no The SELECT statement cannot contain a subquery in the FROM clause.\n\no The SELECT statement cannot refer to system variables or user-defined\n variables.\n\no Within a stored program, the SELECT statement cannot refer to program\n parameters or local variables.\n\no The SELECT statement cannot refer to prepared statement parameters.\n\no Any table or view referred to in the definition must exist. After the\n view has been created, it is possible to drop a table or view that\n the definition refers to. In this case, use of the view results in an\n error. To check a view definition for problems of this kind, use the\n CHECK TABLE statement.\n\no The definition cannot refer to a TEMPORARY table, and you cannot\n create a TEMPORARY view.\n\no You cannot associate a trigger with a view.\n\no Aliases for column names in the SELECT statement are checked against\n the maximum column length of 64 characters (not the maximum alias\n length of 256 characters).\n\nORDER BY is permitted in a view definition, but it is ignored if you\nselect from a view using a statement that has its own ORDER BY.\n\nFor other options or clauses in the definition, they are added to the\noptions or clauses of the statement that references the view, but the\neffect is undefined. For example, if a view definition includes a LIMIT\nclause, and you select from the view using a statement that has its own\nLIMIT clause, it is undefined which limit applies. This same principle\napplies to options such as ALL, DISTINCT, or SQL_SMALL_RESULT that\nfollow the SELECT keyword, and to clauses such as INTO, FOR UPDATE,\nLOCK IN SHARE MODE, and PROCEDURE.\n\nIf you create a view and then change the query processing environment\nby changing system variables, that may affect the results you get from\nthe view:\n\nmysql> CREATE VIEW v (mycol) AS SELECT \'abc\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET sql_mode = \'\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol |\n+-------+\n1 row in set (0.01 sec)\n\nmysql> SET sql_mode = \'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc |\n+-------+\n1 row in set (0.00 sec)\n\nThe DEFINER and SQL SECURITY clauses determine which MySQL account to\nuse when checking access privileges for the view when a statement is\nexecuted that references the view. The valid SQL SECURITY\ncharacteristic values are DEFINER (the default) and INVOKER. These\nindicate that the required privileges must be held by the user who\ndefined or invoked the view, respectively.\n\nIf a user value is given for the DEFINER clause, it should be a MySQL\naccount specified as \'user_name\'@\'host_name\' (the same format used in\nthe GRANT statement), CURRENT_USER, or CURRENT_USER(). The default\nDEFINER value is the user who executes the CREATE VIEW statement. This\nis the same as specifying DEFINER = CURRENT_USER explicitly.\n\nIf you specify the DEFINER clause, these rules determine the valid\nDEFINER user values:\n\no If you do not have the SUPER privilege, the only valid user value is\n your own account, either specified literally or by using\n CURRENT_USER. You cannot set the definer to some other account.\n\no If you have the SUPER privilege, you can specify any syntactically\n valid account name. If the account does not exist, a warning is\n generated.\n\no Although it is possible to create a view with a nonexistent DEFINER\n account, an error occurs when the view is referenced if the SQL\n SECURITY value is DEFINER but the definer account does not exist.\n\nFor more information about view security, see\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-security.html.\n\nWithin a view definition, CURRENT_USER returns the view\'s DEFINER value\nby default. For views defined with the SQL SECURITY INVOKER\ncharacteristic, CURRENT_USER returns the account for the view\'s\ninvoker. For information about user auditing within views, see\nhttp://dev.mysql.com/doc/refman/5.6/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This\nalso affects a view defined within such a routine, if the view\ndefinition contains a DEFINER value of CURRENT_USER.\n\nMySQL checks view privileges like this:\n\no At view definition time, the view creator must have the privileges\n needed to use the top-level objects accessed by the view. For\n example, if the view definition refers to table columns, the creator\n must have some privilege for each column in the select list of the\n definition, and the SELECT privilege for each column used elsewhere\n in the definition. If the definition refers to a stored function,\n only the privileges needed to invoke the function can be checked. The\n privileges required at function invocation time can be checked only\n as it executes: For different invocations, different execution paths\n within the function might be taken.\n\no The user who references a view must have appropriate privileges to\n access it (SELECT to select from it, INSERT to insert into it, and so\n forth.)\n\no When a view has been referenced, privileges for objects accessed by\n the view are checked against the privileges held by the view DEFINER\n account or invoker, depending on whether the SQL SECURITY\n characteristic is DEFINER or INVOKER, respectively.\n\no If reference to a view causes execution of a stored function,\n privilege checking for statements executed within the function depend\n on whether the function SQL SECURITY characteristic is DEFINER or\n INVOKER. If the security characteristic is DEFINER, the function runs\n with the privileges of the DEFINER account. If the characteristic is\n INVOKER, the function runs with the privileges determined by the\n view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function\nmight invoke other stored routines. For example, the following view\ninvokes a stored function f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n CALL p1();\nELSE\n CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be\nchecked when f() executes. This might mean that privileges are needed\nfor p1() or p2(), depending on the execution path within f(). Those\nprivileges must be checked at runtime, and the user who must possess\nthe privileges is determined by the SQL SECURITY values of the view v\nand the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to\nstandard SQL. In standard SQL, views are handled using the rules for\nSQL SECURITY DEFINER. The standard says that the definer of the view,\nwhich is the same as the owner of the view\'s schema, gets applicable\nprivileges on the view (for example, SELECT) and may grant them. MySQL\nhas no concept of a schema "owner", so MySQL adds a clause to identify\nthe definer. The DEFINER clause is an extension where the intent is to\nhave what the standard has; that is, a permanent record of who defined\nthe view. This is why the default DEFINER value is the account of the\nview creator.\n\nThe optional ALGORITHM clause is a MySQL extension to standard SQL. It\naffects how MySQL processes the view. ALGORITHM takes three values:\nMERGE, TEMPTABLE, or UNDEFINED. The default algorithm is UNDEFINED if\nno ALGORITHM clause is present. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/view-algorithms.html.\n\nSome views are updatable. That is, you can use them in statements such\nas UPDATE, DELETE, or INSERT to update the contents of the underlying\ntable. For a view to be updatable, there must be a one-to-one\nrelationship between the rows in the view and the rows in the\nunderlying table. There are also certain other constructs that make a\nview nonupdatable.\n\nThe WITH CHECK OPTION clause can be given for an updatable view to\nprevent inserts or updates to rows except those for which the WHERE\nclause in the select_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and\nCASCADED keywords determine the scope of check testing when the view is\ndefined in terms of another view. The LOCAL keyword restricts the CHECK\nOPTION only to the view being defined. CASCADED causes the checks for\nunderlying views to be evaluated as well. When neither keyword is\ngiven, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION\nclause, see\nhttp://dev.mysql.com/doc/refman/5.6/en/view-updatability.html, and\nhttp://dev.mysql.com/doc/refman/5.6/en/view-check-option.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-view.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-view.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (552,40,'CREATE VIEW','Syntax:\nCREATE\n [OR REPLACE]\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nThe CREATE VIEW statement creates a new view, or replaces an existing\nview if the OR REPLACE clause is given. If the view does not exist,\nCREATE OR REPLACE VIEW is the same as CREATE VIEW. If the view does\nexist, CREATE OR REPLACE VIEW is the same as ALTER VIEW.\n\nFor information about restrictions on view use, see\nhttp://dev.mysql.com/doc/refman/5.6/en/view-restrictions.html.\n\nThe select_statement is a SELECT statement that provides the definition\nof the view. (Selecting from the view selects, in effect, using the\nSELECT statement.) The select_statement can select from base tables or\nother views.\n\nThe view definition is "frozen" at creation time and is not affected by\nsubsequent changes to the definitions of the underlying tables. For\nexample, if a view is defined as SELECT * on a table, new columns added\nto the table later do not become part of the view, and columns dropped\nfrom the table will result in an error when selecting from the view.\n\nThe ALGORITHM clause affects how MySQL processes the view. The DEFINER\nand SQL SECURITY clauses specify the security context to be used when\nchecking access privileges at view invocation time. The WITH CHECK\nOPTION clause can be given to constrain inserts or updates to rows in\ntables referenced by the view. These clauses are described later in\nthis section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the\nview, and some privilege for each column selected by the SELECT\nstatement. For columns used elsewhere in the SELECT statement, you must\nhave the SELECT privilege. If the OR REPLACE clause is present, you\nmust also have the DROP privilege for the view. CREATE VIEW might also\nrequire the SUPER privilege, depending on the DEFINER value, as\ndescribed later in this section.\n\nWhen a view is referenced, privilege checking occurs as described later\nin this section.\n\nA view belongs to a database. By default, a new view is created in the\ndefault database. To create the view explicitly in a given database,\nuse db_name.view_name syntax to qualify the view name with the database\nname:\n\nCREATE VIEW test.v AS SELECT * FROM t;\n\nUnqualified table or view names in the SELECT statement are also\ninterpreted with respect to the default database. A view can refer to\ntables or views in other databases by qualifying the table or view name\nwith the appropriate database name.\n\nWithin a database, base tables and views share the same namespace, so a\nbase table and a view cannot have the same name.\n\nColumns retrieved by the SELECT statement can be simple references to\ntable columns, or expressions that use functions, constant values,\noperators, and so forth.\n\nA view must have unique column names with no duplicates, just like a\nbase table. By default, the names of the columns retrieved by the\nSELECT statement are used for the view column names. To define explicit\nnames for the view columns, specify the optional column_list clause as\na list of comma-separated identifiers. The number of names in\ncolumn_list must be the same as the number of columns retrieved by the\nSELECT statement.\n\nA view can be created from many kinds of SELECT statements. It can\nrefer to base tables or other views. It can use joins, UNION, and\nsubqueries. The SELECT need not even refer to any tables:\n\nCREATE VIEW v_today (today) AS SELECT CURRENT_DATE;\n\nThe following example defines a view that selects two columns from\nanother table as well as an expression calculated from those columns:\n\nmysql> CREATE TABLE t (qty INT, price INT);\nmysql> INSERT INTO t VALUES(3, 50);\nmysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\nmysql> SELECT * FROM v;\n+------+-------+-------+\n| qty | price | value |\n+------+-------+-------+\n| 3 | 50 | 150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\no The SELECT statement cannot contain a subquery in the FROM clause.\n\no The SELECT statement cannot refer to system variables or user-defined\n variables.\n\no Within a stored program, the SELECT statement cannot refer to program\n parameters or local variables.\n\no The SELECT statement cannot refer to prepared statement parameters.\n\no Any table or view referred to in the definition must exist. If, after\n the view has been created, a table or view that the definition refers\n to is dropped, use of the view results in an error. To check a view\n definition for problems of this kind, use the CHECK TABLE statement.\n\no The definition cannot refer to a TEMPORARY table, and you cannot\n create a TEMPORARY view.\n\no You cannot associate a trigger with a view.\n\no Aliases for column names in the SELECT statement are checked against\n the maximum column length of 64 characters (not the maximum alias\n length of 256 characters).\n\nORDER BY is permitted in a view definition, but it is ignored if you\nselect from a view using a statement that has its own ORDER BY or\nfiltering or grouping. When ORDER BY is combined with LIMIT or OFFSET\nin a view definition, the ordering is always enforced before the query\nresult is used by the outer query, but it does not guarantee that the\nsame ordering is used in the end result. As a workaround, add an ORDER\nBY clause to the outer query.\n\nFor other options or clauses in the definition, they are added to the\noptions or clauses of the statement that references the view, but the\neffect is undefined. For example, if a view definition includes a LIMIT\nclause, and you select from the view using a statement that has its own\nLIMIT clause, it is undefined which limit applies. This same principle\napplies to options such as ALL, DISTINCT, or SQL_SMALL_RESULT that\nfollow the SELECT keyword, and to clauses such as INTO, FOR UPDATE,\nLOCK IN SHARE MODE, and PROCEDURE.\n\nThe results obtained from a view may be affected if you change the\nquery processing environment by changing system variables:\n\nmysql> CREATE VIEW v (mycol) AS SELECT \'abc\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET sql_mode = \'\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol |\n+-------+\n1 row in set (0.01 sec)\n\nmysql> SET sql_mode = \'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc |\n+-------+\n1 row in set (0.00 sec)\n\nThe DEFINER and SQL SECURITY clauses determine which MySQL account to\nuse when checking access privileges for the view when a statement is\nexecuted that references the view. The valid SQL SECURITY\ncharacteristic values are DEFINER (the default) and INVOKER. These\nindicate that the required privileges must be held by the user who\ndefined or invoked the view, respectively.\n\nIf a user value is given for the DEFINER clause, it should be a MySQL\naccount specified as \'user_name\'@\'host_name\', CURRENT_USER, or\nCURRENT_USER(). The default DEFINER value is the user who executes the\nCREATE VIEW statement. This is the same as specifying DEFINER =\nCURRENT_USER explicitly.\n\nIf the DEFINER clause is present, these rules determine the valid\nDEFINER user values:\n\no If you do not have the SUPER privilege, the only valid user value is\n your own account, either specified literally or by using\n CURRENT_USER. You cannot set the definer to some other account.\n\no If you have the SUPER privilege, you can specify any syntactically\n valid account name. If the account does not exist, a warning is\n generated.\n\no Although it is possible to create a view with a nonexistent DEFINER\n account, an error occurs when the view is referenced if the SQL\n SECURITY value is DEFINER but the definer account does not exist.\n\nFor more information about view security, see\nhttp://dev.mysql.com/doc/refman/5.6/en/stored-programs-security.html.\n\nWithin a view definition, CURRENT_USER returns the view\'s DEFINER value\nby default. For views defined with the SQL SECURITY INVOKER\ncharacteristic, CURRENT_USER returns the account for the view\'s\ninvoker. For information about user auditing within views, see\nhttp://dev.mysql.com/doc/refman/5.6/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This\nalso affects a view defined within such a routine, if the view\ndefinition contains a DEFINER value of CURRENT_USER.\n\nMySQL checks view privileges like this:\n\no At view definition time, the view creator must have the privileges\n needed to use the top-level objects accessed by the view. For\n example, if the view definition refers to table columns, the creator\n must have some privilege for each column in the select list of the\n definition, and the SELECT privilege for each column used elsewhere\n in the definition. If the definition refers to a stored function,\n only the privileges needed to invoke the function can be checked. The\n privileges required at function invocation time can be checked only\n as it executes: For different invocations, different execution paths\n within the function might be taken.\n\no The user who references a view must have appropriate privileges to\n access it (SELECT to select from it, INSERT to insert into it, and so\n forth.)\n\no When a view has been referenced, privileges for objects accessed by\n the view are checked against the privileges held by the view DEFINER\n account or invoker, depending on whether the SQL SECURITY\n characteristic is DEFINER or INVOKER, respectively.\n\no If reference to a view causes execution of a stored function,\n privilege checking for statements executed within the function depend\n on whether the function SQL SECURITY characteristic is DEFINER or\n INVOKER. If the security characteristic is DEFINER, the function runs\n with the privileges of the DEFINER account. If the characteristic is\n INVOKER, the function runs with the privileges determined by the\n view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function\nmight invoke other stored routines. For example, the following view\ninvokes a stored function f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n CALL p1();\nELSE\n CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be\nchecked when f() executes. This might mean that privileges are needed\nfor p1() or p2(), depending on the execution path within f(). Those\nprivileges must be checked at runtime, and the user who must possess\nthe privileges is determined by the SQL SECURITY values of the view v\nand the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to\nstandard SQL. In standard SQL, views are handled using the rules for\nSQL SECURITY DEFINER. The standard says that the definer of the view,\nwhich is the same as the owner of the view\'s schema, gets applicable\nprivileges on the view (for example, SELECT) and may grant them. MySQL\nhas no concept of a schema "owner", so MySQL adds a clause to identify\nthe definer. The DEFINER clause is an extension where the intent is to\nhave what the standard has; that is, a permanent record of who defined\nthe view. This is why the default DEFINER value is the account of the\nview creator.\n\nThe optional ALGORITHM clause is a MySQL extension to standard SQL. It\naffects how MySQL processes the view. ALGORITHM takes three values:\nMERGE, TEMPTABLE, or UNDEFINED. The default algorithm is UNDEFINED if\nno ALGORITHM clause is present. For more information, see\nhttp://dev.mysql.com/doc/refman/5.6/en/view-algorithms.html, as well as\nhttp://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html#deriv\ned-table-optimization.\n\nSome views are updatable. That is, you can use them in statements such\nas UPDATE, DELETE, or INSERT to update the contents of the underlying\ntable. For a view to be updatable, there must be a one-to-one\nrelationship between the rows in the view and the rows in the\nunderlying table. There are also certain other constructs that make a\nview nonupdatable.\n\nThe WITH CHECK OPTION clause can be given for an updatable view to\nprevent inserts or updates to rows except those for which the WHERE\nclause in the select_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and\nCASCADED keywords determine the scope of check testing when the view is\ndefined in terms of another view. The LOCAL keyword restricts the CHECK\nOPTION only to the view being defined. CASCADED causes the checks for\nunderlying views to be evaluated as well. When neither keyword is\ngiven, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION\nclause, see\nhttp://dev.mysql.com/doc/refman/5.6/en/view-updatability.html, and\nhttp://dev.mysql.com/doc/refman/5.6/en/view-check-option.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/create-view.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/create-view.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (553,38,'TRIM','Syntax:\nTRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr\nFROM] str)\n\nReturns the string str with all remstr prefixes or suffixes removed. If\nnone of the specifiers BOTH, LEADING, or TRAILING is given, BOTH is\nassumed. remstr is optional and, if not specified, spaces are removed.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html\n\n','mysql> SELECT TRIM(\' bar \');\n -> \'bar\'\nmysql> SELECT TRIM(LEADING \'x\' FROM \'xxxbarxxx\');\n -> \'barxxx\'\nmysql> SELECT TRIM(BOTH \'x\' FROM \'xxxbarxxx\');\n -> \'bar\'\nmysql> SELECT TRIM(TRAILING \'xyz\' FROM \'barxxyz\');\n -> \'barx\'\n','http://dev.mysql.com/doc/refman/5.6/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (554,14,'INET6_NTOA','Syntax:\nINET6_NTOA(expr)\n\nGiven an IPv6 or IPv4 network address represented in numeric form as a\nbinary string, returns the string representation of the address as a\nnonbinary string in the connection character set. If the argument is\nnot a valid address, INET6_NTOA() returns NULL.\n\nINET6_NTOA() has these properties:\n\no It does not use operating system functions to perform conversions,\n thus the output string is platform independent.\n\no The return string has a maximum length of 39 (4 x 8 + 7). Given this\n statement:\n\nCREATE TABLE t AS SELECT INET6_NTOA(expr) AS c1;\n\n The resulting table would have this definition:\n\nCREATE TABLE t (c1 VARCHAR(39) CHARACTER SET utf8 DEFAULT NULL);\n\no The return string uses lowercase letters for IPv6 addresses.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html\n\n','mysql> SELECT INET6_NTOA(INET6_ATON(\'fdfe::5a55:caff:fefa:9089\'));\n -> \'fdfe::5a55:caff:fefa:9089\'\nmysql> SELECT INET6_NTOA(INET6_ATON(\'10.0.5.9\'));\n -> \'10.0.5.9\'\n\nmysql> SELECT INET6_NTOA(UNHEX(\'FDFE0000000000005A55CAFFFEFA9089\'));\n -> \'fdfe::5a55:caff:fefa:9089\'\nmysql> SELECT INET6_NTOA(UNHEX(\'0A000509\'));\n -> \'10.0.5.9\'\n','http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (555,24,'SIGNAL','Syntax:\nSIGNAL condition_value\n [SET signal_information_item\n [, signal_information_item] ...]\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | condition_name\n\nsignal_information_item:\n condition_information_item_name = simple_value_specification\n\ncondition_information_item_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\ncondition_name, simple_value_specification:\n (see following discussion)\n\nSIGNAL is the way to "return" an error. SIGNAL provides error\ninformation to a handler, to an outer portion of the application, or to\nthe client. Also, it provides control over the error\'s characteristics\n(error number, SQLSTATE value, message). Without SIGNAL, it is\nnecessary to resort to workarounds such as deliberately referring to a\nnonexistent table to cause a routine to return an error.\n\nNo special privileges are required to execute the SIGNAL statement.\n\nTo retrieve information from the diagnostics area, use the GET\nDIAGNOSTICS statement (see [HELP GET DIAGNOSTICS]). For information\nabout the diagnostics area, see\nhttp://dev.mysql.com/doc/refman/5.6/en/diagnostics-area.html.\n\nThe condition_value in a SIGNAL statement indicates the error value to\nbe returned. It can be an SQLSTATE value (a 5-character string literal)\nor a condition_name that refers to a named condition previously defined\nwith DECLARE ... CONDITION (see [HELP DECLARE CONDITION]).\n\nAn SQLSTATE value can indicate errors, warnings, or "not found." The\nfirst two characters of the value indicate its error class, as\ndiscussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/signal.html#signal-condition-inf\normation-items. Some signal values cause statement termination; see\nhttp://dev.mysql.com/doc/refman/5.6/en/signal.html#signal-effects.\n\nThe SQLSTATE value for a SIGNAL statement should not start with \'00\'\nbecause such values indicate success and are not valid for signaling an\nerror. This is true whether the SQLSTATE value is specified directly in\nthe SIGNAL statement or in a named condition referred to in the\nstatement. If the value is invalid, a Bad SQLSTATE error occurs.\n\nTo signal a generic SQLSTATE value, use \'45000\', which means "unhandled\nuser-defined exception."\n\nThe SIGNAL statement optionally includes a SET clause that contains\nmultiple signal items, in a comma-separated list of\ncondition_information_item_name = simple_value_specification\nassignments.\n\nEach condition_information_item_name may be specified only once in the\nSET clause. Otherwise, a Duplicate condition information item error\noccurs.\n\nValid simple_value_specification designators can be specified using\nstored procedure or function parameters, stored program local variables\ndeclared with DECLARE, user-defined variables, system variables, or\nliterals. A character literal may include a _charset introducer.\n\nFor information about permissible condition_information_item_name\nvalues, see\nhttp://dev.mysql.com/doc/refman/5.6/en/signal.html#signal-condition-inf\normation-items.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/signal.html\n\n','CREATE PROCEDURE p (pval INT)\nBEGIN\n DECLARE specialty CONDITION FOR SQLSTATE \'45000\';\n IF pval = 0 THEN\n SIGNAL SQLSTATE \'01000\';\n ELSEIF pval = 1 THEN\n SIGNAL SQLSTATE \'45000\'\n SET MESSAGE_TEXT = \'An error occurred\';\n ELSEIF pval = 2 THEN\n SIGNAL specialty\n SET MESSAGE_TEXT = \'An error occurred\';\n ELSE\n SIGNAL SQLSTATE \'01000\'\n SET MESSAGE_TEXT = \'A warning occurred\', MYSQL_ERRNO = 1000;\n SIGNAL SQLSTATE \'45000\'\n SET MESSAGE_TEXT = \'An error occurred\', MYSQL_ERRNO = 1001;\n END IF;\nEND;\n','http://dev.mysql.com/doc/refman/5.6/en/signal.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (556,26,'ST_NUMGEOMETRIES','ST_NumGeometries(gc)\n\nReturns the number of geometries in the GeometryCollection value gc.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-geometrycollection-property-functions.html\n\n','mysql> SET @gc = \'GeometryCollection(Point(1 1),LineString(2 2, 3 3))\';\nmysql> SELECT ST_NumGeometries(ST_GeomFromText(@gc));\n+----------------------------------------+\n| ST_NumGeometries(ST_GeomFromText(@gc)) |\n+----------------------------------------+\n| 2 |\n+----------------------------------------+\n','http://dev.mysql.com/doc/refman/5.6/en/gis-geometrycollection-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (557,8,'SAVEPOINT','Syntax:\nSAVEPOINT identifier\nROLLBACK [WORK] TO [SAVEPOINT] identifier\nRELEASE SAVEPOINT identifier\n\nInnoDB supports the SQL statements SAVEPOINT, ROLLBACK TO SAVEPOINT,\nRELEASE SAVEPOINT and the optional WORK keyword for ROLLBACK.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/savepoint.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/savepoint.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (558,33,'MPOINTFROMWKB','MPointFromWKB(wkb[,srid]), MultiPointFromWKB(wkb[,srid])\n\nConstructs a MultiPoint value using its WKB representation and SRID.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/gis-wkb-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (559,40,'ALTER TABLE','Syntax:\nALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name\n [alter_specification [, alter_specification] ...]\n [partition_options]\n\nalter_specification:\n table_options\n | ADD [COLUMN] col_name column_definition\n [FIRST | AFTER col_name ]\n | ADD [COLUMN] (col_name column_definition,...)\n | ADD {INDEX|KEY} [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [index_name] (index_col_name,...)\n reference_definition\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY}\n | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}\n | CHANGE [COLUMN] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | MODIFY [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | DROP [COLUMN] col_name\n | DROP PRIMARY KEY\n | DROP {INDEX|KEY} index_name\n | DROP FOREIGN KEY fk_symbol\n | DISABLE KEYS\n | ENABLE KEYS\n | RENAME [TO|AS] new_tbl_name\n | ORDER BY col_name [, col_name] ...\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]\n | DISCARD TABLESPACE\n | IMPORT TABLESPACE\n | FORCE\n | ADD PARTITION (partition_definition)\n | DROP PARTITION partition_names\n | TRUNCATE PARTITION {partition_names | ALL}\n | COALESCE PARTITION number\n | REORGANIZE PARTITION partition_names INTO (partition_definitions)\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name\n | ANALYZE PARTITION {partition_names | ALL}\n | CHECK PARTITION {partition_names | ALL}\n | OPTIMIZE PARTITION {partition_names | ALL}\n | REBUILD PARTITION {partition_names | ALL}\n | REPAIR PARTITION {partition_names | ALL}\n | REMOVE PARTITIONING\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\ntable_options:\n table_option [[,] table_option] ... (see CREATE TABLE options)\n\npartition_options:\n (see CREATE TABLE options)\n\nALTER TABLE changes the structure of a table. For example, you can add\nor delete columns, create or destroy indexes, change the type of\nexisting columns, or rename columns or the table itself. You can also\nchange characteristics such as the storage engine used for the table or\nthe table comment.\n\nFollowing the table name, specify the alterations to be made. If none\nare given, ALTER TABLE does nothing.\n\nThe syntax for many of the permissible alterations is similar to\nclauses of the CREATE TABLE statement. See [HELP CREATE TABLE], for\nmore information.\n\ntable_options signifies table options of the kind that can be used in\nthe CREATE TABLE statement, such as ENGINE, AUTO_INCREMENT,\nAVG_ROW_LENGTH, MAX_ROWS, or ROW_FORMAT. For a list of all table\noptions and a description of each, see [HELP CREATE TABLE]. However,\nALTER TABLE ignores the DATA DIRECTORY and INDEX DIRECTORY table\noptions.\n\npartition_options signifies options that can be used with partitioned\ntables for repartitioning, for adding, dropping, merging, and splitting\npartitions, and for performing partitioning maintenance. It is possible\nfor an ALTER TABLE statement to contain a PARTITION BY or REMOVE\nPARTITIONING clause in an addition to other alter specifications, but\nthe PARTITION BY or REMOVE PARTITIONING clause must be specified last\nafter any other specifications. The ADD PARTITION, DROP PARTITION,\nCOALESCE PARTITION, REORGANIZE PARTITION, EXCHANGE PARTITION, ANALYZE\nPARTITION, CHECK PARTITION, and REPAIR PARTITION options cannot be\ncombined with other alter specifications in a single ALTER TABLE, since\nthe options just listed act on individual partitions. For more\ninformation about partition options, see [HELP CREATE TABLE], and\nhttp://dev.mysql.com/doc/refman/5.6/en/alter-table-partition-operations\n.html. For information about and examples of ALTER TABLE ... EXCHANGE\nPARTITION statements, see\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-management-exchange\n.html.\n\nSome operations may result in warnings if attempted on a table for\nwhich the storage engine does not support the operation. These warnings\ncan be displayed with SHOW WARNINGS. See [HELP SHOW WARNINGS].\n\nFor information on troubleshooting ALTER TABLE, see\nhttp://dev.mysql.com/doc/refman/5.6/en/alter-table-problems.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/alter-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/alter-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (559,40,'ALTER TABLE','Syntax:\nALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name\n [alter_specification [, alter_specification] ...]\n [partition_options]\n\nalter_specification:\n table_options\n | ADD [COLUMN] col_name column_definition\n [FIRST | AFTER col_name ]\n | ADD [COLUMN] (col_name column_definition,...)\n | ADD {INDEX|KEY} [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [index_name] (index_col_name,...)\n reference_definition\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY}\n | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}\n | CHANGE [COLUMN] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | MODIFY [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | DROP [COLUMN] col_name\n | DROP PRIMARY KEY\n | DROP {INDEX|KEY} index_name\n | DROP FOREIGN KEY fk_symbol\n | DISABLE KEYS\n | ENABLE KEYS\n | RENAME [TO|AS] new_tbl_name\n | ORDER BY col_name [, col_name] ...\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]\n | DISCARD TABLESPACE\n | IMPORT TABLESPACE\n | FORCE\n | ADD PARTITION (partition_definition)\n | DROP PARTITION partition_names\n | TRUNCATE PARTITION {partition_names | ALL}\n | COALESCE PARTITION number\n | REORGANIZE PARTITION partition_names INTO (partition_definitions)\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name\n | ANALYZE PARTITION {partition_names | ALL}\n | CHECK PARTITION {partition_names | ALL}\n | OPTIMIZE PARTITION {partition_names | ALL}\n | REBUILD PARTITION {partition_names | ALL}\n | REPAIR PARTITION {partition_names | ALL}\n | REMOVE PARTITIONING\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\ntable_options:\n table_option [[,] table_option] ... (see CREATE TABLE options)\n\npartition_options:\n (see CREATE TABLE options)\n\nALTER TABLE changes the structure of a table. For example, you can add\nor delete columns, create or destroy indexes, change the type of\nexisting columns, or rename columns or the table itself. You can also\nchange characteristics such as the storage engine used for the table or\nthe table comment.\n\nFollowing the table name, specify the alterations to be made. If none\nare given, ALTER TABLE does nothing.\n\nThe syntax for many of the permissible alterations is similar to\nclauses of the CREATE TABLE statement. See [HELP CREATE TABLE], for\nmore information.\n\ntable_options signifies table options of the kind that can be used in\nthe CREATE TABLE statement, such as ENGINE, AUTO_INCREMENT,\nAVG_ROW_LENGTH, MAX_ROWS, or ROW_FORMAT. For a list of all table\noptions and a description of each, see [HELP CREATE TABLE]. However,\nALTER TABLE ignores the DATA DIRECTORY and INDEX DIRECTORY table\noptions.\n\nUse of table options with ALTER TABLE provides a convenient way of\naltering single table characteristics. For example, if t1 is currently\nnot an InnoDB table, this statement changes its storage engine to\nInnoDB:\n\nALTER TABLE t1 ENGINE = InnoDB;\n\nTo change the InnoDB table to use compressed row-storage format:\n\nALTER TABLE t1 ROW_FORMAT = COMPRESSED;\n\nTo reset the current auto-increment value:\n\nALTER TABLE t1 AUTO_INCREMENT = 13;\n\nTo change the default table character set:\n\nALTER TABLE t1 CHARACTER SET = utf8;\n\nTo add (or change) a table comment:\n\nALTER TABLE t1 COMMENT = \'New table comment\';\n\nTo verify that the table options were changed as you intend, use SHOW\nCREATE TABLE.\n\npartition_options signifies options that can be used with partitioned\ntables for repartitioning, for adding, dropping, merging, and splitting\npartitions, and for performing partitioning maintenance. It is possible\nfor an ALTER TABLE statement to contain a PARTITION BY or REMOVE\nPARTITIONING clause in an addition to other alter specifications, but\nthe PARTITION BY or REMOVE PARTITIONING clause must be specified last\nafter any other specifications. The ADD PARTITION, DROP PARTITION,\nCOALESCE PARTITION, REORGANIZE PARTITION, EXCHANGE PARTITION, ANALYZE\nPARTITION, CHECK PARTITION, and REPAIR PARTITION options cannot be\ncombined with other alter specifications in a single ALTER TABLE, since\nthe options just listed act on individual partitions. For more\ninformation about partition options, see [HELP CREATE TABLE], and\nhttp://dev.mysql.com/doc/refman/5.6/en/alter-table-partition-operations\n.html. For information about and examples of ALTER TABLE ... EXCHANGE\nPARTITION statements, see\nhttp://dev.mysql.com/doc/refman/5.6/en/partitioning-management-exchange\n.html.\n\nSome operations may result in warnings if attempted on a table for\nwhich the storage engine does not support the operation. These warnings\ncan be displayed with SHOW WARNINGS. See [HELP SHOW WARNINGS].\n\nFor information on troubleshooting ALTER TABLE, see\nhttp://dev.mysql.com/doc/refman/5.6/en/alter-table-problems.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/alter-table.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/alter-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (560,24,'LABELS','Syntax:\n[begin_label:] BEGIN\n [statement_list]\nEND [end_label]\n\n[begin_label:] LOOP\n statement_list\nEND LOOP [end_label]\n\n[begin_label:] REPEAT\n statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\n[begin_label:] WHILE search_condition DO\n statement_list\nEND WHILE [end_label]\n\nLabels are permitted for BEGIN ... END blocks and for the LOOP, REPEAT,\nand WHILE statements. Label use for those statements follows these\nrules:\n\no begin_label must be followed by a colon.\n\no begin_label can be given without end_label. If end_label is present,\n it must be the same as begin_label.\n\no end_label cannot be given without begin_label.\n\no Labels at the same nesting level must be distinct.\n\no Labels can be up to 16 characters long.\n\nTo refer to a label within the labeled construct, use an ITERATE or\nLEAVE statement. The following example uses those statements to\ncontinue iterating or terminate the loop:\n\nCREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n label1: LOOP\n SET p1 = p1 + 1;\n IF p1 < 10 THEN ITERATE label1; END IF;\n LEAVE label1;\n END LOOP label1;\nEND;\n\nThe scope of a block label does not include the code for handlers\ndeclared within the block. For details, see [HELP DECLARE HANDLER].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/statement-labels.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/statement-labels.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (561,23,'CHAR BYTE','The CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (562,20,'>','Syntax:\n>\n\nGreater than:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT 2 > 2;\n -> 0\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); @@ -651,7 +651,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (571,28,'INSERT DELAYED','Syntax:\nINSERT DELAYED ...\n\nThe DELAYED option for the INSERT statement is a MySQL extension to\nstandard SQL that can be used for certain kinds of tables (such as\nMyISAM). When a client uses INSERT DELAYED, it gets an okay from the\nserver at once, and the row is queued to be inserted when the table is\nnot in use by any other thread.\n\n*Note*: INSERT DELAYED is slower than a normal INSERT if the table is\nnot otherwise in use. There is also the additional overhead for the\nserver to handle a separate thread for each table for which there are\ndelayed rows. This means that you should use INSERT DELAYED only when\nyou are really sure that you need it. As of MySQL 5.6.6, INSERT DELAYED\nis deprecated, and will be removed in a future release. Use INSERT\n(without DELAYED) instead.\n\nThe queued rows are held only in memory until they are inserted into\nthe table. This means that if you terminate mysqld forcibly (for\nexample, with kill -9) or if mysqld dies unexpectedly, any queued rows\nthat have not been written to disk are lost.\n\nThere are some constraints on the use of DELAYED:\n\no INSERT DELAYED works only with MyISAM, MEMORY, ARCHIVE, and BLACKHOLE\n tables. For engines that do not support DELAYED, an error occurs.\n\no An error occurs for INSERT DELAYED if used with a table that has been\n locked with LOCK TABLES because the insert must be handled by a\n separate thread, not by the session that holds the lock.\n\no For MyISAM tables, if there are no free blocks in the middle of the\n data file, concurrent SELECT and INSERT statements are supported.\n Under these circumstances, you very seldom need to use INSERT DELAYED\n with MyISAM.\n\no INSERT DELAYED should be used only for INSERT statements that specify\n value lists. The server ignores DELAYED for INSERT ... SELECT or\n INSERT ... ON DUPLICATE KEY UPDATE statements.\n\no Because the INSERT DELAYED statement returns immediately, before the\n rows are inserted, you cannot use LAST_INSERT_ID() to get the\n AUTO_INCREMENT value that the statement might generate.\n\no DELAYED rows are not visible to SELECT statements until they actually\n have been inserted.\n\no Prior to MySQL 5.6, INSERT DELAYED was treated as a normal INSERT if\n the statement inserted multiple rows, binary logging was enabled, and\n the global logging format was statement-based (that is, whenever\n binlog_format was set to STATEMENT). Beginning with MySQL 5.6, INSERT\n DELAYED is always handled as a simple INSERT (that is, without the\n DELAYED option) whenever the value of binlog_format is STATEMENT or\n MIXED. (In the latter case, the statement no longer triggers a switch\n to row-based logging, and so is logged using the statement-based\n format.)\n\n This does not apply when using row-based binary logging mode\n (binlog_format set to ROW), in which INSERT DELAYED statements are\n always executed using the DELAYED option as specified, and logged as\n row-update events.\n\no DELAYED is ignored on slave replication servers, so that INSERT\n DELAYED is treated as a normal INSERT on slaves. This is because\n DELAYED could cause the slave to have different data than the master.\n\no Pending INSERT DELAYED statements are lost if a table is write locked\n and ALTER TABLE is used to modify the table structure.\n\no INSERT DELAYED is not supported for views.\n\no INSERT DELAYED is not supported for partitioned tables.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/insert-delayed.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/insert-delayed.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (572,27,'SHOW PROCEDURE CODE','Syntax:\nSHOW PROCEDURE CODE proc_name\n\nThis statement is a MySQL extension that is available only for servers\nthat have been built with debugging support. It displays a\nrepresentation of the internal implementation of the named stored\nprocedure. A similar statement, SHOW FUNCTION CODE, displays\ninformation about stored functions (see [HELP SHOW FUNCTION CODE]).\n\nTo use either statement, you must be the owner of the routine or have\nSELECT access to the mysql.proc table.\n\nIf the named routine is available, each statement produces a result\nset. Each row in the result set corresponds to one "instruction" in the\nroutine. The first column is Pos, which is an ordinal number beginning\nwith 0. The second column is Instruction, which contains an SQL\nstatement (usually changed from the original source), or a directive\nwhich has meaning only to the stored-routine handler.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-procedure-code.html\n\n','mysql> DELIMITER //\nmysql> CREATE PROCEDURE p1 ()\n -> BEGIN\n -> DECLARE fanta INT DEFAULT 55;\n -> DROP TABLE t2;\n -> LOOP\n -> INSERT INTO t3 VALUES (fanta);\n -> END LOOP;\n -> END//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SHOW PROCEDURE CODE p1//\n+-----+----------------------------------------+\n| Pos | Instruction |\n+-----+----------------------------------------+\n| 0 | set fanta@0 55 |\n| 1 | stmt 9 "DROP TABLE t2" |\n| 2 | stmt 5 "INSERT INTO t3 VALUES (fanta)" |\n| 3 | jump 2 |\n+-----+----------------------------------------+\n4 rows in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.6/en/show-procedure-code.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (573,23,'MEDIUMTEXT','MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 16,777,215 (224 − 1)\ncharacters. The effective maximum length is less if the value contains\nmultibyte characters. Each MEDIUMTEXT value is stored using a 3-byte\nlength prefix that indicates the number of bytes in the value.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (574,27,'SHOW COLLATION','Syntax:\nSHOW COLLATION\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement lists collations supported by the server. By default,\nthe output from SHOW COLLATION includes all available collations. The\nLIKE clause, if present, indicates which collation names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html. For example:\n\nmysql> SHOW COLLATION LIKE \'latin1%\';\n+-------------------+---------+----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+-------------------+---------+----+---------+----------+---------+\n| latin1_german1_ci | latin1 | 5 | | | 0 |\n| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 |\n| latin1_danish_ci | latin1 | 15 | | | 0 |\n| latin1_german2_ci | latin1 | 31 | | Yes | 2 |\n| latin1_bin | latin1 | 47 | | Yes | 0 |\n| latin1_general_ci | latin1 | 48 | | | 0 |\n| latin1_general_cs | latin1 | 49 | | | 0 |\n| latin1_spanish_ci | latin1 | 94 | | | 0 |\n+-------------------+---------+----+---------+----------+---------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-collation.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-collation.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (574,27,'SHOW COLLATION','Syntax:\nSHOW COLLATION\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement lists collations supported by the server. By default,\nthe output from SHOW COLLATION includes all available collations. The\nLIKE clause, if present, indicates which collation names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.6/en/extended-show.html. For example:\n\nmysql> SHOW COLLATION WHERE Charset = \'latin1\';\n+-------------------+---------+----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+-------------------+---------+----+---------+----------+---------+\n| latin1_german1_ci | latin1 | 5 | | Yes | 1 |\n| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |\n| latin1_danish_ci | latin1 | 15 | | Yes | 1 |\n| latin1_german2_ci | latin1 | 31 | | Yes | 2 |\n| latin1_bin | latin1 | 47 | | Yes | 1 |\n| latin1_general_ci | latin1 | 48 | | Yes | 1 |\n| latin1_general_cs | latin1 | 49 | | Yes | 1 |\n| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |\n+-------------------+---------+----+---------+----------+---------+\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/show-collation.html\n\n','','http://dev.mysql.com/doc/refman/5.6/en/show-collation.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (575,3,'LOG','Syntax:\nLOG(X), LOG(B,X)\n\nIf called with one parameter, this function returns the natural\nlogarithm of X. If X is less than or equal to 0, then NULL is returned.\n\nThe inverse of this function (when called with a single argument) is\nthe EXP() function.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT LOG(2);\n -> 0.69314718055995\nmysql> SELECT LOG(-2);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (576,20,'!=','Syntax:\n<>, !=\n\nNot equal:\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT \'.01\' <> \'0.01\';\n -> 1\nmysql> SELECT .01 <> \'0.01\';\n -> 0\nmysql> SELECT \'zapp\' <> \'zappp\';\n -> 1\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (577,24,'WHILE','Syntax:\n[begin_label:] WHILE search_condition DO\n statement_list\nEND WHILE [end_label]\n\nThe statement list within a WHILE statement is repeated as long as the\nsearch_condition expression is true. statement_list consists of one or\nmore SQL statements, each terminated by a semicolon (;) statement\ndelimiter.\n\nA WHILE statement can be labeled. For the rules regarding label use,\nsee [HELP labels].\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/while.html\n\n','CREATE PROCEDURE dowhile()\nBEGIN\n DECLARE v1 INT DEFAULT 5;\n\n WHILE v1 > 0 DO\n ...\n SET v1 = v1 - 1;\n END WHILE;\nEND;\n','http://dev.mysql.com/doc/refman/5.6/en/while.html'); @@ -659,7 +659,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (579,3,'RADIANS','Syntax:\nRADIANS(X)\n\nReturns the argument X, converted from degrees to radians.\n\n*Note*: π radians equals 180 degrees.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html\n\n','mysql> SELECT RADIANS(90);\n -> 1.5707963267949\n','http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (580,17,'COLLATION','Syntax:\nCOLLATION(str)\n\nReturns the collation of the string argument.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT COLLATION(\'abc\');\n -> \'latin1_swedish_ci\'\nmysql> SELECT COLLATION(_utf8\'abc\');\n -> \'utf8_general_ci\'\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (581,20,'COALESCE','Syntax:\nCOALESCE(value,...)\n\nReturns the first non-NULL value in the list, or NULL if there are no\nnon-NULL values.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html\n\n','mysql> SELECT COALESCE(NULL,1);\n -> 1\nmysql> SELECT COALESCE(NULL,NULL,NULL);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (582,17,'VERSION','Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8 character set. The value might have a suffix in addition\nto the version number. See the description of the version system\nvariable in\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT VERSION();\n -> \'5.6.28-standard\'\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (582,17,'VERSION','Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8 character set. The value might have a suffix in addition\nto the version number. See the description of the version system\nvariable in\nhttp://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html\n\n','mysql> SELECT VERSION();\n -> \'5.6.34-standard\'\n','http://dev.mysql.com/doc/refman/5.6/en/information-functions.html'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (0,'JOIN'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (1,'HOST'); @@ -747,528 +747,531 @@ INSERT INTO help_keyword (help_keyword_id,name) VALUES (83,'REQUIRE'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (84,'ST_ASWKT'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (85,'LONG'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (86,'OPTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (87,'REORGANIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (88,'ELSE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (89,'EXTERIORRING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (90,'GEOMFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (91,'STATS_AUTO_RECALC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (92,'FROM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (93,'MULTIPOLYGON'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (94,'LEFT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (95,'ELSEIF'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (96,'ST_ISCLOSED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (97,'COMPACT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (98,'DEC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (99,'FOR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (100,'WARNINGS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (101,'ST_LINESTRINGFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (102,'STRING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (103,'CONDITION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (104,'ENCLOSED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (105,'AGGREGATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (106,'NUMBER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (107,'FIELDS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (108,'KILL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (109,'DISJOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (110,'TABLESPACE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (111,'OVERLAPS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (112,'INFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (113,'MBREQUAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (114,'HELP_VERSION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (115,'ORDER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (116,'MASTER_SSL_CRL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (117,'ST_GEOMFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (118,'USING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (119,'MIDDLEINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (120,'GRANT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (121,'MBRINTERSECTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (122,'GEOMETRYN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (123,'GEOMETRYFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (124,'DEFAULT_AUTH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (125,'FOREIGN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (126,'CACHE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (127,'MYSQL_ERRNO'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (128,'SCHEMAS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (129,'LEADING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (130,'CONSTRAINT_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (131,'CONVERT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (132,'DYNAMIC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (133,'POLYGONFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (134,'ENVELOPE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (135,'ST_ISEMPTY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (136,'HAVING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (137,'STARTING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (138,'RELOAD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (139,'ISSIMPLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (140,'AUTOCOMMIT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (141,'ST_Y'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (142,'REVOKE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (143,'RANDOM_BYTES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (144,'EXPLAIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (145,'CSV'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (146,'OUTFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (147,'LOW_PRIORITY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (148,'FILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (149,'NODEGROUP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (150,'SCHEMA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (151,'ST_TOUCHES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (152,'MLINEFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (153,'ST_POLYGONFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (154,'DUAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (155,'MULTIPOINTFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (156,'MULTIPOINTFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (157,'EXTENDED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (158,'CROSS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (159,'CONTRIBUTORS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (160,'GROUP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (161,'NATIONAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (162,'ST_ISSIMPLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (163,'SHA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (164,'POINTN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (165,'IGNORE_SERVER_IDS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (166,'MASTER_AUTO_POSITION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (167,'ASBINARY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (168,'MBROVERLAPS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (169,'OWNER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (170,'TRUE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (171,'CHARACTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (172,'SCHEMA_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (173,'TABLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (174,'ST_LINEFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (175,'CASCADE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (176,'RELAY_LOG_POS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (177,'ASWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (178,'LEAVE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (179,'MODIFY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (180,'MATCH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (181,'MASTER_LOG_POS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (182,'DISTINCTROW'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (183,'X'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (184,'CURSOR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (185,'ST_UNION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (186,'CROSSES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (187,'GEOMETRYCOLLECTIONFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (188,'CHAIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (189,'FLUSH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (190,'CREATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (191,'DESCRIBE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (192,'PROCESSLIST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (193,'DISCARD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (194,'SOUNDS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (195,'PACK_KEYS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (196,'MULTILINESTRINGFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (197,'INTERSECTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (198,'FAST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (199,'GET'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (200,'LOOP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (201,'VARCHARACTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (202,'BEFORE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (203,'ALL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (204,'REDUNDANT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (205,'USER_RESOURCES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (206,'PARTIAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (207,'END'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (208,'ST_CONTAINS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (209,'SECOND'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (210,'FLOAT8'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (211,'PREV'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (212,'MBRCONTAINS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (213,'OR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (214,'IDENTIFIED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (215,'POINTFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (216,'MASTER_SSL_CIPHER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (217,'SQL_SLAVE_SKIP_COUNTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (218,'BOTH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (219,'YEAR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (220,'UNIQUE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (221,'TRIGGERS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (222,'RESIGNAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (223,'ST_NUMPOINTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (224,'MASTER_SSL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (225,'DATE_ADD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (226,'ST_ENVELOPE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (227,'LIKE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (228,'PLUGIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (229,'MULTIPOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (230,'FETCH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (231,'MBRWITHIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (232,'COLUMN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (233,'USAGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (234,'MEMORY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (235,'QUERY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (236,'Y'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (237,'LINES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (238,'PLUGIN_DIR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (239,'SQL_THREAD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (240,'INTERIORRINGN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (241,'NUMINTERIORRINGS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (242,'MAX_QUERIES_PER_HOUR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (243,'ST_POLYFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (244,'TRANSACTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (245,'STDDEV'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (246,'INT1'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (247,'RIGHT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (248,'MAX_ROWS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (249,'ALTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (250,'NATURAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (251,'MULTILINESTRING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (252,'VARIABLES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (253,'ESCAPED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (254,'KEY_BLOCK_SIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (255,'MPOINTFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (256,'CHAR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (257,'UPGRADE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (258,'INTERVAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (259,'NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (260,'ST_POINTFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (261,'REFERENCES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (262,'ST_WITHIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (263,'STORAGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (264,'ISOLATION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (265,'EVERY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (266,'INT8'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (267,'AUTHORS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (268,'ST_BUFFER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (269,'BUFFER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (270,'RESTRICT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (271,'UNCOMMITTED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (272,'LINESTRINGFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (273,'IS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (274,'ST_CENTROID'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (275,'NOT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (276,'DATAFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (277,'ANALYSE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (278,'DES_KEY_FILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (279,'COMPRESSED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (280,'START'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (281,'IF'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (282,'ROWS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (283,'PURGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (284,'USER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (285,'EXIT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (286,'MERGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (287,'ST_DISTANCE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (288,'SQL_NO_CACHE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (289,'DELAYED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (290,'ST_POLYFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (291,'WRITE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (292,'DATABASE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (293,'NULL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (294,'POWER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (295,'POINTFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (296,'USE_FRM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (297,'TERMINATED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (298,'NVARCHAR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (299,'RETURN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (300,'DIRECTORY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (301,'AES_DECRYPT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (302,'GLENGTH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (303,'SHUTDOWN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (304,'CATALOG_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (305,'FIXED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (306,'MULTIPOLYGONFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (307,'REPLACE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (308,'REPEAT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (309,'ST_SYMDIFFERENCE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (310,'STARTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (311,'COMPLETION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (312,'COLUMNS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (313,'DATETIME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (314,'MODE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (315,'INTEGER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (316,'VALUE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (317,'ASWKT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (318,'GEOMETRYCOLLECTIONFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (319,'DROP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (320,'SQL_BIG_RESULT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (321,'MASTER_SSL_VERIFY_SERVER_CERT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (322,'SUBJECT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (323,'MASTER_RETRY_COUNT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (324,'CHECK'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (325,'FULL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (326,'BY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (327,'NO'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (328,'DAY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (329,'DATA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (330,'PARTITION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (331,'REAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (332,'SHARE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (333,'LINESTRING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (334,'MESSAGE_TEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (335,'MASTER_HEARTBEAT_PERIOD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (336,'COLUMN_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (337,'X509'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (338,'LINEFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (339,'SUBCLASS_ORIGIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (340,'WHERE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (341,'EVENT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (342,'SUPER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (343,'IGNORE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (344,'SHA2'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (345,'QUICK'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (346,'SIGNED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (347,'ST_GEOMCOLLFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (348,'FALSE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (349,'POLYGONFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (350,'FORCE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (351,'CHANGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (352,'TO'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (353,'POINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (354,'CREATE_DH_PARAMETERS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (355,'TABLE_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (356,'VARYING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (357,'FEDERATED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (358,'MAX_SIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (359,'HOUR_SECOND'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (360,'ST_DIFFERENCE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (361,'GEOMETRYCOLLECTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (362,'ST_GEOMETRYCOLLECTIONFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (363,'ST_ASBINARY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (364,'PROCEDURE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (365,'AGAINST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (366,'ST_AREA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (367,'ENDPOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (368,'SQL_BEFORE_GTIDS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (369,'LONGBINARY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (370,'INSERT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (371,'COUNT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (372,'PORT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (373,'MLINEFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (374,'EXISTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (375,'MUTEX'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (376,'GEOMCOLLFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (377,'RELEASE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (378,'DEFAULT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (379,'TYPE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (380,'NO_WRITE_TO_BINLOG'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (381,'OPTIMIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (382,'SQLSTATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (383,'RESET'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (384,'INSTALL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (385,'BIGINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (386,'ST_DIMENSION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (387,'SET'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (388,'ISSUER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (389,'STATUS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (390,'INNER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (391,'RELAYLOG'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (392,'MRG_MYISAM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (393,'STOP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (394,'TRAILING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (395,'PARTITIONS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (396,'ST_NUMINTERIORRINGS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (397,'CASE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (398,'IO_THREAD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (399,'DEALLOCATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (400,'CIPHER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (401,'CONTINUE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (402,'READ'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (403,'MINUTE_SECOND'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (404,'MIN_ROWS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (405,'ROW_COUNT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (406,'FUNCTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (407,'ST_GEOMETRYFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (408,'INT3'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (409,'ADD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (410,'AVG_ROW_LENGTH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (411,'ARCHIVE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (412,'FLOAT4'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (413,'ASTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (414,'NUMGEOMETRIES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (415,'ALGORITHM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (416,'VIEW'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (417,'REPEATABLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (418,'CONSTRAINT_CATALOG'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (419,'STARTPOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (420,'MPOLYFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (421,'UNSIGNED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (422,'DECIMAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (423,'INDEXES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (424,'ST_INTERSECTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (425,'HOSTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (426,'COMMIT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (427,'SNAPSHOT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (428,'DECLARE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (429,'NUMPOINTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (430,'LOAD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (431,'SQL_CACHE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (432,'COLLATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (433,'ST_GEOMETRYFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (434,'BYTE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (435,'LINESTRINGFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (436,'GLOBAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (437,'WHEN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (438,'TOUCHES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (439,'AS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (440,'ST_LINESTRINGFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (441,'GEOMCOLLFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (442,'ST_INTERIORRINGN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (443,'GRANTS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (444,'OUTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (445,'CURSOR_NAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (446,'EXPIRE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (447,'FLOOR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (448,'SQL_AFTER_MTS_GAPS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (449,'WITH'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (450,'STD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (451,'AFTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (452,'DISABLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (453,'UNINSTALL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (454,'SONAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (455,'POW'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (456,'INDEX'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (457,'DEFINER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (458,'MASTER_BIND'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (459,'REMOVE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (460,'MULTILINESTRINGFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (461,'ST_POINTFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (462,'ST_ENDPOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (463,'ST_OVERLAPS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (464,'UNDO'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (465,'ZEROFILL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (466,'CLIENT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (467,'MASTER_PASSWORD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (468,'RELAY_LOG_FILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (469,'MBRTOUCHES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (470,'MASTER_USER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (471,'ENGINE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (472,'INSERT_METHOD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (473,'SQL_CALC_FOUND_ROWS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (474,'UNION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (475,'MYISAM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (476,'DESC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (477,'TIME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (478,'EXPANSION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (479,'NUMERIC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (480,'CODE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (481,'AREA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (482,'LOGFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (483,'EXTENT_SIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (484,'ST_LINEFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (485,'MAX_UPDATES_PER_HOUR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (486,'INT2'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (487,'ENDS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (488,'ISEMPTY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (489,'RECOVER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (490,'LOGS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (491,'HEAP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (492,'RETURNED_SQLSTATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (493,'EXCHANGE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (494,'BETWEEN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (495,'ST_CROSSES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (496,'REPAIR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (497,'MBRDISJOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (498,'CALL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (499,'VALUES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (500,'ST_X'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (501,'TRUNCATE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (502,'SHOW'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (503,'BINLOG'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (504,'ST_DISJOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (505,'AND'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (506,'HOUR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (507,'SELECT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (508,'DATABASES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (509,'WRAPPER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (510,'BOOL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (511,'MASTER_PORT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (512,'CONCURRENT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (513,'HELP'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (514,'PROCESS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (515,'OPTIONS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (516,'CONSISTENT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (517,'MAX_CONNECTIONS_PER_HOUR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (518,'IN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (519,'DIAGNOSTICS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (520,'DUMPFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (521,'POLYFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (522,'ST_SRID'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (523,'EXECUTE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (524,'CEIL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (525,'MASTER_HOST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (526,'ST_EQUALS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (527,'SERVER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (528,'MULTIPOLYGONFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (529,'MASTER_SSL_CERT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (530,'DAY_MINUTE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (531,'DATE_SUB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (532,'REBUILD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (533,'GEOMETRYFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (534,'GEOMFROMTEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (535,'RENAME'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (536,'PARSER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (537,'ST_ASWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (538,'SOCKET'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (539,'STRAIGHT_JOIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (540,'ST_GEOMETRYCOLLECTIONFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (541,'ST_GEOMFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (542,'SHA1'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (543,'PASSWORD'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (544,'OFFSET'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (545,'NEXT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (546,'ERRORS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (547,'TEMPORARY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (548,'SQL_LOG_BIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (549,'DIMENSION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (550,'SQL_SMALL_RESULT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (551,'COMMITTED'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (552,'EQUALS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (553,'DELAY_KEY_WRITE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (554,'BEGIN'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (555,'XA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (556,'PROFILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (557,'MEDIUM'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (558,'CENTROID'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (559,'SSL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (560,'DAY_HOUR'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (561,'AES_ENCRYPT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (562,'CEILING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (563,'LINEFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (564,'GEOMETRYTYPE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (565,'STATS_SAMPLE_PAGES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (566,'SIGNAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (567,'PLUGINS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (568,'ST_NUMGEOMETRIES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (569,'SAVEPOINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (570,'PRIMARY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (571,'LAST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (572,'MPOINTFROMWKB'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (573,'KEYS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (574,'LIMIT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (575,'KEY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (576,'UNTIL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (577,'CONSTRAINT_SCHEMA'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (578,'ST_EXTERIORRING'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (579,'ANALYZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (580,'CONSTRAINT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (581,'SERIAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (582,'ACTION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (583,'INITIAL_SIZE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (584,'SESSION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (585,'SLAVE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (586,'ASC'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (587,'ENABLE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (588,'OPTIONALLY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (589,'MAX_USER_CONNECTIONS'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (590,'DISTINCT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (591,'LOCAL'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (592,'WHILE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (593,'MASTER_SSL_KEY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (594,'NONE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (595,'TABLES'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (596,'<>'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (597,'EXPORT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (598,'RLIKE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (599,'TRIGGER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (600,'COLLATION'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (601,'HIGH_PRIORITY'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (602,'BTREE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (603,'FIRST'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (604,'COALESCE'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (605,'WAIT'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (606,'MASTER'); -INSERT INTO help_keyword (help_keyword_id,name) VALUES (607,'ROW_FORMAT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (86,'FORMAT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (87,'OPTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (88,'REORGANIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (89,'ELSE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (90,'EXTERIORRING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (91,'GEOMFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (92,'STATS_AUTO_RECALC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (93,'FROM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (94,'MULTIPOLYGON'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (95,'LEFT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (96,'ELSEIF'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (97,'ST_ISCLOSED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (98,'COMPACT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (99,'DEC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (100,'FOR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (101,'WARNINGS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (102,'ST_LINESTRINGFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (103,'STRING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (104,'CONDITION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (105,'ENCLOSED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (106,'AGGREGATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (107,'NUMBER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (108,'FIELDS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (109,'KILL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (110,'DISJOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (111,'TABLESPACE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (112,'OVERLAPS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (113,'INFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (114,'MBREQUAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (115,'HELP_VERSION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (116,'ORDER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (117,'MASTER_SSL_CRL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (118,'ST_GEOMFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (119,'USING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (120,'MIDDLEINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (121,'GRANT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (122,'MBRINTERSECTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (123,'GEOMETRYN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (124,'GEOMETRYFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (125,'DEFAULT_AUTH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (126,'FOREIGN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (127,'CACHE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (128,'MYSQL_ERRNO'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (129,'SCHEMAS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (130,'LEADING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (131,'CONSTRAINT_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (132,'CONVERT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (133,'DYNAMIC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (134,'POLYGONFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (135,'ENVELOPE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (136,'ST_ISEMPTY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (137,'HAVING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (138,'STARTING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (139,'RELOAD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (140,'ISSIMPLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (141,'AUTOCOMMIT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (142,'ST_Y'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (143,'REVOKE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (144,'RANDOM_BYTES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (145,'EXPLAIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (146,'CSV'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (147,'OUTFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (148,'LOW_PRIORITY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (149,'FILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (150,'NODEGROUP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (151,'SCHEMA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (152,'ST_TOUCHES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (153,'MLINEFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (154,'ST_POLYGONFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (155,'DUAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (156,'MULTIPOINTFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (157,'MULTIPOINTFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (158,'EXTENDED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (159,'CROSS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (160,'CONTRIBUTORS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (161,'GROUP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (162,'NATIONAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (163,'ST_ISSIMPLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (164,'SHA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (165,'POINTN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (166,'IGNORE_SERVER_IDS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (167,'MASTER_AUTO_POSITION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (168,'ASBINARY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (169,'MBROVERLAPS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (170,'OWNER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (171,'TRUE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (172,'CHARACTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (173,'SCHEMA_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (174,'TABLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (175,'ST_LINEFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (176,'CASCADE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (177,'RELAY_LOG_POS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (178,'ASWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (179,'LEAVE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (180,'MODIFY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (181,'MATCH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (182,'MASTER_LOG_POS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (183,'DISTINCTROW'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (184,'X'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (185,'CURSOR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (186,'ST_UNION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (187,'CROSSES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (188,'GEOMETRYCOLLECTIONFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (189,'CHAIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (190,'FLUSH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (191,'CREATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (192,'DESCRIBE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (193,'PROCESSLIST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (194,'DISCARD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (195,'SOUNDS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (196,'PACK_KEYS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (197,'MULTILINESTRINGFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (198,'INTERSECTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (199,'FAST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (200,'GET'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (201,'LOOP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (202,'VARCHARACTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (203,'BEFORE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (204,'ALL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (205,'REDUNDANT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (206,'USER_RESOURCES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (207,'PARTIAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (208,'END'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (209,'ST_CONTAINS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (210,'SECOND'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (211,'FLOAT8'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (212,'PREV'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (213,'MBRCONTAINS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (214,'OR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (215,'IDENTIFIED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (216,'POINTFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (217,'MASTER_SSL_CIPHER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (218,'SQL_SLAVE_SKIP_COUNTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (219,'BOTH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (220,'YEAR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (221,'UNIQUE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (222,'TRIGGERS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (223,'RESIGNAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (224,'ST_NUMPOINTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (225,'MASTER_SSL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (226,'DATE_ADD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (227,'ST_ENVELOPE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (228,'LIKE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (229,'PLUGIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (230,'MULTIPOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (231,'FETCH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (232,'MBRWITHIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (233,'COLUMN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (234,'USAGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (235,'MEMORY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (236,'QUERY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (237,'Y'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (238,'LINES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (239,'PLUGIN_DIR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (240,'SQL_THREAD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (241,'INTERIORRINGN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (242,'NUMINTERIORRINGS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (243,'MAX_QUERIES_PER_HOUR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (244,'ST_POLYFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (245,'TRANSACTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (246,'STDDEV'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (247,'INT1'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (248,'RIGHT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (249,'MAX_ROWS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (250,'ALTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (251,'NATURAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (252,'MULTILINESTRING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (253,'VARIABLES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (254,'ESCAPED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (255,'KEY_BLOCK_SIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (256,'MPOINTFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (257,'CHAR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (258,'UPGRADE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (259,'INTERVAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (260,'NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (261,'ST_POINTFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (262,'REFERENCES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (263,'ST_WITHIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (264,'STORAGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (265,'ISOLATION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (266,'EVERY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (267,'INT8'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (268,'AUTHORS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (269,'ST_BUFFER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (270,'BUFFER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (271,'RESTRICT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (272,'UNCOMMITTED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (273,'LINESTRINGFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (274,'IS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (275,'ST_CENTROID'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (276,'NOT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (277,'DATAFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (278,'ANALYSE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (279,'DES_KEY_FILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (280,'COMPRESSED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (281,'START'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (282,'IF'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (283,'ROWS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (284,'PURGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (285,'USER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (286,'EXIT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (287,'MERGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (288,'ST_DISTANCE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (289,'SQL_NO_CACHE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (290,'DELAYED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (291,'ST_POLYFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (292,'WRITE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (293,'DATABASE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (294,'NULL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (295,'POWER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (296,'POINTFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (297,'USE_FRM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (298,'TERMINATED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (299,'NVARCHAR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (300,'RETURN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (301,'DIRECTORY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (302,'AES_DECRYPT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (303,'GLENGTH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (304,'SHUTDOWN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (305,'CATALOG_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (306,'FIXED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (307,'MULTIPOLYGONFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (308,'REPLACE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (309,'REPEAT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (310,'ST_SYMDIFFERENCE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (311,'STARTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (312,'COMPLETION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (313,'COLUMNS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (314,'DATETIME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (315,'MODE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (316,'INTEGER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (317,'VALUE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (318,'ASWKT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (319,'GEOMETRYCOLLECTIONFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (320,'DROP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (321,'SQL_BIG_RESULT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (322,'MASTER_SSL_VERIFY_SERVER_CERT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (323,'SUBJECT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (324,'MASTER_RETRY_COUNT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (325,'CHECK'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (326,'FULL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (327,'BY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (328,'NO'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (329,'DAY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (330,'DATA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (331,'PARTITION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (332,'REAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (333,'SHARE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (334,'LINESTRING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (335,'MESSAGE_TEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (336,'MASTER_HEARTBEAT_PERIOD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (337,'COLUMN_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (338,'X509'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (339,'LINEFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (340,'SUBCLASS_ORIGIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (341,'WHERE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (342,'EVENT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (343,'SUPER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (344,'IGNORE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (345,'SHA2'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (346,'QUICK'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (347,'SIGNED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (348,'ST_GEOMCOLLFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (349,'FALSE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (350,'POLYGONFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (351,'FORCE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (352,'CHANGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (353,'TO'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (354,'POINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (355,'CREATE_DH_PARAMETERS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (356,'TABLE_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (357,'VARYING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (358,'FEDERATED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (359,'MAX_SIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (360,'HOUR_SECOND'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (361,'ST_DIFFERENCE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (362,'TRADITIONAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (363,'GEOMETRYCOLLECTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (364,'ST_GEOMETRYCOLLECTIONFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (365,'ST_ASBINARY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (366,'PROCEDURE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (367,'AGAINST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (368,'ST_AREA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (369,'ENDPOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (370,'SQL_BEFORE_GTIDS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (371,'LONGBINARY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (372,'INSERT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (373,'COUNT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (374,'PORT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (375,'MLINEFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (376,'EXISTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (377,'MUTEX'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (378,'GEOMCOLLFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (379,'RELEASE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (380,'DEFAULT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (381,'TYPE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (382,'NO_WRITE_TO_BINLOG'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (383,'OPTIMIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (384,'SQLSTATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (385,'RESET'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (386,'INSTALL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (387,'BIGINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (388,'ST_DIMENSION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (389,'SET'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (390,'ISSUER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (391,'STATUS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (392,'INNER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (393,'RELAYLOG'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (394,'MRG_MYISAM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (395,'STOP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (396,'TRAILING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (397,'PARTITIONS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (398,'ST_NUMINTERIORRINGS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (399,'CASE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (400,'IO_THREAD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (401,'DEALLOCATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (402,'CIPHER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (403,'CONTINUE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (404,'READ'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (405,'MINUTE_SECOND'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (406,'MIN_ROWS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (407,'ROW_COUNT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (408,'FUNCTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (409,'ST_GEOMETRYFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (410,'INT3'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (411,'ADD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (412,'AVG_ROW_LENGTH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (413,'ARCHIVE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (414,'FLOAT4'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (415,'ASTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (416,'NUMGEOMETRIES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (417,'ALGORITHM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (418,'VIEW'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (419,'REPEATABLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (420,'CONSTRAINT_CATALOG'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (421,'STARTPOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (422,'MPOLYFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (423,'UNSIGNED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (424,'DECIMAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (425,'INDEXES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (426,'ST_INTERSECTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (427,'HOSTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (428,'COMMIT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (429,'SNAPSHOT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (430,'DECLARE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (431,'NUMPOINTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (432,'LOAD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (433,'SQL_CACHE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (434,'COLLATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (435,'ST_GEOMETRYFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (436,'BYTE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (437,'LINESTRINGFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (438,'GLOBAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (439,'WHEN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (440,'TOUCHES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (441,'AS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (442,'ST_LINESTRINGFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (443,'GEOMCOLLFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (444,'ST_INTERIORRINGN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (445,'GRANTS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (446,'OUTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (447,'CURSOR_NAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (448,'EXPIRE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (449,'FLOOR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (450,'SQL_AFTER_MTS_GAPS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (451,'WITH'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (452,'STD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (453,'AFTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (454,'DISABLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (455,'UNINSTALL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (456,'SONAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (457,'POW'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (458,'INDEX'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (459,'DEFINER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (460,'MASTER_BIND'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (461,'REMOVE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (462,'MULTILINESTRINGFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (463,'ST_POINTFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (464,'ST_ENDPOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (465,'ST_OVERLAPS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (466,'UNDO'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (467,'ZEROFILL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (468,'CLIENT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (469,'MASTER_PASSWORD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (470,'RELAY_LOG_FILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (471,'MBRTOUCHES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (472,'MASTER_USER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (473,'ENGINE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (474,'INSERT_METHOD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (475,'SQL_CALC_FOUND_ROWS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (476,'UNION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (477,'MYISAM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (478,'DESC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (479,'TIME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (480,'EXPANSION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (481,'NUMERIC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (482,'CODE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (483,'AREA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (484,'LOGFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (485,'EXTENT_SIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (486,'ST_LINEFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (487,'MAX_UPDATES_PER_HOUR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (488,'INT2'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (489,'ENDS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (490,'ISEMPTY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (491,'RECOVER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (492,'LOGS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (493,'HEAP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (494,'RETURNED_SQLSTATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (495,'EXCHANGE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (496,'BETWEEN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (497,'ST_CROSSES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (498,'REPAIR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (499,'MBRDISJOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (500,'CALL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (501,'VALUES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (502,'ST_X'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (503,'TRUNCATE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (504,'SHOW'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (505,'BINLOG'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (506,'ST_DISJOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (507,'AND'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (508,'HOUR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (509,'SELECT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (510,'DATABASES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (511,'WRAPPER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (512,'BOOL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (513,'MASTER_PORT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (514,'CONCURRENT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (515,'HELP'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (516,'PROCESS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (517,'OPTIONS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (518,'CONSISTENT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (519,'MAX_CONNECTIONS_PER_HOUR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (520,'IN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (521,'DIAGNOSTICS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (522,'DUMPFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (523,'POLYFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (524,'JSON'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (525,'ST_SRID'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (526,'EXECUTE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (527,'CEIL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (528,'MASTER_HOST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (529,'ST_EQUALS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (530,'SERVER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (531,'MULTIPOLYGONFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (532,'MASTER_SSL_CERT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (533,'DAY_MINUTE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (534,'DATE_SUB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (535,'REBUILD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (536,'GEOMETRYFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (537,'GEOMFROMTEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (538,'RENAME'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (539,'PARSER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (540,'ST_ASWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (541,'SOCKET'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (542,'STRAIGHT_JOIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (543,'ST_GEOMETRYCOLLECTIONFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (544,'ST_GEOMFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (545,'SHA1'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (546,'PASSWORD'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (547,'OFFSET'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (548,'NEXT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (549,'ERRORS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (550,'TEMPORARY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (551,'SQL_LOG_BIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (552,'DIMENSION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (553,'SQL_SMALL_RESULT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (554,'COMMITTED'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (555,'EQUALS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (556,'DELAY_KEY_WRITE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (557,'BEGIN'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (558,'XA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (559,'PROFILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (560,'MEDIUM'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (561,'CENTROID'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (562,'SSL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (563,'DAY_HOUR'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (564,'AES_ENCRYPT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (565,'CEILING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (566,'LINEFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (567,'GEOMETRYTYPE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (568,'STATS_SAMPLE_PAGES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (569,'SIGNAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (570,'PLUGINS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (571,'ST_NUMGEOMETRIES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (572,'SAVEPOINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (573,'PRIMARY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (574,'LAST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (575,'MPOINTFROMWKB'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (576,'KEYS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (577,'LIMIT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (578,'KEY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (579,'UNTIL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (580,'CONSTRAINT_SCHEMA'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (581,'ST_EXTERIORRING'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (582,'ANALYZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (583,'CONSTRAINT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (584,'SERIAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (585,'ACTION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (586,'INITIAL_SIZE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (587,'SESSION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (588,'SLAVE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (589,'ASC'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (590,'ENABLE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (591,'OPTIONALLY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (592,'MAX_USER_CONNECTIONS'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (593,'DISTINCT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (594,'LOCAL'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (595,'WHILE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (596,'MASTER_SSL_KEY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (597,'NONE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (598,'TABLES'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (599,'<>'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (600,'EXPORT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (601,'RLIKE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (602,'TRIGGER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (603,'COLLATION'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (604,'HIGH_PRIORITY'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (605,'BTREE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (606,'FIRST'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (607,'COALESCE'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (608,'WAIT'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (609,'MASTER'); +INSERT INTO help_keyword (help_keyword_id,name) VALUES (610,'ROW_FORMAT'); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,0); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,0); @@ -1419,1072 +1422,1075 @@ INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,83); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (83,84); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (443,85); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,86); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,86); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,87); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,88); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,88); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (88,89); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (89,90); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,91); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,92); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (91,93); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,94); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,95); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (93,96); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,97); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,98); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,99); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,99); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,99); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,99); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,99); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,99); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,86); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,87); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,87); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,88); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,89); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,89); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (88,90); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (89,91); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,92); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,93); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (91,94); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,95); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,96); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (93,97); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,98); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,99); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,100); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,100); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (182,101); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,102); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,103); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,104); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,105); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,106); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,107); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,107); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (106,108); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (107,109); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,110); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,110); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,110); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,110); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (109,111); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,112); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,112); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (111,113); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (113,114); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,115); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,115); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,115); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,115); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,115); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,116); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (117,117); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,118); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (56,118); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,118); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (150,119); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,120); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,120); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (121,121); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (126,122); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (523,123); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,124); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,125); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,125); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,125); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,125); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,126); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (67,126); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,126); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,127); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,127); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,127); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,128); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,128); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,129); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,130); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,130); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,130); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,131); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (500,131); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,132); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (510,133); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (140,134); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (141,135); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,136); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,137); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,138); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (143,139); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,140); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (147,141); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,142); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (151,143); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,144); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,145); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,145); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,146); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,147); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,148); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,149); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,150); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,150); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,150); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,150); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,150); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (164,151); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (166,152); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (238,153); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (168,154); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (558,155); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (247,156); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,157); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,157); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,158); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,159); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (4,159); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,160); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,160); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,160); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,160); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,161); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (249,161); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (172,162); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (532,163); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (173,164); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,165); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,100); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,100); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,100); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,100); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,100); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,101); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,101); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (182,102); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,103); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,104); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,105); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,106); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,107); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,108); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,108); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (106,109); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (107,110); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,111); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,111); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,111); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,111); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (109,112); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,113); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,113); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (111,114); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (113,115); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,116); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,116); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,116); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,116); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,116); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,117); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (117,118); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,119); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (56,119); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,119); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (150,120); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,121); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,121); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (121,122); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (126,123); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (523,124); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,125); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,126); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,126); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,126); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,126); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,127); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (67,127); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,127); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,128); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,128); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,128); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,129); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,129); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,130); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,131); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,131); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,131); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,132); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (500,132); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,133); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (510,134); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (140,135); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (141,136); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,137); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,138); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,139); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (143,140); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,141); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (147,142); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,143); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (151,144); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,145); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,146); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,146); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,147); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,148); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,149); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,150); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,151); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,151); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,151); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,151); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,151); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (164,152); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (166,153); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (238,154); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (168,155); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (558,156); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (247,157); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,158); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,158); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,159); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,160); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (4,160); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,161); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,161); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,161); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,161); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,162); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (249,162); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (172,163); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (532,164); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (173,165); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,166); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (177,167); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (181,168); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,169); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (226,170); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (249,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,171); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,172); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,172); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,172); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (71,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (463,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (232,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,173); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (182,174); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,175); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,175); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,175); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,175); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,176); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (177,177); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (189,178); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,179); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,180); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,181); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,182); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (191,183); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,184); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (194,185); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (193,186); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (424,187); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,188); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,189); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,189); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (552,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (406,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (19,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,190); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,191); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,192); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,192); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,193); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (501,194); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,195); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (350,196); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (201,197); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,198); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,199); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (202,200); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,201); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,202); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,203); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,203); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,203); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,203); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,203); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,204); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,205); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,206); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (197,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (202,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (577,207); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (204,208); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,209); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,210); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,211); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (207,212); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (210,213); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,214); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,214); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,214); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (212,215); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,216); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,217); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,218); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,219); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,220); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (22,221); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,221); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,222); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (218,223); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,224); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,225); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (221,226); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,227); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (501,227); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,167); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (177,168); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (181,169); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,170); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (226,171); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (249,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,172); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,173); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,173); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,173); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (71,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (463,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (232,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,174); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (182,175); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,176); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,176); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,176); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,176); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,177); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (177,178); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (189,179); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,180); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,181); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,182); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,183); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (191,184); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,185); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (194,186); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (193,187); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (424,188); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,189); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,190); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,190); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (552,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (406,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (19,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,191); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,192); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,193); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,193); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,194); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (501,195); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,196); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (350,197); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (201,198); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,199); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,200); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (202,201); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,202); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,203); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,204); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,204); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (148,204); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,204); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,204); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,205); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,206); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,207); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (197,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (202,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (577,208); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (204,209); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,210); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,211); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,212); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (207,213); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (210,214); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,215); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,215); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,215); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (212,216); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,217); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,218); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,219); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,220); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,221); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (22,222); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,222); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,223); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (218,224); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,225); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,226); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (221,227); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,228); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (176,228); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (527,228); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (223,229); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (225,230); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (227,231); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,232); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,233); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,234); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,235); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (106,235); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,235); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (231,236); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,237); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,237); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,238); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,239); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (501,228); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,229); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (176,229); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (527,229); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (223,230); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (225,231); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (227,232); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,233); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,234); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,235); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,236); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (106,236); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,236); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (231,237); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,238); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,238); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,239); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (234,240); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (233,241); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,242); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (238,243); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,244); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,244); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (239,245); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,246); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,247); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,248); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (254,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (100,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (418,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,249); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,250); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (245,251); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,252); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,252); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,253); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,254); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (247,255); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (561,256); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,256); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,257); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,257); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,258); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,258); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,259); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (256,260); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,261); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,261); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,261); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (257,262); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (439,263); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,264); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,265); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,266); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (7,267); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,267); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (261,268); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (262,269); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,270); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,270); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,270); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,271); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (319,272); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,273); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (122,273); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (263,273); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (215,273); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (265,274); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,275); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (122,275); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,275); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,275); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (457,275); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,276); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,276); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (112,277); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,278); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,279); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,280); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,280); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,280); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (279,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,281); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,282); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,283); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (412,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (468,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,284); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,285); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,286); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (270,287); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,288); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,289); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,289); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (571,289); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (274,290); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,291); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,291); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,291); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,291); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,292); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,293); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,293); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (215,293); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (281,294); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (280,295); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,296); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,297); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,298); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (285,299); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,300); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,300); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (287,301); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (290,302); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,303); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,304); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,304); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,304); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,305); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,305); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (399,306); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,307); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,307); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,307); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,308); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (296,309); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,310); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,311); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,240); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,240); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (234,241); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (233,242); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,243); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (238,244); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,245); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,245); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (239,246); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,247); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,248); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,249); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (254,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (100,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (418,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,250); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,251); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (245,252); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,253); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,253); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,254); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,255); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (247,256); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (561,257); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,257); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,258); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,258); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,259); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,259); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,260); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (256,261); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,262); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,262); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,262); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (257,263); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (439,264); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,265); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,266); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,267); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (7,268); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,268); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (261,269); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (262,270); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,271); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,271); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,271); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,272); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (319,273); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,274); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (122,274); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (263,274); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (215,274); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (265,275); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,276); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (122,276); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,276); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,276); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (457,276); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,277); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,277); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (112,278); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,279); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,280); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,281); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,281); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,281); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (279,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (26,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,282); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,283); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,284); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (412,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (468,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,285); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,286); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,287); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (270,288); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,289); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,290); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,290); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (571,290); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (274,291); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,292); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,292); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,292); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,292); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,293); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (336,294); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,294); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (215,294); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (281,295); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (280,296); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,297); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,298); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,299); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (285,300); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,301); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,301); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (287,302); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (290,303); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,304); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,305); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,305); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,305); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,306); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,306); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (399,307); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,308); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,308); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,308); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,309); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (296,310); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,311); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,312); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,312); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,312); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,312); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,312); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,313); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,314); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,314); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,315); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,315); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,315); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,316); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,316); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,316); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,316); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,316); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (389,317); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (351,318); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (307,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (420,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (158,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (237,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (468,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,319); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,320); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,321); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,322); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,323); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,324); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,324); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,324); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,325); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,325); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,325); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,312); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,312); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,313); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,313); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,313); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,313); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,313); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,314); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,315); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,315); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,316); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,316); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,316); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,317); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,317); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,317); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,317); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,317); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (389,318); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (351,319); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (307,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (420,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (158,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (237,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (468,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,320); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,321); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,322); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,323); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,324); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,325); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,325); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,325); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,326); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,325); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,326); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,326); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,326); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,326); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,326); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,327); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,327); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,328); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,329); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,329); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,329); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,329); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,330); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,327); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,328); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,328); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,329); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,330); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,330); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,330); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,330); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,331); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,331); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,332); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (312,333); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,334); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,334); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,334); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,335); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,336); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,336); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,336); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,337); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (319,338); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,339); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,339); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,339); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,340); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,340); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,340); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,341); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,341); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,341); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,341); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,342); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,343); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (324,344); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,345); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,345); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,345); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,346); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (330,347); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (226,348); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (60,349); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,350); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,351); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,351); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,352); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,352); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,331); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,332); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,332); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,333); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (312,334); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,335); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,335); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,335); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,336); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,337); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,337); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,337); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,338); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (319,339); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,340); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,340); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,340); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,341); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,341); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,341); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,342); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,342); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,342); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,342); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,343); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,344); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (324,345); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,346); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,346); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,346); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,347); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (330,348); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (226,349); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (60,350); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,351); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,352); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (333,353); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (335,354); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,355); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,355); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,355); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,356); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,357); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,358); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,359); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (340,360); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (341,361); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (330,362); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (343,363); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (254,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (112,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,364); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,365); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (346,366); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (347,367); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,368); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (443,369); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (118,370); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,370); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (571,370); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (184,370); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,371); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (250,371); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,371); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,372); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (350,373); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,374); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,375); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,375); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (351,376); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,377); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,377); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,377); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (400,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,378); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,379); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,380); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,380); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,380); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,380); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,381); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,352); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,353); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,353); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,353); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (333,354); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (335,355); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,356); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,356); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,356); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (156,357); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,358); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,359); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,360); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (340,361); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,362); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (341,363); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (330,364); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (343,365); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (254,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (112,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,366); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,367); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (346,368); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (347,369); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,370); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (443,371); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (118,372); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,372); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (571,372); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (184,372); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,373); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (250,373); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,373); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,374); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (350,375); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (450,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (394,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,376); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,377); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,377); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (351,378); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,379); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,379); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,379); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (400,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,380); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,380); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,381); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,382); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,382); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,383); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (357,383); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (159,383); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,383); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (527,384); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (130,385); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (361,386); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (286,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (277,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,387); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,388); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,382); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,382); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,382); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,382); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,383); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,383); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,384); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,384); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,385); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (357,385); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (159,385); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (94,385); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (527,386); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (130,387); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (361,388); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (286,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,389); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,389); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,390); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,391); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,392); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,393); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,394); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,395); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (370,396); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,397); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,397); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,398); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,398); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (420,399); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,400); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,401); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,402); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,402); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,402); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,402); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,402); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,403); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,404); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,405); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (307,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (406,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (237,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (418,406); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (531,407); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (150,408); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,409); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,409); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,409); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,409); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,410); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,410); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,411); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,412); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (389,413); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (392,414); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,415); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,415); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,415); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (552,416); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,416); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (100,416); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,417); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,418); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,418); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,418); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (398,419); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (399,420); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,421); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (98,422); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,422); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,422); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,423); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (411,424); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,425); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (277,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,389); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,390); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,391); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,392); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,393); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,394); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,395); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (553,396); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,397); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (370,398); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,399); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,399); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,400); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,400); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (420,401); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,402); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,403); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,404); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,404); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,404); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,404); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,404); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,405); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,406); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,407); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (307,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (185,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (526,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (406,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (237,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (418,408); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (531,409); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (150,410); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,411); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,411); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,411); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,411); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,412); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,412); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,413); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,414); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (389,415); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (392,416); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,417); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,417); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,417); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (552,418); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (305,418); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (100,418); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,419); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,420); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,420); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,420); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (398,421); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (399,422); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,423); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (98,424); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,424); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,424); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,425); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,426); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,426); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,427); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,427); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,428); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,428); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,428); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (400,428); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (413,429); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,430); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,430); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,431); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,432); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,432); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,432); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (117,433); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (561,434); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (550,435); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,436); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,436); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,436); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,436); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,436); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,437); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,437); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (421,438); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,439); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,439); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,439); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (467,440); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (424,441); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (425,442); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,443); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (396,443); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,444); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,445); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,445); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,445); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,446); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (130,447); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,448); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,449); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,449); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,449); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,449); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,449); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (429,450); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (411,426); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,427); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,427); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,428); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,428); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,429); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,429); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,430); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (390,430); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (529,430); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (400,430); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (413,431); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,432); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,432); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,433); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (375,434); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,434); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (125,434); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (117,435); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (561,436); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (550,437); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,438); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,438); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (110,438); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,438); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,438); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (55,439); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (41,439); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (421,440); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,441); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,441); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,441); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (467,442); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (424,443); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (425,444); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,445); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (396,445); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,446); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,447); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,447); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,447); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,448); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (130,449); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,450); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,451); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,451); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,451); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,451); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,451); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,452); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,452); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,452); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (176,453); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,454); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (436,455); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (67,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,456); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,457); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,457); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,458); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,459); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (166,460); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (440,461); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (441,462); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (444,463); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,464); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,465); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,466); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,467); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,468); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (449,469); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (429,452); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,453); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,454); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,454); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,454); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (176,455); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (64,456); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (436,457); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (452,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (57,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (67,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,458); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,459); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,459); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,460); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,461); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (166,462); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (440,463); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (441,464); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (444,465); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (459,466); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (458,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (289,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (383,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (359,467); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,468); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,469); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,470); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,471); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,472); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,473); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,474); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,475); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,476); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,476); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,476); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (460,477); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (219,477); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,477); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,478); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,479); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,480); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,480); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (464,481); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,482); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,482); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,482); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,483); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (467,484); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,485); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (137,486); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,487); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (470,488); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,489); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,490); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,490); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,490); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,491); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,492); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,493); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (90,494); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (473,495); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,496); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,496); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (474,497); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (476,498); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,499); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,499); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (479,500); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (463,501); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,501); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (115,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (4,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (366,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (7,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (439,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (53,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (22,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (29,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (283,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (574,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (104,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (396,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,502); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,503); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (484,503); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (485,504); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (487,505); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (90,505); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,506); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,507); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,507); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,507); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (184,507); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,507); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,508); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,508); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,509); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (72,510); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,510); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,511); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,512); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,512); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (507,513); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (75,513); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,514); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,515); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,515); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,516); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,516); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,517); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,518); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,518); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,518); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,518); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,519); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (449,471); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,472); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (242,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,473); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,474); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,475); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,476); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,477); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,478); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,478); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,478); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (460,479); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (219,479); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (135,479); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,480); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (405,481); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,482); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,482); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (464,483); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,484); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (314,484); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (414,484); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,485); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (467,486); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,487); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (137,488); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,489); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (470,490); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,491); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,492); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,492); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,492); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,493); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,494); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,495); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (90,496); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (473,497); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,498); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,498); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (474,499); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (476,500); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,501); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,501); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (479,502); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (463,503); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,503); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (115,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (326,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (200,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (471,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (4,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (366,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (167,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (7,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (439,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (128,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (15,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (301,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (53,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (22,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (29,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (493,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (572,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (283,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (574,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (456,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (104,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (229,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (198,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (466,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (396,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (549,504); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,505); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (484,505); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (485,506); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (487,507); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (90,507); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,508); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (294,509); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,509); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,509); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (184,509); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,509); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,510); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (101,510); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,511); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (72,512); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (302,512); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,513); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,514); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,514); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (507,515); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (75,515); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,516); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,517); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,517); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,518); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,518); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,519); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,520); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (337,520); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,520); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,520); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (510,521); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (511,522); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (56,523); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,523); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (514,524); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,525); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (518,526); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,527); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,527); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,527); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (78,528); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,529); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,530); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,531); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,532); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (89,533); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (523,534); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,535); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (71,535); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (412,535); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,521); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,522); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (510,523); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (153,524); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (511,525); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (56,526); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,526); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (514,527); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,528); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (518,529); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (216,530); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,530); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (6,530); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (78,531); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,532); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,533); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,534); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,535); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,536); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,536); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,536); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (343,537); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,538); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,539); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,539); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (9,540); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (531,541); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (532,542); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (277,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,543); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,544); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,545); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,546); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,546); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,547); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (286,548); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (536,549); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,550); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,551); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (538,552); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,553); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,554); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (197,554); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,554); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,555); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (283,556); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,557); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (540,558); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,559); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,560); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (543,561); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (548,562); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (550,563); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (551,564); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,565); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,566); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (29,567); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (556,568); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,569); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,570); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,571); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (558,572); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,573); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,573); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (89,536); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (523,537); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,538); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (71,538); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (412,538); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,538); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,539); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,539); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,539); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (343,540); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,541); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (0,542); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,542); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (9,543); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (531,544); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (532,545); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (273,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (277,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (512,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (332,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,546); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,547); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,548); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (327,549); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,549); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,550); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (286,551); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (536,552); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,553); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,554); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (538,555); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,556); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (373,557); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (197,557); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,557); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (539,558); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (283,559); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (243,560); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (540,561); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,562); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (220,563); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (543,564); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (548,565); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (550,566); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (551,567); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,568); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,569); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (29,570); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (556,571); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (557,572); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,573); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,574); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,574); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,574); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,574); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,574); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,574); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,575); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,575); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,575); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,575); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,575); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,576); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,577); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,577); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,577); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (564,578); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,579); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,579); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,580); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,580); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,581); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,581); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,582); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,582); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,583); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,583); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,584); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,584); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,584); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,584); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,585); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,586); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,586); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,587); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,587); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,587); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,588); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,589); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (293,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (63,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (503,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (446,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (250,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,590); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,591); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (558,575); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,576); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (455,576); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,576); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (246,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (37,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (77,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (54,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,577); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,578); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (45,578); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,578); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,578); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,578); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (136,579); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (555,580); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (217,580); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (187,580); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (564,581); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,582); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,582); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,583); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,583); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,584); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (422,584); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (566,585); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,585); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,586); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,586); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (362,587); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (259,587); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (483,587); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (369,587); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (372,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (309,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (131,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (318,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (465,588); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,589); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,589); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (519,590); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (338,590); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,590); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,591); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (577,592); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,593); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,594); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (366,595); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,595); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,595); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,595); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (576,596); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,597); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (24,598); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,599); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (19,599); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (158,599); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,600); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (574,600); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,601); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,601); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,602); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,603); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,603); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,603); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,604); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,605); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,605); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,606); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,606); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,606); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,606); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (159,606); -INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,607); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,592); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (293,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (63,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (503,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (446,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (250,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (453,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (490,593); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (268,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (364,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (354,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (528,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (563,594); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (577,595); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,596); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (120,597); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (366,598); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,598); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (178,598); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (31,598); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (576,599); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (196,600); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (24,601); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,602); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (19,602); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (158,602); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (482,603); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (574,603); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (489,604); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (349,604); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (124,605); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,606); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (69,606); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,606); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (559,607); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (116,608); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (568,608); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (32,609); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (42,609); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (162,609); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (395,609); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (159,609); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (271,610); COMMIT; diff -Nru mysql-5.6-5.6.27/scripts/mysql_config.sh mysql-5.6-5.6.33/scripts/mysql_config.sh --- mysql-5.6-5.6.27/scripts/mysql_config.sh 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/scripts/mysql_config.sh 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -113,7 +113,9 @@ # We intentionally add a space to the beginning and end of lib strings, simplifies replace later libs=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@" libs="$libs @openssl_libs@ @STATIC_NSS_FLAGS@ " +libs="$libs @QUOTED_CMAKE_C_LINK_FLAGS@" libs_r=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqlclient @ZLIB_DEPS@ @CLIENT_LIBS@ @openssl_libs@ " +libs_r="$libs_r @QUOTED_CMAKE_C_LINK_FLAGS@" embedded_libs=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqld @LIBDL@ @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @openssl_libs@ " embedded_libs="$embedded_libs @QUOTED_CMAKE_CXX_LINK_FLAGS@" diff -Nru mysql-5.6-5.6.27/scripts/mysqld_multi.sh mysql-5.6-5.6.33/scripts/mysqld_multi.sh --- mysql-5.6-5.6.27/scripts/mysqld_multi.sh 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/scripts/mysqld_multi.sh 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/perl -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public @@ -687,7 +687,11 @@ my ($command) = @_; my (@paths, $path); - return $command if (-f $command && -x $command); + # If the argument is not 'my_print_defaults' then it would be of the format + # / + return $command if ($command ne 'my_print_defaults' && -f $command && + -x $command); + @paths = split(':', $ENV{'PATH'}); foreach $path (@paths) { diff -Nru mysql-5.6-5.6.27/scripts/mysqld_safe.sh mysql-5.6-5.6.33/scripts/mysqld_safe.sh --- mysql-5.6-5.6.27/scripts/mysqld_safe.sh 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/scripts/mysqld_safe.sh 2016-08-26 11:22:35.000000000 +0000 @@ -209,8 +209,17 @@ --core-file-size=*) core_file_size="$val" ;; --ledir=*) ledir="$val" ;; --malloc-lib=*) set_malloc_lib "$val" ;; - --mysqld=*) MYSQLD="$val" ;; + --mysqld=*) + if [ -z "$pick_args" ]; then + log_error "--mysqld option can only be used as command line option, found in config file" + exit 1 + fi + MYSQLD="$val" ;; --mysqld-version=*) + if [ -z "$pick_args" ]; then + log_error "--mysqld-version option can only be used as command line option, found in config file" + exit 1 + fi if test -n "$val" then MYSQLD="mysqld-$val" @@ -298,38 +307,22 @@ echo "$text" } - -mysql_config= -get_mysql_config() { - if [ -z "$mysql_config" ]; then - mysql_config=`echo "$0" | sed 's,/[^/][^/]*$,/mysql_config,'` - if [ ! -x "$mysql_config" ]; then - log_error "Can not run mysql_config $@ from '$mysql_config'" - exit 1 - fi - fi - - "$mysql_config" "$@" -} - - # set_malloc_lib LIB # - If LIB is empty, do nothing and return -# - If LIB is 'tcmalloc', look for tcmalloc shared library in /usr/lib -# then pkglibdir. tcmalloc is part of the Google perftools project. +# - If LIB is 'tcmalloc', look for tcmalloc shared library in $malloc_dirs. +# tcmalloc is part of the Google perftools project. # - If LIB is an absolute path, assume it is a malloc shared library # # Put LIB in mysqld_ld_preload, which will be added to LD_PRELOAD when # running mysqld. See ld.so for details. set_malloc_lib() { + # This list is kept intentionally simple. + malloc_dirs="/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu" malloc_lib="$1" if [ "$malloc_lib" = tcmalloc ]; then - pkglibdir=`get_mysql_config --variable=pkglibdir` malloc_lib= - # This list is kept intentionally simple. Simply set --malloc-lib - # to a full path if another location is desired. - for libdir in /usr/lib "$pkglibdir" "$pkglibdir/mysql"; do + for libdir in `echo $malloc_dirs`; do for flavor in _minimal '' _and_profiler _debug; do tmp="$libdir/libtcmalloc$flavor.so" #log_notice "DEBUG: Checking for malloc lib '$tmp'" @@ -340,7 +333,7 @@ done if [ -z "$malloc_lib" ]; then - log_error "no shared library for --malloc-lib=tcmalloc found in /usr/lib or $pkglibdir" + log_error "no shared library for --malloc-lib=tcmalloc found in $malloc_dirs" exit 1 fi fi @@ -351,9 +344,21 @@ case "$malloc_lib" in /*) if [ ! -r "$malloc_lib" ]; then - log_error "--malloc-lib '$malloc_lib' can not be read and will not be used" + log_error "--malloc-lib can not be read and will not be used" exit 1 fi + + # Restrict to a the list in $malloc_dirs above + case "`dirname "$malloc_lib"`" in + /usr/lib) ;; + /usr/lib64) ;; + /usr/lib/i386-linux-gnu) ;; + /usr/lib/x86_64-linux-gnu) ;; + *) + log_error "--malloc-lib must be located in one of the directories: $malloc_dirs" + exit 1 + ;; + esac ;; *) log_error "--malloc-lib must be an absolute path or 'tcmalloc'; " \ @@ -569,7 +574,7 @@ log_notice "Logging to '$err_log'." logging=file - if [ ! -f "$err_log" ]; then # if error log already exists, + if [ ! -f "$err_log" -a ! -h "$err_log" ]; then # if error log already exists, touch "$err_log" # we just append. otherwise, chmod "$fmode" "$err_log" # fix the permissions here! fi @@ -594,7 +599,7 @@ USER_OPTION="--user=$user" fi # Change the err log to the right user, if it is in use - if [ $want_syslog -eq 0 ]; then + if [ $want_syslog -eq 0 -a ! -h "$err_log" ]; then touch "$err_log" chown $user "$err_log" fi @@ -614,9 +619,11 @@ mysql_unix_port_dir=`dirname $safe_mysql_unix_port` if [ ! -d $mysql_unix_port_dir ] then - mkdir $mysql_unix_port_dir - chown $user $mysql_unix_port_dir - chmod 755 $mysql_unix_port_dir + if [ ! -h $mysql_unix_port_dir ]; then + mkdir $mysql_unix_port_dir + chown $user $mysql_unix_port_dir + chmod 755 $mysql_unix_port_dir + fi fi # If the user doesn't specify a binary, we assume name "mysqld" @@ -728,7 +735,9 @@ exit 1 fi fi - rm -f "$pid_file" + if [ ! -h "$pid_file" ]; then + rm -f "$pid_file" + fi if test -f "$pid_file" then log_error "Fatal error: Can't remove the pid file: @@ -779,13 +788,19 @@ while true do - rm -f $safe_mysql_unix_port "$pid_file" # Some extra safety + # Some extra safety + if [ ! -h "$safe_mysql_unix_port" ]; then + rm -f "$safe_mysql_unix_port" + fi + if [ ! -h "$pid_file" ]; then + rm -f "$pid_file" + fi start_time=`date +%M%S` eval_log_error "$cmd" - if [ $want_syslog -eq 0 -a ! -f "$err_log" ]; then + if [ $want_syslog -eq 0 -a ! -f "$err_log" -a ! -h "$err_log" ]; then touch "$err_log" # hypothetical: log was renamed but not chown $user "$err_log" # flushed yet. we'd recreate it with chmod "$fmode" "$err_log" # wrong owner next time we log, so set diff -Nru mysql-5.6-5.6.27/sql/binlog.cc mysql-5.6-5.6.33/sql/binlog.cc --- mysql-5.6-5.6.27/sql/binlog.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/binlog.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -736,6 +736,17 @@ return stmt_cache.is_binlog_empty() && trx_cache.is_binlog_empty(); } + /* + clear stmt_cache and trx_cache if they are not empty + */ + void reset() + { + if (!stmt_cache.is_binlog_empty()) + stmt_cache.reset(); + if (!trx_cache.is_binlog_empty()) + trx_cache.reset(); + } + #ifndef DBUG_OFF bool dbug_any_finalized() const { return stmt_cache.dbug_is_finalized() || trx_cache.dbug_is_finalized(); @@ -1212,6 +1223,8 @@ */ if (!(error= gtid_before_write_cache(thd, this))) error= mysql_bin_log.write_cache(thd, this); + else + thd->commit_error= THD::CE_FLUSH_ERROR; if (flags.with_xid && error == 0) *wrote_xid= true; @@ -1979,17 +1992,16 @@ This function checks if a transactional table was updated by the current statement. - @param thd The client thread that executed the current statement. + @param ha_list Registered storage engine handler list. @return @c true if a transactional table was updated, @c false otherwise. */ bool -stmt_has_updated_trans_table(const THD *thd) +stmt_has_updated_trans_table(Ha_trx_info* ha_list) { Ha_trx_info *ha_info; - for (ha_info= thd->transaction.stmt.ha_list; ha_info; - ha_info= ha_info->next()) + for (ha_info= ha_list; ha_info; ha_info= ha_info->next()) { if (ha_info->is_trx_read_write() && ha_info->ht() != binlog_hton) return (TRUE); @@ -3374,20 +3386,9 @@ log_state= LOG_CLOSED; if (binlog_error_action == ABORT_SERVER) { - THD *thd= current_thd; - /* - On fatal error when code enters here we should forcefully clear the - previous errors so that a new critical error message can be pushed - to the client side. - */ - thd->clear_error(); - my_error(ER_BINLOG_LOGGING_IMPOSSIBLE, MYF(0), "Either disk is full or " - "file system is read only while opening the binlog. Aborting the " - "server"); - sql_print_error("Either disk is full or file system is read only while " - "opening the binlog. Aborting the server"); - thd->protocol->end_statement(); - _exit(EXIT_FAILURE); + exec_binlog_error_action_abort("Either disk is full or file system is read " + "only while opening the binlog. Aborting the" + " server."); } else sql_print_error("Could not use %s for logging (error %d). " @@ -3424,23 +3425,48 @@ if (mysql_file_close(index_file.file, MYF(0)) < 0) { error= -1; - sql_print_error("MYSQL_BIN_LOG::move_crash_safe_index_file_to_index_file " - "failed to close the index file."); - goto err; + sql_print_error("While rebuilding index file %s: " + "Failed to close the index file.", index_file_name); + /* + Delete Crash safe index file here and recover the binlog.index + state(index_file io_cache) from old binlog.index content. + */ + mysql_file_delete(key_file_binlog_index, crash_safe_index_file_name, + MYF(0)); + + goto recoverable_err; + } + if (DBUG_EVALUATE_IF("force_index_file_delete_failure", 1, 0) || + mysql_file_delete(key_file_binlog_index, index_file_name, MYF(MY_WME))) + { + error= -1; + sql_print_error("While rebuilding index file %s: " + "Failed to delete the existing index file. It could be " + "that file is being used by some other process.", + index_file_name); + /* + Delete Crash safe file index file here and recover the binlog.index + state(index_file io_cache) from old binlog.index content. + */ + mysql_file_delete(key_file_binlog_index, crash_safe_index_file_name, + MYF(0)); + + goto recoverable_err; } - mysql_file_delete(key_file_binlog_index, index_file_name, MYF(MY_WME)); } DBUG_EXECUTE_IF("crash_create_before_rename_index_file", DBUG_SUICIDE();); if (my_rename(crash_safe_index_file_name, index_file_name, MYF(MY_WME))) { error= -1; - sql_print_error("MYSQL_BIN_LOG::move_crash_safe_index_file_to_index_file " - "failed to move crash_safe_index_file to index file."); - goto err; + sql_print_error("While rebuilding index file %s: " + "Failed to rename the new index file to the existing " + "index file.", index_file_name); + goto fatal_err; } DBUG_EXECUTE_IF("crash_create_after_rename_index_file", DBUG_SUICIDE();); +recoverable_err: if ((fd= mysql_file_open(key_file_binlog_index, index_file_name, O_RDWR | O_CREAT | O_BINARY, @@ -3450,16 +3476,32 @@ mysql_file_seek(fd, 0L, MY_SEEK_END, MYF(0)), 0, MYF(MY_WME | MY_WAIT_IF_FULL))) { - error= -1; - sql_print_error("MYSQL_BIN_LOG::move_crash_safe_index_file_to_index_file " - "failed to open the index file."); - goto err; + sql_print_error("After rebuilding the index file %s: " + "Failed to open the index file.", index_file_name); + goto fatal_err; } -err: if (need_lock_index) mysql_mutex_unlock(&LOCK_index); DBUG_RETURN(error); + +fatal_err: + /* + This situation is very very rare to happen (unless there is some serious + memory related issues like OOM) and should be treated as fatal error. + Hence it is better to bring down the server without respecting + 'binlog_error_action' value here. + */ + exec_binlog_error_action_abort("MySQL server failed to update the " + "binlog.index file's content properly. " + "It might not be in sync with available " + "binlogs and the binlog.index file state is in " + "unrecoverable state. Aborting the server."); + /* + Server is aborted in the above function. + This is dead code to make compiler happy. + */ + DBUG_RETURN(error); } @@ -4362,7 +4404,7 @@ int error_index= 0, close_error_index= 0; /* Read each entry from purge_index_file and delete the file. */ - if (is_inited_purge_index_file() && + if (!error && is_inited_purge_index_file() && (error_index= purge_index_entry(thd, decrease_log_space, false/*need_lock_index=false*/))) sql_print_error("MYSQL_BIN_LOG::purge_logs failed to process registered files" " that would be purged."); @@ -4902,7 +4944,10 @@ written to the binary log. */ while (get_prep_xids() > 0) + { + DEBUG_SYNC(current_thd, "before_rotate_binlog_file"); mysql_cond_wait(&m_prep_xids_cond, &LOCK_xids); + } mysql_mutex_unlock(&LOCK_xids); mysql_mutex_lock(&LOCK_index); @@ -4977,6 +5022,7 @@ Note that at this point, log_state != LOG_CLOSED (important for is_open()). */ + DEBUG_SYNC(current_thd, "before_rotate_binlog_file"); /* new_file() is only used for rotation (in FLUSH LOGS or because size > max_binlog_size or max_relay_log_size). @@ -5030,20 +5076,9 @@ close(LOG_CLOSE_INDEX); if (binlog_error_action == ABORT_SERVER) { - THD *thd= current_thd; - /* - On fatal error when code enters here we should forcefully clear the - previous errors so that a new critical error message can be pushed - to the client side. - */ - thd->clear_error(); - my_error(ER_BINLOG_LOGGING_IMPOSSIBLE, MYF(0), "Either disk is full or " - "file system is read only while rotating the binlog. Aborting " - "the server"); - sql_print_error("Either disk is full or file system is read only while " - "rotating the binlog. Aborting the server"); - thd->protocol->end_statement(); - _exit(EXIT_FAILURE); + exec_binlog_error_action_abort("Either disk is full or file system is" + " read only while rotating the binlog." + " Aborting the server."); } else sql_print_error("Could not open %s for logging (error %d). " @@ -5462,7 +5497,8 @@ *check_purge= false; - if (force_rotate || (my_b_tell(&log_file) >= (my_off_t) max_size)) + if (DBUG_EVALUATE_IF("force_rotate", 1, 0) || force_rotate || + (my_b_tell(&log_file) >= (my_off_t) max_size)) { error= new_file_without_locking(NULL); *check_purge= true; @@ -5928,7 +5964,8 @@ if (rand() % 3 == 0) { write_error=1; - goto err; + thd->commit_error= THD::CE_FLUSH_ERROR; + DBUG_RETURN(0); } };); @@ -6670,24 +6707,27 @@ #ifndef DBUG_OFF stage_manager.clear_preempt_status(head); #endif - if (head->commit_error == THD::CE_NONE) + /* + Flush/Sync error should be ignored and continue + to commit phase. And thd->commit_error cannot be + COMMIT_ERROR at this moment. + */ + DBUG_ASSERT(head->commit_error != THD::CE_COMMIT_ERROR); + excursion.try_to_attach_to(head); + bool all= head->transaction.flags.real_commit; + if (head->transaction.flags.commit_low) { - excursion.try_to_attach_to(head); - bool all= head->transaction.flags.real_commit; - if (head->transaction.flags.commit_low) - { - /* head is parked to have exited append() */ - DBUG_ASSERT(head->transaction.flags.ready_preempt); - /* - storage engine commit - */ - if (ha_commit_low(head, all, false)) - head->commit_error= THD::CE_COMMIT_ERROR; - } - DBUG_PRINT("debug", ("commit_error: %d, flags.pending: %s", - head->commit_error, - YESNO(head->transaction.flags.pending))); + /* head is parked to have exited append() */ + DBUG_ASSERT(head->transaction.flags.ready_preempt); + /* + storage engine commit + */ + if (ha_commit_low(head, all, false)) + head->commit_error= THD::CE_COMMIT_ERROR; } + DBUG_PRINT("debug", ("commit_error: %d, flags.pending: %s", + head->commit_error, + YESNO(head->transaction.flags.pending))); /* Decrement the prepared XID counter after storage engine commit. We also need decrement the prepared XID when encountering a @@ -6713,7 +6753,7 @@ for (THD *head= first; head; head= head->next_to_commit) { if (head->transaction.flags.run_hooks && - head->commit_error == THD::CE_NONE) + head->commit_error != THD::CE_COMMIT_ERROR) { /* @@ -6809,38 +6849,11 @@ int MYSQL_BIN_LOG::flush_cache_to_file(my_off_t *end_pos_var) { - if (DBUG_EVALUATE_IF("simulate_error_during_flush_cache_to_file", 1, - flush_io_cache(&log_file))) + if (flush_io_cache(&log_file)) { - if (binlog_error_action == ABORT_SERVER) - { - THD *thd= current_thd; - /* - On fatal error when code enters here we should forcefully clear the - previous errors so that a new critical error message can be pushed - to the client side. - */ - thd->clear_error(); - my_error(ER_BINLOG_LOGGING_IMPOSSIBLE, MYF(0), "An error occured during " - "flushing cache to file. 'binlog_error_action' is set to " - "'ABORT_SERVER'. Hence aborting the server"); - sql_print_error("An error occured during flushing cache to file. " - "'binlog_error_action' is set to 'ABORT_SERVER'. " - "Hence aborting the server"); - thd->protocol->end_statement(); - _exit(EXIT_FAILURE); - } - else - { - sql_print_error("An error occured during flushing cache to file. " - "'binlog_error_action' is set to 'IGNORE_ERROR'. " - "Hence turning logging off for the whole duration " - "of the MySQL server process. To turn it on " - "again: fix the cause, shutdown the MySQL " - "server and restart it."); - close(LOG_CLOSE_INDEX|LOG_CLOSE_STOP_EVENT); - return ER_ERROR_ON_WRITE; - } + THD *thd= current_thd; + thd->commit_error= THD::CE_FLUSH_ERROR; + return ER_ERROR_ON_WRITE; } *end_pos_var= my_b_tell(&log_file); return 0; @@ -6858,8 +6871,29 @@ if (force || (sync_period && ++sync_counter >= sync_period)) { sync_counter= 0; - if (mysql_file_sync(log_file.file, MYF(MY_WME))) + + /** + On *pure non-transactional* workloads there is a small window + in time where a concurrent rotate might be able to close + the file before the sync is actually done. In that case, + ignore the bad file descriptor errors. + + Transactional workloads (InnoDB) are not affected since the + the rotation will not happen until all transactions have + committed to the storage engine, thence decreased the XID + counters. + + TODO: fix this properly even for non-transactional storage + engines. + */ + if (DBUG_EVALUATE_IF("simulate_error_during_sync_binlog_file", 1, + mysql_file_sync(log_file.file, + MYF(MY_WME | MY_IGNORE_BADFD)))) + { + THD *thd= current_thd; + thd->commit_error= THD::CE_SYNC_ERROR; return std::make_pair(true, synced); + } synced= true; } return std::make_pair(false, synced); @@ -6889,14 +6923,25 @@ int MYSQL_BIN_LOG::finish_commit(THD *thd) { + /* + In some unlikely situations, it can happen that binary + log is closed before the thread flushes it's cache. + In that case, clear the caches before doing commit. + */ + if (unlikely(!is_open())) + { + binlog_cache_mngr *cache_mngr= thd_get_cache_mngr(thd); + if (cache_mngr) + cache_mngr->reset(); + } if (thd->transaction.flags.commit_low) { const bool all= thd->transaction.flags.real_commit; /* storage engine commit */ - if (thd->commit_error == THD::CE_NONE && - ha_commit_low(thd, all, false)) + DBUG_ASSERT(thd->commit_error != THD::CE_COMMIT_ERROR); + if (ha_commit_low(thd, all, false)) thd->commit_error= THD::CE_COMMIT_ERROR; /* Decrement the prepared XID counter after storage engine commit @@ -6910,7 +6955,7 @@ if and be the only after_commit invocation left in the code. */ - if ((thd->commit_error == THD::CE_NONE) && thd->transaction.flags.run_hooks) + if ((thd->commit_error != THD::CE_COMMIT_ERROR ) && thd->transaction.flags.run_hooks) { (void) RUN_HOOK(transaction, after_commit, (thd, all)); thd->transaction.flags.run_hooks= false; @@ -6931,10 +6976,72 @@ DBUG_ASSERT(!thd_get_cache_mngr(thd)->dbug_any_finalized()); DBUG_PRINT("return", ("Thread ID: %lu, commit_error: %d", thd->thread_id, thd->commit_error)); - return thd->commit_error; + /* + flush or sync errors are handled by the leader of the group + (using binlog_error_action). Hence treat only COMMIT_ERRORs as errors. + */ + return (thd->commit_error == THD::CE_COMMIT_ERROR); } - +/** + Helper function to handle flush or sync stage errors. + If binlog_error_action= ABORT_SERVER, server will be aborted + after reporting the error to the client. + If binlog_error_action= IGNORE_ERROR, binlog will be closed + for the life time of the server. close() call is protected + with LOCK_log to avoid any parallel operations on binary log. + + @param thd Thread object that faced flush/sync error + @param need_lock_log + > Indicates true if LOCk_log is needed before closing + binlog (happens when we are handling sync error) + > Indicates false if LOCK_log is already acquired + by the thread (happens when we are handling flush + error) + + @return void +*/ +void MYSQL_BIN_LOG::handle_binlog_flush_or_sync_error(THD *thd, + bool need_lock_log) +{ + char errmsg[MYSQL_ERRMSG_SIZE]; + sprintf(errmsg, "An error occurred during %s stage of the commit. " + "'binlog_error_action' is set to '%s'.", + thd->commit_error== THD::CE_FLUSH_ERROR ? "flush" : "sync", + binlog_error_action == ABORT_SERVER ? "ABORT_SERVER" : "IGNORE_ERROR"); + if (binlog_error_action == ABORT_SERVER) + { + char err_buff[MYSQL_ERRMSG_SIZE]; + sprintf(err_buff, "%s Hence aborting the server.", errmsg); + exec_binlog_error_action_abort(err_buff); + } + else + { + DEBUG_SYNC(thd, "before_binlog_closed_due_to_error"); + if (need_lock_log) + mysql_mutex_lock(&LOCK_log); + else + mysql_mutex_assert_owner(&LOCK_log); + /* + It can happen that other group leader encountered + error and already closed the binary log. So print + error only if it is in open state. But we should + call close() always just in case if the previous + close did not close index file. + */ + if (is_open()) + { + sql_print_error("%s Hence turning logging off for the whole duration " + "of the MySQL server process. To turn it on again: fix " + "the cause, shutdown the MySQL server and restart it.", + errmsg); + } + close(LOG_CLOSE_INDEX|LOG_CLOSE_STOP_EVENT); + if (need_lock_log) + mysql_mutex_unlock(&LOCK_log); + DEBUG_SYNC(thd, "after_binlog_closed_due_to_error"); + } +} /** Flush and commit the transaction. @@ -6987,7 +7094,7 @@ int MYSQL_BIN_LOG::ordered_commit(THD *thd, bool all, bool skip_commit) { DBUG_ENTER("MYSQL_BIN_LOG::ordered_commit"); - int flush_error= 0; + int flush_error= 0, sync_error= 0; my_off_t total_bytes= 0; bool do_rotate= false; @@ -7036,6 +7143,7 @@ anything more since it is possible that a thread entered and appointed itself leader for the flush phase. */ + DEBUG_SYNC(thd, "waiting_to_enter_flush_stage"); if (change_stage(thd, Stage_manager::FLUSH_STAGE, thd, NULL, &LOCK_log)) { DBUG_PRINT("return", ("Thread ID: %lu, commit_error: %d", @@ -7043,10 +7151,26 @@ DBUG_RETURN(finish_commit(thd)); } - THD *wait_queue= NULL; - flush_error= process_flush_stage_queue(&total_bytes, &do_rotate, &wait_queue); - + THD *wait_queue= NULL, *final_queue= NULL; + mysql_mutex_t *leave_mutex_before_commit_stage= NULL; my_off_t flush_end_pos= 0; + bool need_LOCK_log; + if (unlikely(!is_open())) + { + final_queue= stage_manager.fetch_queue_for(Stage_manager::FLUSH_STAGE); + leave_mutex_before_commit_stage= &LOCK_log; + /* + binary log is closed, flush stage and sync stage should be + ignored. Binlog cache should be cleared, but instead of doing + it here, do that work in 'finish_commit' function so that + leader and followers thread caches will be cleared. + */ + goto commit_stage; + } + DEBUG_SYNC(thd, "waiting_in_the_middle_of_flush_stage"); + flush_error= process_flush_stage_queue(&total_bytes, &do_rotate, + &wait_queue); + if (flush_error == 0 && total_bytes > 0) flush_error= flush_cache_to_file(&flush_end_pos); @@ -7071,10 +7195,18 @@ DBUG_EXECUTE_IF("crash_commit_after_log", DBUG_SUICIDE();); } + if (flush_error) + { + /* + Handle flush error (if any) after leader finishes it's flush stage. + */ + handle_binlog_flush_or_sync_error(thd, false /* need_lock_log */); + } + /* Stage #2: Syncing binary log file to disk */ - bool need_LOCK_log= (get_sync_period() == 1); + need_LOCK_log= (get_sync_period() == 1); /* LOCK_log is not released when sync_binlog is 1. It guarantees that the @@ -7087,17 +7219,17 @@ thd->thread_id, thd->commit_error)); DBUG_RETURN(finish_commit(thd)); } - THD *final_queue= stage_manager.fetch_queue_for(Stage_manager::SYNC_STAGE); + final_queue= stage_manager.fetch_queue_for(Stage_manager::SYNC_STAGE); if (flush_error == 0 && total_bytes > 0) { DEBUG_SYNC(thd, "before_sync_binlog_file"); std::pair result= sync_binlog_file(false); - flush_error= result.first; + sync_error= result.first; } if (need_LOCK_log) mysql_mutex_unlock(&LOCK_log); - + leave_mutex_before_commit_stage= &LOCK_sync; /* Stage #3: Commit all transactions in order. @@ -7107,10 +7239,18 @@ Howver, since we are keeping the lock from the previous stage, we need to unlock it if we skip the stage. */ - if (opt_binlog_order_commits) +commit_stage: + /* + We are delaying the handling of sync error until + all locks are released but we should not enter into + commit stage if binlog_error_action is ABORT_SERVER. + */ + if (opt_binlog_order_commits && + (sync_error == 0 || binlog_error_action != ABORT_SERVER)) { if (change_stage(thd, Stage_manager::COMMIT_STAGE, - final_queue, &LOCK_sync, &LOCK_commit)) + final_queue, leave_mutex_before_commit_stage, + &LOCK_commit)) { DBUG_PRINT("return", ("Thread ID: %lu, commit_error: %d", thd->thread_id, thd->commit_error)); @@ -7128,8 +7268,14 @@ process_after_commit_stage_queue(thd, commit_queue); final_queue= commit_queue; } - else - mysql_mutex_unlock(&LOCK_sync); + else if (leave_mutex_before_commit_stage) + mysql_mutex_unlock(leave_mutex_before_commit_stage); + + /* + Handle sync error after we release all locks in order to avoid deadlocks + */ + if (sync_error) + handle_binlog_flush_or_sync_error(thd, true /* need_lock_log */); /* Commit done so signal all waiting threads */ stage_manager.signal_done(final_queue); @@ -7145,7 +7291,8 @@ If we need to rotate, we do it without commit error. Otherwise the thd->commit_error will be possibly reset. */ - if (do_rotate && thd->commit_error == THD::CE_NONE) + if (DBUG_EVALUATE_IF("force_rotate", 1, 0) || + (do_rotate && thd->commit_error == THD::CE_NONE)) { /* Do not force the rotate as several consecutive groups may @@ -7158,6 +7305,10 @@ DEBUG_SYNC(thd, "ready_to_do_rotation"); bool check_purge= false; mysql_mutex_lock(&LOCK_log); + /* + If rotate fails then depends on binlog_error_action variable + appropriate action will be taken inside rotate call. + */ int error= rotate(false, &check_purge); mysql_mutex_unlock(&LOCK_log); @@ -7166,7 +7317,11 @@ else if (check_purge) purge(); } - DBUG_RETURN(thd->commit_error); + /* + flush or sync errors are handled above (using binlog_error_action). + Hence treat only COMMIT_ERRORs as errors. + */ + DBUG_RETURN(thd->commit_error == THD::CE_COMMIT_ERROR); } @@ -7658,6 +7813,114 @@ binlog_accessed_db_names->push_back(after_db, db_mem_root); } +/* + Tells if two (or more) tables have auto_increment columns and we want to + lock those tables with a write lock. + + SYNOPSIS + has_two_write_locked_tables_with_auto_increment + tables Table list + + NOTES: + Call this function only when you have established the list of all tables + which you'll want to update (including stored functions, triggers, views + inside your statement). +*/ + +static bool +has_write_table_with_auto_increment(TABLE_LIST *tables) +{ + for (TABLE_LIST *table= tables; table; table= table->next_global) + { + /* we must do preliminary checks as table->table may be NULL */ + if (!table->placeholder() && + table->table->found_next_number_field && + (table->lock_type >= TL_WRITE_ALLOW_WRITE)) + return 1; + } + + return 0; +} + +/* + checks if we have select tables in the table list and write tables + with auto-increment column. + + SYNOPSIS + has_two_write_locked_tables_with_auto_increment_and_select + tables Table list + + RETURN VALUES + + -true if the table list has atleast one table with auto-increment column + + + and atleast one table to select from. + -false otherwise +*/ + +static bool +has_write_table_with_auto_increment_and_select(TABLE_LIST *tables) +{ + bool has_select= false; + bool has_auto_increment_tables = has_write_table_with_auto_increment(tables); + for(TABLE_LIST *table= tables; table; table= table->next_global) + { + if (!table->placeholder() && + (table->lock_type <= TL_READ_NO_INSERT)) + { + has_select= true; + break; + } + } + return(has_select && has_auto_increment_tables); +} + +/* + Tells if there is a table whose auto_increment column is a part + of a compound primary key while is not the first column in + the table definition. + + @param tables Table list + + @return true if the table exists, fais if does not. +*/ + +static bool +has_write_table_auto_increment_not_first_in_pk(TABLE_LIST *tables) +{ + for (TABLE_LIST *table= tables; table; table= table->next_global) + { + /* we must do preliminary checks as table->table may be NULL */ + if (!table->placeholder() && + table->table->found_next_number_field && + (table->lock_type >= TL_WRITE_ALLOW_WRITE) + && table->table->s->next_number_keypart != 0) + return 1; + } + + return 0; +} + +#ifndef DBUG_OFF +const char * get_locked_tables_mode_name(enum_locked_tables_mode locked_tables_mode) +{ + switch (locked_tables_mode) + { + case LTM_NONE: + return "LTM_NONE"; + case LTM_LOCK_TABLES: + return "LTM_LOCK_TABLES"; + case LTM_PRELOCKED: + return "LTM_PRELOCKED"; + case LTM_PRELOCKED_UNDER_LOCK_TABLES: + return "LTM_PRELOCKED_UNDER_LOCK_TABLES"; + default: + return "Unknown table lock mode"; + } +} +#endif + /** Decide on logging format to use for the statement and issue errors @@ -7857,6 +8120,31 @@ } #endif + if (variables.binlog_format != BINLOG_FORMAT_ROW && tables) + { + /* + DML statements that modify a table with an auto_increment column based on + rows selected from a table are unsafe as the order in which the rows are + fetched fron the select tables cannot be determined and may differ on + master and slave. + */ + if (has_write_table_with_auto_increment_and_select(tables)) + lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_WRITE_AUTOINC_SELECT); + + if (has_write_table_auto_increment_not_first_in_pk(tables)) + lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_NOT_FIRST); + + /* + A query that modifies autoinc column in sub-statement can make the + master and slave inconsistent. + We can solve these problems in mixed mode by switching to binlogging + if at least one updated table is used by sub-statement + */ + if (lex->requires_prelocking() && + has_write_table_with_auto_increment(lex->first_not_own_table())) + lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS); + } + /* Get the capabilities vector for all involved storage engines and mask out the flags for the binary log. @@ -7934,6 +8222,27 @@ is_write= TRUE; prev_write_table= table->table; + + /* + INSERT...ON DUPLICATE KEY UPDATE on a table with more than one unique keys + can be unsafe. Check for it if the flag is already not marked for the + given statement. + */ + if (!lex->is_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS) && + lex->sql_command == SQLCOM_INSERT && + /* Duplicate key update is not supported by INSERT DELAYED */ + get_command() != COM_DELAYED_INSERT && lex->duplicates == DUP_UPDATE) + { + uint keys= table->table->s->keys, i= 0, unique_keys= 0; + for (KEY* keyinfo= table->table->s->key_info; + i < keys && unique_keys <= 1; i++, keyinfo++) + { + if (keyinfo->flags & HA_NOSAME) + unique_keys++; + } + if (unique_keys > 1 ) + lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS); + } } flags_access_some_set |= flags; @@ -8020,7 +8329,7 @@ my_error((error= ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE), MYF(0)); } else if (variables.binlog_format == BINLOG_FORMAT_ROW && - sqlcom_can_generate_row_events(this)) + sqlcom_can_generate_row_events(this->lex->sql_command)) { /* 2. Error: Cannot modify table that uses a storage engine @@ -8059,7 +8368,7 @@ my_error((error= ER_BINLOG_ROW_INJECTION_AND_STMT_MODE), MYF(0)); } else if ((flags_write_all_set & HA_BINLOG_STMT_CAPABLE) == 0 && - sqlcom_can_generate_row_events(this)) + sqlcom_can_generate_row_events(this->lex->sql_command)) { /* 5. Error: Cannot modify table that uses a storage engine @@ -8251,8 +8560,9 @@ inside a transaction because the table will stay and the transaction will be written to the slave's binary log with the GTID even if the transaction is rolled back. + This includes the execution inside Functions and Triggers. */ - if (in_multi_stmt_transaction_mode()) + if (in_multi_stmt_transaction_mode() || in_sub_stmt) { my_error(ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION, MYF(0)); @@ -8337,7 +8647,7 @@ THD::binlog_prepare_pending_rows_event(TABLE* table, uint32 serv_id, size_t needed, bool is_transactional, - RowsEventT *hint __attribute__((unused)), + RowsEventT *hint MY_ATTRIBUTE((unused)), const uchar* extra_row_info) { DBUG_ENTER("binlog_prepare_pending_rows_event"); diff -Nru mysql-5.6-5.6.27/sql/binlog.h mysql-5.6-5.6.33/sql/binlog.h --- mysql-5.6-5.6.27/sql/binlog.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/binlog.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ #ifndef BINLOG_H_INCLUDED -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -86,7 +86,7 @@ /** Lock for protecting the queue. */ mysql_mutex_t m_lock; - } __attribute__((aligned(CPU_LEVEL1_DCACHE_LINESIZE))); + } MY_ATTRIBUTE((aligned(CPU_LEVEL1_DCACHE_LINESIZE))); public: Stage_manager() @@ -518,6 +518,7 @@ int process_flush_stage_queue(my_off_t *total_bytes_var, bool *rotate_var, THD **out_queue_var); int ordered_commit(THD *thd, bool all, bool skip_commit = false); + void handle_binlog_flush_or_sync_error(THD *thd, bool need_lock_log); public: int open_binlog(const char *opt_name); void close(); @@ -689,7 +690,7 @@ extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; bool trans_has_updated_trans_table(const THD* thd); -bool stmt_has_updated_trans_table(const THD *thd); +bool stmt_has_updated_trans_table(Ha_trx_info* ha_list); bool ending_trans(THD* thd, const bool all); bool ending_single_stmt_trans(THD* thd, const bool all); bool trans_cannot_safely_rollback(const THD* thd); diff -Nru mysql-5.6-5.6.27/sql/CMakeLists.txt mysql-5.6-5.6.33/sql/CMakeLists.txt --- mysql-5.6-5.6.27/sql/CMakeLists.txt 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -419,6 +419,8 @@ ELSE() # udf_example is using safemutex exported by mysqld TARGET_LINK_LIBRARIES(udf_example mysqld) + SET_TARGET_PROPERTIES(udf_example + PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") ENDIF() ENDIF() diff -Nru mysql-5.6-5.6.27/sql/events.cc mysql-5.6-5.6.33/sql/events.cc --- mysql-5.6-5.6.27/sql/events.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/events.cc 2016-08-26 11:22:35.000000000 +0000 @@ -308,6 +308,7 @@ { bool ret; bool save_binlog_row_based, event_already_exists; + ulong save_binlog_format= thd->variables.binlog_format; DBUG_ENTER("Events::create_event"); if (check_if_system_tables_error()) @@ -341,10 +342,15 @@ */ if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) thd->clear_current_stmt_binlog_format_row(); + thd->variables.binlog_format= BINLOG_FORMAT_STMT; + if (lock_object_name(thd, MDL_key::EVENT, parse_data->dbname.str, parse_data->name.str)) - DBUG_RETURN(TRUE); + { + ret= true; + goto err; + } /* On error conditions my_error() is called so no need to handle here */ if (!(ret= db_repository->create_event(thd, parse_data, if_not_exists, @@ -399,10 +405,12 @@ } } } +err: /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) thd->set_current_stmt_binlog_format_row(); + thd->variables.binlog_format= save_binlog_format; DBUG_RETURN(ret); } @@ -433,6 +441,7 @@ { int ret; bool save_binlog_row_based; + ulong save_binlog_format= thd->variables.binlog_format; Event_queue_element *new_element; DBUG_ENTER("Events::update_event"); @@ -481,10 +490,14 @@ */ if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) thd->clear_current_stmt_binlog_format_row(); + thd->variables.binlog_format= BINLOG_FORMAT_STMT; if (lock_object_name(thd, MDL_key::EVENT, parse_data->dbname.str, parse_data->name.str)) - DBUG_RETURN(TRUE); + { + ret= true; + goto err; + } /* On error conditions my_error() is called so no need to handle here */ if (!(ret= db_repository->update_event(thd, parse_data, @@ -519,10 +532,12 @@ ret= write_bin_log(thd, TRUE, thd->query(), thd->query_length()); } } +err: /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) thd->set_current_stmt_binlog_format_row(); + thd->variables.binlog_format= save_binlog_format; DBUG_RETURN(ret); } diff -Nru mysql-5.6-5.6.27/sql/field.cc mysql-5.6-5.6.33/sql/field.cc --- mysql-5.6-5.6.27/sql/field.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/field.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1290,7 +1290,7 @@ */ type_conversion_status Field_num::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { longlong nr= TIME_to_ulonglong_round(ltime); return store(ltime->neg ? -nr : nr, 0); @@ -1444,8 +1444,8 @@ master's field size, @c false otherwise. */ bool Field::compatible_field_size(uint field_metadata, - Relay_log_info *rli_arg __attribute__((unused)), - uint16 mflags __attribute__((unused)), + Relay_log_info *rli_arg MY_ATTRIBUTE((unused)), + uint16 mflags MY_ATTRIBUTE((unused)), int *order_var) { uint const source_size= pack_length_from_metadata(field_metadata); @@ -1508,7 +1508,7 @@ */ uchar * Field::pack(uchar *to, const uchar *from, uint max_length, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint32 length= pack_length(); set_if_smaller(length, max_length); @@ -1548,7 +1548,7 @@ */ const uchar * Field::unpack(uchar* to, const uchar *from, uint param_data, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint length=pack_length(); int from_type= 0; @@ -1860,7 +1860,7 @@ Field *Field::new_field(MEM_ROOT *root, TABLE *new_table, - bool keep_type __attribute__((unused))) + bool keep_type MY_ATTRIBUTE((unused))) { Field *tmp= clone(root); if (tmp == NULL) @@ -2435,7 +2435,7 @@ } -String *Field_decimal::val_str(String *val_buffer __attribute__((unused)), +String *Field_decimal::val_str(String *val_buffer MY_ATTRIBUTE((unused)), String *val_ptr) { ASSERT_COLUMN_MARKED_FOR_READ; @@ -2806,7 +2806,7 @@ type_conversion_status Field_new_decimal::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { my_decimal decimal_value; return store_value(date2my_decimal(ltime, &decimal_value)); @@ -2847,7 +2847,7 @@ String *Field_new_decimal::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; my_decimal decimal_value; @@ -2960,8 +2960,8 @@ @return @c true */ bool Field_new_decimal::compatible_field_size(uint field_metadata, - Relay_log_info * __attribute__((unused)), - uint16 mflags __attribute__((unused)), + Relay_log_info * MY_ATTRIBUTE((unused)), + uint16 mflags MY_ATTRIBUTE((unused)), int *order_var) { uint const source_precision= (field_metadata >> 8U) & 0x00ff; @@ -3161,7 +3161,7 @@ String *Field_tiny::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; const CHARSET_INFO *cs= &my_charset_numeric; @@ -3376,7 +3376,7 @@ String *Field_short::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; const CHARSET_INFO *cs= &my_charset_numeric; @@ -3596,7 +3596,7 @@ String *Field_medium::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; const CHARSET_INFO *cs= &my_charset_numeric; @@ -3830,7 +3830,7 @@ } String *Field_long::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; const CHARSET_INFO *cs= &my_charset_numeric; @@ -4079,7 +4079,7 @@ String *Field_longlong::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { const CHARSET_INFO *cs= &my_charset_numeric; uint length; @@ -4199,7 +4199,7 @@ type_conversion_status Field_real::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { double nr= TIME_to_double(ltime); return store(ltime->neg ? -nr : nr); @@ -4289,7 +4289,7 @@ String *Field_float::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; DBUG_ASSERT(!zerofill || field_length <= MAX_FIELD_CHARLENGTH); @@ -4625,7 +4625,7 @@ String *Field_double::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; DBUG_ASSERT(!zerofill || field_length <= MAX_FIELD_CHARLENGTH); @@ -5089,7 +5089,7 @@ type_conversion_status Field_temporal_with_date::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_WRITE; type_conversion_status error; @@ -5480,7 +5480,7 @@ } -void Field_timestamp::make_sort_key(uchar *to,uint length __attribute__((unused))) +void Field_timestamp::make_sort_key(uchar *to,uint length MY_ATTRIBUTE((unused))) { #ifdef WORDS_BIGENDIAN if (!table || !table->s->db_low_byte_first) @@ -5699,7 +5699,7 @@ type_conversion_status Field_time_common::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { /* Check if seconds or minutes are out of range */ if (ltime->second >= 60 || ltime->minute >= 60) @@ -5725,7 +5725,7 @@ String *Field_time_common::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; MYSQL_TIME ltime; @@ -6039,7 +6039,7 @@ type_conversion_status Field_year::store_time(MYSQL_TIME *ltime, - uint8 dec_arg __attribute__((unused))) + uint8 dec_arg MY_ATTRIBUTE((unused))) { if (ltime->time_type != MYSQL_TIMESTAMP_DATETIME && ltime->time_type != MYSQL_TIMESTAMP_DATE) @@ -6103,7 +6103,7 @@ String *Field_year::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { DBUG_ASSERT(field_length < 5); val_buffer->alloc(5); @@ -6203,7 +6203,7 @@ String *Field_newdate::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; val_buffer->alloc(field_length); @@ -6393,7 +6393,7 @@ Using my_datetime_number_to_str() instead of my_datetime_to_str(). */ String *Field_datetime::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; val_buffer->alloc(field_length + 1); @@ -6787,7 +6787,7 @@ } -String *Field_string::val_str(String *val_buffer __attribute__((unused)), +String *Field_string::val_str(String *val_buffer MY_ATTRIBUTE((unused)), String *val_ptr) { ASSERT_COLUMN_MARKED_FOR_READ; @@ -6845,7 +6845,7 @@ bool Field_string::compatible_field_size(uint field_metadata, Relay_log_info *rli_arg, - uint16 mflags __attribute__((unused)), + uint16 mflags MY_ATTRIBUTE((unused)), int *order_var) { #ifdef HAVE_REPLICATION @@ -6883,7 +6883,7 @@ void Field_string::make_sort_key(uchar *to, uint length) { - uint tmp __attribute__((unused))= + uint tmp MY_ATTRIBUTE((unused))= field_charset->coll->strnxfrm(field_charset, to, length, char_length(), ptr, field_length, @@ -6915,7 +6915,7 @@ uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint length= min(field_length,max_length); uint local_char_length= max_length/field_charset->mbmaxlen; @@ -6974,7 +6974,7 @@ Field_string::unpack(uchar *to, const uchar *from, uint param_data, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint from_length, length; @@ -7229,7 +7229,7 @@ return result; } -String *Field_varstring::val_str(String *val_buffer __attribute__((unused)), +String *Field_varstring::val_str(String *val_buffer MY_ATTRIBUTE((unused)), String *val_ptr) { ASSERT_COLUMN_MARKED_FOR_READ; @@ -7391,7 +7391,7 @@ uchar *Field_varstring::pack(uchar *to, const uchar *from, uint max_length, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint length= length_bytes == 1 ? (uint) *from : uint2korr(from); set_if_smaller(max_length, field_length); @@ -7428,7 +7428,7 @@ const uchar * Field_varstring::unpack(uchar *to, const uchar *from, uint param_data, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { uint length; uint l_bytes= (param_data && (param_data < field_length)) ? @@ -7887,7 +7887,7 @@ return my_strntoll(charset(),blob,length,10,NULL,¬_used); } -String *Field_blob::val_str(String *val_buffer __attribute__((unused)), +String *Field_blob::val_str(String *val_buffer MY_ATTRIBUTE((unused)), String *val_ptr) { ASSERT_COLUMN_MARKED_FOR_READ; @@ -8539,7 +8539,7 @@ } -String *Field_enum::val_str(String *val_buffer __attribute__((unused)), +String *Field_enum::val_str(String *val_buffer MY_ATTRIBUTE((unused)), String *val_ptr) { uint tmp=(uint) Field_enum::val_int(); @@ -8683,7 +8683,7 @@ String *Field_set::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ulonglong tmp=(ulonglong) Field_enum::val_int(); uint bitnr=0; @@ -9148,7 +9148,7 @@ String *Field_bit::val_str(String *val_buffer, - String *val_ptr __attribute__((unused))) + String *val_ptr MY_ATTRIBUTE((unused))) { ASSERT_COLUMN_MARKED_FOR_READ; char buff[sizeof(longlong)]; @@ -9308,7 +9308,7 @@ */ bool Field_bit::compatible_field_size(uint field_metadata, - Relay_log_info * __attribute__((unused)), + Relay_log_info * MY_ATTRIBUTE((unused)), uint16 mflags, int *order_var) { @@ -9348,7 +9348,7 @@ uchar * Field_bit::pack(uchar *to, const uchar *from, uint max_length, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { DBUG_ASSERT(max_length > 0); uint length; @@ -9396,7 +9396,7 @@ */ const uchar * Field_bit::unpack(uchar *to, const uchar *from, uint param_data, - bool low_byte_first __attribute__((unused))) + bool low_byte_first MY_ATTRIBUTE((unused))) { DBUG_ENTER("Field_bit::unpack"); DBUG_PRINT("enter", ("to: %p, from: %p, param_data: 0x%x", diff -Nru mysql-5.6-5.6.27/sql/field_conv.cc mysql-5.6-5.6.33/sql/field_conv.cc --- mysql-5.6-5.6.27/sql/field_conv.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/field_conv.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -195,7 +195,7 @@ } -static void do_skip(Copy_field *copy __attribute__((unused))) +static void do_skip(Copy_field *copy MY_ATTRIBUTE((unused))) { } @@ -827,7 +827,12 @@ Field_blob *blob=(Field_blob*) to; from->val_str(&blob->value); - if (!blob->value.is_alloced() && from->is_updatable()) + /* + Copy value if copy_blobs is set, or source is part of the table's + writeset. + */ + if (to->table->copy_blobs || + (!blob->value.is_alloced() && from->is_updatable())) blob->value.copy(); return blob->store(blob->value.ptr(),blob->value.length(),from->charset()); diff -Nru mysql-5.6-5.6.27/sql/field.h mysql-5.6-5.6.33/sql/field.h --- mysql-5.6-5.6.27/sql/field.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/field.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef FIELD_INCLUDED #define FIELD_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1889,13 +1889,13 @@ return new Field_long(*this); } virtual uchar *pack(uchar* to, const uchar *from, - uint max_length __attribute__((unused)), + uint max_length MY_ATTRIBUTE((unused)), bool low_byte_first) { return pack_int32(to, from, low_byte_first); } virtual const uchar *unpack(uchar* to, const uchar *from, - uint param_data __attribute__((unused)), + uint param_data MY_ATTRIBUTE((unused)), bool low_byte_first) { return unpack_int32(to, from, low_byte_first); @@ -1954,13 +1954,13 @@ return new Field_longlong(*this); } virtual uchar *pack(uchar* to, const uchar *from, - uint max_length __attribute__((unused)), + uint max_length MY_ATTRIBUTE((unused)), bool low_byte_first) { return pack_int64(to, from, low_byte_first); } virtual const uchar *unpack(uchar* to, const uchar *from, - uint param_data __attribute__((unused)), + uint param_data MY_ATTRIBUTE((unused)), bool low_byte_first) { return unpack_int64(to, from, low_byte_first); @@ -2560,12 +2560,12 @@ return new Field_timestamp(*this); } uchar *pack(uchar *to, const uchar *from, - uint max_length __attribute__((unused)), bool low_byte_first) + uint max_length MY_ATTRIBUTE((unused)), bool low_byte_first) { return pack_int32(to, from, low_byte_first); } const uchar *unpack(uchar* to, const uchar *from, - uint param_data __attribute__((unused)), + uint param_data MY_ATTRIBUTE((unused)), bool low_byte_first) { return unpack_int32(to, from, low_byte_first); @@ -2998,12 +2998,12 @@ return new Field_datetime(*this); } uchar *pack(uchar* to, const uchar *from, - uint max_length __attribute__((unused)), bool low_byte_first) + uint max_length MY_ATTRIBUTE((unused)), bool low_byte_first) { return pack_int64(to, from, low_byte_first); } const uchar *unpack(uchar* to, const uchar *from, - uint param_data __attribute__((unused)), + uint param_data MY_ATTRIBUTE((unused)), bool low_byte_first) { return unpack_int64(to, from, low_byte_first); diff -Nru mysql-5.6-5.6.27/sql/filesort.cc mysql-5.6-5.6.33/sql/filesort.cc --- mysql-5.6-5.6.27/sql/filesort.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/filesort.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1040,7 +1040,7 @@ if (sort_field->need_strxnfrm) { char *from=(char*) res->ptr(); - uint tmp_length __attribute__((unused)); + uint tmp_length MY_ATTRIBUTE((unused)); if ((uchar*) from == to) { DBUG_ASSERT(sort_field->length >= length); diff -Nru mysql-5.6-5.6.27/sql/ha_ndbcluster_binlog.cc mysql-5.6-5.6.33/sql/ha_ndbcluster_binlog.cc --- mysql-5.6-5.6.27/sql/ha_ndbcluster_binlog.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/ha_ndbcluster_binlog.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -6252,7 +6252,7 @@ static uchar * ndb_schema_objects_get_key(NDB_SCHEMA_OBJECT *schema_object, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= schema_object->key_length; return (uchar*) schema_object->key; diff -Nru mysql-5.6-5.6.27/sql/ha_ndbcluster.cc mysql-5.6-5.6.33/sql/ha_ndbcluster.cc --- mysql-5.6-5.6.27/sql/ha_ndbcluster.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/ha_ndbcluster.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -417,7 +417,7 @@ HASH ndbcluster_open_tables; static uchar *ndbcluster_get_key(NDB_SHARE *share, size_t *length, - my_bool not_used __attribute__((unused))); + my_bool not_used MY_ATTRIBUTE((unused))); static void modify_shared_stats(NDB_SHARE *share, Ndb_local_table_statistics *local_stat); @@ -1293,7 +1293,7 @@ } THD_NDB_SHARE; static uchar *thd_ndb_share_get_key(THD_NDB_SHARE *thd_ndb_share, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= sizeof(thd_ndb_share->key); return (uchar*) &thd_ndb_share->key; @@ -11106,7 +11106,7 @@ extern "C" uchar* tables_get_key(const char *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= strlen(entry); return (uchar*) entry; @@ -12657,7 +12657,7 @@ */ static uchar *ndbcluster_get_key(NDB_SHARE *share, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= share->key_length; return (uchar*) share->key; @@ -14539,7 +14539,7 @@ /** Utility thread main loop. */ -pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) +pthread_handler_t ndb_util_thread_func(void *arg MY_ATTRIBUTE((unused))) { THD *thd; /* needs to be first for thread_stack */ struct timespec abstime; diff -Nru mysql-5.6-5.6.27/sql/ha_ndb_index_stat.cc mysql-5.6-5.6.33/sql/ha_ndb_index_stat.cc --- mysql-5.6-5.6.27/sql/ha_ndb_index_stat.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/ha_ndb_index_stat.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1727,7 +1727,7 @@ } pthread_handler_t -ndb_index_stat_thread_func(void *arg __attribute__((unused))) +ndb_index_stat_thread_func(void *arg MY_ATTRIBUTE((unused))) { THD *thd; /* needs to be first for thread_stack */ struct timespec abstime; diff -Nru mysql-5.6-5.6.27/sql/handler.cc mysql-5.6-5.6.33/sql/handler.cc --- mysql-5.6-5.6.27/sql/handler.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/handler.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -337,7 +337,7 @@ if ((plugin= my_plugin_lock_by_name(thd, name, MYSQL_STORAGE_ENGINE_PLUGIN))) { handlerton *hton= plugin_data(plugin, handlerton *); - if (!(hton->flags & HTON_NOT_USER_SELECTABLE)) + if (hton && !(hton->flags & HTON_NOT_USER_SELECTABLE)) return plugin; /* @@ -1419,7 +1419,7 @@ DEBUG_SYNC(thd, "ha_commit_trans_after_acquire_commit_lock"); } - if (rw_trans && + if (rw_trans && stmt_has_updated_trans_table(ha_info) && opt_readonly && !(thd->security_ctx->master_access & SUPER_ACL) && !thd->slave_thread) @@ -2385,7 +2385,8 @@ #ifdef HAVE_PSI_TABLE_INTERFACE if (likely(error == 0)) { - my_bool temp_table= (my_bool)is_prefix(alias, tmp_file_prefix); + /* Table share not available, so check path for temp table prefix. */ + bool temp_table = (strstr(path, tmp_file_prefix) != NULL); PSI_TABLE_CALL(drop_table_share) (temp_table, db, strlen(db), alias, strlen(alias)); } @@ -4733,12 +4734,12 @@ const char *name; TABLE_SHARE share; bool saved_abort_on_warning; - DBUG_ENTER("ha_create_table"); #ifdef HAVE_PSI_TABLE_INTERFACE - my_bool temp_table= (my_bool)is_temp_table || - (my_bool)is_prefix(table_name, tmp_file_prefix) || - (create_info->options & HA_LEX_CREATE_TMP_TABLE ? TRUE : FALSE); + bool temp_table = is_temp_table || + (create_info->options & HA_LEX_CREATE_TMP_TABLE) || + (strstr(path, tmp_file_prefix) != NULL); #endif + DBUG_ENTER("ha_create_table"); init_tmp_table_share(thd, &share, db, 0, table_name, path); if (open_table_def(thd, &share, 0)) @@ -4750,7 +4751,13 @@ if (open_table_from_share(thd, &share, "", 0, (uint) READ_ALL, 0, &table, TRUE)) + { +#ifdef HAVE_PSI_TABLE_INTERFACE + PSI_TABLE_CALL(drop_table_share) + (temp_table, db, strlen(db), table_name, strlen(table_name)); +#endif goto err; + } if (update_create_info) update_create_info_from_table(create_info, &table); @@ -6271,7 +6278,7 @@ ha_rows DsMrr_impl::dsmrr_info(uint keyno, uint n_ranges, uint rows, uint *bufsz, uint *flags, Cost_estimate *cost) { - ha_rows res __attribute__((unused)); + ha_rows res MY_ATTRIBUTE((unused)); uint def_flags= *flags; uint def_bufsz= *bufsz; @@ -6635,13 +6642,30 @@ DBUG_PRINT("info",("sweep: nblocks=%g, busy_blocks=%g", n_blocks, busy_blocks)); - if (interrupted) - cost->add_io(busy_blocks * Cost_estimate::IO_BLOCK_READ_COST()); - else + /* + The random access cost for reading the data pages will be the + upper limit for the sweep_cost. + */ + cost->add_io(busy_blocks * Cost_estimate::IO_BLOCK_READ_COST()); + + if (!interrupted) + { /* Assume reading is done in one 'sweep' */ - cost->add_io(busy_blocks * + Cost_estimate sweep_cost; + sweep_cost.add_io(busy_blocks * (DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST * n_blocks / busy_blocks)); + /* + For some cases, ex: when only few blocks need to be read + and the seek distance becomes very large, the sweep cost + model can produce a cost estimate that is larger than the + cost of random access. To handle this case, we use the + sweep cost only when it is less than the random access + cost. + */ + if (sweep_cost.get_io_cost() < cost->get_io_cost()) + *cost= sweep_cost; + } } DBUG_PRINT("info",("returning cost=%g", cost->total_cost())); DBUG_VOID_RETURN; @@ -7606,3 +7630,28 @@ } } #endif /*TRANS_LOG_MGM_EXAMPLE_CODE*/ + + +/** + Report a warning for FK constraint violation. + + @param thd Thread handle. + @param table table on which the operation is performed. + @param error handler error number. +*/ +void warn_fk_constraint_violation(THD *thd,TABLE *table, int error) +{ + String str; + switch(error) { + case HA_ERR_ROW_IS_REFERENCED: + table->file->get_error_message(error, &str); + push_warning(thd, Sql_condition::WARN_LEVEL_WARN, + ER_ROW_IS_REFERENCED_2, str.c_ptr_safe()); + break; + case HA_ERR_NO_REFERENCED_ROW: + table->file->get_error_message(error, &str); + push_warning(thd, Sql_condition::WARN_LEVEL_WARN, + ER_NO_REFERENCED_ROW_2, str.c_ptr_safe()); + break; + } +} diff -Nru mysql-5.6-5.6.27/sql/handler.h mysql-5.6-5.6.33/sql/handler.h --- mysql-5.6-5.6.27/sql/handler.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/handler.h 2016-08-26 11:22:35.000000000 +0000 @@ -2,7 +2,7 @@ #define HANDLER_INCLUDED /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -369,6 +369,7 @@ /* Flags for method is_fatal_error */ #define HA_CHECK_DUP_KEY 1 #define HA_CHECK_DUP_UNIQUE 2 +#define HA_CHECK_FK_ERROR 4 #define HA_CHECK_DUP (HA_CHECK_DUP_KEY + HA_CHECK_DUP_UNIQUE) enum legacy_db_type @@ -2147,7 +2148,10 @@ if (!error || ((flags & HA_CHECK_DUP_KEY) && (error == HA_ERR_FOUND_DUPP_KEY || - error == HA_ERR_FOUND_DUPP_UNIQUE))) + error == HA_ERR_FOUND_DUPP_UNIQUE)) || + ((flags & HA_CHECK_FK_ERROR) && + (error == HA_ERR_ROW_IS_REFERENCED || + error == HA_ERR_NO_REFERENCED_ROW))) return FALSE; return TRUE; } @@ -3063,7 +3067,7 @@ */ virtual int rnd_init(bool scan)= 0; virtual int rnd_end() { return 0; } - virtual int write_row(uchar *buf __attribute__((unused))) + virtual int write_row(uchar *buf MY_ATTRIBUTE((unused))) { return HA_ERR_WRONG_COMMAND; } @@ -3076,13 +3080,13 @@ the columns required for the error message are not read, the error message will contain garbage. */ - virtual int update_row(const uchar *old_data __attribute__((unused)), - uchar *new_data __attribute__((unused))) + virtual int update_row(const uchar *old_data MY_ATTRIBUTE((unused)), + uchar *new_data MY_ATTRIBUTE((unused))) { return HA_ERR_WRONG_COMMAND; } - virtual int delete_row(const uchar *buf __attribute__((unused))) + virtual int delete_row(const uchar *buf MY_ATTRIBUTE((unused))) { return HA_ERR_WRONG_COMMAND; } @@ -3115,8 +3119,8 @@ @return non-0 in case of failure, 0 in case of success. When lock_type is F_UNLCK, the return value is ignored. */ - virtual int external_lock(THD *thd __attribute__((unused)), - int lock_type __attribute__((unused))) + virtual int external_lock(THD *thd MY_ATTRIBUTE((unused)), + int lock_type MY_ATTRIBUTE((unused))) { return 0; } @@ -3488,5 +3492,6 @@ void print_keydup_error(TABLE *table, KEY *key, const char *msg, myf errflag); void print_keydup_error(TABLE *table, KEY *key, myf errflag); +void warn_fk_constraint_violation(THD *thd, TABLE *table, int error); #endif /* HANDLER_INCLUDED */ diff -Nru mysql-5.6-5.6.27/sql/ha_partition.cc mysql-5.6-5.6.33/sql/ha_partition.cc --- mysql-5.6-5.6.27/sql/ha_partition.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/ha_partition.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -222,7 +222,7 @@ return HA_CAN_PARTITION; } -static uint alter_table_flags(uint flags __attribute__((unused))) +static uint alter_table_flags(uint flags MY_ATTRIBUTE((unused))) { return (HA_PARTITION_FUNCTION_SUPPORTED | HA_FAST_CHANGE_PARTITION); @@ -1670,9 +1670,9 @@ ulonglong * const copied, ulonglong * const deleted, const uchar *pack_frm_data - __attribute__((unused)), + MY_ATTRIBUTE((unused)), size_t pack_frm_len - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { List_iterator part_it(m_part_info->partitions); List_iterator t_it(m_part_info->temp_partitions); @@ -2956,7 +2956,7 @@ */ static uchar *get_part_name(PART_NAME_DEF *part, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= part->length; return part->partition_name; @@ -8180,6 +8180,7 @@ for (index= 0; index < m_tot_parts && !error; index++) { ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[index]; + m_file[index]->update_create_info(ha_alter_info->create_info); if (m_file[index]->ha_prepare_inplace_alter_table(altered_table, ha_alter_info)) error= true; diff -Nru mysql-5.6-5.6.27/sql/hostname.cc mysql-5.6-5.6.33/sql/hostname.cc --- mysql-5.6-5.6.27/sql/hostname.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/hostname.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -413,7 +413,7 @@ { const struct sockaddr *ip= (const sockaddr *) ip_storage; int err_code; - bool err_status __attribute__((unused)); + bool err_status MY_ATTRIBUTE((unused)); Host_errors errors; DBUG_ENTER("ip_to_hostname"); diff -Nru mysql-5.6-5.6.27/sql/init.h mysql-5.6-5.6.33/sql/init.h --- mysql-5.6-5.6.27/sql/init.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/init.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #include "my_global.h" /* ulong */ void unireg_init(ulong options); -void unireg_end(void) __attribute__((noreturn)); +void unireg_end(void) MY_ATTRIBUTE((noreturn)); #endif /* INIT_INCLUDED */ diff -Nru mysql-5.6-5.6.27/sql/item.cc mysql-5.6-5.6.33/sql/item.cc --- mysql-5.6-5.6.27/sql/item.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -230,9 +230,6 @@ */ String *Item::val_str_ascii(String *str) { - if (!(collation.collation->state & MY_CS_NONASCII)) - return val_str(str); - DBUG_ASSERT(str != &str_value); uint errors; @@ -240,11 +237,15 @@ if (!res) return 0; - if ((null_value= str->copy(res->ptr(), res->length(), - collation.collation, &my_charset_latin1, - &errors))) - return 0; - + if (!(res->charset()->state & MY_CS_NONASCII)) + str= res; + else + { + if ((null_value= str->copy(res->ptr(), res->length(), collation.collation, + &my_charset_latin1, &errors))) + return 0; + } + return str; } @@ -362,9 +363,13 @@ MYSQL_TIME ltime; if (get_date(<ime, TIME_FUZZY_DATE)) { + /* + The conversion may fail in strict mode. Do not return a NULL pointer, + as the result may be used in subsequent arithmetic operations. + */ my_decimal_set_zero(decimal_value); null_value= 1; // set NULL, stop processing - return 0; + return decimal_value;; } return date2my_decimal(<ime, decimal_value); } @@ -1175,14 +1180,31 @@ { if (const_item()) { - uint cnv_errors; - String *ostr= val_str(&cnvstr); - cnvitem->str_value.copy(ostr->ptr(), ostr->length(), - ostr->charset(), tocs, &cnv_errors); - if (cnv_errors) - return NULL; - cnvitem->str_value.mark_as_const(); - cnvitem->max_length= cnvitem->str_value.numchars() * tocs->mbmaxlen; + Item *cnvitem; + String tmp, cstr, *ostr= val_str(&tmp); + + if (null_value) + { + cnvitem= new Item_null(); + if (cnvitem == NULL) + return NULL; + + cnvitem->collation.set(tocs); + } + else + { + uint conv_errors; + cstr.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, + &conv_errors); + + if (conv_errors || !(cnvitem= new Item_string(cstr.ptr(), cstr.length(), + cstr.charset(), + collation.derivation))) + return NULL; + + cnvitem->str_value.copy(); + cnvitem->str_value.mark_as_const(); + } return cnvitem; } return Item::safe_charset_converter(tocs); @@ -2893,11 +2915,24 @@ } -table_map Item_field::resolved_used_tables() const +bool Item_field::used_tables_for_level(uchar *arg) { - if (field->table->const_table) - return 0; // const item - return field->table->map; + // Used by resolver only, so can never reach a "const" table. + DBUG_ASSERT(!field->orig_table->const_table); + TABLE_LIST *tr= field->orig_table->pos_in_table_list; + Used_tables *const ut= (Used_tables *)(arg); + + /* + When the qualifying query for the field (table_ref->select_lex) is the + same level as the requested level, add the table's map. When the qualifying + query for the field is outer relative to the requested level, add an outer + reference. + */ + if (ut->select == tr->select_lex) + ut->used_tables|= tr->table->map; + else if (ut->select->nest_level > tr->select_lex->nest_level) + ut->used_tables|= OUTER_REF_TABLE_BIT; + return false; } void Item_ident::fix_after_pullout(st_select_lex *parent_select, @@ -2972,7 +3007,9 @@ */ Item_subselect *subq_predicate= child_select->master_unit()->item; - subq_predicate->used_tables_cache|= this->resolved_used_tables(); + Used_tables ut(depended_from); + (void) walk(&Item::used_tables_for_level, true, (uchar *)(&ut)); + subq_predicate->used_tables_cache|= ut.used_tables; subq_predicate->const_item_cache&= this->const_item(); } } @@ -3391,8 +3428,8 @@ static void default_set_param_func(Item_param *param, - uchar **pos __attribute__((unused)), - ulong len __attribute__((unused))) + uchar **pos MY_ATTRIBUTE((unused)), + ulong len MY_ATTRIBUTE((unused))) { param->set_null(); } @@ -3416,8 +3453,6 @@ value is set. */ maybe_null= 1; - cnvitem= new Item_string("", 0, &my_charset_bin, DERIVATION_COERCIBLE); - cnvstr.set(cnvbuf, sizeof(cnvbuf), &my_charset_bin); } @@ -4078,7 +4113,7 @@ void Item_param::print(String *str, enum_query_type query_type) { - if (state == NO_VALUE) + if (state == NO_VALUE || query_type & QT_NO_DATA_EXPANSION) { str->append('?'); } @@ -4705,8 +4740,10 @@ if (found_field == view_ref_found) { Item::Type type= found_item->type(); - prev_subselect_item->used_tables_cache|= - found_item->used_tables(); + Used_tables ut(last_select); + (void) found_item->walk(&Item::used_tables_for_level, true, + (uchar *)(&ut)); + prev_subselect_item->used_tables_cache|= ut.used_tables; dependent= ((type == Item::REF_ITEM || type == Item::FIELD_ITEM) ? (Item_ident*) found_item : 0); @@ -5151,8 +5188,10 @@ else { Item::Type ref_type= (*reference)->type(); - prev_subselect_item->used_tables_cache|= - (*reference)->used_tables(); + Used_tables ut(select); + (void) (*reference)->walk(&Item::used_tables_for_level, true, + (uchar *)(&ut)); + prev_subselect_item->used_tables_cache|= ut.used_tables; prev_subselect_item->const_item_cache&= (*reference)->const_item(); mark_as_dependent(thd, last_checked_context->select_lex, @@ -7111,7 +7150,8 @@ void Item_field::print(String *str, enum_query_type query_type) { - if (field && field->table->const_table) + if (field && field->table->const_table && + !(query_type & QT_NO_DATA_EXPANSION)) { char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),str->charset()); diff -Nru mysql-5.6-5.6.27/sql/item_cmpfunc.cc mysql-5.6-5.6.33/sql/item_cmpfunc.cc --- mysql-5.6-5.6.27/sql/item_cmpfunc.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_cmpfunc.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -4164,29 +4164,39 @@ } -void cmp_item_row::alloc_comparators() +void cmp_item_row::alloc_comparators(Item *item) { + n= item->cols(); + DBUG_ASSERT(comparators == NULL); if (!comparators) comparators= (cmp_item **) current_thd->calloc(sizeof(cmp_item *)*n); + if (comparators) + { + for (uint i= 0; i < n; i++) + { + DBUG_ASSERT(comparators[i] == NULL); + Item *item_i= item->element_index(i); + if (!(comparators[i]= + cmp_item::get_comparator(item_i->result_type(), + item_i->collation.collation))) + break; // new failed + if (item_i->result_type() == ROW_RESULT) + static_cast(comparators[i])->alloc_comparators(item_i); + } + } } void cmp_item_row::store_value(Item *item) { DBUG_ENTER("cmp_item_row::store_value"); - n= item->cols(); - alloc_comparators(); + DBUG_ASSERT(comparators); if (comparators) { item->bring_value(); item->null_value= 0; - for (uint i=0; i < n; i++) + for (uint i= 0; i < n; i++) { - if (!comparators[i]) - if (!(comparators[i]= - cmp_item::get_comparator(item->element_index(i)->result_type(), - item->element_index(i)->collation.collation))) - break; // new failed comparators[i]->store_value(item->element_index(i)); item->null_value|= item->element_index(i)->null_value; } @@ -4464,7 +4474,7 @@ cmp_items[ROW_RESULT]= cmp; } cmp->n= args[0]->cols(); - cmp->alloc_comparators(); + cmp->alloc_comparators(args[0]); } /* All DATE/DATETIME fields/functions has the STRING result type. */ if (cmp_type == STRING_RESULT || cmp_type == ROW_RESULT) @@ -4583,11 +4593,8 @@ break; case ROW_RESULT: /* - The row comparator was created at the beginning but only DATETIME - items comparators were initialized. Call store_value() to setup - others. + The row comparator was created at the beginning. */ - ((in_row*)array)->tmp.store_value(args[0]); break; case DECIMAL_RESULT: array= new in_decimal(arg_count - 1); diff -Nru mysql-5.6-5.6.27/sql/item_cmpfunc.h mysql-5.6-5.6.33/sql/item_cmpfunc.h --- mysql-5.6-5.6.27/sql/item_cmpfunc.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_cmpfunc.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ITEM_CMPFUNC_INCLUDED #define ITEM_CMPFUNC_INCLUDED -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1450,7 +1450,7 @@ cmp_item_row(): comparators(0), n(0) {} ~cmp_item_row(); void store_value(Item *item); - inline void alloc_comparators(); + inline void alloc_comparators(Item *item); int cmp(Item *arg); int compare(cmp_item *arg); cmp_item *make_same(); diff -Nru mysql-5.6-5.6.27/sql/item_func.cc mysql-5.6-5.6.33/sql/item_func.cc --- mysql-5.6-5.6.27/sql/item_func.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_func.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -239,6 +239,16 @@ void Item_func::fix_after_pullout(st_select_lex *parent_select, st_select_lex *removed_select) { + if (const_item()) + { + /* + Pulling out a const item changes nothing to it. Moreover, some items may + have decided that they're const by some other logic than the generic + one below, and we must preserve that decision. + */ + return; + } + Item **arg,**arg_end; used_tables_cache= get_initial_pseudo_tables(); @@ -3985,7 +3995,7 @@ }; uchar *ull_get_key(const User_level_lock *ull, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= ull->key_length; return ull->key; @@ -4729,7 +4739,7 @@ @retval true on allocation error */ -bool user_var_entry::store(void *from, uint length, Item_result type) +bool user_var_entry::store(const void *from, uint length, Item_result type) { // Store strings with end \0 if (realloc(length + MY_TEST(type == STRING_RESULT))) @@ -4763,7 +4773,7 @@ true failure */ -bool user_var_entry::store(void *ptr, uint length, Item_result type, +bool user_var_entry::store(const void *ptr, uint length, Item_result type, const CHARSET_INFO *cs, Derivation dv, bool unsigned_arg) { @@ -4776,7 +4786,7 @@ bool -Item_func_set_user_var::update_hash(void *ptr, uint length, +Item_func_set_user_var::update_hash(const void *ptr, uint length, Item_result res_type, const CHARSET_INFO *cs, Derivation dv, bool unsigned_arg) @@ -4790,8 +4800,16 @@ null_value= ((Item_field*)args[0])->field->is_null(); else null_value= args[0]->null_value; + + if (ptr == NULL) + { + DBUG_ASSERT(length == 0); + null_value= true; + } + if (null_value && null_item) res_type= entry->type(); // Don't change type of item + if (null_value) entry->set_null_value(res_type); else if (entry->store(ptr, length, res_type, cs, dv, unsigned_arg)) @@ -5046,13 +5064,13 @@ switch (cached_result_type) { case REAL_RESULT: { - res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal), + res= update_hash(&save_result.vreal,sizeof(save_result.vreal), REAL_RESULT, default_charset(), DERIVATION_IMPLICIT, 0); break; } case INT_RESULT: { - res= update_hash((void*) &save_result.vint, sizeof(save_result.vint), + res= update_hash(&save_result.vint, sizeof(save_result.vint), INT_RESULT, default_charset(), DERIVATION_IMPLICIT, unsigned_flag); break; @@ -5060,10 +5078,10 @@ case STRING_RESULT: { if (!save_result.vstr) // Null value - res= update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin, + res= update_hash(NULL, 0, STRING_RESULT, &my_charset_bin, DERIVATION_IMPLICIT, 0); else - res= update_hash((void*) save_result.vstr->ptr(), + res= update_hash(save_result.vstr->ptr(), save_result.vstr->length(), STRING_RESULT, save_result.vstr->charset(), DERIVATION_IMPLICIT, 0); @@ -5072,10 +5090,10 @@ case DECIMAL_RESULT: { if (!save_result.vdec) // Null value - res= update_hash((void*) 0, 0, DECIMAL_RESULT, &my_charset_bin, + res= update_hash(NULL, 0, DECIMAL_RESULT, &my_charset_bin, DERIVATION_IMPLICIT, 0); else - res= update_hash((void*) save_result.vdec, + res= update_hash(save_result.vdec, sizeof(my_decimal), DECIMAL_RESULT, default_charset(), DERIVATION_IMPLICIT, 0); break; @@ -6239,12 +6257,12 @@ const_item_cache=0; for (uint i=1 ; i < arg_count ; i++) { - item=args[i]; - if (item->type() == Item::REF_ITEM) - args[i]= item= *((Item_ref *)item)->ref; - if (item->type() != Item::FIELD_ITEM) + item= args[i]= args[i]->real_item(); + if (item->type() != Item::FIELD_ITEM || + /* Cannot use FTS index with outer table field */ + (item->used_tables() & OUTER_REF_TABLE_BIT)) { - my_error(ER_WRONG_ARGUMENTS, MYF(0), "AGAINST"); + my_error(ER_WRONG_ARGUMENTS, MYF(0), "MATCH"); return TRUE; } allows_multi_table_search &= diff -Nru mysql-5.6-5.6.27/sql/item_func.h mysql-5.6-5.6.33/sql/item_func.h --- mysql-5.6-5.6.27/sql/item_func.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_func.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ITEM_FUNC_INCLUDED #define ITEM_FUNC_INCLUDED -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -238,7 +238,7 @@ char buf[256]; String str(buf, sizeof(buf), system_charset_info); str.length(0); - print(&str, QT_ORDINARY); + print(&str, QT_NO_DATA_EXPANSION); my_error(ER_DATA_OUT_OF_RANGE, MYF(0), type_name, str.c_ptr_safe()); } inline double raise_float_overflow() @@ -1700,7 +1700,7 @@ String *str_result(String *str); my_decimal *val_decimal_result(my_decimal *); bool is_null_result(); - bool update_hash(void *ptr, uint length, enum Item_result type, + bool update_hash(const void *ptr, uint length, enum Item_result type, const CHARSET_INFO *cs, Derivation dv, bool unsigned_arg); bool send(Protocol *protocol, String *str_arg); void make_field(Send_field *tmp_field); diff -Nru mysql-5.6-5.6.27/sql/item_geofunc.cc mysql-5.6-5.6.33/sql/item_geofunc.cc --- mysql-5.6-5.6.27/sql/item_geofunc.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_geofunc.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -200,7 +200,7 @@ /* String will not move */ str->copy(geom->get_class_info()->m_name.str, geom->get_class_info()->m_name.length, - default_charset()); + &my_charset_latin1); return str; } diff -Nru mysql-5.6-5.6.27/sql/item_geofunc.h mysql-5.6-5.6.33/sql/item_geofunc.h --- mysql-5.6-5.6.27/sql/item_geofunc.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_geofunc.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ITEM_GEOFUNC_INCLUDED #define ITEM_GEOFUNC_INCLUDED -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -186,7 +186,7 @@ if (args[i]->fixed && args[i]->field_type() != MYSQL_TYPE_GEOMETRY) { String str; - args[i]->print(&str, QT_ORDINARY); + args[i]->print(&str, QT_NO_DATA_EXPANSION); str.append('\0'); my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "non geometric", str.ptr()); @@ -519,7 +519,21 @@ Gcalc_function func; Gcalc_scan_iterator scan_it; public: - Item_func_distance(Item *a, Item *b): Item_real_func(a, b) {} + Item_func_distance(Item *a, Item *b): Item_real_func(a, b) + { + /* + Distance could be NULL, if either of the operands are + not geometries. + */ + maybe_null= true; + } + + void fix_length_and_dec() + { + Item_real_func::fix_length_and_dec(); + maybe_null= true; + } + double val_real(); const char *func_name() const { return "st_distance"; } }; diff -Nru mysql-5.6-5.6.27/sql/item.h mysql-5.6-5.6.33/sql/item.h --- mysql-5.6-5.6.27/sql/item.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ITEM_INCLUDED #define ITEM_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -143,6 +143,19 @@ } } }; +/** + Class used as argument to Item::walk() together with used_tables_for_level() +*/ +class Used_tables +{ +public: + explicit Used_tables(st_select_lex *select) : + select(select), used_tables(0) + {} + + st_select_lex *const select; ///< Level for which data is accumulated + table_map used_tables; ///< Accumulated used tables data +}; /*************************************************************************/ @@ -1192,23 +1205,6 @@ /* bit map of tables used by item */ virtual table_map used_tables() const { return (table_map) 0L; } - /** - Return used table information for the level this item is resolved on. - - For fields, this returns the table the item is resolved from. - - For all other items, this behaves like used_tables(). - - @note: Use this function with caution. External calls to this function - should only be made for class objects derived from Item_ident. - Item::resolved_used_tables is for internal use only, in order to - process fields underlying a view column reference. - */ - virtual table_map resolved_used_tables() const - { - // As this is the level this item was resolved on, it cannot be outer: - DBUG_ASSERT(!(used_tables() & OUTER_REF_TABLE_BIT)); - - return used_tables(); - } /* Return table map of tables that can't be NULL tables (tables that are used in a context where if they would contain a NULL row generated @@ -1440,6 +1436,21 @@ virtual bool reset_query_id_processor(uchar *query_id_arg) { return 0; } virtual bool find_item_processor(uchar *arg) { return this == (void *) arg; } virtual bool register_field_in_read_map(uchar *arg) { return 0; } +/** + Return used table information for the specified query block (level). + For a field that is resolved from this query block, return the table number. + For a field that is resolved from a query block outer to the specified one, + return OUTER_REF_TABLE_BIT + + @param[in,out] arg pointer to an instance of class Used_tables, which is + constructed with the query block as argument. + The used tables information is accumulated in the field + used_tables in this class. + + @note This function is used to update used tables information after + merging a query block (a subquery) with its parent. + */ + virtual bool used_tables_for_level(uchar *arg) { return false; } virtual bool inform_item_in_cond_of_tab(uchar *join_tab_index) { return false; } /** Clean up after removing the item from the item tree. @@ -2243,7 +2254,6 @@ type_conversion_status save_in_field(Field *field,bool no_conversions); void save_org_in_field(Field *field); table_map used_tables() const; - virtual table_map resolved_used_tables() const; enum Item_result result_type () const { return field->result_type(); @@ -2278,6 +2288,7 @@ bool add_field_to_set_processor(uchar * arg); bool remove_column_from_bitmap(uchar * arg); bool find_item_in_field_list_processor(uchar *arg); + bool used_tables_for_level(uchar *arg); bool register_field_in_read_map(uchar *arg); bool check_partition_func_processor(uchar *int_arg) {return FALSE;} void cleanup(); @@ -2430,10 +2441,6 @@ class Item_param :public Item, private Settable_routine_parameter { - char cnvbuf[MAX_FIELD_WIDTH]; - String cnvstr; - Item *cnvitem; - public: enum enum_item_param_state { @@ -3249,9 +3256,6 @@ (*ref)->update_used_tables(); } - virtual table_map resolved_used_tables() const - { return (*ref)->resolved_used_tables(); } - table_map not_null_tables() const { /* @@ -4195,11 +4199,6 @@ void set_used_tables(table_map map) { used_table_map= map; } - virtual table_map resolved_used_tables() const - { - return example ? example->resolved_used_tables() : used_table_map; - } - virtual bool allocate(uint i) { return 0; } virtual bool setup(Item *item) { diff -Nru mysql-5.6-5.6.27/sql/item_subselect.cc mysql-5.6-5.6.33/sql/item_subselect.cc --- mysql-5.6-5.6.27/sql/item_subselect.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_subselect.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights +/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -295,6 +295,7 @@ For some reason we cannot use materialization for this IN predicate. Delete all materialization-related objects, and return error. */ + new_engine->cleanup(); delete new_engine; return true; } @@ -1609,6 +1610,27 @@ because these items would be deleted at the end of the statement. Thus one of 'substitution' arguments can be broken in case of PS. + + @todo + Why do we use real_item()/substitutional_item() instead of the plain + left_expr? + Because left_expr might be a rollbackable item, and we fail to properly + rollback all copies of left_expr at end of execution, so we want to + avoid creating copies of left_expr as much as possible, so we use + real_item() instead. + Doing a proper rollback is difficult: the change was registered for the + original item which was the left argument of IN. Then this item was + copied to left_expr, which is copied below to substitution->args[0]. To + do a proper rollback, we would have to restore the content + of both copies as well as the original item. There might be more copies, + if AND items have been constructed. + The same applies to the right expression. + However, using real_item()/substitutional_item() brings its own + problems: for example, we lose information that the item is an outer + reference; the item can thus wrongly be considered for a Keyuse (causing + bug#17766653). + When WL#6570 removes the "rolling back" system, all + real_item()/substitutional_item() in this file should be removed. */ substitution= func->create(left_expr->substitutional_item(), subs); DBUG_RETURN(RES_OK); @@ -1769,6 +1791,9 @@ } else { + /* + Grep for "WL#6570" to see the relevant comment about real_item. + */ Item *orig_item= select_lex->item_list.head()->real_item(); if (select_lex->table_list.elements) @@ -2747,7 +2772,7 @@ if (join->optimize()) { optimize_error= true; - rc= join->error ? join->error : 1; + rc= 1; goto exit; } if (item->engine_changed) @@ -3560,21 +3585,20 @@ - here we initialize only those members that are used by subselect_indexsubquery_engine, so these objects are incomplete. */ - JOIN_TAB * const tmp_tab= new (thd->mem_root) JOIN_TAB; - if (tmp_tab == NULL) + if (!(tab= new (thd->mem_root) JOIN_TAB)) DBUG_RETURN(TRUE); - tmp_tab->table= tmp_table; - tmp_tab->ref.key= 0; /* The only temp table index. */ - tmp_tab->ref.key_length= tmp_key->key_length; - if (!(tmp_tab->ref.key_buff= + tab->table= tmp_table; + tab->ref.key= 0; /* The only temp table index. */ + tab->ref.key_length= tmp_key->key_length; + if (!(tab->ref.key_buff= (uchar*) thd->calloc(ALIGN_SIZE(tmp_key->key_length) * 2)) || - !(tmp_tab->ref.key_copy= + !(tab->ref.key_copy= (store_key**) thd->alloc((sizeof(store_key*) * tmp_key_parts))) || - !(tmp_tab->ref.items= + !(tab->ref.items= (Item**) thd->alloc(sizeof(Item*) * tmp_key_parts))) DBUG_RETURN(TRUE); - uchar *cur_ref_buff= tmp_tab->ref.key_buff; + uchar *cur_ref_buff= tab->ref.key_buff; /* Like semijoin-materialization-lookup (see create_subquery_equalities()), @@ -3618,11 +3642,11 @@ /* Item for the corresponding field from the materialized temp table. */ Item_field *right_col_item; const bool nullable= key_parts[part_no].field->real_maybe_null(); - tmp_tab->ref.items[part_no]= item_in->left_expr->element_index(part_no); + tab->ref.items[part_no]= item_in->left_expr->element_index(part_no); if (!(right_col_item= new Item_field(thd, context, key_parts[part_no].field)) || - !(eq_cond= new Item_func_eq(tmp_tab->ref.items[part_no], + !(eq_cond= new Item_func_eq(tab->ref.items[part_no], right_col_item)) || ((Item_cond_and*)cond)->add(eq_cond)) { @@ -3631,7 +3655,7 @@ DBUG_RETURN(TRUE); } - tmp_tab->ref.key_copy[part_no]= + tab->ref.key_copy[part_no]= new store_key_item(thd, key_parts[part_no].field, /* TODO: the NULL byte is taken into account in @@ -3642,7 +3666,7 @@ cur_ref_buff + (nullable ? 1 : 0), nullable ? cur_ref_buff : 0, key_parts[part_no].length, - tmp_tab->ref.items[part_no]); + tab->ref.items[part_no]); if (nullable && // nullable column in tmp table, // and UNKNOWN should not be interpreted as FALSE !item_in->is_top_level_item()) @@ -3650,26 +3674,23 @@ // It must be the single column, or we wouldn't be here DBUG_ASSERT(tmp_key_parts == 1); // Be ready to search for NULL into inner column: - tmp_tab->ref.null_ref_key= cur_ref_buff; + tab->ref.null_ref_key= cur_ref_buff; mat_table_has_nulls= NEX_UNKNOWN; } else { - tmp_tab->ref.null_ref_key= NULL; + tab->ref.null_ref_key= NULL; mat_table_has_nulls= NEX_IRRELEVANT_OR_FALSE; } cur_ref_buff+= key_parts[part_no].store_length; } - tmp_tab->ref.key_err= 1; - tmp_tab->ref.key_parts= tmp_key_parts; + tab->ref.key_err= 1; + tab->ref.key_parts= tmp_key_parts; if (cond->fix_fields(thd, &cond)) DBUG_RETURN(TRUE); - // Set 'tab' only when function cannot fail, because of assert in destructor - tab= tmp_tab; - /* Create and optimize the JOIN that will be used to materialize the subquery if not yet created. diff -Nru mysql-5.6-5.6.27/sql/item_sum.cc mysql-5.6-5.6.33/sql/item_sum.cc --- mysql-5.6-5.6.27/sql/item_sum.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_sum.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. rights reserved. This program is free software; you can redistribute it and/or modify @@ -3070,7 +3070,7 @@ */ extern "C" -int dump_leaf_key(void* key_arg, element_count count __attribute__((unused)), +int dump_leaf_key(void* key_arg, element_count count MY_ATTRIBUTE((unused)), void* item_arg) { Item_func_group_concat *item= (Item_func_group_concat *) item_arg; @@ -3310,7 +3310,9 @@ ORDER **order_ptr= order; for (uint i= 0; i < arg_count_order; i++) { - (*order_ptr)->item= &args[arg_count_field + i]; + + if ((*order_ptr)->counter_used) + args[arg_count_field + i]= (*order_ptr)->item_ptr; order_ptr++; } DBUG_VOID_RETURN; diff -Nru mysql-5.6-5.6.27/sql/item_sum.h mysql-5.6-5.6.33/sql/item_sum.h --- mysql-5.6-5.6.27/sql/item_sum.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_sum.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef ITEM_SUM_INCLUDED #define ITEM_SUM_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. reserved. reserved. This program is free software; you can redistribute it and/or modify @@ -1417,7 +1417,7 @@ int group_concat_key_cmp_with_order(const void* arg, const void* key1, const void* key2); int dump_leaf_key(void* key_arg, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), void* item_arg); C_MODE_END @@ -1463,7 +1463,7 @@ const void* key1, const void* key2); friend int dump_leaf_key(void* key_arg, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), void* item_arg); public: diff -Nru mysql-5.6-5.6.27/sql/item_timefunc.cc mysql-5.6-5.6.33/sql/item_timefunc.cc --- mysql-5.6-5.6.27/sql/item_timefunc.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_timefunc.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1902,7 +1902,7 @@ time zone. Defines time zone (local) used for whole SYSDATE function. */ bool Item_func_sysdate_local::get_date(MYSQL_TIME *now_time, - uint fuzzy_date __attribute__((unused))) + uint fuzzy_date MY_ATTRIBUTE((unused))) { THD *thd= current_thd; ulonglong tmp= my_micro_time(); @@ -2138,7 +2138,7 @@ bool Item_func_from_unixtime::get_date(MYSQL_TIME *ltime, - uint fuzzy_date __attribute__((unused))) + uint fuzzy_date MY_ATTRIBUTE((unused))) { lldiv_t lld; if (decimals) @@ -2177,7 +2177,7 @@ bool Item_func_convert_tz::get_date(MYSQL_TIME *ltime, - uint fuzzy_date __attribute__((unused))) + uint fuzzy_date MY_ATTRIBUTE((unused))) { my_time_t my_time_tmp; String str; diff -Nru mysql-5.6-5.6.27/sql/item_xmlfunc.cc mysql-5.6-5.6.33/sql/item_xmlfunc.cc --- mysql-5.6-5.6.27/sql/item_xmlfunc.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/item_xmlfunc.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2851,6 +2851,7 @@ null_value= 0; if (!nodeset_func) parse_xpath(args[1]); + tmp_value.set("", 0, pxml.charset()); if (!nodeset_func || !(res= args[0]->val_str(str)) || !parse_xml(res, &pxml) || diff -Nru mysql-5.6-5.6.27/sql/log.cc mysql-5.6-5.6.33/sql/log.cc --- mysql-5.6-5.6.27/sql/log.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ using std::min; using std::max; -/* max size of the log message */ +/* max size of log messages (error log, plugins' logging, general log) */ #define MAX_LOG_BUFFER_SIZE 1024 #define MAX_TIME_SIZE 32 @@ -1494,6 +1494,78 @@ } +bool is_valid_log_name(const char *name, size_t len) +{ + if (len > 3) + { + const char *tail= name + len - 4; + if (my_strcasecmp(system_charset_info, tail, ".ini") == 0 || + my_strcasecmp(system_charset_info, tail, ".cnf") == 0) + { + return false; + } + } + return true; +} + + +/** + Get the real log file name, and possibly reopen file. + + Use realpath() to get the path with symbolic links + expanded. Then, close the file, and reopen the real path using the + O_NOFOLLOW flag. This will reject following symbolic links. + + @param file File descriptor. + @param log_file_key Key for P_S instrumentation. + @param open_flags Flags to use for opening the file. + @param opened_file_name Name of the open fd. + + @retval file descriptor to open file with 'real_file_name', or '-1' + in case of errors. +*/ + +#ifndef _WIN32 +static File mysql_file_real_name_reopen(File file, +#ifdef HAVE_PSI_INTERFACE + PSI_file_key log_file_key, +#endif + int open_flags, + const char *opened_file_name) +{ + DBUG_ASSERT(file); + DBUG_ASSERT(opened_file_name); + + /* Buffer for realpath must have capacity for PATH_MAX. */ + char real_file_name[PATH_MAX]; + + /* Get realpath, validate, open realpath with O_NOFOLLOW. */ + if (realpath(opened_file_name, real_file_name) == NULL) + { + (void) mysql_file_close(file, MYF(0)); + return -1; + } + + if (mysql_file_close(file, MYF(0))) + return -1; + + if (strlen(real_file_name) > FN_REFLEN) + return -1; + + if (!is_valid_log_name(real_file_name, strlen(real_file_name))) + { + sql_print_error("Invalid log file name after expanding symlinks: '%s'", + real_file_name); + return -1; + } + + return mysql_file_open(log_file_key, real_file_name, + open_flags | O_NOFOLLOW, + MYF(MY_WME | ME_WAITTANG)); +} +#endif // _WIN32 + + /* Open a (new) log file. @@ -1564,6 +1636,18 @@ MYF(MY_WME | ME_WAITTANG))) < 0) goto err; +#ifndef _WIN32 + /* Reopen and validate path. */ + if ((log_type_arg == LOG_UNKNOWN || log_type_arg == LOG_NORMAL) && + (file= mysql_file_real_name_reopen(file, +#ifdef HAVE_PSI_INTERFACE + log_file_key, +#endif + open_flags, + log_file_name)) < 0) + goto err; +#endif // _WIN32 + if ((pos= mysql_file_tell(file, MYF(MY_WME))) == MY_FILEPOS_ERROR) { if (my_errno == ESPIPE) @@ -1607,20 +1691,9 @@ err: if (log_type == LOG_BIN && binlog_error_action == ABORT_SERVER) { - THD *thd= current_thd; - /* - On fatal error when code enters here we should forcefully clear the - previous errors so that a new critical error message can be pushed - to the client side. - */ - thd->clear_error(); - my_error(ER_BINLOG_LOGGING_IMPOSSIBLE, MYF(0), "Either disk is full or " - "file system is read only while opening the binlog. Aborting the " - "server"); - sql_print_error("Either disk is full or file system is read only while " - "opening the binlog. Aborting the server"); - thd->protocol->end_statement(); - _exit(EXIT_FAILURE); + exec_binlog_error_action_abort("Either disk is full or file system is read " + "only while opening the binlog. Aborting the" + " server."); } else sql_print_error("Could not open %s for logging (error %d). " @@ -2352,7 +2425,7 @@ */ int vprint_msg_to_log(enum loglevel level, const char *format, va_list args) { - char buff[1024]; + char buff[MAX_LOG_BUFFER_SIZE]; size_t length; DBUG_ENTER("vprint_msg_to_log"); @@ -2411,7 +2484,7 @@ int my_plugin_log_message(MYSQL_PLUGIN *plugin_ptr, plugin_log_level level, const char *format, ...) { - char format2[MYSQL_ERRMSG_SIZE]; + char format2[MAX_LOG_BUFFER_SIZE]; int ret; loglevel lvl; struct st_plugin_int *plugin = static_cast (*plugin_ptr); @@ -2958,3 +3031,48 @@ sql_print_information("Please restart mysqld without --tc-heuristic-recover"); return 1; } + +/** + When a fatal error occurs due to which binary logging becomes impossible and + the user specified binlog_error_action= ABORT_SERVER the following function is + invoked. This function pushes the appropriate error message to client and logs + the same to server error log and then aborts the server. + + @param err_string Error string which specifies the exact error + message from the caller. + + @retval + none +*/ +void exec_binlog_error_action_abort(const char* err_string) +{ + THD *thd= current_thd; + /* + When the code enters here it means that there was an error at higher layer + and my_error function could have been invoked to let the client know what + went wrong during the execution. + + But these errors will not let the client know that the server is going to + abort. Even if we add an additional my_error function call at this point + client will be able to see only the first error message that was set + during the very first invocation of my_error function call. + + The advantage of having multiple my_error function calls are visible when + the server is up and running and user issues SHOW WARNINGS or SHOW ERROR + calls. In this special scenario server will be immediately aborted and + user will not be able execute the above SHOW commands. + + Hence we clear the previous errors and push one critical error message to + clients. + */ + thd->clear_error(); + /* + Adding ME_NOREFRESH flag will ensure that the error is sent to both + client and to the server error log as well. + */ + my_error(ER_BINLOG_LOGGING_IMPOSSIBLE, MYF(ME_NOREFRESH + ME_FATALERROR), + err_string); + thd->protocol->end_statement(); + abort(); +} + diff -Nru mysql-5.6-5.6.27/sql/log_event.cc mysql-5.6-5.6.33/sql/log_event.cc --- mysql-5.6-5.6.27/sql/log_event.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log_event.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -351,7 +351,7 @@ Ignore error code specified on command line. */ -inline int ignored_error_code(int err_code) +int ignored_error_code(int err_code) { #ifdef HAVE_NDB_BINLOG /* @@ -1740,7 +1740,7 @@ void Log_event::print_header(IO_CACHE* file, PRINT_EVENT_INFO* print_event_info, - bool is_more __attribute__((unused))) + bool is_more MY_ATTRIBUTE((unused))) { char llbuff[22]; my_off_t hexdump_from= print_event_info->hexdump_from; @@ -1862,17 +1862,16 @@ @param[in] file IO cache @param[in] prt Pointer to string @param[in] length String length - @param[in] esc_all Whether to escape all characters */ static void -my_b_write_quoted(IO_CACHE *file, const uchar *ptr, uint length, bool esc_all) +my_b_write_quoted(IO_CACHE *file, const uchar *ptr, uint length) { const uchar *s; my_b_printf(file, "'"); for (s= ptr; length > 0 ; s++, length--) { - if (*s > 0x1F && !esc_all) + if (*s > 0x1F && *s != '\'' && *s != '\\') my_b_write(file, s, 1); else { @@ -1884,14 +1883,6 @@ my_b_printf(file, "'"); } - -static void -my_b_write_quoted(IO_CACHE *file, const uchar *ptr, uint length) -{ - my_b_write_quoted(file, ptr, length, false); -} - - /** Prints a bit string to io cache in format b'1010'. @@ -2733,7 +2724,7 @@ { if (!rli->curr_group_seen_gtid && !rli->curr_group_seen_begin) { - ulong gaq_idx __attribute__((unused)); + ulong gaq_idx MY_ATTRIBUTE((unused)); rli->mts_groups_assigned++; rli->curr_group_isolated= FALSE; @@ -3761,7 +3752,8 @@ cmd_can_generate_row_events= cmd_must_go_to_trx_cache= TRUE; break; default: - cmd_can_generate_row_events= sqlcom_can_generate_row_events(thd); + cmd_can_generate_row_events= + sqlcom_can_generate_row_events(thd->lex->sql_command); break; } } @@ -3769,7 +3761,8 @@ if (cmd_can_generate_row_events) { cmd_must_go_to_trx_cache= cmd_must_go_to_trx_cache || using_trans; - if (cmd_must_go_to_trx_cache || stmt_has_updated_trans_table(thd) || + if (cmd_must_go_to_trx_cache || + stmt_has_updated_trans_table(thd->transaction.stmt.ha_list) || thd->lex->is_mixed_stmt_unsafe(thd->in_multi_stmt_transaction_mode(), thd->variables.binlog_direct_non_trans_update, trans_has_updated_trans_table(thd), @@ -3942,7 +3935,7 @@ slave_proxy_id= thread_id = uint4korr(buf + Q_THREAD_ID_OFFSET); exec_time = uint4korr(buf + Q_EXEC_TIME_OFFSET); - db_len = (uint)buf[Q_DB_LEN_OFFSET]; // TODO: add a check of all *_len vars + db_len = (uchar)buf[Q_DB_LEN_OFFSET]; // TODO: add a check of all *_len vars error_code = uint2korr(buf + Q_ERR_CODE_OFFSET); /* @@ -11100,6 +11093,7 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli) { DBUG_ENTER("Rows_log_event::do_apply_event(Relay_log_info*)"); + TABLE *table= NULL; int error= 0; if (opt_bin_log) @@ -11177,28 +11171,33 @@ uint actual_error= thd->get_stmt_da()->sql_errno(); if (thd->is_slave_error || thd->is_fatal_error) { - /* - Error reporting borrowed from Query_log_event with many excessive - simplifications. - We should not honour --slave-skip-errors at this point as we are - having severe errors which should not be skiped. - */ - rli->report(ERROR_LEVEL, actual_error, - "Error executing row event: '%s'", - (actual_error ? thd->get_stmt_da()->message() : - "unexpected success or fatal error")); - thd->is_slave_error= 1; + if (ignored_error_code(actual_error)) + { + if (log_warnings > 1) + rli->report(WARNING_LEVEL, actual_error, + "Error executing row event: '%s'", + (actual_error ? thd->get_stmt_da()->message() : + "unexpected success or fatal error")); + thd->get_stmt_da()->clear_warning_info(thd->query_id); + clear_all_errors(thd, const_cast(rli)); + error= 0; + goto end; + } + else + { + rli->report(ERROR_LEVEL, actual_error, + "Error executing row event: '%s'", + (actual_error ? thd->get_stmt_da()->message() : + "unexpected success or fatal error")); + thd->is_slave_error= 1; + const_cast(rli)->slave_close_thread_tables(thd); + DBUG_RETURN(actual_error); + } } - const_cast(rli)->slave_close_thread_tables(thd); - DBUG_RETURN(actual_error); } - /* When the open and locking succeeded, we check all tables to ensure that they still have the correct type. - - We can use a down cast here since we know that every table added - to the tables_to_lock is a RPL_TABLE_LIST. */ { @@ -11217,10 +11216,37 @@ NOTE: The base tables are added here are removed when close_thread_tables is called. */ - RPL_TABLE_LIST *ptr= rli->tables_to_lock; - for (uint i= 0 ; ptr && (i < rli->tables_to_lock_count); - ptr= static_cast(ptr->next_global), i++) + TABLE_LIST *table_list_ptr= rli->tables_to_lock; + for (uint i=0 ; table_list_ptr && (i < rli->tables_to_lock_count); + table_list_ptr= table_list_ptr->next_global, i++) { + /* + Below if condition takes care of skipping base tables that + make up the MERGE table (which are added by open_tables() + call). They are added next to the merge table in the list. + For eg: If RPL_TABLE_LIST is t3->t1->t2 (where t1 and t2 + are base tables for merge table 't3'), open_tables will modify + the list by adding t1 and t2 again immediately after t3 in the + list (*not at the end of the list*). New table_to_lock list will + look like t3->t1'->t2'->t1->t2 (where t1' and t2' are TABLE_LIST + objects added by open_tables() call). There is no flag(or logic) in + open_tables() that can skip adding these base tables to the list. + So the logic here should take care of skipping them. + + tables_to_lock_count logic will take care of skipping base tables + that are added at the end of the list. + For eg: If RPL_TABLE_LIST is t1->t2->t3, open_tables will modify + the list into t1->t2->t3->t1'->t2'. t1' and t2' will be skipped + because tables_to_lock_count logic in this for loop. + */ + if (table_list_ptr->parent_l) + continue; + /* + We can use a down cast here since we know that every table added + to the tables_to_lock is a RPL_TABLE_LIST (or child table which is + skipped above). + */ + RPL_TABLE_LIST *ptr= static_cast(table_list_ptr); DBUG_ASSERT(ptr->m_tabledef_valid); TABLE *conv_table; if (!ptr->m_tabledef.compatible_with(thd, const_cast(rli), @@ -11229,13 +11255,18 @@ DBUG_PRINT("debug", ("Table: %s.%s is not compatible with master", ptr->table->s->db.str, ptr->table->s->table_name.str)); - /* - We should not honour --slave-skip-errors at this point as we are - having severe errors which should not be skiped. - */ - thd->is_slave_error= 1; - const_cast(rli)->slave_close_thread_tables(thd); - DBUG_RETURN(ERR_BAD_TABLE_DEF); + if (thd->is_slave_error) + { + const_cast(rli)->slave_close_thread_tables(thd); + DBUG_RETURN(ERR_BAD_TABLE_DEF); + } + else + { + thd->get_stmt_da()->clear_warning_info(thd->query_id); + clear_all_errors(thd, const_cast(rli)); + error= 0; + goto end; + } } DBUG_PRINT("debug", ("Table: %s.%s is compatible with master" " - conv_table: %p", @@ -11261,15 +11292,22 @@ */ TABLE_LIST *ptr= rli->tables_to_lock; for (uint i=0 ; ptr && (i < rli->tables_to_lock_count); ptr= ptr->next_global, i++) + { + /* + Please see comment in above 'for' loop to know the reason + for this if condition + */ + if (ptr->parent_l) + continue; const_cast(rli)->m_table_map.set_table(ptr->table_id, ptr->table); + } #ifdef HAVE_QUERY_CACHE query_cache.invalidate_locked_for_write(rli->tables_to_lock); #endif } - TABLE* - table= + table= m_table= const_cast(rli)->m_table_map.get_table(m_table_id); DBUG_PRINT("debug", ("m_table: 0x%lx, m_table_id: %llu", (ulong) m_table, @@ -11502,16 +11540,29 @@ thd->is_slave_error= 1; DBUG_RETURN(error); } - +end: if (get_flags(STMT_END_F)) { if((error= rows_event_stmt_cleanup(rli, thd))) - slave_rows_error_report(ERROR_LEVEL, - thd->is_error() ? 0 : error, - rli, thd, table, - get_type_str(), - const_cast(rli)->get_rpl_log_name(), - (ulong) log_pos); + { + if (table) + slave_rows_error_report(ERROR_LEVEL, + thd->is_error() ? 0 : error, + rli, thd, table, + get_type_str(), + const_cast(rli)->get_rpl_log_name(), + (ulong) log_pos); + else + { + rli->report(ERROR_LEVEL, + thd->is_error() ? thd->get_stmt_da()->sql_errno() : error, + "Error in cleaning up after an event of type:%s; %s; the group" + " log file/position: %s %lu", get_type_str(), + thd->is_error() ? thd->get_stmt_da()->message() : "unexpected error", + const_cast(rli)->get_rpl_log_name(), + (ulong) log_pos); + } + } /* We are at end of the statement (STMT_END_F flag), lets clean the memory which was used from thd's mem_root now. This needs to be done only if we are here in SQL thread context. @@ -11553,6 +11604,11 @@ static int rows_event_stmt_cleanup(Relay_log_info const *rli, THD * thd) { + DBUG_EXECUTE_IF("simulate_rows_event_cleanup_failure", + { + my_error(ER_ERROR_DURING_COMMIT, MYF(0), 1); + return (1); + }); int error; { /* @@ -11609,6 +11665,12 @@ thd->reset_current_stmt_binlog_format_row(); const_cast(rli)->cleanup_context(thd, 0); + + /* + Clean sql_command value + */ + thd->lex->sql_command= SQLCOM_END; + } return error; } @@ -12444,6 +12506,16 @@ if (get_flags(STMT_END_F)) status_var_increment(thd->status_var.com_stat[SQLCOM_INSERT]); + /* + Let storage engines treat this event as an INSERT command. + + Set 'sql_command' as SQLCOM_INSERT after the tables are locked. + When locking the tables, it should be SQLCOM_END. + THD::decide_binlog_format which is called from "lock tables" + assumes that row_events will have 'sql_command' as SQLCOM_END. + */ + thd->lex->sql_command= SQLCOM_INSERT; + /** todo: to introduce a property for the event (handler?) which forces applying the event in the replace (idempotent) fashion. @@ -12948,6 +13020,17 @@ */ if (get_flags(STMT_END_F)) status_var_increment(thd->status_var.com_stat[SQLCOM_DELETE]); + + /* + Let storage engines treat this event as a DELETE command. + + Set 'sql_command' as SQLCOM_UPDATE after the tables are locked. + When locking the tables, it should be SQLCOM_END. + THD::decide_binlog_format which is called from "lock tables" + assumes that row_events will have 'sql_command' as SQLCOM_END. + */ + thd->lex->sql_command= SQLCOM_DELETE; + error= row_operations_scan_and_key_setup(); DBUG_RETURN(error); @@ -13057,6 +13140,17 @@ */ if (get_flags(STMT_END_F)) status_var_increment(thd->status_var.com_stat[SQLCOM_UPDATE]); + + /* + Let storage engines treat this event as an UPDATE command. + + Set 'sql_command' as SQLCOM_UPDATE after the tables are locked. + When locking the tables, it should be SQLCOM_END. + THD::decide_binlog_format which is called from "lock tables" + assumes that row_events will have 'sql_command' as SQLCOM_END. + */ + thd->lex->sql_command= SQLCOM_UPDATE; + error= row_operations_scan_and_key_setup(); DBUG_RETURN(error); diff -Nru mysql-5.6-5.6.27/sql/log_event.h mysql-5.6-5.6.33/sql/log_event.h --- mysql-5.6-5.6.27/sql/log_event.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log_event.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -53,7 +53,9 @@ class String; typedef ulonglong sql_mode_t; typedef struct st_db_worker_hash_entry db_worker_hash_entry; - +#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) +int ignored_error_code(int err_code); +#endif #define PREFIX_SQL_LOAD "SQL_LOAD-" /** @@ -1311,7 +1313,7 @@ } virtual bool write_data_header(IO_CACHE* file) { return 0; } - virtual bool write_data_body(IO_CACHE* file __attribute__((unused))) + virtual bool write_data_body(IO_CACHE* file MY_ATTRIBUTE((unused))) { return 0; } inline time_t get_time() { @@ -4520,7 +4522,7 @@ static bool binlog_row_logging_function(THD *thd, TABLE *table, bool is_transactional, const uchar *before_record - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *after_record) { return thd->binlog_write_row(table, is_transactional, @@ -4660,7 +4662,7 @@ bool is_transactional, const uchar *before_record, const uchar *after_record - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { return thd->binlog_delete_row(table, is_transactional, before_record, NULL); diff -Nru mysql-5.6-5.6.27/sql/log_event_old.cc mysql-5.6-5.6.33/sql/log_event_old.cc --- mysql-5.6-5.6.27/sql/log_event_old.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log_event_old.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -126,16 +126,25 @@ /* When the open and locking succeeded, we check all tables to ensure that they still have the correct type. - - We can use a down cast here since we know that every table added - to the tables_to_lock is a RPL_TABLE_LIST. */ { - RPL_TABLE_LIST *ptr= rli->tables_to_lock; - for (uint i= 0 ; ptr&& (i< rli->tables_to_lock_count); - ptr= static_cast(ptr->next_global), i++) + TABLE_LIST *table_list_ptr= rli->tables_to_lock; + for (uint i=0 ; table_list_ptr&& (i< rli->tables_to_lock_count); + table_list_ptr= table_list_ptr->next_global, i++) { + /* + Please see comment in log_event.cc-Rows_log_event::do_apply_event() + function for the explanation of the below if condition + */ + if (table_list_ptr->parent_l) + continue; + /* + We can use a down cast here since we know that every table added + to the tables_to_lock is a RPL_TABLE_LIST(or child table which is + skipped above). + */ + RPL_TABLE_LIST *ptr=static_cast(table_list_ptr); DBUG_ASSERT(ptr->m_tabledef_valid); TABLE *conv_table; if (!ptr->m_tabledef.compatible_with(thd, const_cast(rli), @@ -169,7 +178,15 @@ */ TABLE_LIST *ptr= rli->tables_to_lock; for (uint i=0; ptr && (i < rli->tables_to_lock_count); ptr= ptr->next_global, i++) + { + /* + Please see comment in log_event.cc-Rows_log_event::do_apply_event() + function for the explanation of the below if condition + */ + if (ptr->parent_l) + continue; const_cast(rli)->m_table_map.set_table(ptr->table_id, ptr->table); + } #ifdef HAVE_QUERY_CACHE query_cache.invalidate_locked_for_write(rli->tables_to_lock); #endif @@ -1538,16 +1555,25 @@ /* When the open and locking succeeded, we check all tables to ensure that they still have the correct type. - - We can use a down cast here since we know that every table added - to the tables_to_lock is a RPL_TABLE_LIST. */ { - RPL_TABLE_LIST *ptr= rli->tables_to_lock; - for (uint i= 0 ; ptr&& (i< rli->tables_to_lock_count); - ptr= static_cast(ptr->next_global), i++) + TABLE_LIST *table_list_ptr= rli->tables_to_lock; + for (uint i=0; table_list_ptr&& (i< rli->tables_to_lock_count); + table_list_ptr= static_cast(table_list_ptr->next_global), i++) { + /* + Please see comment in log_event.cc-Rows_log_event::do_apply_event() + function for the explanation of the below if condition + */ + if (table_list_ptr->parent_l) + continue; + /* + We can use a down cast here since we know that every table added + to the tables_to_lock is a RPL_TABLE_LIST (or child table which is + skipped above). + */ + RPL_TABLE_LIST *ptr=static_cast(table_list_ptr); TABLE *conv_table; if (ptr->m_tabledef.compatible_with(thd, const_cast(rli), ptr->table, &conv_table)) diff -Nru mysql-5.6-5.6.27/sql/log_event_old.h mysql-5.6-5.6.33/sql/log_event_old.h --- mysql-5.6-5.6.27/sql/log_event_old.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log_event_old.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -369,7 +369,7 @@ static bool binlog_row_logging_function(THD *thd, TABLE *table, bool is_transactional, const uchar *before_record - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *after_record) { return thd->binlog_write_row(table, is_transactional, @@ -518,7 +518,7 @@ bool is_transactional, const uchar *before_record, const uchar *after_record - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { return thd->binlog_delete_row(table, is_transactional, before_record, NULL); diff -Nru mysql-5.6-5.6.27/sql/log.h mysql-5.6-5.6.33/sql/log.h --- mysql-5.6-5.6.27/sql/log.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/log.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -549,6 +549,7 @@ BINLOG_FORMAT_UNSPEC=3 ///< thd_binlog_format() returns it when binlog is closed }; +void exec_binlog_error_action_abort(const char* err_string); int query_error_code(THD *thd, bool not_killed); uint purge_log_get_error_code(int res); @@ -577,6 +578,16 @@ char *make_log_name(char *buff, const char *name, const char* log_ext); +/** + Check given log name against certain blacklisted names/extensions. + + @param name Log name to check + @param len Length of log name + + @returns true if name is valid, false otherwise. +*/ +bool is_valid_log_name(const char *name, size_t len); + extern LOGGER logger; #endif /* LOG_H */ diff -Nru mysql-5.6-5.6.27/sql/mdl.cc mysql-5.6-5.6.33/sql/mdl.cc --- mysql-5.6-5.6.27/sql/mdl.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/mdl.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -94,7 +94,7 @@ { int i; int count; - PSI_stage_info *info __attribute__((unused)); + PSI_stage_info *info MY_ATTRIBUTE((unused)); count= array_elements(MDL_key::m_namespace_to_wait_state_name); for (i= 0; ikey.length(); diff -Nru mysql-5.6-5.6.27/sql/mf_iocache.cc mysql-5.6-5.6.33/sql/mf_iocache.cc --- mysql-5.6-5.6.27/sql/mf_iocache.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/mf_iocache.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -49,7 +49,7 @@ int _my_b_net_read(register IO_CACHE *info, uchar *Buffer, - size_t Count __attribute__((unused))) + size_t Count MY_ATTRIBUTE((unused))) { ulong read_length; NET *net= &(current_thd)->net; diff -Nru mysql-5.6-5.6.27/sql/mysqld.cc mysql-5.6-5.6.33/sql/mysqld.cc --- mysql-5.6-5.6.27/sql/mysqld.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/mysqld.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -1265,6 +1265,7 @@ LOCK_connection_count. */ uint connection_count= 0; +mysql_cond_t COND_connection_count; /* Function declarations */ @@ -1302,7 +1303,7 @@ static void clean_up_mutexes(void); static void wait_for_signal_thread_to_end(void); static void create_pid_file(); -static void mysqld_exit(int exit_code) __attribute__((noreturn)); +static void mysqld_exit(int exit_code) MY_ATTRIBUTE((noreturn)); #endif static void delete_pid_file(myf flags); static void end_ssl(); @@ -1544,6 +1545,17 @@ } mysql_mutex_unlock(&LOCK_thread_count); + /* + Connection threads might take a little while to go down after removing from + global thread list. Give it some time. + */ + mysql_mutex_lock(&LOCK_connection_count); + while (connection_count > 0) + { + mysql_cond_wait(&COND_connection_count, &LOCK_connection_count); + } + mysql_mutex_unlock(&LOCK_connection_count); + close_active_mi(); DBUG_PRINT("quit",("close_connections thread")); DBUG_VOID_RETURN; @@ -1703,7 +1715,7 @@ #if defined(USE_ONE_SIGNAL_HAND) -pthread_handler_t kill_server_thread(void *arg __attribute__((unused))) +pthread_handler_t kill_server_thread(void *arg MY_ATTRIBUTE((unused))) { my_thread_init(); // Initialize new thread kill_server(0); @@ -2020,6 +2032,7 @@ mysql_cond_destroy(&COND_thread_cache); mysql_cond_destroy(&COND_flush_thread_cache); mysql_cond_destroy(&COND_manager); + mysql_cond_destroy(&COND_connection_count); } #endif /*EMBEDDED_LIBRARY*/ @@ -2606,7 +2619,7 @@ /** Called when a thread is aborted. */ /* ARGSUSED */ -extern "C" sig_handler end_thread_signal(int sig __attribute__((unused))) +extern "C" sig_handler end_thread_signal(int sig MY_ATTRIBUTE((unused))) { THD *thd=current_thd; my_safe_printf_stderr("end_thread_signal %p", thd); @@ -2642,6 +2655,8 @@ { mysql_mutex_lock(&LOCK_connection_count); --connection_count; + if (connection_count == 0) + mysql_cond_signal(&COND_connection_count); mysql_mutex_unlock(&LOCK_connection_count); } @@ -2749,8 +2764,8 @@ DBUG_PRINT("info", ("thd %p block_pthread %d", thd, (int) block_pthread)); thd->release_resources(); - dec_connection_count(); remove_global_thread(thd); + dec_connection_count(); if (kill_blocked_pthreads_flag) { // Do not block if we are about to shut down @@ -2809,7 +2824,7 @@ @todo One should have to fix that thr_alarm know about this thread too. */ -extern "C" sig_handler abort_thread(int sig __attribute__((unused))) +extern "C" sig_handler abort_thread(int sig MY_ATTRIBUTE((unused))) { THD *thd=current_thd; DBUG_ENTER("abort_thread"); @@ -3120,7 +3135,7 @@ /** This threads handles all signals and alarms. */ /* ARGSUSED */ -pthread_handler_t signal_hand(void *arg __attribute__((unused))) +pthread_handler_t signal_hand(void *arg MY_ATTRIBUTE((unused))) { sigset_t set; int sig; @@ -4096,6 +4111,22 @@ if (!opt_slow_logname || !*opt_slow_logname) opt_slow_logname= make_default_log_name(slow_logname_path, "-slow.log"); + if (opt_logname && + !is_valid_log_name(opt_logname, strlen(opt_logname))) + { + sql_print_error("Invalid value for --general_log_file: %s", + opt_logname); + return 1; + } + + if (opt_slow_logname && + !is_valid_log_name(opt_slow_logname, strlen(opt_slow_logname))) + { + sql_print_error("Invalid value for --slow_query_log_file: %s", + opt_slow_logname); + return 1; + } + #if defined(ENABLED_DEBUG_SYNC) /* Initialize the debug sync facility. See debug_sync.cc. */ if (debug_sync_init()) @@ -4241,6 +4272,7 @@ mysql_rwlock_init(key_rwlock_LOCK_sys_init_slave, &LOCK_sys_init_slave); mysql_rwlock_init(key_rwlock_LOCK_grant, &LOCK_grant); mysql_cond_init(key_COND_thread_count, &COND_thread_count, NULL); + mysql_cond_init(key_COND_connection_count, &COND_connection_count, NULL); mysql_cond_init(key_COND_thread_cache, &COND_thread_cache, NULL); mysql_cond_init(key_COND_flush_thread_cache, &COND_flush_thread_cache, NULL); mysql_cond_init(key_COND_manager, &COND_manager, NULL); @@ -4508,7 +4540,7 @@ /* load_defaults require argv[0] is not null */ char **argv= &name; int argc= 1; - if (!check_file_permissions(fname)) + if (!check_file_permissions(fname, false)) { /* Found a world writable file hence removing it as it is dangerous to write @@ -4539,6 +4571,24 @@ sql_print_error("The server_uuid stored in auto.cnf file is not a valid UUID."); goto err; } + /* + Uuid::is_valid() cannot do strict check on the length as it will be + called by GTID::is_valid() as well (GTID = UUID:seq_no). We should + explicitly add the *length check* here in this function. + + If UUID length is less than '36' (UUID_LENGTH), that error case would have + got caught in above is_valid check. The below check is to make sure that + length is not greater than UUID_LENGTH i.e., there are no extra characters + (Garbage) at the end of the valid UUID. + */ + if (strlen(uuid) > UUID_LENGTH) + { + sql_print_error("Garbage characters found at the end of the server_uuid " + "value in auto.cnf file. It should be of length '%d' " + "(UUID_LENGTH). Clear it and restart the server. ", + UUID_LENGTH); + goto err; + } strcpy(server_uuid, uuid); } else @@ -4665,9 +4715,10 @@ proc_info_hook= set_thd_stage_info; -#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE /* - Parsing the performance schema command line option may have reported + Parsing the performance schema command line option and + adjusting the values for options such as "open_files_limit", + "max_connections", and "table_cache_size" may have reported warnings/information messages. Now that the logger is finally available, and redirected to the proper file when the --log--error option is used, @@ -4675,7 +4726,6 @@ */ buffered_logs.print(); buffered_logs.cleanup(); -#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */ /* Now that the logger is available, redirect character set @@ -6077,6 +6127,8 @@ mysql_mutex_lock(&LOCK_connection_count); --connection_count; + if (connection_count == 0) + mysql_cond_signal(&COND_connection_count); mysql_mutex_unlock(&LOCK_connection_count); statistic_increment(aborted_connects,&LOCK_status); @@ -8366,7 +8418,7 @@ my_bool mysqld_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch(optid) { @@ -8382,6 +8434,7 @@ break; case 'b': strmake(mysql_home,argument,sizeof(mysql_home)-1); + mysql_home_ptr= mysql_home; break; case 'C': if (default_collation_name == compiled_default_collation_name) @@ -9135,6 +9188,40 @@ } +/** + Test a file path whether it is same as mysql data directory path. + + @param path null terminated character string + + @return + @retval TRUE The path is different from mysql data directory. + @retval FALSE The path is same as mysql data directory. +*/ +bool is_mysql_datadir_path(const char *path) +{ + if (path == NULL) + return false; + + char mysql_data_dir[FN_REFLEN], path_dir[FN_REFLEN]; + convert_dirname(path_dir, path, NullS); + convert_dirname(mysql_data_dir, mysql_unpacked_real_data_home, NullS); + size_t mysql_data_home_len= dirname_length(mysql_data_dir); + size_t path_len = dirname_length(path_dir); + + if (path_len < mysql_data_home_len) + return true; + + if (!lower_case_file_system) + return(memcmp(mysql_data_dir, path_dir, mysql_data_home_len)); + + return(files_charset_info->coll->strnncoll(files_charset_info, + (uchar *) path_dir, path_len, + (uchar *) mysql_data_dir, + mysql_data_home_len, + TRUE)); + +} + static int fix_paths(void) { char buff[FN_REFLEN],*pos; @@ -9535,7 +9622,8 @@ key_relay_log_info_sleep_cond, key_cond_slave_parallel_pend_jobs, key_cond_slave_parallel_worker, key_TABLE_SHARE_cond, key_user_level_lock_cond, - key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; + key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache, + key_COND_connection_count; PSI_cond_key key_RELAYLOG_update_cond; PSI_cond_key key_BINLOG_COND_done; PSI_cond_key key_RELAYLOG_COND_done; @@ -9581,7 +9669,8 @@ { &key_COND_thread_count, "COND_thread_count", PSI_FLAG_GLOBAL}, { &key_COND_thread_cache, "COND_thread_cache", PSI_FLAG_GLOBAL}, { &key_COND_flush_thread_cache, "COND_flush_thread_cache", PSI_FLAG_GLOBAL}, - { &key_gtid_ensure_index_cond, "Gtid_state", PSI_FLAG_GLOBAL} + { &key_gtid_ensure_index_cond, "Gtid_state", PSI_FLAG_GLOBAL}, + { &key_COND_connection_count, "COND_connection_count", PSI_FLAG_GLOBAL} }; PSI_thread_key key_thread_bootstrap, key_thread_delayed_insert, diff -Nru mysql-5.6-5.6.27/sql/mysqld.h mysql-5.6-5.6.33/sql/mysqld.h --- mysql-5.6-5.6.27/sql/mysqld.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/mysqld.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -73,6 +73,7 @@ void kill_blocked_pthreads(); void refresh_status(THD *thd); bool is_secure_file_path(char *path); +bool is_mysql_datadir_path(const char *path); void dec_connection_count(); // These are needed for unit testing. @@ -382,7 +383,8 @@ key_relay_log_info_sleep_cond, key_cond_slave_parallel_pend_jobs, key_cond_slave_parallel_worker, key_TABLE_SHARE_cond, key_user_level_lock_cond, - key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; + key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache, + key_COND_connection_count; extern PSI_cond_key key_BINLOG_COND_done; extern PSI_cond_key key_RELAYLOG_COND_done; extern PSI_cond_key key_RELAYLOG_update_cond; @@ -589,6 +591,7 @@ LOCK_prepared_stmt_count, LOCK_error_messages, LOCK_connection_count, LOCK_sql_slave_skip_counter, LOCK_slave_net_timeout; #ifdef HAVE_OPENSSL +extern char* des_key_file; extern mysql_mutex_t LOCK_des_key_file; #endif extern mysql_mutex_t LOCK_server_started; @@ -693,7 +696,13 @@ /// Don't print a database if it's equal to the connection's database QT_NO_DEFAULT_DB= (1 << 3), /// When printing a derived table, don't print its expression, only alias - QT_DERIVED_TABLE_ONLY_ALIAS= (1 << 4) + QT_DERIVED_TABLE_ONLY_ALIAS= (1 << 4), + /** + If an expression is constant, print the expression, not the value + it evaluates to. Should be used for error messages, so that they + don't reveal values. + */ + QT_NO_DATA_EXPANSION= (1 << 9) }; /* query_id */ @@ -701,10 +710,10 @@ extern query_id_t global_query_id; extern my_atomic_rwlock_t global_query_id_lock; -void unireg_end(void) __attribute__((noreturn)); +void unireg_end(void) MY_ATTRIBUTE((noreturn)); /* increment query_id and return it. */ -inline __attribute__((warn_unused_result)) query_id_t next_query_id() +inline MY_ATTRIBUTE((warn_unused_result)) query_id_t next_query_id() { query_id_t id; my_atomic_rwlock_wrlock(&global_query_id_lock); @@ -717,7 +726,7 @@ TODO: Replace this with an inline function. */ #ifndef EMBEDDED_LIBRARY -extern "C" void unireg_abort(int exit_code) __attribute__((noreturn)); +extern "C" void unireg_abort(int exit_code) MY_ATTRIBUTE((noreturn)); #else extern "C" void unireg_clear(int exit_code); #define unireg_abort(exit_code) do { unireg_clear(exit_code); DBUG_RETURN(exit_code); } while(0) diff -Nru mysql-5.6-5.6.27/sql/net_serv.cc mysql-5.6-5.6.33/sql/net_serv.cc --- mysql-5.6-5.6.27/sql/net_serv.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/net_serv.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -191,7 +191,7 @@ */ void net_clear(NET *net, - my_bool check_buffer __attribute__((unused))) + my_bool check_buffer MY_ATTRIBUTE((unused))) { DBUG_ENTER("net_clear"); @@ -238,21 +238,19 @@ */ static my_bool -net_should_retry(NET *net, uint *retry_count __attribute__((unused))) +net_should_retry(NET *net, uint *retry_count MY_ATTRIBUTE((unused))) { my_bool retry; -#if !defined(MYSQL_SERVER) && defined(THREAD_SAFE_CLIENT) +#ifndef MYSQL_SERVER /* - In the thread safe client library, interrupted I/O operations - are always retried. Otherwise, its either a timeout or a - unrecoverable error. + In the client library, interrupted I/O operations are always retried. + Otherwise, it's either a timeout or an unrecoverable error. */ retry= vio_should_retry(net->vio); #else /* - In the non-thread safe client library, or in the server, - interrupted I/O operations are retried up to a limit. + In the server, interrupted I/O operations are retried up to a limit. In this scenario, pthread_kill can be used to wake up (interrupt) threads waiting for I/O. */ @@ -1047,3 +1045,17 @@ DBUG_VOID_RETURN; } +#if defined(EXPORT_SYMVER16) +#ifndef EMBEDDED_LIBRARY +C_MODE_START + +// Hack to provide Fedora symbols + +my_bool mysql_net_realloc(NET *net, size_t length) +{ + return net_realloc(net, length); +} + +C_MODE_END +#endif +#endif // EXPORT_SYMVER16 diff -Nru mysql-5.6-5.6.27/sql/opt_range.cc mysql-5.6-5.6.33/sql/opt_range.cc --- mysql-5.6-5.6.27/sql/opt_range.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/opt_range.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights * reserved. This program is free software; you can redistribute it and/or modify @@ -5234,7 +5234,7 @@ { Cost_estimate sweep_cost; JOIN *join= info->param->thd->lex->select_lex.join; - const bool is_interrupted= join && join->tables == 1; + const bool is_interrupted= join && join->tables != 1; get_sweep_read_cost(info->param->table, double2rows(info->out_rows), is_interrupted, &sweep_cost); info->total_cost += sweep_cost.total_cost(); @@ -12873,7 +12873,12 @@ if (sel_range->maybe_null && sel_range->min_value[0] && sel_range->max_value[0]) range_flag|= NULL_RANGE; /* IS NULL condition */ - else if (memcmp(sel_range->min_value, sel_range->max_value, + /* + Do not perform comparison if one of the argiment is NULL value. + */ + else if (!sel_range->min_value[0] && + !sel_range->max_value[0] && + memcmp(sel_range->min_value, sel_range->max_value, min_max_arg_len) == 0) range_flag|= EQ_RANGE; /* equality condition */ } @@ -13025,9 +13030,16 @@ } if (quick_prefix_select && quick_prefix_select->reset()) DBUG_RETURN(1); + result= head->file->ha_index_last(record); - if (result == HA_ERR_END_OF_FILE) - DBUG_RETURN(0); + if (result != 0) + { + if (result == HA_ERR_END_OF_FILE) + DBUG_RETURN(0); + else + DBUG_RETURN(result); + } + /* Save the prefix of the last group. */ key_copy(last_prefix, record, index_info, group_prefix_len); diff -Nru mysql-5.6-5.6.27/sql/partition_info.cc mysql-5.6-5.6.33/sql/partition_info.cc --- mysql-5.6-5.6.27/sql/partition_info.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/partition_info.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -945,7 +945,7 @@ */ static const char *get_part_name_from_elem(const char *name, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= strlen(name); return name; diff -Nru mysql-5.6-5.6.27/sql/password.c mysql-5.6-5.6.33/sql/password.c --- mysql-5.6-5.6.27/sql/password.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/password.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -584,3 +584,18 @@ octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); } +#if defined(EXPORT_SYMVER16) +#ifndef EMBEDDED_LIBRARY + +// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions + +#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") + +void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len) +{ + my_make_scrambled_password(to, password, pass_len); +} +SYM_16(my_make_scrambled_password); + +#endif +#endif /* EXPORT_SYMVER16 */ diff -Nru mysql-5.6-5.6.27/sql/protocol.cc mysql-5.6-5.6.33/sql/protocol.cc --- mysql-5.6-5.6.27/sql/protocol.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/protocol.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -42,9 +42,6 @@ #ifndef EMBEDDED_LIBRARY bool Protocol::net_store_data(const uchar *from, size_t length) -#else -bool Protocol_binary::net_store_data(const uchar *from, size_t length) -#endif { ulong packet_length=packet->length(); /* @@ -59,7 +56,7 @@ packet->length((uint) (to+length-(uchar*) packet->ptr())); return 0; } - +#endif @@ -1244,12 +1241,14 @@ } +#ifndef EMBEDDED_LIBRARY void Protocol_binary::prepare_for_resend() { packet->length(bit_fields+1); memset(const_cast(packet->ptr()), 0, 1+bit_fields); field_pos=0; } +#endif bool Protocol_binary::store(const char *from, size_t length, diff -Nru mysql-5.6-5.6.27/sql/protocol.h mysql-5.6-5.6.33/sql/protocol.h --- mysql-5.6-5.6.27/sql/protocol.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/protocol.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef PROTOCOL_INCLUDED #define PROTOCOL_INCLUDED -/* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,8 +45,9 @@ MYSQL_FIELD *next_mysql_field; MEM_ROOT *alloc; #endif - bool net_store_data(const uchar *from, size_t length, - const CHARSET_INFO *fromcs, const CHARSET_INFO *tocs); + virtual bool net_store_data(const uchar *from, size_t length, + const CHARSET_INFO *fromcs, + const CHARSET_INFO *tocs); bool store_string_aux(const char *from, size_t length, const CHARSET_INFO *fromcs, const CHARSET_INFO *tocs); @@ -178,6 +179,9 @@ #ifdef EMBEDDED_LIBRARY virtual bool write(); bool net_store_data(const uchar *from, size_t length); + bool net_store_data(const uchar *from, size_t length, + const CHARSET_INFO *fromcs, + const CHARSET_INFO *tocs); #endif virtual bool store_null(); virtual bool store_tiny(longlong from); diff -Nru mysql-5.6-5.6.27/sql/rpl_filter.cc mysql-5.6-5.6.33/sql/rpl_filter.cc --- mysql-5.6-5.6.27/sql/rpl_filter.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_filter.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -508,7 +508,7 @@ extern "C" void free_table_ent(void* a); uchar *get_table_key(const uchar* a, size_t *len, - my_bool __attribute__((unused))) + my_bool MY_ATTRIBUTE((unused))) { TABLE_RULE_ENT *e= (TABLE_RULE_ENT *) a; diff -Nru mysql-5.6-5.6.27/sql/rpl_info_dummy.cc mysql-5.6-5.6.33/sql/rpl_info_dummy.cc --- mysql-5.6-5.6.27/sql/rpl_info_dummy.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_info_dummy.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ { } -int Rpl_info_dummy::do_init_info(uint instance __attribute__((unused))) +int Rpl_info_dummy::do_init_info(uint instance MY_ATTRIBUTE((unused))) { return 0; } @@ -51,13 +51,13 @@ return REPOSITORY_DOES_NOT_EXIST; } -enum_return_check Rpl_info_dummy::do_check_info(uint instance __attribute__((unused))) +enum_return_check Rpl_info_dummy::do_check_info(uint instance MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return REPOSITORY_DOES_NOT_EXIST; } -int Rpl_info_dummy::do_flush_info(const bool force __attribute__((unused))) +int Rpl_info_dummy::do_flush_info(const bool force MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return 0; @@ -85,105 +85,105 @@ return INFO_REPOSITORY_DUMMY; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const char *value __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const char *value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const uchar *value __attribute__((unused)), - const size_t size __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const uchar *value MY_ATTRIBUTE((unused)), + const size_t size MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const ulong value __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const ulong value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const int value __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const int value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const float value __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const float value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_set_info(const int pos __attribute__((unused)), - const Dynamic_ids *value __attribute__((unused))) +bool Rpl_info_dummy::do_set_info(const int pos MY_ATTRIBUTE((unused)), + const Dynamic_ids *value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - char *value __attribute__((unused)), - const size_t size __attribute__((unused)), - const char *default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + char *value MY_ATTRIBUTE((unused)), + const size_t size MY_ATTRIBUTE((unused)), + const char *default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - uchar *value __attribute__((unused)), - const size_t size __attribute__((unused)), - const uchar *default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + uchar *value MY_ATTRIBUTE((unused)), + const size_t size MY_ATTRIBUTE((unused)), + const uchar *default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - ulong *value __attribute__((unused)), - const ulong default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + ulong *value MY_ATTRIBUTE((unused)), + const ulong default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - int *value __attribute__((unused)), - const int default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + int *value MY_ATTRIBUTE((unused)), + const int default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - float *value __attribute__((unused)), - const float default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + float *value MY_ATTRIBUTE((unused)), + const float default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); return FALSE; } -bool Rpl_info_dummy::do_get_info(const int pos __attribute__((unused)), - Dynamic_ids *value __attribute__((unused)), - const Dynamic_ids *default_value __attribute__((unused))) +bool Rpl_info_dummy::do_get_info(const int pos MY_ATTRIBUTE((unused)), + Dynamic_ids *value MY_ATTRIBUTE((unused)), + const Dynamic_ids *default_value MY_ATTRIBUTE((unused))) { DBUG_ASSERT(!abort); diff -Nru mysql-5.6-5.6.27/sql/rpl_info_factory.cc mysql-5.6-5.6.33/sql/rpl_info_factory.cc --- mysql-5.6-5.6.27/sql/rpl_info_factory.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_info_factory.cc 2016-08-26 11:22:35.000000000 +0000 @@ -407,9 +407,20 @@ if (decide_repository(worker, rli_option, &handler_src, &handler_dest, &msg)) goto err; - - if (worker->rli_init_info(is_gaps_collecting_phase)) + + if (DBUG_EVALUATE_IF("mts_worker_thread_init_fails", 1, 0) || + worker->rli_init_info(is_gaps_collecting_phase)) { + DBUG_EXECUTE_IF("enable_mts_worker_failure_init", + { + DBUG_SET("-d,mts_worker_thread_init_fails"); + DBUG_SET("-d,enable_mts_worker_failure_init"); + }); + DBUG_EXECUTE_IF("enable_mts_wokrer_failure_in_recovery_finalize", + { + DBUG_SET("-d,mts_worker_thread_init_fails"); + DBUG_SET("-d,enable_mts_wokrer_failure_in_recovery_finalize"); + }); msg= "Failed to initialize the worker info structure"; goto err; } diff -Nru mysql-5.6-5.6.27/sql/rpl_info_file.cc mysql-5.6-5.6.33/sql/rpl_info_file.cc --- mysql-5.6-5.6.27/sql/rpl_info_file.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_info_file.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -438,7 +438,7 @@ } bool Rpl_info_file::do_get_info(const int pos, Dynamic_ids *value, - const Dynamic_ids *default_value __attribute__((unused))) + const Dynamic_ids *default_value MY_ATTRIBUTE((unused))) { /* Static buffer to use most of the times. However, if it is not big diff -Nru mysql-5.6-5.6.27/sql/rpl_info_table.cc mysql-5.6-5.6.33/sql/rpl_info_table.cc --- mysql-5.6-5.6.27/sql/rpl_info_table.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_info_table.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -600,7 +600,7 @@ } bool Rpl_info_table::do_get_info(const int pos, uchar *value, const size_t size, - const uchar *default_value __attribute__((unused))) + const uchar *default_value MY_ATTRIBUTE((unused))) { if (field_values->value[pos].length() == size) return (!memcpy((char *) value, (char *) @@ -661,7 +661,7 @@ } bool Rpl_info_table::do_get_info(const int pos, Dynamic_ids *value, - const Dynamic_ids *default_value __attribute__((unused))) + const Dynamic_ids *default_value MY_ATTRIBUTE((unused))) { if (value->unpack_dynamic_ids(field_values->value[pos].c_ptr_safe())) return TRUE; diff -Nru mysql-5.6-5.6.27/sql/rpl_master.cc mysql-5.6-5.6.33/sql/rpl_master.cc --- mysql-5.6-5.6.27/sql/rpl_master.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_master.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,7 +62,7 @@ extern "C" uint32 *slave_list_key(SLAVE_INFO* si, size_t *len, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *len = 4; return &si->server_id; @@ -738,7 +738,6 @@ { DBUG_ENTER("com_binlog_dump"); ulong pos; - String slave_uuid; ushort flags= 0; const uchar* packet_position= (uchar *) packet; uint packet_bytes_todo= packet_length; @@ -759,8 +758,7 @@ DBUG_PRINT("info", ("pos=%lu flags=%d server_id=%d", pos, flags, thd->server_id)); - get_slave_uuid(thd, &slave_uuid); - kill_zombie_dump_threads(&slave_uuid); + kill_zombie_dump_threads(thd); general_log_print(thd, thd->get_command(), "Log: '%s' Pos: %ld", packet + 10, (long) pos); @@ -783,7 +781,6 @@ Before going GA, we need to make this protocol extensible without breaking compatitibilty. /Alfranio. */ - String slave_uuid; ushort flags= 0; uint32 data_size= 0; uint64 pos= 0; @@ -815,8 +812,7 @@ DBUG_PRINT("info", ("Slave %d requested to read %s at position %llu gtid set " "'%s'.", thd->server_id, name, pos, gtid_string)); - get_slave_uuid(thd, &slave_uuid); - kill_zombie_dump_threads(&slave_uuid); + kill_zombie_dump_threads(thd); general_log_print(thd, thd->get_command(), "Log: '%s' Pos: %llu GTIDs: '%s'", name, pos, gtid_string); my_free(gtid_string); @@ -888,7 +884,7 @@ Diagnostics_area temp_da; Diagnostics_area *saved_da= thd->get_stmt_da(); thd->set_stmt_da(&temp_da); - bool was_killed_by_duplicate_slave_uuid= false; + bool was_killed_by_duplicate_slave_id= false; DBUG_ENTER("mysql_binlog_send"); DBUG_PRINT("enter",("log_ident: '%s' pos: %ld", log_ident, (long) pos)); @@ -1960,11 +1956,11 @@ reconnect anymore. */ mysql_mutex_lock(&thd->LOCK_thd_data); - was_killed_by_duplicate_slave_uuid= thd->duplicate_slave_uuid; + was_killed_by_duplicate_slave_id= thd->duplicate_slave_id; mysql_mutex_unlock(&thd->LOCK_thd_data); - if (was_killed_by_duplicate_slave_uuid) + if (was_killed_by_duplicate_slave_id) { - errmsg= "A slave with the same server_uuid as this slave " + errmsg= "A slave with the same server_uuid/server_id as this slave " "has connected to the master"; my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG; goto err; @@ -2056,41 +2052,58 @@ /* Kill all Binlog_dump threads which previously talked to the same slave - ("same" means with the same server id). Indeed, if the slave stops, if the + ("same" means with the same UUID(for slave versions >= 5.6) or same server id + (for slave versions < 5.6). Indeed, if the slave stops, if the Binlog_dump thread is waiting (mysql_cond_wait) for binlog update, then it will keep existing until a query is written to the binlog. If the master is idle, then this could last long, and if the slave reconnects, we could have 2 Binlog_dump threads in SHOW PROCESSLIST, until a query is written to the binlog. To avoid this, when the slave reconnects and sends COM_BINLOG_DUMP, - the master kills any existing thread with the slave's server id (if this id is + the master kills any existing thread with the slave's UUID/server id (if this id is not zero; it will be true for real slaves, but false for mysqlbinlog when it sends COM_BINLOG_DUMP to get a remote binlog dump). SYNOPSIS kill_zombie_dump_threads() - slave_uuid the slave's UUID + @param thd newly connected dump thread object */ - -void kill_zombie_dump_threads(String *slave_uuid) +void kill_zombie_dump_threads(THD *thd) { - if (slave_uuid->length() == 0) + String slave_uuid; + get_slave_uuid(thd, &slave_uuid); + if (slave_uuid.length() == 0 && thd->server_id == 0) return; - DBUG_ASSERT(slave_uuid->length() == UUID_LENGTH); mysql_mutex_lock(&LOCK_thread_count); THD *tmp= NULL; Thread_iterator it= global_thread_list_begin(); Thread_iterator end= global_thread_list_end(); + bool is_zombie_thread= false; for (; it != end; ++it) { - if ((*it) != current_thd && ((*it)->get_command() == COM_BINLOG_DUMP || - (*it)->get_command() == COM_BINLOG_DUMP_GTID)) + if ((*it) != thd && ((*it)->get_command() == COM_BINLOG_DUMP || + (*it)->get_command() == COM_BINLOG_DUMP_GTID)) { String tmp_uuid; - if (get_slave_uuid((*it), &tmp_uuid) != NULL && - !strncmp(slave_uuid->c_ptr(), tmp_uuid.c_ptr(), UUID_LENGTH)) + get_slave_uuid((*it), &tmp_uuid); + if (slave_uuid.length()) + { + is_zombie_thread= (tmp_uuid.length() && + !strncmp(slave_uuid.c_ptr(), + tmp_uuid.c_ptr(), UUID_LENGTH)); + } + else + { + /* + Check if it is a 5.5 slave's dump thread i.e., server_id should be + same && dump thread should not contain 'UUID'. + */ + is_zombie_thread= (((*it)->server_id == thd->server_id) && + !tmp_uuid.length()); + } + if (is_zombie_thread) { tmp= *it; mysql_mutex_lock(&tmp->LOCK_thd_data); // Lock from delete @@ -2107,17 +2120,30 @@ again. We just to do kill the thread ourselves. */ if (log_warnings > 1) - sql_print_information("While initializing dump thread for slave with " - "UUID <%s>, found a zombie dump thread with " - "the same UUID. Master is killing the zombie dump " - "thread(%lu).", slave_uuid->c_ptr(), tmp->thread_id); - tmp->duplicate_slave_uuid= true; + { + if (slave_uuid.length()) + { + sql_print_information("While initializing dump thread for slave with " + "UUID <%s>, found a zombie dump thread with the " + "same UUID. Master is killing the zombie dump " + "thread(%lu).", slave_uuid.c_ptr(), + tmp->thread_id); + } + else + { + sql_print_information("While initializing dump thread for slave with " + "server_id <%u>, found a zombie dump thread with the " + "same server_id. Master is killing the zombie dump " + "thread(%lu).", thd->server_id, + tmp->thread_id); + } + } + tmp->duplicate_slave_id= true; tmp->awake(THD::KILL_QUERY); mysql_mutex_unlock(&tmp->LOCK_thd_data); } } - /** Execute a RESET MASTER statement. diff -Nru mysql-5.6-5.6.27/sql/rpl_master.h mysql-5.6-5.6.33/sql/rpl_master.h --- mysql-5.6-5.6.27/sql/rpl_master.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_master.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ #ifndef RPL_MASTER_H_INCLUDED -/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ String *get_slave_uuid(THD *thd, String *value); bool show_master_status(THD* thd); bool show_binlogs(THD* thd); -void kill_zombie_dump_threads(String *slave_uuid); +void kill_zombie_dump_threads(THD* thd); /** Process a COM_BINLOG_DUMP_GTID packet. diff -Nru mysql-5.6-5.6.27/sql/rpl_mi.cc mysql-5.6-5.6.33/sql/rpl_mi.cc --- mysql-5.6-5.6.27/sql/rpl_mi.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_mi.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -542,7 +542,7 @@ } bool Master_info::set_password(const char* password_arg, - int password_arg_size __attribute__((unused))) + int password_arg_size MY_ATTRIBUTE((unused))) { bool ret= true; DBUG_ENTER("Master_info::set_password"); diff -Nru mysql-5.6-5.6.27/sql/rpl_rli.cc mysql-5.6-5.6.33/sql/rpl_rli.cc --- mysql-5.6-5.6.27/sql/rpl_rli.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_rli.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -77,7 +77,8 @@ cur_log_fd(-1), relay_log(&sync_relaylog_period), is_relay_log_recovery(is_slave_recovery), save_temporary_tables(0), - cur_log_old_open_count(0), group_relay_log_pos(0), event_relay_log_pos(0), + cur_log_old_open_count(0), error_on_rli_init_info(false), + group_relay_log_pos(0), event_relay_log_pos(0), group_master_log_pos(0), gtid_set(global_sid_map, global_sid_lock), log_space_total(0), ignore_log_space_limit(0), @@ -100,7 +101,7 @@ mts_group_status(MTS_NOT_IN_GROUP), reported_unsafe_warning(false), rli_description_event(NULL), sql_delay(0), sql_delay_end(0), m_flags(0), row_stmt_start_timestamp(0), - long_find_row_note_printed(false), error_on_rli_init_info(false) + long_find_row_note_printed(false) { DBUG_ENTER("Relay_log_info::Relay_log_info"); @@ -308,15 +309,33 @@ even temporary holes. Therefore stale records are deleted from the tail. */ + DBUG_EXECUTE_IF("enable_mts_wokrer_failure_in_recovery_finalize", + {DBUG_SET("+d,mts_worker_thread_init_fails");}); + for (i= recovery_parallel_workers; i > workers.elements && !ret; i--) { Slave_worker *w= Rpl_info_factory::create_worker(repo_type, i - 1, this, true); - ret= w->remove_info(); - delete w; + /* + If an error occurs during the above create_worker call, the newly created + worker object gets deleted within the above function call itself and only + NULL is returned. Hence the following check has been added to verify + that a valid worker object exists. + */ + if (w) + { + ret= w->remove_info(); + delete w; + } + else + { + ret= true; + goto err; + } } recovery_parallel_workers= slave_parallel_workers; +err: DBUG_RETURN(ret); } @@ -1325,9 +1344,7 @@ break; case UNTIL_SQL_AFTER_MTS_GAPS: -#ifndef DBUG_OFF case UNTIL_DONE: -#endif /* TODO: this condition is actually post-execution or post-scheduling so the proper place to check it before SQL thread goes @@ -1342,9 +1359,7 @@ "UNTIL SQL_AFTER_MTS_GAPS as it has " "processed all gap transactions left from " "the previous slave session."); -#ifndef DBUG_OFF until_condition= UNTIL_DONE; -#endif DBUG_RETURN(true); } else @@ -1902,7 +1917,11 @@ goto err; } - is_relay_log_recovery= FALSE; + /* + In case of MTS the recovery is deferred until the end of global_init_info. + */ + if (!mi->rli->mts_recovery_group_cnt) + is_relay_log_recovery= FALSE; DBUG_RETURN(error); err: diff -Nru mysql-5.6-5.6.27/sql/rpl_rli.h mysql-5.6-5.6.33/sql/rpl_rli.h --- mysql-5.6-5.6.27/sql/rpl_rli.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_rli.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -187,6 +187,13 @@ uint32 cur_log_old_open_count; /* + If on init_info() call error_on_rli_init_info is true that means + that previous call to init_info() terminated with an error, RESET + SLAVE must be executed and the problem fixed manually. + */ + bool error_on_rli_init_info; + + /* Let's call a group (of events) : - a transaction or @@ -314,10 +321,7 @@ */ enum {UNTIL_NONE= 0, UNTIL_MASTER_POS, UNTIL_RELAY_POS, UNTIL_SQL_BEFORE_GTIDS, UNTIL_SQL_AFTER_GTIDS, - UNTIL_SQL_AFTER_MTS_GAPS -#ifndef DBUG_OFF - , UNTIL_DONE -#endif + UNTIL_SQL_AFTER_MTS_GAPS, UNTIL_DONE } until_condition; char until_log_name[FN_REFLEN]; @@ -849,6 +853,11 @@ */ bool reported_unsafe_warning; + /* + 'sql_thread_kill_accepted is set to TRUE when killed status is recognized. + */ + bool sql_thread_kill_accepted; + time_t get_row_stmt_start_timestamp() { return row_stmt_start_timestamp; @@ -974,12 +983,6 @@ time_t row_stmt_start_timestamp; bool long_find_row_note_printed; - /* - If on init_info() call error_on_rli_init_info is true that means - that previous call to init_info() terminated with an error, RESET - SLAVE must be executed and the problem fixed manually. - */ - bool error_on_rli_init_info; }; bool mysql_show_relaylog_events(THD* thd); diff -Nru mysql-5.6-5.6.27/sql/rpl_rli_pdb.cc mysql-5.6-5.6.33/sql/rpl_rli_pdb.cc --- mysql-5.6-5.6.27/sql/rpl_rli_pdb.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_rli_pdb.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -629,7 +629,7 @@ extern "C" uchar *get_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { DBUG_ENTER("get_key"); @@ -1490,7 +1490,7 @@ Slave_worker *w_i; Slave_job_group *ptr_g, g; char grl_name[FN_REFLEN]; - ulong ind __attribute__((unused)); + ulong ind MY_ATTRIBUTE((unused)); #ifndef DBUG_OFF if (DBUG_EVALUATE_IF("check_slave_debug_group", 1, 0) && diff -Nru mysql-5.6-5.6.27/sql/rpl_slave.cc mysql-5.6-5.6.33/sql/rpl_slave.cc --- mysql-5.6-5.6.27/sql/rpl_slave.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_slave.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -201,6 +201,7 @@ static bool wait_for_relay_log_space(Relay_log_info* rli); static inline bool io_slave_killed(THD* thd,Master_info* mi); static inline bool sql_slave_killed(THD* thd,Relay_log_info* rli); +static inline bool is_autocommit_off_and_infotables(THD* thd); static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type); static void print_slave_skip_errors(void); static int safe_connect(THD* thd, MYSQL* mysql, Master_info* mi); @@ -606,6 +607,51 @@ master_log_pos and master_log_name. Eventually, the old relay logs will be purged by the normal purge mechanism. + When GTID's are enabled the "Retrieved GTID" set should be cleared + so that partial read events are discarded and they are + fetched once again + + @param mi pointer to Master_info instance +*/ +static void recover_relay_log(Master_info *mi) +{ + Relay_log_info *rli=mi->rli; + // Set Receiver Thread's positions as per the recovered Applier Thread. + mi->set_master_log_pos(max(BIN_LOG_HEADER_SIZE, + rli->get_group_master_log_pos())); + mi->set_master_log_name(rli->get_group_master_log_name()); + + sql_print_warning("Recovery from master pos %ld and file %s. " + "Previous relay log pos and relay log file had " + "been set to %lld, %s respectively.", + (ulong) mi->get_master_log_pos(), mi->get_master_log_name(), + rli->get_group_relay_log_pos(), rli->get_group_relay_log_name()); + + // Start with a fresh relay log. + rli->set_group_relay_log_name(rli->relay_log.get_log_fname()); + rli->set_event_relay_log_name(rli->relay_log.get_log_fname()); + rli->set_group_relay_log_pos(BIN_LOG_HEADER_SIZE); + rli->set_event_relay_log_pos(BIN_LOG_HEADER_SIZE); + /* + Clear the retrieved GTID set so that events that are written partially + will be fetched again. + */ + if (gtid_mode == GTID_MODE_ON) + { + global_sid_lock->wrlock(); + (const_cast(rli->get_gtid_set()))->clear(); + global_sid_lock->unlock(); + } +} + + +/* + Updates the master info based on the information stored in the + relay info and ignores relay logs previously retrieved by the IO + thread, which thus starts fetching again based on to the + master_log_pos and master_log_name. Eventually, the old + relay logs will be purged by the normal purge mechanism. + There can be a special case where rli->group_master_log_name and rli->group_master_log_pos are not intialized, as the sql thread was never started at all. In those cases all the existing relay logs are parsed @@ -664,14 +710,7 @@ rli->clear_mts_recovery_groups(); } else - { - error= 1; - sql_print_error("--relay-log-recovery cannot be executed when the slave " - "was stopped with an error or killed in MTS mode; " - "consider using RESET SLAVE or restart the server " - "with --relay-log-recovery = 0 followed by " - "START SLAVE UNTIL SQL_AFTER_MTS_GAPS"); - } + DBUG_RETURN(error); } } @@ -693,30 +732,112 @@ if (error) DBUG_RETURN(error); } - mi->set_master_log_pos(max(BIN_LOG_HEADER_SIZE, - rli->get_group_master_log_pos())); - mi->set_master_log_name(rli->get_group_master_log_name()); - - sql_print_warning("Recovery from master pos %ld and file %s. " - "Previous relay log pos and relay log file had " - "been set to %lld, %s respectively.", - (ulong) mi->get_master_log_pos(), mi->get_master_log_name(), - rli->get_group_relay_log_pos(), rli->get_group_relay_log_name()); - - rli->set_group_relay_log_name(rli->relay_log.get_log_fname()); - rli->set_event_relay_log_name(rli->relay_log.get_log_fname()); - rli->set_group_relay_log_pos(BIN_LOG_HEADER_SIZE); - rli->set_event_relay_log_pos(BIN_LOG_HEADER_SIZE); + recover_relay_log(mi); + } + DBUG_RETURN(error); +} + +/* + Relay log recovery in the case of MTS, is handled by the following function. + Gaps in MTS execution are filled using implicit execution of + START SLAVE UNTIL SQL_AFTER_MTS_GAPS call. Once slave reaches a consistent + gapless state receiver thread's positions are initialized to applier thread's + positions and the old relay logs are discarded. This completes the recovery + process. + + @param mi pointer to Master_info instance. + + @retval 0 success + @retval 1 error +*/ +static inline int fill_mts_gaps_and_recover(Master_info* mi) +{ + DBUG_ENTER("fill_mts_gaps_and_recover"); + Relay_log_info *rli= mi->rli; + int recovery_error= 0; + rli->is_relay_log_recovery= FALSE; + rli->until_condition= Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS; + rli->opt_slave_parallel_workers= rli->recovery_parallel_workers; + sql_print_information("MTS recovery: starting coordinator thread to fill MTS " + "gaps."); + recovery_error= start_slave_thread( +#ifdef HAVE_PSI_INTERFACE + key_thread_slave_sql, +#endif + handle_slave_sql, &rli->run_lock, + &rli->run_lock, + &rli->start_cond, + &rli->slave_running, + &rli->slave_run_id, + mi); + + if (recovery_error) + { + sql_print_warning("MTS recovery: failed to start the coordinator " + "thread. Check the error log for additional" + " details."); + goto err; + } + mysql_mutex_lock(&rli->run_lock); + mysql_cond_wait(&rli->stop_cond, &rli->run_lock); + mysql_mutex_unlock(&rli->run_lock); + if (rli->until_condition != Relay_log_info::UNTIL_DONE) + { + sql_print_warning("MTS recovery: automatic recovery failed. Either the " + "slave server had stopped due to an error during an " + "earlier session or relay logs are corrupted." + "Fix the cause of the slave side error and restart the " + "slave server or consider using RESET SLAVE."); + goto err; } /* - Clear the retrieved GTID set so that events that are written partially - will be fetched again. - */ - global_sid_lock->wrlock(); - (const_cast(rli->get_gtid_set()))->clear(); - global_sid_lock->unlock(); - DBUG_RETURN(error); + We need a mutex while we are changing master info parameters to + keep other threads from reading bogus info + */ + mysql_mutex_lock(&mi->data_lock); + mysql_mutex_lock(&rli->data_lock); + recover_relay_log(mi); + + const char* msg; + if (rli->init_relay_log_pos(rli->get_group_relay_log_name(), + rli->get_group_relay_log_pos(), + false/*need_data_lock=false*/, + &msg, 0)) + { + char llbuf[22]; + sql_print_error("Failed to open the relay log '%s' (relay_log_pos %s).", + rli->get_group_relay_log_name(), + llstr(rli->get_group_relay_log_pos(), llbuf)); + + recovery_error=1; + mysql_mutex_unlock(&mi->data_lock); + mysql_mutex_unlock(&rli->data_lock); + goto err; + } + if (mi->flush_info(true) || rli->flush_info(true)) + { + recovery_error= 1; + mysql_mutex_unlock(&mi->data_lock); + mysql_mutex_unlock(&rli->data_lock); + goto err; + } + rli->inited=1; + rli->error_on_rli_init_info= false; + mysql_mutex_unlock(&mi->data_lock); + mysql_mutex_unlock(&rli->data_lock); + sql_print_information("MTS recovery: completed successfully.\n"); + DBUG_RETURN(recovery_error); +err: + /* + If recovery failed means we failed to initialize rli object in the case + of MTS. We should not allow the START SLAVE command to work as we do in + the case of STS. i.e if init_recovery call fails then we set inited=0. + */ + rli->end_info(); + rli->inited=0; + rli->error_on_rli_init_info= true; + DBUG_RETURN(recovery_error); } int global_init_info(Master_info* mi, bool ignore_if_no_info, int thread_mask) @@ -739,14 +860,14 @@ transaction start to avoid table access deadlocks when START SLAVE is executed after RESET SLAVE. */ - if (thd && thd->in_multi_stmt_transaction_mode() && - (opt_mi_repository_id == INFO_REPOSITORY_TABLE || - opt_rli_repository_id == INFO_REPOSITORY_TABLE)) + if (is_autocommit_off_and_infotables(thd)) + { if (trans_begin(thd)) { init_error= 1; goto end; } + } /* This takes care of the startup dependency between the master_info @@ -757,7 +878,10 @@ */ check_return= mi->check_info(); if (check_return == ERROR_CHECKING_REPOSITORY) + { + init_error= 1; goto end; + } if (!(ignore_if_no_info && check_return == REPOSITORY_DOES_NOT_EXIST)) { @@ -767,7 +891,10 @@ check_return= mi->rli->check_info(); if (check_return == ERROR_CHECKING_REPOSITORY) + { + init_error= 1; goto end; + } if (!(ignore_if_no_info && check_return == REPOSITORY_DOES_NOT_EXIST)) { if (((thread_mask & SLAVE_SQL) != 0 || !(mi->rli->inited)) @@ -775,21 +902,34 @@ init_error= 1; } + DBUG_EXECUTE_IF("enable_mts_worker_failure_init", + {DBUG_SET("+d,mts_worker_thread_init_fails");}); end: /* When info tables are used and autocommit= 0 we force transaction commit to avoid table access deadlocks when START SLAVE is executed after RESET SLAVE. */ - if (thd && thd->in_multi_stmt_transaction_mode() && - (opt_mi_repository_id == INFO_REPOSITORY_TABLE || - opt_rli_repository_id == INFO_REPOSITORY_TABLE)) + if (is_autocommit_off_and_infotables(thd)) if (trans_commit(thd)) init_error= 1; mysql_mutex_unlock(&mi->rli->data_lock); mysql_mutex_unlock(&mi->data_lock); - DBUG_RETURN(check_return == ERROR_CHECKING_REPOSITORY || init_error); + + /* + Handling MTS Relay-log recovery after successful initialization of mi and + rli objects. + + MTS Relay-log recovery is handled by SSUG command. In order to start the + slave applier thread rli needs to be inited and mi->rli->data_lock should + be in released state. Hence we do the MTS recovery at this point of time + where both conditions are satisfied. + */ + if (!init_error && mi->rli->is_relay_log_recovery + && mi->rli->mts_recovery_group_cnt) + init_error= fill_mts_gaps_and_recover(mi); + DBUG_RETURN(init_error); } void end_info(Master_info* mi) @@ -1244,7 +1384,7 @@ while (*slave_running) // Should always be true { - int error __attribute__((unused)); + int error MY_ATTRIBUTE((unused)); DBUG_PRINT("loop", ("killing slave thread")); mysql_mutex_lock(&thd->LOCK_thd_data); @@ -1254,7 +1394,7 @@ EINVAL: invalid signal number (can't happen) ESRCH: thread already killed (can happen, should be ignored) */ - int err __attribute__((unused))= pthread_kill(thd->real_id, thr_client_alarm); + int err MY_ATTRIBUTE((unused))= pthread_kill(thd->real_id, thr_client_alarm); DBUG_ASSERT(err != EINVAL); #endif thd->awake(THD::NOT_KILLED); @@ -1497,6 +1637,24 @@ mysql_mutex_unlock(&LOCK_active_mi); } +/** + Check if multi-statement transaction mode and master and slave info + repositories are set to table. + + @param THD THD object + + @retval true Success + @retval false Failure +*/ +static bool is_autocommit_off_and_infotables(THD* thd) +{ + DBUG_ENTER("is_autocommit_off_and_infotables"); + DBUG_RETURN((thd && thd->in_multi_stmt_transaction_mode() && + (opt_mi_repository_id == INFO_REPOSITORY_TABLE || + opt_rli_repository_id == INFO_REPOSITORY_TABLE))? + true : false); +} + static bool io_slave_killed(THD* thd, Master_info* mi) { DBUG_ENTER("io_slave_killed"); @@ -1527,16 +1685,18 @@ */ static bool sql_slave_killed(THD* thd, Relay_log_info* rli) { - bool ret= FALSE; bool is_parallel_warn= FALSE; DBUG_ENTER("sql_slave_killed"); DBUG_ASSERT(rli->info_thd == thd); DBUG_ASSERT(rli->slave_running == 1); + if (rli->sql_thread_kill_accepted) + DBUG_RETURN(true); if (abort_loop || thd->killed || rli->abort_slave) { - is_parallel_warn= (rli->is_parallel_exec() && + rli->sql_thread_kill_accepted= true; + is_parallel_warn= (rli->is_parallel_exec() && (rli->is_mts_in_group() || thd->killed)); /* Slave can execute stop being in one of two MTS or Single-Threaded mode. @@ -1564,7 +1724,6 @@ "In such cases you have to examine your data (see documentation for " "details)."; - ret= TRUE; if (rli->abort_slave) { DBUG_PRINT("info", ("Request to stop slave SQL Thread received while " @@ -1584,14 +1743,16 @@ if (rli->last_event_start_time == 0) rli->last_event_start_time= my_time(0); - ret= difftime(my_time(0), rli->last_event_start_time) <= - SLAVE_WAIT_GROUP_DONE ? FALSE : TRUE; + rli->sql_thread_kill_accepted= difftime(my_time(0), + rli->last_event_start_time) <= + SLAVE_WAIT_GROUP_DONE ? + FALSE : TRUE; - DBUG_EXECUTE_IF("stop_slave_middle_group", + DBUG_EXECUTE_IF("stop_slave_middle_group", DBUG_EXECUTE_IF("incomplete_group_in_relay_log", - ret= TRUE;);); // time is over + rli->sql_thread_kill_accepted= TRUE;);); // time is over - if (!ret && !rli->reported_unsafe_warning) + if (!rli->sql_thread_kill_accepted && !rli->reported_unsafe_warning) { rli->report(WARNING_LEVEL, 0, !is_parallel_warn ? @@ -1605,8 +1766,13 @@ rli->reported_unsafe_warning= true; } } - if (ret) + if (rli->sql_thread_kill_accepted) { + rli->last_event_start_time= 0; + if (rli->mts_group_status == Relay_log_info::MTS_IN_GROUP) + { + rli->mts_group_status= Relay_log_info::MTS_KILLED_GROUP; + } if (is_parallel_warn) rli->report(!rli->is_error() ? ERROR_LEVEL : WARNING_LEVEL, // an error was reported by Worker @@ -1618,21 +1784,8 @@ ER(ER_SLAVE_FATAL_ERROR), msg_stopped); } } - else - { - ret= TRUE; - } } - if (ret) - { - rli->last_event_start_time= 0; - if (rli->mts_group_status == Relay_log_info::MTS_IN_GROUP) - { - rli->mts_group_status= Relay_log_info::MTS_KILLED_GROUP; - } - } - - DBUG_RETURN(ret); + DBUG_RETURN(rli->sql_thread_kill_accepted); } @@ -1792,6 +1945,7 @@ { char query[256]; int ret= 0; + DBUG_EXECUTE_IF("fake_5_5_version_slave", return ret;); sprintf(query, "SET @slave_uuid= '%s'", server_uuid); if (mysql_real_query(mysql, query, strlen(query)) @@ -3015,11 +3169,9 @@ break; case Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS: until_type= "SQL_AFTER_MTS_GAPS"; -#ifndef DBUG_OFF case Relay_log_info::UNTIL_DONE: until_type= "DONE"; break; -#endif default: DBUG_ASSERT(0); } @@ -3217,9 +3369,7 @@ info tables updates which do not commit, like Rotate, Stop and skipped events handling. */ - if ((thd->variables.option_bits & OPTION_NOT_AUTOCOMMIT) && - (opt_mi_repository_id == INFO_REPOSITORY_TABLE || - opt_rli_repository_id == INFO_REPOSITORY_TABLE)) + if (is_autocommit_off_and_infotables(thd)) { thd->variables.option_bits|= OPTION_AUTOCOMMIT; thd->variables.option_bits&= ~OPTION_NOT_AUTOCOMMIT; @@ -3546,8 +3696,13 @@ *suppress_warnings= TRUE; } else - sql_print_error("Error reading packet from server: %s ( server_errno=%d)", - mysql_error(mysql), mysql_errno(mysql)); + { + if (!mi->abort_slave) + { + sql_print_error("Error reading packet from server: %s (server_errno=%d)", + mysql_error(mysql), mysql_errno(mysql)); + } + } DBUG_RETURN(packet_error); } @@ -3986,10 +4141,9 @@ rli->get_group_relay_log_pos(), rli->get_group_master_log_name(), rli->get_group_master_log_pos()); -#ifndef DBUG_OFF - /* + /* Few tests wait for UNTIL_SQL_AFTER_MTS_GAPS completion. - Due to exisiting convention the status won't change + Due to exisiting convention the status won't change prior to slave restarts. So making of UNTIL_SQL_AFTER_MTS_GAPS completion isdone here, and only in the debug build to make the test to catch the change @@ -3999,7 +4153,6 @@ { rli->until_condition= Relay_log_info::UNTIL_DONE; } -#endif // reset the Worker tables to remove last slave session time info if ((error= rli->mts_finalize_recovery())) { @@ -4476,6 +4629,10 @@ thd->clear_active_vio(); #endif end_server(mysql); + DBUG_EXECUTE_IF("simulate_no_master_reconnect", + { + return 1; + }); if ((*retry_count)++) { if (*retry_count > mi->retry_count) @@ -5187,6 +5344,7 @@ LOG_INFO linfo; my_off_t offset= 0; MY_BITMAP *groups= &rli->recovery_groups; + THD *thd= current_thd; DBUG_ENTER("mts_recovery_groups"); @@ -5222,6 +5380,20 @@ rli->recovery_parallel_workers, rli->recovery_parallel_workers); + /* + When info tables are used and autocommit= 0 we force a new + transaction start to avoid table access deadlocks when START SLAVE + is executed after STOP SLAVE with MTS enabled. + */ + if (is_autocommit_off_and_infotables(thd)) + { + if (trans_begin(thd)) + { + error= TRUE; + goto err; + } + } + for (uint id= 0; id < rli->recovery_parallel_workers; id++) { Slave_worker *worker= @@ -5229,6 +5401,8 @@ if (!worker) { + if (is_autocommit_off_and_infotables(thd)) + trans_rollback(thd); error= TRUE; goto err; } @@ -5259,6 +5433,20 @@ } /* + When info tables are used and autocommit= 0 we force transaction + commit to avoid table access deadlocks when START SLAVE is executed + after STOP SLAVE with MTS enabled. + */ + if (is_autocommit_off_and_infotables(thd)) + { + if (trans_commit(thd)) + { + error= TRUE; + goto err; + } + } + + /* In what follows, the group Recovery Bitmap is constructed. seek(lwm); @@ -5922,6 +6110,7 @@ rli->slave_run_id++; rli->slave_running = 1; rli->reported_unsafe_warning= false; + rli->sql_thread_kill_accepted= false; pthread_detach_this_thread(); if (init_slave_thread(thd, SLAVE_THD_SQL)) @@ -7461,9 +7650,9 @@ /** Reads next event from the relay log. Should be called from the - slave IO thread. + slave SQL thread. - @param rli Relay_log_info structure for the slave IO thread. + @param rli Relay_log_info structure for the slave SQL thread. @return The event read, or NULL on error. If an error occurs, the error is reported through the sql_print_information() or @@ -7508,7 +7697,8 @@ We just have a read only log that nobody else will be updating. */ bool hot_log; - if ((hot_log = (cur_log != &rli->cache_buf))) + if ((hot_log = (cur_log != &rli->cache_buf)) || + DBUG_EVALUATE_IF("force_sql_thread_error", 1, 0)) { DBUG_ASSERT(rli->cur_log_fd == -1); // foreign descriptor mysql_mutex_lock(log_lock); @@ -7517,7 +7707,8 @@ Reading xxx_file_id is safe because the log will only be rotated when we hold relay_log.LOCK_log */ - if (rli->relay_log.get_open_count() != rli->cur_log_old_open_count) + if (rli->relay_log.get_open_count() != rli->cur_log_old_open_count && + DBUG_EVALUATE_IF("force_sql_thread_error", 0, 1)) { // The master has switched to a new log file; Reopen the old log file cur_log=reopen_relay_log(rli, &errmsg); @@ -7532,8 +7723,13 @@ error during a write by the slave I/O thread may have closed it), we have to test it. */ - if (!my_b_inited(cur_log)) + if (!my_b_inited(cur_log) || + DBUG_EVALUATE_IF("force_sql_thread_error", 1, 0)) + { + if (hot_log) + mysql_mutex_unlock(log_lock); goto err; + } #ifndef DBUG_OFF { DBUG_PRINT("info", ("assertion skip %lu file pos %lu event relay log pos %lu file %s\n", @@ -8118,6 +8314,7 @@ (memcmp(fixed_in, master_ver, 3) > 0) && (pred == NULL || (*pred)(param))) { + enum loglevel report_level= INFORMATION_LEVEL; if (!report) return TRUE; // a short message for SHOW SLAVE STATUS (message length constraints) @@ -8126,25 +8323,35 @@ " so slave stops; check error log on slave" " for more info", MYF(0), bug_id); // a verbose message for the error log - rli->report(ERROR_LEVEL, ER_UNKNOWN_ERROR, - "According to the master's version ('%s')," - " it is probable that master suffers from this bug:" - " http://bugs.mysql.com/bug.php?id=%u" - " and thus replicating the current binary log event" - " may make the slave's data become different from the" - " master's data." - " To take no risk, slave refuses to replicate" - " this event and stops." - " We recommend that all updates be stopped on the" - " master and slave, that the data of both be" - " manually synchronized," - " that master's binary logs be deleted," - " that master be upgraded to a version at least" - " equal to '%d.%d.%d'. Then replication can be" - " restarted.", - rli->get_rli_description_event()->server_version, - bug_id, - fixed_in[0], fixed_in[1], fixed_in[2]); + if (!ignored_error_code(ER_UNKNOWN_ERROR)) + { + report_level= ERROR_LEVEL; + current_thd->is_slave_error= 1; + } + /* In case of ignored errors report warnings only if log_warnings > 1. */ + else if (log_warnings > 1) + report_level= WARNING_LEVEL; + + if (report_level != INFORMATION_LEVEL) + rli->report(report_level, ER_UNKNOWN_ERROR, + "According to the master's version ('%s')," + " it is probable that master suffers from this bug:" + " http://bugs.mysql.com/bug.php?id=%u" + " and thus replicating the current binary log event" + " may make the slave's data become different from the" + " master's data." + " To take no risk, slave refuses to replicate" + " this event and stops." + " We recommend that all updates be stopped on the" + " master and slave, that the data of both be" + " manually synchronized," + " that master's binary logs be deleted," + " that master be upgraded to a version at least" + " equal to '%d.%d.%d'. Then replication can be" + " restarted.", + rli->get_rli_description_event()->server_version, + bug_id, + fixed_in[0], fixed_in[1], fixed_in[2]); return TRUE; } } diff -Nru mysql-5.6-5.6.27/sql/rpl_utility.cc mysql-5.6-5.6.33/sql/rpl_utility.cc --- mysql-5.6-5.6.27/sql/rpl_utility.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/rpl_utility.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -350,7 +350,7 @@ return length; } -#ifndef MYSQL_CLIENT +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) /** */ static void show_sql_type(enum_field_types type, uint16 metadata, String *str, @@ -916,14 +916,26 @@ const char *tbl_name= table->s->table_name.str; char source_buf[MAX_FIELD_WIDTH]; char target_buf[MAX_FIELD_WIDTH]; + enum loglevel report_level= INFORMATION_LEVEL; + String source_type(source_buf, sizeof(source_buf), &my_charset_latin1); String target_type(target_buf, sizeof(target_buf), &my_charset_latin1); show_sql_type(type(col), field_metadata(col), &source_type, field->charset()); field->sql_type(target_type); - rli->report(ERROR_LEVEL, ER_SLAVE_CONVERSION_FAILED, - ER(ER_SLAVE_CONVERSION_FAILED), - col, db_name, tbl_name, - source_type.c_ptr_safe(), target_type.c_ptr_safe()); + if (!ignored_error_code(ER_SLAVE_CONVERSION_FAILED)) + { + report_level= ERROR_LEVEL; + thd->is_slave_error= 1; + } + /* In case of ignored errors report warnings only if log_warnings > 1. */ + else if (log_warnings > 1) + report_level= WARNING_LEVEL; + + if (report_level != INFORMATION_LEVEL) + rli->report(report_level, ER_SLAVE_CONVERSION_FAILED, + ER(ER_SLAVE_CONVERSION_FAILED), + col, db_name, tbl_name, + source_type.c_ptr_safe(), target_type.c_ptr_safe()); return false; } } @@ -1061,10 +1073,23 @@ err: if (conv_table == NULL) - rli->report(ERROR_LEVEL, ER_SLAVE_CANT_CREATE_CONVERSION, - ER(ER_SLAVE_CANT_CREATE_CONVERSION), - target_table->s->db.str, - target_table->s->table_name.str); + { + enum loglevel report_level= INFORMATION_LEVEL; + if (!ignored_error_code(ER_SLAVE_CANT_CREATE_CONVERSION)) + { + report_level= ERROR_LEVEL; + thd->is_slave_error= 1; + } + /* In case of ignored errors report warnings only if log_warnings > 1. */ + else if (log_warnings > 1) + report_level= WARNING_LEVEL; + + if (report_level != INFORMATION_LEVEL) + rli->report(report_level, ER_SLAVE_CANT_CREATE_CONVERSION, + ER(ER_SLAVE_CANT_CREATE_CONVERSION), + target_table->s->db.str, + target_table->s->table_name.str); + } DBUG_RETURN(conv_table); } @@ -1243,7 +1268,7 @@ static uchar* hash_slave_rows_get_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { DBUG_ENTER("get_key"); diff -Nru mysql-5.6-5.6.27/sql/scheduler.cc mysql-5.6-5.6.33/sql/scheduler.cc --- mysql-5.6-5.6.27/sql/scheduler.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/scheduler.cc 2016-08-26 11:22:35.000000000 +0000 @@ -34,8 +34,8 @@ static bool no_threads_end(THD *thd, bool put_in_cache) { thd_release_resources(thd); - dec_connection_count(); remove_global_thread(thd); + dec_connection_count(); // THD is an incomplete type here, so use destroy_thd() to delete it. destroy_thd(thd); diff -Nru mysql-5.6-5.6.27/sql/share/errmsg-utf8.txt mysql-5.6-5.6.33/sql/share/errmsg-utf8.txt --- mysql-5.6-5.6.27/sql/share/errmsg-utf8.txt 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/share/errmsg-utf8.txt 2016-08-26 11:22:35.000000000 +0000 @@ -6781,7 +6781,7 @@ eng "CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1." ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION - eng "When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1." + eng "When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions." ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME eng "The value of @@GLOBAL.GTID_MODE can only change one step at a time: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions." diff -Nru mysql-5.6-5.6.27/sql/sp.cc mysql-5.6-5.6.33/sql/sp.cc --- mysql-5.6-5.6.27/sql/sp.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sp.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2553,8 +2553,9 @@ bool sp_check_name(LEX_STRING *ident) { - if (!ident || !ident->str || !ident->str[0] || - ident->str[ident->length-1] == ' ') + DBUG_ASSERT(ident != NULL && ident->str != NULL); + + if (!ident->str[0] || ident->str[ident->length-1] == ' ') { my_error(ER_SP_WRONG_NAME, MYF(0), ident->str); return true; diff -Nru mysql-5.6-5.6.27/sql/sp_instr.cc mysql-5.6-5.6.33/sql/sp_instr.cc --- mysql-5.6-5.6.27/sql/sp_instr.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sp_instr.cc 2016-08-26 11:22:35.000000000 +0000 @@ -45,7 +45,8 @@ /* StoredRoutinesBinlogging This paragraph applies only to statement-based binlogging. Row-based - binlogging does not need anything special like this. + binlogging does not need anything special like this except for a special + case that is mentioned below in section 2.1 Top-down overview: @@ -72,6 +73,14 @@ of SP local variables with NAME_CONST('spvar_name', ) calls. This substitution is done in subst_spvars(). + 2.1 Miscellaneous case: DDLs (Eg: ALTER EVENT) in StoredProcedure(SP) uses + its local variables + + * Irrespective of binlog format, DDLs are always binlogged in statement mode. + Hence if there are any DDLs, in stored procedure, that uses SP local + variables, those should be replaced with NAME_CONST('spvar_name', ) + even if binlog format is 'row'. + 3. FUNCTION calls In sp_head::execute_function(), we check @@ -769,7 +778,13 @@ - general log is off - - binary logging is off, or not in statement mode + - binary logging is off + + - if the query generates row events in binlog row format mode + (DDLs are always written in statement format irrespective of binlog_format + and they can have SP variables in it. For example, 'ALTER EVENT' is allowed + inside a procedure and can contain SP variables in it. Those too need to be + substituted with NAME_CONST(...)) We don't have to substitute on behalf of the query cache as queries with SP vars are not cached, anyway. @@ -786,10 +801,11 @@ substitution immediately before writing to the log. */ - need_subst= ((thd->variables.option_bits & OPTION_LOG_OFF) && + need_subst= !((thd->variables.option_bits & OPTION_LOG_OFF) && (!(thd->variables.option_bits & OPTION_BIN_LOG) || !mysql_bin_log.is_open() || - thd->is_current_stmt_binlog_format_row())) ? FALSE : TRUE; + (thd->is_current_stmt_binlog_format_row() && + sqlcom_can_generate_row_events(m_lex->sql_command)))); /* If we need to do a substitution but can't (OOM), give up. diff -Nru mysql-5.6-5.6.27/sql/sp_instr.h mysql-5.6-5.6.33/sql/sp_instr.h --- mysql-5.6-5.6.27/sql/sp_instr.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sp_instr.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -350,6 +350,8 @@ */ virtual void cleanup_before_parsing(THD *thd); + /// LEX-object. + LEX *m_lex; private: /** Mem-root for storing the LEX-tree during reparse. This @@ -358,8 +360,6 @@ */ MEM_ROOT m_lex_mem_root; - /// LEX-object. - LEX *m_lex; /** Indicates whether this sp_lex_instr instance is responsible for diff -Nru mysql-5.6-5.6.27/sql/sql_acl.cc mysql-5.6-5.6.33/sql/sql_acl.cc --- mysql-5.6-5.6.27/sql/sql_acl.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_acl.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. - +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +sql_authenticate This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. @@ -53,6 +53,7 @@ #include #include "password.h" #include "crypt_genhash_impl.h" +#include "debug_sync.h" #if defined(HAVE_OPENSSL) && !defined(HAVE_YASSL) #include @@ -624,7 +625,7 @@ static uchar* acl_entry_get_key(acl_entry *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=(uint) entry->length; return (uchar*) entry->key; @@ -841,7 +842,6 @@ NULL, 1, 1, FALSE)) goto end; table->use_all_columns(); - (void) my_init_dynamic_array(&acl_users,sizeof(ACL_USER),50,100); allow_all_hosts=0; while (!(read_record_info.read_record(&read_record_info))) @@ -1141,7 +1141,6 @@ NULL, 1, 1, FALSE)) goto end; table->use_all_columns(); - (void) my_init_dynamic_array(&acl_dbs,sizeof(ACL_DB),50,100); while (!(read_record_info.read_record(&read_record_info))) { /* Reading record in mysql.db */ @@ -1202,8 +1201,6 @@ freeze_size(&acl_dbs); /* Prepare to read records from the mysql.proxies_priv table */ - (void) my_init_dynamic_array(&acl_proxy_users, sizeof(ACL_PROXY_USER), - 50, 100); if (tables[2].table) { if (init_read_record(&read_record_info, thd, table= tables[2].table, @@ -1431,6 +1428,9 @@ old_acl_users= acl_users; old_acl_proxy_users= acl_proxy_users; old_acl_dbs= acl_dbs; + my_init_dynamic_array(&acl_users, sizeof(ACL_USER), 50, 100); + my_init_dynamic_array(&acl_dbs, sizeof(ACL_DB), 50, 100); + my_init_dynamic_array(&acl_proxy_users, sizeof(ACL_PROXY_USER), 50, 100); old_mem= global_acl_memory; delete_dynamic(&acl_wild_hosts); my_hash_free(&acl_check_hosts); @@ -1456,6 +1456,8 @@ mysql_mutex_unlock(&acl_cache->lock); end: close_acl_tables(thd); + + DEBUG_SYNC(thd, "after_acl_reload"); DBUG_RETURN(return_val); } @@ -1671,7 +1673,7 @@ } static uchar* check_get_key(ACL_USER *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=buff->host.get_host_len(); return (uchar*) buff->host.get_host(); @@ -2834,9 +2836,14 @@ goto end; } - if (!combo->uses_identified_by_clause && - !combo->uses_identified_with_clause && - !combo->uses_identified_by_password_clause) + if ((!combo->uses_identified_by_clause && + !combo->uses_identified_with_clause && + !combo->uses_identified_by_password_clause) || + (combo->uses_identified_with_clause && + (!my_strcasecmp(system_charset_info, combo->plugin.str, + native_password_plugin_name.str) || + !my_strcasecmp(system_charset_info, combo->plugin.str, + old_password_plugin_name.str)))) { if (check_password_policy(NULL)) { @@ -3605,7 +3612,7 @@ static uchar* get_key_column(GRANT_COLUMN *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=buff->key_length; return (uchar*) buff->column; @@ -3798,7 +3805,7 @@ static uchar* get_grant_table(GRANT_NAME *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=buff->key_length; return (uchar*) buff->hash_key; @@ -8685,11 +8692,14 @@ DBUG_RETURN(FALSE); } + mysql_mutex_lock(&acl_cache->lock); + /* check for matching WITH PROXY rights */ for (uint i=0; i < acl_proxy_users.elements; i++) { ACL_PROXY_USER *proxy= dynamic_element(&acl_proxy_users, i, ACL_PROXY_USER *); + DEBUG_SYNC(thd, "before_proxy_matches"); if (proxy->matches(thd->security_ctx->get_host()->ptr(), thd->security_ctx->user, thd->security_ctx->get_ip()->ptr(), @@ -8697,10 +8707,12 @@ proxy->get_with_grant()) { DBUG_PRINT("info", ("found")); + mysql_mutex_unlock(&acl_cache->lock); DBUG_RETURN(FALSE); } } + mysql_mutex_unlock(&acl_cache->lock); my_error(ER_ACCESS_DENIED_NO_PASSWORD_ERROR, MYF(0), thd->security_ctx->user, thd->security_ctx->host_or_ip); @@ -10191,12 +10203,17 @@ *string_length= (size_t)net_field_length_ll((uchar **)buffer); + DBUG_EXECUTE_IF("sha256_password_scramble_too_long", + *string_length= SIZE_T_MAX; + ); + size_t len_len= (size_t)(*buffer - begin); - if (*string_length + len_len > *max_bytes_available) + if (*string_length > *max_bytes_available - len_len) return NULL; - *max_bytes_available -= *string_length + len_len; + *max_bytes_available -= *string_length; + *max_bytes_available -= len_len; *buffer += *string_length; return (char *)(begin + len_len); } @@ -10294,8 +10311,6 @@ mpvio->client_capabilities= uint4korr(end); mpvio->max_client_packet_length= 0xfffff; charset_code= global_system_variables.character_set_client->number; - if (mpvio->charset_adapter->init_client_charset(charset_code)) - return packet_error; goto skip_to_ssl; } @@ -10333,10 +10348,6 @@ charset_code= global_system_variables.character_set_client->number; } - DBUG_PRINT("info", ("client_character_set: %u", charset_code)); - if (mpvio->charset_adapter->init_client_charset(charset_code)) - return packet_error; - skip_to_ssl: #if defined(HAVE_OPENSSL) DBUG_PRINT("info", ("client capabilities: %lu", mpvio->client_capabilities)); @@ -10349,6 +10360,9 @@ if (mpvio->client_capabilities & CLIENT_SSL) { unsigned long errptr; +#if !defined(DBUG_OFF) + uint ssl_charset_code= 0; +#endif /* Do the SSL layering. */ if (!ssl_acceptor_fd) @@ -10386,6 +10400,10 @@ { packet_has_required_size= bytes_remaining_in_packet >= AUTH_PACKET_HEADER_SIZE_PROTO_41; +#if !defined(DBUG_OFF) + ssl_charset_code= (uint)(uchar)*((char *)net->read_pos + 8); + DBUG_PRINT("info", ("client_character_set: %u", ssl_charset_code)); +#endif end= (char *)net->read_pos + AUTH_PACKET_HEADER_SIZE_PROTO_41; bytes_remaining_in_packet -= AUTH_PACKET_HEADER_SIZE_PROTO_41; } @@ -10395,13 +10413,24 @@ AUTH_PACKET_HEADER_SIZE_PROTO_40; end= (char *)net->read_pos + AUTH_PACKET_HEADER_SIZE_PROTO_40; bytes_remaining_in_packet -= AUTH_PACKET_HEADER_SIZE_PROTO_40; +#if !defined(DBUG_OFF) + /** + Old clients didn't have their own charset. Instead the assumption + was that they used what ever the server used. + */ + ssl_charset_code= global_system_variables.character_set_client->number; +#endif } - + DBUG_ASSERT(charset_code == ssl_charset_code); if (!packet_has_required_size) return packet_error; } #endif /* HAVE_OPENSSL */ + DBUG_PRINT("info", ("client_character_set: %u", charset_code)); + if (mpvio->charset_adapter->init_client_charset(charset_code)) + return packet_error; + if ((mpvio->client_capabilities & CLIENT_TRANSACTIONS) && opt_using_transactions) net->return_status= mpvio->server_status; @@ -11022,6 +11051,27 @@ } /** + Assign priv_user and priv_host fields of the Security_context. + + @param sctx Security context, which priv_user and priv_host fields are + updated. + @param user Authenticated user data. +*/ +inline void +assign_priv_user_host(Security_context *sctx, const ACL_USER *user) +{ + if (user->user) + strmake(sctx->priv_user, user->user, USERNAME_LENGTH - 1); + else + *sctx->priv_user= 0; + + if (user->host.get_host()) + strmake(sctx->priv_host, user->host.get_host(), MAX_HOSTNAME - 1); + else + *sctx->priv_host= 0; +} + +/** Perform the handshake, authorize the client and update thd sctx variables. @param thd thread handle @@ -11148,6 +11198,9 @@ res= CR_ERROR; } + if (mpvio.can_authenticate()) + assign_priv_user_host(sctx, acl_user); + if (res > CR_OK && mpvio.status != MPVIO_EXT::SUCCESS) { Host_errors errors; @@ -11230,15 +11283,7 @@ #endif sctx->master_access= acl_user->access; - if (acl_user->user) - strmake(sctx->priv_user, acl_user->user, USERNAME_LENGTH - 1); - else - *sctx->priv_user= 0; - - if (acl_user->host.get_host()) - strmake(sctx->priv_host, acl_user->host.get_host(), MAX_HOSTNAME - 1); - else - *sctx->priv_host= 0; + assign_priv_user_host(sctx, acl_user); #ifndef NO_EMBEDDED_ACCESS_CHECKS /* diff -Nru mysql-5.6-5.6.27/sql/sql_admin.cc mysql-5.6-5.6.33/sql/sql_admin.cc --- mysql-5.6-5.6.27/sql/sql_admin.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_admin.cc 2016-08-26 11:22:35.000000000 +0000 @@ -247,7 +247,8 @@ sql_errno == ER_LOCK_WAIT_TIMEOUT || sql_errno == ER_LOCK_DEADLOCK || sql_errno == ER_CANT_LOCK_LOG_TABLE || - sql_errno == ER_OPEN_AS_READONLY); + sql_errno == ER_OPEN_AS_READONLY || + sql_errno == ER_WRONG_OBJECT); } @@ -351,7 +352,13 @@ lex->query_tables_last= &table->next_global; lex->query_tables_own_last= 0; - if (view_operator_func == NULL) + /* + CHECK TABLE command is allowed for views as well. Check on alter flags + to differentiate from ALTER TABLE...CHECK PARTITION on which view is not + allowed. + */ + if (lex->alter_info.flags & Alter_info::ALTER_ADMIN_PARTITION || + view_operator_func == NULL) table->required_type=FRMTYPE_TABLE; if (!thd->locked_tables_mode && repair_table_use_frm) diff -Nru mysql-5.6-5.6.27/sql/sql_alter.h mysql-5.6-5.6.33/sql/sql_alter.h --- mysql-5.6-5.6.27/sql/sql_alter.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_alter.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights +/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -71,59 +71,56 @@ // Set for DISABLE KEYS | ENABLE KEYS static const uint ALTER_KEYS_ONOFF = 1L << 9; - // Set for CONVERT TO CHARACTER SET - static const uint ALTER_CONVERT = 1L << 10; - // Set for FORCE // Set for ENGINE(same engine) // Set by mysql_recreate_table() - static const uint ALTER_RECREATE = 1L << 11; + static const uint ALTER_RECREATE = 1L << 10; // Set for ADD PARTITION - static const uint ALTER_ADD_PARTITION = 1L << 12; + static const uint ALTER_ADD_PARTITION = 1L << 11; // Set for DROP PARTITION - static const uint ALTER_DROP_PARTITION = 1L << 13; + static const uint ALTER_DROP_PARTITION = 1L << 12; // Set for COALESCE PARTITION - static const uint ALTER_COALESCE_PARTITION = 1L << 14; + static const uint ALTER_COALESCE_PARTITION = 1L << 13; // Set for REORGANIZE PARTITION ... INTO - static const uint ALTER_REORGANIZE_PARTITION = 1L << 15; + static const uint ALTER_REORGANIZE_PARTITION = 1L << 14; // Set for partition_options - static const uint ALTER_PARTITION = 1L << 16; + static const uint ALTER_PARTITION = 1L << 15; // Set for LOAD INDEX INTO CACHE ... PARTITION // Set for CACHE INDEX ... PARTITION - static const uint ALTER_ADMIN_PARTITION = 1L << 17; + static const uint ALTER_ADMIN_PARTITION = 1L << 16; // Set for REORGANIZE PARTITION - static const uint ALTER_TABLE_REORG = 1L << 18; + static const uint ALTER_TABLE_REORG = 1L << 17; // Set for REBUILD PARTITION - static const uint ALTER_REBUILD_PARTITION = 1L << 19; + static const uint ALTER_REBUILD_PARTITION = 1L << 18; // Set for partitioning operations specifying ALL keyword - static const uint ALTER_ALL_PARTITION = 1L << 20; + static const uint ALTER_ALL_PARTITION = 1L << 19; // Set for REMOVE PARTITIONING - static const uint ALTER_REMOVE_PARTITIONING = 1L << 21; + static const uint ALTER_REMOVE_PARTITIONING = 1L << 20; // Set for ADD FOREIGN KEY - static const uint ADD_FOREIGN_KEY = 1L << 22; + static const uint ADD_FOREIGN_KEY = 1L << 21; // Set for DROP FOREIGN KEY - static const uint DROP_FOREIGN_KEY = 1L << 23; + static const uint DROP_FOREIGN_KEY = 1L << 22; // Set for EXCHANGE PARITION - static const uint ALTER_EXCHANGE_PARTITION = 1L << 24; + static const uint ALTER_EXCHANGE_PARTITION = 1L << 23; // Set by Sql_cmd_alter_table_truncate_partition::execute() - static const uint ALTER_TRUNCATE_PARTITION = 1L << 25; + static const uint ALTER_TRUNCATE_PARTITION = 1L << 24; // Set for ADD [COLUMN] FIRST | AFTER - static const uint ALTER_COLUMN_ORDER = 1L << 26; + static const uint ALTER_COLUMN_ORDER = 1L << 25; enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; diff -Nru mysql-5.6-5.6.27/sql/sql_analyse.cc mysql-5.6-5.6.33/sql/sql_analyse.cc --- mysql-5.6-5.6.27/sql/sql_analyse.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_analyse.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,25 +34,25 @@ using std::min; using std::max; -int sortcmp2(void* cmp_arg __attribute__((unused)), +int sortcmp2(void* cmp_arg MY_ATTRIBUTE((unused)), const String *a,const String *b) { return sortcmp(a,b,a->charset()); } -int compare_double2(void* cmp_arg __attribute__((unused)), +int compare_double2(void* cmp_arg MY_ATTRIBUTE((unused)), const double *s, const double *t) { return compare_double(s,t); } -int compare_longlong2(void* cmp_arg __attribute__((unused)), +int compare_longlong2(void* cmp_arg MY_ATTRIBUTE((unused)), const longlong *s, const longlong *t) { return compare_longlong(s,t); } -int compare_ulonglong2(void* cmp_arg __attribute__((unused)), +int compare_ulonglong2(void* cmp_arg MY_ATTRIBUTE((unused)), const ulonglong *s, const ulonglong *t) { return compare_ulonglong(s,t); @@ -835,7 +835,7 @@ void field_real::get_opt_type(String *answer, - ha_rows total_rows __attribute__((unused))) + ha_rows total_rows MY_ATTRIBUTE((unused))) { char buff[MAX_FIELD_WIDTH]; @@ -888,7 +888,7 @@ void field_longlong::get_opt_type(String *answer, - ha_rows total_rows __attribute__((unused))) + ha_rows total_rows MY_ATTRIBUTE((unused))) { char buff[MAX_FIELD_WIDTH]; @@ -919,7 +919,7 @@ void field_ulonglong::get_opt_type(String *answer, - ha_rows total_rows __attribute__((unused))) + ha_rows total_rows MY_ATTRIBUTE((unused))) { char buff[MAX_FIELD_WIDTH]; @@ -944,7 +944,7 @@ void field_decimal::get_opt_type(String *answer, - ha_rows total_rows __attribute__((unused))) + ha_rows total_rows MY_ATTRIBUTE((unused))) { my_decimal zero; char buff[MAX_FIELD_WIDTH]; @@ -1022,7 +1022,7 @@ int collect_string(String *element, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), TREE_INFO *info) { if (info->found) @@ -1037,7 +1037,7 @@ } // collect_string -int collect_real(double *element, element_count count __attribute__((unused)), +int collect_real(double *element, element_count count MY_ATTRIBUTE((unused)), TREE_INFO *info) { char buff[MAX_FIELD_WIDTH]; @@ -1078,7 +1078,7 @@ int collect_longlong(longlong *element, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), TREE_INFO *info) { char buff[MAX_FIELD_WIDTH]; @@ -1097,7 +1097,7 @@ int collect_ulonglong(ulonglong *element, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), TREE_INFO *info) { char buff[MAX_FIELD_WIDTH]; diff -Nru mysql-5.6-5.6.27/sql/sql_analyse.h mysql-5.6-5.6.33/sql/sql_analyse.h --- mysql-5.6-5.6.27/sql/sql_analyse.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_analyse.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef SQL_ANALYSE_INCLUDED #define SQL_ANALYSE_INCLUDED -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -53,13 +53,13 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num); bool test_if_number(NUM_INFO *info, const char *str, uint str_len); int compare_double(const double *s, const double *t); -int compare_double2(void* cmp_arg __attribute__((unused)), +int compare_double2(void* cmp_arg MY_ATTRIBUTE((unused)), const double *s, const double *t); int compare_longlong(const longlong *s, const longlong *t); -int compare_longlong2(void* cmp_arg __attribute__((unused)), +int compare_longlong2(void* cmp_arg MY_ATTRIBUTE((unused)), const longlong *s, const longlong *t); int compare_ulonglong(const ulonglong *s, const ulonglong *t); -int compare_ulonglong2(void* cmp_arg __attribute__((unused)), +int compare_ulonglong2(void* cmp_arg MY_ATTRIBUTE((unused)), const ulonglong *s, const ulonglong *t); int compare_decimal2(int* len, const char *s, const char *t); void free_string(String*); @@ -97,7 +97,7 @@ int collect_string(String *element, element_count count, TREE_INFO *info); -int sortcmp2(void* cmp_arg __attribute__((unused)), +int sortcmp2(void* cmp_arg MY_ATTRIBUTE((unused)), const String *a,const String *b); class field_str :public field_info @@ -120,9 +120,9 @@ void add(); void get_opt_type(String*, ha_rows); - String *get_min_arg(String *not_used __attribute__((unused))) + String *get_min_arg(String *not_used MY_ATTRIBUTE((unused))) { return &min_arg; } - String *get_max_arg(String *not_used __attribute__((unused))) + String *get_max_arg(String *not_used MY_ATTRIBUTE((unused))) { return &max_arg; } String *avg(String *s, ha_rows rows) { @@ -137,8 +137,8 @@ TREE_INFO *info); tree_walk_action collect_enum() { return (tree_walk_action) collect_string; } - String *std(String *s __attribute__((unused)), - ha_rows rows __attribute__((unused))) + String *std(String *s MY_ATTRIBUTE((unused)), + ha_rows rows MY_ATTRIBUTE((unused))) { return (String*) 0; } }; diff -Nru mysql-5.6-5.6.27/sql/sql_audit.cc mysql-5.6-5.6.33/sql/sql_audit.cc --- mysql-5.6-5.6.27/sql/sql_audit.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_audit.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -494,7 +494,7 @@ /** There's at least one active audit plugin tracking the general events */ -bool is_any_audit_plugin_active(THD *thd __attribute__((unused))) +bool is_any_audit_plugin_active(THD *thd MY_ATTRIBUTE((unused))) { return (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK); } diff -Nru mysql-5.6-5.6.27/sql/sql_audit.h mysql-5.6-5.6.33/sql/sql_audit.h --- mysql-5.6-5.6.27/sql/sql_audit.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_audit.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ #ifndef EMBEDDED_LIBRARY extern void mysql_audit_notify(THD *thd, uint event_class, uint event_subtype, ...); -bool is_any_audit_plugin_active(THD *thd __attribute__((unused))); +bool is_any_audit_plugin_active(THD *thd MY_ATTRIBUTE((unused))); #else #define mysql_audit_notify(...) #endif diff -Nru mysql-5.6-5.6.27/sql/sql_base.cc mysql-5.6-5.6.33/sql/sql_base.cc --- mysql-5.6-5.6.27/sql/sql_base.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_base.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -237,11 +237,6 @@ TABLE_SHARE *table_share); static bool open_table_entry_fini(THD *thd, TABLE_SHARE *share, TABLE *entry); static bool auto_repair_table(THD *thd, TABLE_LIST *table_list); -static bool -has_write_table_with_auto_increment(TABLE_LIST *tables); -static bool -has_write_table_with_auto_increment_and_select(TABLE_LIST *tables); -static bool has_write_table_auto_increment_not_first_in_pk(TABLE_LIST *tables); /** @@ -335,7 +330,7 @@ *****************************************************************************/ extern "C" uchar *table_def_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { TABLE_SHARE *entry=(TABLE_SHARE*) record; *length= entry->table_cache_key.length; @@ -503,7 +498,7 @@ if (my_hash_insert(&table_def_cache, (uchar*) share)) { free_table_share(share); - DBUG_RETURN(0); // return error + DBUG_RETURN(0); // return error } if (open_table_def(thd, share, db_flags)) { @@ -511,10 +506,11 @@ (void) my_hash_delete(&table_def_cache, (uchar*) share); DBUG_RETURN(0); } - share->ref_count++; // Mark in use + share->ref_count++; // Mark in use #ifdef HAVE_PSI_TABLE_INTERFACE - share->m_psi= PSI_TABLE_CALL(get_table_share)(false, share); + share->m_psi= + PSI_TABLE_CALL(get_table_share)((share->tmp_table != NO_TMP_TABLE), share); #else share->m_psi= NULL; #endif @@ -2797,6 +2793,16 @@ */ if (dd_frm_type(thd, path, ¬_used) == FRMTYPE_VIEW) { + /* + If parent_l of the table_list is non null then a merge table + has this view as child table, which is not supported. + */ + if (table_list->parent_l) + { + my_error(ER_WRONG_MRG_TABLE, MYF(0)); + DBUG_RETURN(true); + } + if (!tdc_open_view(thd, table_list, alias, key, key_length, CHECK_METADATA_VERSION)) { @@ -4859,7 +4865,7 @@ } extern "C" uchar *schema_set_get_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { TABLE_LIST *table=(TABLE_LIST*) record; *length= table->db_length; @@ -5456,6 +5462,15 @@ &table_list->view->sroutines_list, table_list->top_table()); } + + /* + If a trigger was defined on one of the associated tables then assign the + 'trg_event_map' value of the view to the next table in table_list. When a + Stored function is invoked, all the associated tables including the tables + associated with the trigger are prelocked. + */ + if (table_list->trg_event_map && table_list->next_global) + table_list->next_global->trg_event_map= table_list->trg_event_map; return FALSE; } @@ -5985,64 +6000,6 @@ *(ptr++)= table->table; } - /* - DML statements that modify a table with an auto_increment column based on - rows selected from a table are unsafe as the order in which the rows are - fetched fron the select tables cannot be determined and may differ on - master and slave. - */ - if (thd->variables.binlog_format != BINLOG_FORMAT_ROW && tables && - has_write_table_with_auto_increment_and_select(tables)) - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_WRITE_AUTOINC_SELECT); - /* Todo: merge all has_write_table_auto_inc with decide_logging_format */ - if (thd->variables.binlog_format != BINLOG_FORMAT_ROW && tables) - { - if (has_write_table_auto_increment_not_first_in_pk(tables)) - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_NOT_FIRST); - } - - /* - INSERT...ON DUPLICATE KEY UPDATE on a table with more than one unique keys - can be unsafe. - */ - uint unique_keys= 0; - for (TABLE_LIST *query_table= tables; query_table && unique_keys <= 1; - query_table= query_table->next_global) - if(query_table->table) - { - uint keys= query_table->table->s->keys, i= 0; - unique_keys= 0; - for (KEY* keyinfo= query_table->table->s->key_info; - i < keys && unique_keys <= 1; i++, keyinfo++) - { - if (keyinfo->flags & HA_NOSAME) - unique_keys++; - } - if (!query_table->placeholder() && - query_table->lock_type >= TL_WRITE_ALLOW_WRITE && - unique_keys > 1 && thd->lex->sql_command == SQLCOM_INSERT && - /* Duplicate key update is not supported by INSERT DELAYED */ - thd->get_command() != COM_DELAYED_INSERT && - thd->lex->duplicates == DUP_UPDATE) - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS); - } - - - /* We have to emulate LOCK TABLES if we are statement needs prelocking. */ - if (thd->lex->requires_prelocking()) - { - - /* - A query that modifies autoinc column in sub-statement can make the - master and slave inconsistent. - We can solve these problems in mixed mode by switching to binlogging - if at least one updated table is used by sub-statement - */ - if (thd->variables.binlog_format != BINLOG_FORMAT_ROW && tables && - has_write_table_with_auto_increment(thd->lex->first_not_own_table())) - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS); - } - DEBUG_SYNC(thd, "before_lock_tables_takes_lock"); if (! (thd->lock= mysql_lock_tables(thd, start, (uint) (ptr - start), @@ -9440,98 +9397,6 @@ return a->length == b->length && !strncmp(a->str, b->str, a->length); } - -/* - Tells if two (or more) tables have auto_increment columns and we want to - lock those tables with a write lock. - - SYNOPSIS - has_two_write_locked_tables_with_auto_increment - tables Table list - - NOTES: - Call this function only when you have established the list of all tables - which you'll want to update (including stored functions, triggers, views - inside your statement). -*/ - -static bool -has_write_table_with_auto_increment(TABLE_LIST *tables) -{ - for (TABLE_LIST *table= tables; table; table= table->next_global) - { - /* we must do preliminary checks as table->table may be NULL */ - if (!table->placeholder() && - table->table->found_next_number_field && - (table->lock_type >= TL_WRITE_ALLOW_WRITE)) - return 1; - } - - return 0; -} - -/* - checks if we have select tables in the table list and write tables - with auto-increment column. - - SYNOPSIS - has_two_write_locked_tables_with_auto_increment_and_select - tables Table list - - RETURN VALUES - - -true if the table list has atleast one table with auto-increment column - - - and atleast one table to select from. - -false otherwise -*/ - -static bool -has_write_table_with_auto_increment_and_select(TABLE_LIST *tables) -{ - bool has_select= false; - bool has_auto_increment_tables = has_write_table_with_auto_increment(tables); - for(TABLE_LIST *table= tables; table; table= table->next_global) - { - if (!table->placeholder() && - (table->lock_type <= TL_READ_NO_INSERT)) - { - has_select= true; - break; - } - } - return(has_select && has_auto_increment_tables); -} - -/* - Tells if there is a table whose auto_increment column is a part - of a compound primary key while is not the first column in - the table definition. - - @param tables Table list - - @return true if the table exists, fais if does not. -*/ - -static bool -has_write_table_auto_increment_not_first_in_pk(TABLE_LIST *tables) -{ - for (TABLE_LIST *table= tables; table; table= table->next_global) - { - /* we must do preliminary checks as table->table may be NULL */ - if (!table->placeholder() && - table->table->found_next_number_field && - (table->lock_type >= TL_WRITE_ALLOW_WRITE) - && table->table->s->next_number_keypart != 0) - return 1; - } - - return 0; -} - - - /* Open and lock system tables for read. diff -Nru mysql-5.6-5.6.27/sql/sql_cache.cc mysql-5.6-5.6.33/sql/sql_cache.cc --- mysql-5.6-5.6.27/sql/sql_cache.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_cache.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -729,7 +729,7 @@ extern "C" { uchar *query_cache_table_get_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { Query_cache_block* table_block = (Query_cache_block*) record; *length = (table_block->used - table_block->headers_len() - diff -Nru mysql-5.6-5.6.27/sql/sql_class.cc mysql-5.6-5.6.33/sql/sql_class.cc --- mysql-5.6-5.6.27/sql/sql_class.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_class.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,7 +83,7 @@ ****************************************************************************/ extern "C" uchar *get_var_key(user_var_entry *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= entry->entry_name.length(); return (uchar*) entry->entry_name.ptr(); @@ -521,14 +521,13 @@ return max_connections; } -/* - The following functions form part of the C plugin API -*/ - -extern "C" int mysql_tmpfile(const char *prefix) +int mysql_tmpfile_path(const char *path, const char *prefix) { + DBUG_ASSERT(path != NULL); + DBUG_ASSERT((strlen(path) + strlen(prefix)) <= FN_REFLEN); + char filename[FN_REFLEN]; - File fd = create_temp_file(filename, mysql_tmpdir, prefix, + File fd = create_temp_file(filename, path, prefix, #ifdef __WIN__ O_BINARY | O_TRUNC | O_SEQUENTIAL | O_SHORT_LIVED | @@ -549,6 +548,14 @@ return fd; } +/* + The following functions form part of the C plugin API +*/ + +extern "C" int mysql_tmpfile(const char *prefix) +{ + return mysql_tmpfile_path(mysql_tmpdir, prefix); +} extern "C" int thd_in_lock_tables(const THD *thd) @@ -921,7 +928,7 @@ owned_gtid_set(global_sid_map), main_da(0, false), m_stmt_da(&main_da), - duplicate_slave_uuid(false) + duplicate_slave_id(false) { ulong tmp; @@ -3046,7 +3053,7 @@ int -select_dump::prepare(List &list __attribute__((unused)), +select_dump::prepare(List &list MY_ATTRIBUTE((unused)), SELECT_LEX_UNIT *u) { unit= u; @@ -3458,7 +3465,7 @@ static uchar * get_statement_id_as_hash_key(const uchar *record, size_t *key_length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { const Statement *statement= (const Statement *) record; *key_length= sizeof(statement->id); @@ -3471,7 +3478,7 @@ } static uchar *get_stmt_name_hash_key(Statement *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= entry->name.length; return (uchar*) entry->name.str; @@ -4259,7 +4266,7 @@ extern "C" bool thd_sqlcom_can_generate_row_events(const MYSQL_THD thd) { - return sqlcom_can_generate_row_events(thd); + return sqlcom_can_generate_row_events(thd->lex->sql_command); } extern "C" enum durability_properties thd_get_durability_property(const MYSQL_THD thd) @@ -4772,7 +4779,7 @@ extern "C" void xid_free_hash(void *); uchar *xid_get_hash_key(const uchar *ptr, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=((XID_STATE*)ptr)->xid.key_length(); return ((XID_STATE*)ptr)->xid.key(); @@ -4988,3 +4995,15 @@ DBUG_VOID_RETURN; } +/** + Determine if binlogging is disabled for this session + @retval 0 if the current statement binlogging is disabled + (could be because of binlog closed/binlog option + is set to false). + @retval 1 if the current statement will be binlogged +*/ +bool THD::is_current_stmt_binlog_disabled() const +{ + return (!(variables.option_bits & OPTION_BIN_LOG) || + !mysql_bin_log.is_open()); +} diff -Nru mysql-5.6-5.6.27/sql/sql_class.h mysql-5.6-5.6.33/sql/sql_class.h --- mysql-5.6-5.6.27/sql/sql_class.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_class.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -1562,6 +1562,8 @@ /** Type of locked tables mode. See comment for THD::locked_tables_mode for complete description. + While adding new enum values add them to the getter method for this enum + declared below and defined in sql_class.cc as well. */ enum enum_locked_tables_mode @@ -1572,6 +1574,15 @@ LTM_PRELOCKED_UNDER_LOCK_TABLES }; +#ifndef DBUG_OFF +/** + Getter for the enum enum_locked_tables_mode + @param locked_tables_mode enum for types of locked tables mode + + @return The string represantation of that enum value +*/ +const char * get_locked_tables_mode_name(enum_locked_tables_mode locked_tables_mode); +#endif /** Class that holds information about tables which were opened and locked @@ -2342,6 +2353,9 @@ current_stmt_binlog_format == BINLOG_FORMAT_ROW); return current_stmt_binlog_format == BINLOG_FORMAT_ROW; } + + bool is_current_stmt_binlog_disabled() const; + /** Tells whether the given optimizer_switch flag is on */ inline bool optimizer_switch_flag(ulonglong flag) const { @@ -3001,6 +3015,7 @@ { CE_NONE= 0, CE_FLUSH_ERROR, + CE_SYNC_ERROR, CE_COMMIT_ERROR, CE_ERROR_COUNT } commit_error; @@ -4144,11 +4159,12 @@ public: /** This is only used by master dump threads. - When the master receives a new connection from a slave with a UUID that - is already connected, it will set this flag TRUE before killing the old - slave connection. + When the master receives a new connection from a slave with a + UUID (for slave versions >= 5.6)/server_id(for slave versions < 5.6) + that is already connected, it will set this flag TRUE + before killing the old slave connection. */ - bool duplicate_slave_uuid; + bool duplicate_slave_id; }; @@ -4938,7 +4954,7 @@ @retval false on success @retval true on memory allocation error */ - bool store(void *from, uint length, Item_result type); + bool store(const void *from, uint length, Item_result type); public: user_var_entry() {} /* Remove gcc warning */ @@ -4961,7 +4977,7 @@ @retval false on success @retval true on memory allocation error */ - bool store(void *from, uint length, Item_result type, + bool store(const void *from, uint length, Item_result type, const CHARSET_INFO *cs, Derivation dv, bool unsigned_arg); /** Set type of to the given value. @@ -5364,4 +5380,20 @@ #endif /* MYSQL_SERVER */ +/** + Create a temporary file. + + @details + The temporary file is created in a location specified by the parameter + path. if path is null, then it will be created on the location given + by the mysql server configuration (--tmpdir option). The caller + does not need to delete the file, it will be deleted automatically. + + @param path location for creating temporary file + @param prefix prefix for temporary file name + @retval -1 error + @retval >= 0 a file handle that can be passed to dup or my_close +*/ +int mysql_tmpfile_path(const char* path, const char* prefix); + #endif /* SQL_CLASS_INCLUDED */ diff -Nru mysql-5.6-5.6.27/sql/sql_connect.cc mysql-5.6-5.6.33/sql/sql_connect.cc --- mysql-5.6-5.6.27/sql/sql_connect.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_connect.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -337,7 +337,7 @@ */ extern "C" uchar *get_key_conn(user_conn *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= buff->len; return (uchar*) buff->user; diff -Nru mysql-5.6-5.6.27/sql/sql_cursor.cc mysql-5.6-5.6.33/sql/sql_cursor.cc --- mysql-5.6-5.6.27/sql/sql_cursor.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_cursor.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ int send_result_set_metadata(THD *thd, List &send_result_set_metadata); virtual bool is_open() const { return table != 0; } - virtual int open(JOIN *join __attribute__((unused))); + virtual int open(JOIN *join MY_ATTRIBUTE((unused))); virtual void fetch(ulong num_rows); virtual void close(); virtual ~Materialized_cursor(); @@ -277,7 +277,7 @@ } -int Materialized_cursor::open(JOIN *join __attribute__((unused))) +int Materialized_cursor::open(JOIN *join MY_ATTRIBUTE((unused))) { THD *thd= fake_unit.thd; int rc; diff -Nru mysql-5.6-5.6.27/sql/sql_db.cc mysql-5.6-5.6.33/sql/sql_db.cc --- mysql-5.6-5.6.27/sql/sql_db.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_db.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -86,7 +86,7 @@ my_bool not_used); uchar* dboptions_get_key(my_dbopt_t *opt, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= opt->name_length; return (uchar*) opt->name; diff -Nru mysql-5.6-5.6.27/sql/sql_executor.cc mysql-5.6-5.6.33/sql/sql_executor.cc --- mysql-5.6-5.6.27/sql/sql_executor.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_executor.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -299,7 +299,10 @@ err: if (table != NULL) + { free_tmp_table(thd, table); + tab->table= NULL; + } DBUG_RETURN(true); } @@ -481,7 +484,7 @@ static void update_tmptable_sum_func(Item_sum **func_ptr, - TABLE *tmp_table __attribute__((unused))) + TABLE *tmp_table MY_ATTRIBUTE((unused))) { Item_sum *func; while ((func= *(func_ptr++))) @@ -2253,7 +2256,7 @@ /* ARGSUSED */ static int -join_no_more_records(READ_RECORD *info __attribute__((unused))) +join_no_more_records(READ_RECORD *info MY_ATTRIBUTE((unused))) { return -1; } @@ -2855,7 +2858,7 @@ /* ARGSUSED */ enum_nested_loop_state -end_send_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), +end_send_group(JOIN *join, JOIN_TAB *join_tab MY_ATTRIBUTE((unused)), bool end_of_records) { int idx= -1; @@ -3853,7 +3856,7 @@ Item *pos; List_iterator_fast li(all_fields); Copy_field *copy= NULL; - Copy_field *copy_start __attribute__((unused)); + Copy_field *copy_start MY_ATTRIBUTE((unused)); res_selected_fields.empty(); res_all_fields.empty(); List_iterator_fast itr(res_all_fields); diff -Nru mysql-5.6-5.6.27/sql/sql_executor.h mysql-5.6-5.6.33/sql/sql_executor.h --- mysql-5.6-5.6.27/sql/sql_executor.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_executor.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef SQL_EXECUTOR_INCLUDED #define SQL_EXECUTOR_INCLUDED -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -258,7 +258,7 @@ /** Write function that would be used for saving records in tmp table. */ Next_select_func write_func; enum_nested_loop_state put_record(bool end_of_records); - __attribute__((warn_unused_result)) + MY_ATTRIBUTE((warn_unused_result)) bool prepare_tmp_table(); }; diff -Nru mysql-5.6-5.6.27/sql/sql_handler.cc mysql-5.6-5.6.33/sql/sql_handler.cc --- mysql-5.6-5.6.27/sql/sql_handler.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_handler.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -89,7 +89,7 @@ */ static char *mysql_ha_hash_get_key(TABLE_LIST *tables, size_t *key_len_p, - my_bool first __attribute__((unused))) + my_bool first MY_ATTRIBUTE((unused))) { *key_len_p= strlen(tables->alias) + 1 ; /* include '\0' in comparisons */ return tables->alias; diff -Nru mysql-5.6-5.6.27/sql/sql_insert.cc mysql-5.6-5.6.33/sql/sql_insert.cc --- mysql-5.6-5.6.27/sql/sql_insert.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_insert.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1675,16 +1675,25 @@ insert_id_for_cur_row= table->file->insert_id_for_cur_row; else table->file->insert_id_for_cur_row= insert_id_for_cur_row; - bool is_duplicate_key_error; + + /* + If it is a FK constraint violation and 'ignore' flag is set, + report a warning instead of error. + */ + if (ignore_errors && !table->file->is_fatal_error(error, + HA_CHECK_FK_ERROR)) + goto ok_or_after_trg_err; + if (table->file->is_fatal_error(error, HA_CHECK_DUP)) goto err; - is_duplicate_key_error= table->file->is_fatal_error(error, 0); - if (!is_duplicate_key_error) + + if (!table->file->is_fatal_error(error, 0)) { /* - We come here when we had an ignorable error which is not a duplicate - key error. In this we ignore error if ignore flag is set, otherwise - report error as usual. We will not do any duplicate key processing. + We come here when we have an ignorable error which is not a duplicate + key error or FK error(Ex: Partition related errors). In this case we + ignore the error if ignore flag is set, otherwise report error as usual. + We will not do any duplicate key processing. */ if (ignore_errors) goto ok_or_after_trg_err; /* Ignoring a not fatal error, return 0 */ @@ -1814,7 +1823,8 @@ error != HA_ERR_RECORD_IS_THE_SAME) { if (ignore_errors && - !table->file->is_fatal_error(error, HA_CHECK_DUP_KEY)) + !table->file->is_fatal_error(error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) { goto ok_or_after_trg_err; } @@ -1922,7 +1932,7 @@ { DEBUG_SYNC(thd, "write_row_noreplace"); if (!ignore_errors || - table->file->is_fatal_error(error, HA_CHECK_DUP)) + table->file->is_fatal_error(error, HA_CHECK_DUP | HA_CHECK_FK_ERROR)) goto err; table->file->restore_auto_increment(prev_insert_id); goto ok_or_after_trg_err; @@ -1940,6 +1950,9 @@ my_safe_afree(key,table->s->max_unique_length,MAX_KEY_LENGTH); if (!table->file->has_transactions()) thd->transaction.stmt.mark_modified_non_trans_table(); + if (ignore_errors && + !table->file->is_fatal_error(error, HA_CHECK_FK_ERROR)) + warn_fk_constraint_violation(thd, table, error); DBUG_RETURN(trg_error); err: @@ -2195,7 +2208,7 @@ MDL_request grl_protection; /** Creates a new delayed insert handler. */ - Delayed_insert() + Delayed_insert(SELECT_LEX *current_select) :locks_in_memory(0), table(0),tables_in_use(0),stacked_inserts(0), status(0), handler_thread_initialized(FALSE), group_count(0) { @@ -2206,7 +2219,7 @@ USERNAME_LENGTH); thd.current_tablenr=0; thd.set_command(COM_DELAYED_INSERT); - thd.lex->current_select= 0; // for my_message_sql + thd.lex->current_select= current_select; thd.lex->sql_command= SQLCOM_INSERT; // For innodb::store_lock() /* @@ -2388,7 +2401,7 @@ */ if (! (di= find_handler(thd, table_list))) { - if (!(di= new Delayed_insert())) + if (!(di= new Delayed_insert(thd->lex->current_select))) goto end_create; di->table_list= *table_list; // Needed to open table /* Replace volatile strings with local copies */ @@ -2938,6 +2951,16 @@ if (di->open_and_lock_table()) goto err; + /* + INSERT DELAYED generally expects thd->lex->current_select to be NULL, + since this is not an attribute of the current thread. This can lead to + problems if the thread that spawned the current one disconnects. + current_select will then point to freed memory. But current_select is + required to resolve the partition function. So, after fulfilling that + requirement, we set the current_select to 0. + */ + thd->lex->current_select= NULL; + /* Tell client that the thread is initialized */ mysql_cond_signal(&di->cond_client); diff -Nru mysql-5.6-5.6.27/sql/sql_lex.cc mysql-5.6-5.6.33/sql/sql_lex.cc --- mysql-5.6-5.6.27/sql/sql_lex.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_lex.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2510,26 +2510,46 @@ /* List is reversed => we should reverse it before using */ List_iterator_fast ti(*tables); TABLE_LIST **table; - uint non_const_tables= 0; + + /* + If the QT_NO_DATA_EXPANSION flag is specified, we print the + original table list, including constant tables that have been + optimized away, as the constant tables may be referenced in the + expression printed by Item_field::print() when this flag is given. + Otherwise, only non-const tables are printed. + + Example: + + Original SQL: + select * from (select 1) t + + Printed without QT_NO_DATA_EXPANSION: + select '1' AS `1` from dual + + Printed with QT_NO_DATA_EXPANSION: + select `t`.`1` from (select 1 AS `1`) `t` + */ + const bool print_const_tables= (query_type & QT_NO_DATA_EXPANSION); + size_t tables_to_print= 0; for (TABLE_LIST *t= ti++; t ; t= ti++) - if (!t->optimized_away) - non_const_tables++; - if (!non_const_tables) + if (print_const_tables || !t->optimized_away) + tables_to_print++; + if (tables_to_print == 0) { str->append(STRING_WITH_LEN("dual")); return; // all tables were optimized away } ti.rewind(); - if (!(table= (TABLE_LIST **)thd->alloc(sizeof(TABLE_LIST*) * - non_const_tables))) + if (!(table= static_cast(thd->alloc(sizeof(TABLE_LIST*) * + tables_to_print)))) return; // out of memory - TABLE_LIST *tmp, **t= table + (non_const_tables - 1); + TABLE_LIST *tmp, **t= table + (tables_to_print - 1); while ((tmp= ti++)) { - if (tmp->optimized_away) + if (tmp->optimized_away && !print_const_tables) continue; *t--= tmp; } @@ -2541,7 +2561,7 @@ */ if ((*table)->sj_on_expr) { - TABLE_LIST **end= table + non_const_tables; + TABLE_LIST **end= table + tables_to_print; for (TABLE_LIST **t2= table; t2!=end; t2++) { if (!(*t2)->sj_on_expr) @@ -2553,8 +2573,8 @@ } } } - DBUG_ASSERT(non_const_tables >= 1); - print_table_array(thd, str, table, table + non_const_tables, query_type); + DBUG_ASSERT(tables_to_print >= 1); + print_table_array(thd, str, table, table + tables_to_print, query_type); } @@ -3549,6 +3569,9 @@ if (query_tables_last == &first_table->next_global) query_tables_last= first_table->prev_global; + if (query_tables_own_last == &first_table->next_global) + query_tables_own_last= first_table->prev_global; + if ((next= *first_table->prev_global= first_table->next_global)) next->prev_global= first_table->prev_global; /* include in new place */ diff -Nru mysql-5.6-5.6.27/sql/sql_lex.h mysql-5.6-5.6.33/sql/sql_lex.h --- mysql-5.6-5.6.27/sql/sql_lex.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_lex.h 2016-08-26 11:22:35.000000000 +0000 @@ -1410,6 +1410,11 @@ return get_stmt_unsafe_flags() != 0; } + inline bool is_stmt_unsafe(enum_binlog_stmt_unsafe unsafe) + { + return binlog_stmt_flags & (1 << unsafe); + } + /** Flag the current (top-level) statement as unsafe. The flag will be reset after the statement has finished. diff -Nru mysql-5.6-5.6.27/sql/sql_load.cc mysql-5.6-5.6.33/sql/sql_load.cc --- mysql-5.6-5.6.27/sql/sql_load.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_load.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -209,7 +209,7 @@ */ char *tdb= thd->db ? thd->db : db; // Result is never null ulong skip_lines= ex->skip_lines; - bool transactional_table __attribute__((unused)); + bool transactional_table MY_ATTRIBUTE((unused)); DBUG_ENTER("mysql_load"); /* @@ -262,6 +262,7 @@ { DBUG_RETURN(TRUE); } + THD_STAGE_INFO(thd, stage_executing); /* Let us emit an error if we are loading data to table which is used in subselect in SET clause like we do it for INSERT. @@ -1412,8 +1413,8 @@ set_if_bigger(length,line_start.length()); stack=stack_pos=(int*) sql_alloc(sizeof(int)*length); - if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(0)))) - error=1; /* purecov: inspected */ + if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(MY_WME)))) + error= true; /* purecov: inspected */ else { end_of_buff=buffer+buff_length; @@ -1606,37 +1607,50 @@ } } #ifdef USE_MB - if (my_mbcharlen(read_charset, chr) > 1 && - to + my_mbcharlen(read_charset, chr) <= end_of_buff) - { - uchar* p= to; - int ml, i; - *to++ = chr; - - ml= my_mbcharlen(read_charset, chr); + uint ml= my_mbcharlen(read_charset, chr); + if (ml == 0) + { + *to= '\0'; + my_error(ER_INVALID_CHARACTER_STRING, MYF(0), + read_charset->csname, buffer); + error= true; + return 1; + } - for (i= 1; i < ml; i++) + if (ml > 1 && + to + ml <= end_of_buff) { - chr= GET; - if (chr == my_b_EOF) + uchar* p= to; + *to++ = chr; + + for (uint i= 1; i < ml; i++) { - /* - Need to back up the bytes already ready from illformed - multi-byte char - */ - to-= i; - goto found_eof; + chr= GET; + if (chr == my_b_EOF) + { + /* + Need to back up the bytes already ready from illformed + multi-byte char + */ + to-= i; + goto found_eof; + } + *to++ = chr; } - *to++ = chr; - } - if (my_ismbchar(read_charset, + if (my_ismbchar(read_charset, (const char *)p, (const char *)to)) - continue; - for (i= 0; i < ml; i++) - PUSH(*--to); - chr= GET; - } + continue; + for (uint i= 0; i < ml; i++) + PUSH(*--to); + chr= GET; + } + else if (ml > 1) + { + // Buffer is too small, exit while loop, and reallocate. + PUSH(chr); + break; + } #endif *to++ = (uchar) chr; } @@ -1885,7 +1899,15 @@ for (chr= GET; my_tospace(chr) != delim && chr != my_b_EOF;) { #ifdef USE_MB - if (my_mbcharlen(read_charset, chr) > 1) + uint ml= my_mbcharlen(read_charset, chr); + if (ml == 0) + { + chr= my_b_EOF; + val->length(0); + return chr; + } + + if (ml > 1) { DBUG_PRINT("read_xml",("multi byte")); int i, ml= my_mbcharlen(read_charset, chr); diff -Nru mysql-5.6-5.6.27/sql/sql_manager.cc mysql-5.6-5.6.33/sql/sql_manager.cc --- mysql-5.6-5.6.27/sql/sql_manager.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_manager.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ return result; } -pthread_handler_t handle_manager(void *arg __attribute__((unused))) +pthread_handler_t handle_manager(void *arg MY_ATTRIBUTE((unused))) { int error = 0; struct timespec abstime; diff -Nru mysql-5.6-5.6.27/sql/sql_optimizer.cc mysql-5.6-5.6.33/sql/sql_optimizer.cc --- mysql-5.6-5.6.27/sql/sql_optimizer.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_optimizer.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -223,8 +223,10 @@ st_select_lex::fix_prepare_information(), and remove this second copy below. */ - select_lex->prep_where= - conds ? conds->copy_andor_structure(thd, true) : NULL; + select_lex->prep_where= + conds ? conds->copy_andor_structure(thd, true): NULL; + if (conds) + thd->change_item_tree_place(&conds, &select_lex->prep_where); } /* @@ -1119,8 +1121,8 @@ { return (void*) sql_alloc((uint) size); } - static void operator delete(void *ptr __attribute__((unused)), - size_t size __attribute__((unused))) + static void operator delete(void *ptr MY_ATTRIBUTE((unused)), + size_t size MY_ATTRIBUTE((unused))) { TRASH(ptr, size); } Item *and_level; @@ -4883,6 +4885,18 @@ DBUG_PRINT("info",("add_key_field for field %s",field->field_name)); uint exists_optimize= 0; TABLE_LIST *table= field->table->pos_in_table_list; + + if (field->table->reginfo.join_tab == NULL) + { + /* + Due to a bug in IN-to-EXISTS (grep for real_item() in item_subselect.cc + for more info), an index over a field from an outer query might be + considered here, which is incorrect. Their query has been fully + optimized already so their reginfo.join_tab is NULL and we reject them. + */ + return; + } + if (!table->derived_keys_ready && table->uses_materialization() && !field->table->is_created() && table->update_derived_keys(field, value, num_values)) diff -Nru mysql-5.6-5.6.27/sql/sql_parse.cc mysql-5.6-5.6.33/sql/sql_parse.cc --- mysql-5.6-5.6.27/sql/sql_parse.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_parse.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -599,12 +599,11 @@ sql_command_flags[SQLCOM_UNINSTALL_PLUGIN]|= CF_DISALLOW_IN_RO_TRANS; } -bool sqlcom_can_generate_row_events(const THD *thd) +bool sqlcom_can_generate_row_events(enum enum_sql_command command) { - return (sql_command_flags[thd->lex->sql_command] & - CF_CAN_GENERATE_ROW_EVENTS); + return (sql_command_flags[command] & CF_CAN_GENERATE_ROW_EVENTS); } - + bool is_update_query(enum enum_sql_command command) { DBUG_ASSERT(command >= 0 && command <= SQLCOM_END); @@ -1646,7 +1645,7 @@ { STATUS_VAR current_global_status_var; ulong uptime; - uint length __attribute__((unused)); + uint length MY_ATTRIBUTE((unused)); ulonglong queries_per_second1000; char buff[250]; uint buff_len= sizeof(buff); @@ -1792,7 +1791,7 @@ /* DTRACE instrumentation, end */ if (MYSQL_QUERY_DONE_ENABLED() || MYSQL_COMMAND_DONE_ENABLED()) { - int res __attribute__((unused)); + int res MY_ATTRIBUTE((unused)); res= (int) thd->is_error(); if (command == COM_QUERY) { @@ -5920,7 +5919,7 @@ - Passing to check_stack_overrun() prevents the compiler from removing it. */ bool check_stack_overrun(THD *thd, long margin, - uchar *buf __attribute__((unused))) + uchar *buf MY_ATTRIBUTE((unused))) { long stack_used; DBUG_ASSERT(thd == current_thd); @@ -6261,7 +6260,7 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, Parser_state *parser_state) { - int error __attribute__((unused)); + int error MY_ATTRIBUTE((unused)); DBUG_ENTER("mysql_parse"); DBUG_EXECUTE_IF("parser_debug", turn_parser_debug_on();); diff -Nru mysql-5.6-5.6.27/sql/sql_parse.h mysql-5.6-5.6.33/sql/sql_parse.h --- mysql-5.6-5.6.27/sql/sql_parse.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_parse.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -211,7 +211,7 @@ return (cs->mbminlen == 1); } -extern "C" bool sqlcom_can_generate_row_events(const THD *thd); +extern "C" bool sqlcom_can_generate_row_events(enum enum_sql_command command); #endif /* SQL_PARSE_INCLUDED */ diff -Nru mysql-5.6-5.6.27/sql/sql_planner.cc mysql-5.6-5.6.33/sql/sql_planner.cc --- mysql-5.6-5.6.27/sql/sql_planner.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_planner.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -878,11 +878,11 @@ (1) The found 'ref' access produces more records than a table scan (or index scan, or quick select), or 'ref' is more expensive than any of them. - (2) This doesn't hold: the best way to perform table scan is to to perform - 'range' access using index IDX, and the best way to perform 'ref' - access is to use the same index IDX, with the same or more key parts. - (note: it is not clear how this rule is/should be extended to - index_merge quick selects) + (2) The best way to perform table or index scan is to use 'range' access + using index IDX. If it is a 'tight range' scan (i.e not a loose index + scan' or 'index merge'), then ref access on the same index will + perform equal or better if ref access can use the same or more number + of key parts. (3) See above note about InnoDB. (4) NOT ("FORCE INDEX(...)" is used for table and there is 'ref' access path, but there is no quick select) @@ -904,7 +904,9 @@ } if ((s->quick && best_key && s->quick->index == best_key->key && // (2) - best_max_key_part >= s->table->quick_key_parts[best_key->key])) // (2) + best_max_key_part >= s->table->quick_key_parts[best_key->key]) && // (2) + (s->quick->get_type() != + QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)) // (2) { trace_access_scan.add_alnum("access_type", "range"). add_alnum("cause", "heuristic_index_cheaper"); @@ -1514,7 +1516,7 @@ join state will not be reverted back to its initial state because we don't "pop" tables already present in the partial plan. */ - bool is_interleave_error __attribute__((unused))= + bool is_interleave_error MY_ATTRIBUTE((unused))= check_interleaving_with_nj (best_table); /* This has been already checked by best_extension_by_limited_search */ DBUG_ASSERT(!is_interleave_error); diff -Nru mysql-5.6-5.6.27/sql/sql_plugin.cc mysql-5.6-5.6.33/sql/sql_plugin.cc --- mysql-5.6-5.6.27/sql/sql_plugin.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_plugin.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -528,8 +528,9 @@ if ((sym= dlsym(plugin_dl.handle, list_of_services[i].name))) { uint ver= (uint)(intptr)*(void**)sym; - if (ver > list_of_services[i].version || - (ver >> 8) < (list_of_services[i].version >> 8)) + if ((*(void**)sym) != list_of_services[i].service && /* already replaced */ + (ver > list_of_services[i].version || + (ver >> 8) < (list_of_services[i].version >> 8))) { char buf[MYSQL_ERRMSG_SIZE]; my_snprintf(buf, sizeof(buf), @@ -1215,7 +1216,7 @@ uchar *get_plugin_hash_key(const uchar *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { struct st_plugin_int *plugin= (st_plugin_int *)buff; *length= (uint)plugin->name.length; @@ -1224,7 +1225,7 @@ uchar *get_bookmark_hash_key(const uchar *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { struct st_bookmark *var= (st_bookmark *)buff; *length= var->name_len + 1; @@ -3395,7 +3396,7 @@ extern "C" my_bool get_one_plugin_option(int optid, const struct my_option *, char *); -my_bool get_one_plugin_option(int optid __attribute__((unused)), +my_bool get_one_plugin_option(int optid MY_ATTRIBUTE((unused)), const struct my_option *opt, char *argument) { @@ -3716,7 +3717,7 @@ static my_bool check_if_option_is_deprecated(int optid, const struct my_option *opt, - char *argument __attribute__((unused))) + char *argument MY_ATTRIBUTE((unused))) { if (optid == -1) { @@ -3766,7 +3767,7 @@ LEX_STRING plugin_name; char *varname; int error; - sys_var *v __attribute__((unused)); + sys_var *v MY_ATTRIBUTE((unused)); struct st_bookmark *var; uint len, count= EXTRA_OPTIONS; DBUG_ENTER("test_plugin_options"); diff -Nru mysql-5.6-5.6.27/sql/sql_prepare.cc mysql-5.6-5.6.33/sql/sql_prepare.cc --- mysql-5.6-5.6.27/sql/sql_prepare.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_prepare.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -399,7 +399,7 @@ } #else static bool send_prep_stmt(Prepared_statement *stmt, - uint columns __attribute__((unused))) + uint columns MY_ATTRIBUTE((unused))) { THD *thd= stmt->thd; @@ -1183,7 +1183,7 @@ static bool insert_params_from_vars(Prepared_statement *stmt, List& varnames, - String *query __attribute__((unused))) + String *query MY_ATTRIBUTE((unused))) { Item_param **begin= stmt->param_array; Item_param **end= begin + stmt->param_count; @@ -3881,8 +3881,8 @@ swap_variables(LEX_STRING, name, copy->name); /* Ditto */ swap_variables(char *, db, copy->db); + std::swap(db_length, copy->db_length); - DBUG_ASSERT(db_length == copy->db_length); DBUG_ASSERT(param_count == copy->param_count); DBUG_ASSERT(thd == copy->thd); last_error[0]= '\0'; @@ -4010,7 +4010,10 @@ /* Go! */ if (open_cursor) + { + lex->safe_to_cache_query= 0; error= mysql_open_cursor(thd, &result, &cursor); + } else { /* @@ -4529,7 +4532,7 @@ /* Store MYSQL_TIME (in binary format) */ bool Protocol_local::store(MYSQL_TIME *time, - uint precision __attribute__((unused))) + uint precision MY_ATTRIBUTE((unused))) { return store_column(time, sizeof(MYSQL_TIME)); } @@ -4546,7 +4549,7 @@ /** Store MYSQL_TIME (in binary format) */ bool Protocol_local::store_time(MYSQL_TIME *time, - uint precision __attribute__((unused))) + uint precision MY_ATTRIBUTE((unused))) { return store_column(time, sizeof(MYSQL_TIME)); } diff -Nru mysql-5.6-5.6.27/sql/sql_reload.cc mysql-5.6-5.6.33/sql/sql_reload.cc --- mysql-5.6-5.6.27/sql/sql_reload.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_reload.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,6 +28,7 @@ #include "rpl_rli.h" // rotate_relay_log #include "rpl_mi.h" #include "debug_sync.h" +#include "des_key_file.h" /** @@ -325,7 +326,7 @@ } } #endif -#ifdef OPENSSL +#ifdef HAVE_OPENSSL if (options & REFRESH_DES_KEY_FILE) { if (des_key_file && load_des_key_file(des_key_file)) diff -Nru mysql-5.6-5.6.27/sql/sql_select.cc mysql-5.6-5.6.33/sql/sql_select.cc --- mysql-5.6-5.6.27/sql/sql_select.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_select.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -909,7 +909,8 @@ { if (tab->op->type() == QEP_operation::OT_TMP_TABLE) { - free_tmp_table(thd, tab->table); + if (tab->table) // Check tmp table is not yet freed. + free_tmp_table(thd, tab->table); delete tab->tmp_table_param; tab->tmp_table_param= NULL; } @@ -3074,7 +3075,7 @@ */ bool JOIN_TAB::and_with_condition(Item *add_cond, uint line) { - Item *old_cond __attribute__((unused))= m_condition; + Item *old_cond MY_ATTRIBUTE((unused))= m_condition; if (and_conditions(&m_condition, add_cond)) return true; DBUG_PRINT("info", ("JOIN_TAB::m_condition extended. Change %p -> %p " diff -Nru mysql-5.6-5.6.27/sql/sql_servers.cc mysql-5.6-5.6.33/sql/sql_servers.cc --- mysql-5.6-5.6.27/sql/sql_servers.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_servers.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -86,7 +86,7 @@ static uchar *servers_cache_get_key(FOREIGN_SERVER *server, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { DBUG_ENTER("servers_cache_get_key"); DBUG_PRINT("info", ("server_name_length %d server_name %s", diff -Nru mysql-5.6-5.6.27/sql/sql_show.cc mysql-5.6-5.6.33/sql/sql_show.cc --- mysql-5.6-5.6.27/sql/sql_show.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_show.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -369,7 +369,7 @@ static uchar * db_dirs_hash_get_key(const uchar *data, size_t *len_ret, - my_bool __attribute__((unused))) + my_bool MY_ATTRIBUTE((unused))) { LEX_STRING *e= (LEX_STRING *) data; @@ -1121,29 +1121,44 @@ } -/* - Quote the given identifier if needed and append it to the target string. - If the given identifier is empty, it will be quoted. - - SYNOPSIS - append_identifier() - thd thread handler - packet target string - name the identifier to be appended - name_length length of the appending identifier +/** + Convert and quote the given identifier if needed and append it to the + target string. If the given identifier is empty, it will be quoted. + @thd thread handler + @packet target string + @name the identifier to be appended + @length length of the appending identifier + @param from_cs Charset information about the input string + @param to_cs Charset information about the target string */ void -append_identifier(THD *thd, String *packet, const char *name, uint length) +append_identifier(THD *thd, String *packet, const char *name, uint length, + const CHARSET_INFO *from_cs, const CHARSET_INFO *to_cs) { const char *name_end; char quote_char; int q; - q= thd ? get_quote_char_for_identifier(thd, name, length) : '`'; + const CHARSET_INFO *cs_info= system_charset_info; + const char *to_name= name; + size_t to_length= length; + String to_string(name,length, from_cs); + + if (from_cs != NULL && to_cs != NULL && from_cs != to_cs) + thd->convert_string(&to_string, from_cs, to_cs); + + if (to_cs != NULL) + { + to_name= to_string.c_ptr(); + to_length= to_string.length(); + cs_info= to_cs; + } + + q= thd ? get_quote_char_for_identifier(thd, to_name, to_length) : '`'; if (q == EOF) { - packet->append(name, length, packet->charset()); + packet->append(to_name, to_length, packet->charset()); return; } @@ -1152,14 +1167,14 @@ it's a keyword */ - (void) packet->reserve(length*2 + 2); + (void) packet->reserve(to_length*2 + 2); quote_char= (char) q; packet->append("e_char, 1, system_charset_info); - for (name_end= name+length ; name < name_end ; name+= length) + for (name_end= to_name+to_length ; to_name < name_end ; to_name+= to_length) { - uchar chr= (uchar) *name; - length= my_mbcharlen(system_charset_info, chr); + uchar chr= (uchar) *to_name; + to_length= my_mbcharlen(cs_info, chr); /* my_mbcharlen can return 0 on a wrong multibyte sequence. It is possible when upgrading from 4.0, @@ -1167,11 +1182,11 @@ The manual says it does not work. So we'll just change length to 1 not to hang in the endless loop. */ - if (!length) - length= 1; - if (length == 1 && chr == (uchar) quote_char) + if (!to_length) + to_length= 1; + if (to_length == 1 && chr == (uchar) quote_char) packet->append("e_char, 1, system_charset_info); - packet->append(name, length, system_charset_info); + packet->append(to_name, to_length, system_charset_info); } packet->append("e_char, 1, system_charset_info); } @@ -2017,8 +2032,8 @@ { return (void*) sql_alloc((uint) size); } - static void operator delete(void *ptr __attribute__((unused)), - size_t size __attribute__((unused))) + static void operator delete(void *ptr MY_ATTRIBUTE((unused)), + size_t size MY_ATTRIBUTE((unused))) { TRASH(ptr, size); } ulong thread_id; @@ -2222,6 +2237,8 @@ mysql_mutex_lock(&LOCK_thd_remove); copy_global_thread_list(&global_thread_list_copy); + DEBUG_SYNC(thd,"fill_schema_processlist_after_copying_threads"); + Thread_iterator it= global_thread_list_copy.begin(); Thread_iterator end= global_thread_list_copy.end(); for (; it != end; ++it) diff -Nru mysql-5.6-5.6.27/sql/sql_show.h mysql-5.6-5.6.33/sql/sql_show.h --- mysql-5.6-5.6.27/sql/sql_show.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_show.h 2016-08-26 11:22:35.000000000 +0000 @@ -166,8 +166,13 @@ int copy_event_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table); int get_quote_char_for_identifier(THD *thd, const char *name, uint length); -void append_identifier(THD *thd, String *packet, const char *name, - uint length); +void append_identifier(THD *thd, String *packet, const char *name, uint length, + const CHARSET_INFO *from_cs, const CHARSET_INFO *to_cs); +inline void append_identifier(THD *thd, String *packet, const char *name, + uint length) +{ + append_identifier(thd, packet, name, length, NULL, NULL); +} inline void append_identifier(THD *thd, String *packet, Simple_cstring str) { append_identifier(thd, packet, str.ptr(), static_cast(str.length())); diff -Nru mysql-5.6-5.6.27/sql/sql_string.cc mysql-5.6-5.6.33/sql/sql_string.cc --- mysql-5.6-5.6.27/sql/sql_string.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_string.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights * reserved. This program is free software; you can redistribute it and/or modify @@ -433,10 +433,11 @@ bool String::append(const String &s) { - DBUG_ASSERT(!this->uses_buffer_owned_by(&s)); - DBUG_ASSERT(!s.uses_buffer_owned_by(this)); if (s.length()) { + DBUG_ASSERT(!this->uses_buffer_owned_by(&s)); + DBUG_ASSERT(!s.uses_buffer_owned_by(this)); + if (realloc(str_length+s.length())) return TRUE; memcpy(Ptr+str_length,s.ptr(),s.length()); diff -Nru mysql-5.6-5.6.27/sql/sql_table.cc mysql-5.6-5.6.33/sql/sql_table.cc --- mysql-5.6-5.6.27/sql/sql_table.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_table.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2260,7 +2260,7 @@ bool trans_tmp_table_deleted= 0, non_trans_tmp_table_deleted= 0; bool non_tmp_table_deleted= 0; bool have_nonexistent_tmp_table= 0; - bool is_drop_tmp_if_exists_added= 0; + bool is_drop_tmp_if_exists_with_no_defaultdb= 0; String built_query; String built_trans_tmp_query, built_non_trans_tmp_query; String nonexistent_tmp_tables; @@ -2291,14 +2291,13 @@ transaction and changes to non-transactional tables must be written ahead of the transaction in some circumstances. - 6- Slave SQL thread ignores all replicate-* filter rules - for temporary tables with 'IF EXISTS' clause. (See sql/sql_parse.cc: - mysql_execute_command() for details). These commands will be binlogged - as they are, even if the default database (from USE `db`) is not present - on the Slave. This can cause point in time recovery failures later - when user uses the slave's binlog to re-apply. Hence at the time of binary - logging, these commands will be written with fully qualified table names - and use `db` will be suppressed. + 6 - At the time of writing 'DROP TEMPORARY TABLE IF EXISTS' + statements into the binary log if the default database specified in + thd->db is present then they are binlogged as + 'USE `default_db`; DROP TEMPORARY TABLE IF EXISTS `t1`;' + otherwise they will be binlogged with the actual database name to + which the table belongs to. + 'DROP TEMPORARY TABLE IF EXISTS `actual_db`.`t1` */ if (!dont_log_query) { @@ -2313,7 +2312,14 @@ if (thd->is_current_stmt_binlog_format_row() || if_exists) { - is_drop_tmp_if_exists_added= true; + /* + If default database doesnot exist in those cases set + 'is_drop_tmp_if_exists_with_no_defaultdb flag to 'true' so that the + 'DROP TEMPORARY TABLE IF EXISTS' command is logged with a qualified + table name. + */ + if (thd->db != NULL && check_db_dir_existence(thd->db)) + is_drop_tmp_if_exists_with_no_defaultdb= true; built_trans_tmp_query.set_charset(system_charset_info); built_trans_tmp_query.append("DROP TEMPORARY TABLE IF EXISTS "); built_non_trans_tmp_query.set_charset(system_charset_info); @@ -2401,13 +2407,15 @@ query. */ if (thd->db == NULL || strcmp(db,thd->db) != 0 - || is_drop_tmp_if_exists_added ) + || is_drop_tmp_if_exists_with_no_defaultdb ) { - append_identifier(thd, built_ptr_query, db, db_len); + append_identifier(thd, built_ptr_query, db, db_len, + system_charset_info, thd->charset()); built_ptr_query->append("."); } append_identifier(thd, built_ptr_query, table->table_name, - strlen(table->table_name)); + strlen(table->table_name), system_charset_info, + thd->charset()); built_ptr_query->append(","); } /* @@ -2469,12 +2477,14 @@ */ if (thd->db == NULL || strcmp(db,thd->db) != 0) { - append_identifier(thd, &built_query, db, db_len); + append_identifier(thd, &built_query, db, db_len, + system_charset_info, thd->charset()); built_query.append("."); } append_identifier(thd, &built_query, table->table_name, - strlen(table->table_name)); + strlen(table->table_name), system_charset_info, + thd->charset()); built_query.append(","); } } @@ -2648,7 +2658,7 @@ built_non_trans_tmp_query.ptr(), built_non_trans_tmp_query.length(), FALSE, FALSE, - is_drop_tmp_if_exists_added, + is_drop_tmp_if_exists_with_no_defaultdb, 0); /* When temporary and regular tables or temporary tables with @@ -2674,7 +2684,7 @@ built_trans_tmp_query.ptr(), built_trans_tmp_query.length(), TRUE, FALSE, - is_drop_tmp_if_exists_added, + is_drop_tmp_if_exists_with_no_defaultdb, 0); /* When temporary and regular tables are dropped on a single @@ -2687,7 +2697,13 @@ if (gtid_mode > 0 && non_tmp_table_deleted) error |= mysql_bin_log.commit(thd, true); } - if (non_tmp_table_deleted) + /* + when the DROP TABLE command is used to DROP a single table and if that + command fails then the query cannot generate 'partial results'. In + that case the query will not be written to the binary log. + */ + if (non_tmp_table_deleted && + (thd->lex->select_lex.table_list.elements > 1 || !error)) { /* Chop of the last comma */ built_query.chop(); @@ -3630,8 +3646,31 @@ else { /* Field redefined */ + + /* + If we are replacing a BIT field, revert the increment + of total_uneven_bit_length that was done above. + */ + if (sql_field->sql_type == MYSQL_TYPE_BIT && + file->ha_table_flags() & HA_CAN_BIT_FIELD) + total_uneven_bit_length-= sql_field->length & 7; + sql_field->def= dup_field->def; sql_field->sql_type= dup_field->sql_type; + + /* + If we are replacing a field with a BIT field, we need + to initialize pack_flag. Note that we do not need to + increment total_uneven_bit_length here as this dup_field + has already been processed. + */ + if (sql_field->sql_type == MYSQL_TYPE_BIT) + { + sql_field->pack_flag= FIELDFLAG_NUMBER; + if (!(file->ha_table_flags() & HA_CAN_BIT_FIELD)) + sql_field->pack_flag|= FIELDFLAG_TREAT_BIT_AS_CHAR; + } + sql_field->charset= (dup_field->charset ? dup_field->charset : create_info->default_table_charset); @@ -5409,7 +5448,8 @@ /* We have to write the query before we unlock the tables. */ - if (thd->is_current_stmt_binlog_format_row()) + if (!thd->is_current_stmt_binlog_disabled() && + thd->is_current_stmt_binlog_format_row()) { /* Since temporary tables are not replicated under row-based @@ -5458,7 +5498,22 @@ new_table= TRUE; } - int result __attribute__((unused))= + /* + After opening a MERGE table add the children to the query list of + tables, so that children tables info can be used on "CREATE TABLE" + statement generation by the binary log. + Note that placeholders don't have the handler open. + */ + if (table->table->file->extra(HA_EXTRA_ADD_CHILDREN_LIST)) + goto err; + + /* + As the reference table is temporary and may not exist on slave, we must + force the ENGINE to be present into CREATE TABLE. + */ + create_info->used_fields|= HA_CREATE_USED_ENGINE; + + int result MY_ATTRIBUTE((unused))= store_create_info(thd, table, &query, create_info, TRUE /* show_database */); @@ -8378,6 +8433,8 @@ Also note that we ignore the LOCK clause here. */ close_temporary_table(thd, altered_table, true, false); + (void) quick_rm_table(thd, new_db_type, alter_ctx.new_db, + alter_ctx.tmp_name, FN_IS_TMP | NO_HA_TABLE); goto end_inplace; } diff -Nru mysql-5.6-5.6.27/sql/sql_time.cc mysql-5.6-5.6.33/sql/sql_time.cc --- mysql-5.6-5.6.27/sql/sql_time.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_time.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1187,7 +1187,7 @@ @param OUT str String to conver to @param dec Number of fractional digits. */ -void make_time(const DATE_TIME_FORMAT *format __attribute__((unused)), +void make_time(const DATE_TIME_FORMAT *format MY_ATTRIBUTE((unused)), const MYSQL_TIME *l_time, String *str, uint dec) { uint length= (uint) my_time_to_str(l_time, (char*) str->ptr(), dec); @@ -1202,7 +1202,7 @@ @param l_time DATE value @param OUT str String to conver to */ -void make_date(const DATE_TIME_FORMAT *format __attribute__((unused)), +void make_date(const DATE_TIME_FORMAT *format MY_ATTRIBUTE((unused)), const MYSQL_TIME *l_time, String *str) { uint length= (uint) my_date_to_str(l_time, (char*) str->ptr()); @@ -1218,7 +1218,7 @@ @param OUT str String to conver to @param dec Number of fractional digits. */ -void make_datetime(const DATE_TIME_FORMAT *format __attribute__((unused)), +void make_datetime(const DATE_TIME_FORMAT *format MY_ATTRIBUTE((unused)), const MYSQL_TIME *l_time, String *str, uint dec) { uint length= (uint) my_datetime_to_str(l_time, (char*) str->ptr(), dec); diff -Nru mysql-5.6-5.6.27/sql/sql_tmp_table.cc mysql-5.6-5.6.33/sql/sql_tmp_table.cc --- mysql-5.6-5.6.27/sql/sql_tmp_table.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_tmp_table.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -359,6 +359,7 @@ case Item::REF_ITEM: case Item::NULL_ITEM: case Item::VARBIN_ITEM: + case Item::PARAM_ITEM: if (make_copy_field) { DBUG_ASSERT(((Item_result_field*)item)->result_field); diff -Nru mysql-5.6-5.6.27/sql/sql_udf.cc mysql-5.6-5.6.33/sql/sql_udf.cc --- mysql-5.6-5.6.27/sql/sql_udf.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_udf.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -94,7 +94,7 @@ extern "C" uchar* get_hash_key(const uchar *buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { udf_func *udf=(udf_func*) buff; *length=(uint) udf->name.length; diff -Nru mysql-5.6-5.6.27/sql/sql_update.cc mysql-5.6-5.6.33/sql/sql_update.cc --- mysql-5.6-5.6.27/sql/sql_update.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_update.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -452,7 +452,7 @@ /* Update the table->file->stats.records number */ table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK); - table->mark_columns_needed_for_update(); + table->mark_columns_needed_for_update(false/*mark_binlog_columns=false*/); select= make_select(table, 0, 0, conds, 0, &error); { // Enter scope for optimizer trace wrapper @@ -530,7 +530,7 @@ #ifdef WITH_PARTITION_STORAGE_ENGINE used_key_is_modified|= partition_key_modified(table, table->write_set); #endif - + table->mark_columns_per_binlog_row_image(); using_filesort= order && (need_sort||used_key_is_modified); if (thd->lex->describe) { @@ -826,7 +826,8 @@ error= 0; } else if (!ignore || - table->file->is_fatal_error(error, HA_CHECK_DUP_KEY)) + table->file->is_fatal_error(error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) { /* If (ignore && error is ignorable) we don't have to @@ -834,13 +835,17 @@ */ myf flags= 0; - if (table->file->is_fatal_error(error, HA_CHECK_DUP_KEY)) + if (table->file->is_fatal_error(error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) flags|= ME_FATALERROR; /* Other handler errors are fatal */ table->file->print_error(error,MYF(flags)); error= 1; break; } + else if (ignore && !table->file->is_fatal_error(error, + HA_CHECK_FK_ERROR)) + warn_fk_constraint_violation(thd, table, error); } if (table->triggers && @@ -1854,12 +1859,12 @@ { if (safe_update_on_fly(thd, join->join_tab, table_ref, all_tables)) { - table->mark_columns_needed_for_update(); + table->mark_columns_needed_for_update(true/*mark_binlog_columns=true*/); table_to_update= table; // Update table on the fly continue; } } - table->mark_columns_needed_for_update(); + table->mark_columns_needed_for_update(true/*mark_binlog_columns=true*/); /* enable uncacheable flag if we update a view with check option @@ -2073,7 +2078,8 @@ { updated--; if (!ignore || - table->file->is_fatal_error(error, HA_CHECK_DUP_KEY)) + table->file->is_fatal_error(error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) { /* If (ignore && error == is ignorable) we don't have to @@ -2081,12 +2087,16 @@ */ myf flags= 0; - if (table->file->is_fatal_error(error, HA_CHECK_DUP_KEY)) + if (table->file->is_fatal_error(error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) flags|= ME_FATALERROR; /* Other handler errors are fatal */ table->file->print_error(error,MYF(flags)); DBUG_RETURN(1); } + else if (ignore && !table->file->is_fatal_error(error, + HA_CHECK_FK_ERROR)) + warn_fk_constraint_violation(thd, table, error); } else { @@ -2365,8 +2375,12 @@ else if (local_error == HA_ERR_RECORD_IS_THE_SAME) local_error= 0; else if (!ignore || - table->file->is_fatal_error(local_error, HA_CHECK_DUP_KEY)) + table->file->is_fatal_error(local_error, HA_CHECK_DUP_KEY | + HA_CHECK_FK_ERROR)) goto err; + else if (ignore && !table->file->is_fatal_error(local_error, + HA_CHECK_FK_ERROR)) + warn_fk_constraint_violation(thd, table, local_error); else local_error= 0; } diff -Nru mysql-5.6-5.6.27/sql/sql_yacc.cc mysql-5.6-5.6.33/sql/sql_yacc.cc --- mysql-5.6-5.6.27/sql/sql_yacc.cc 2015-09-18 14:25:04.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_yacc.cc 2016-08-26 11:33:03.000000000 +0000 @@ -1,10 +1,8 @@ +/* A Bison parser, made by GNU Bison 2.7. */ -/* A Bison parser, made by GNU Bison 2.4.1. */ - -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. 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 @@ -46,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.4.1" +#define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -60,8 +58,6 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse MYSQLparse @@ -72,11 +68,9 @@ #define yydebug MYSQLdebug #define yynerrs MYSQLnerrs - /* Copy the first part of user declarations. */ - -/* Line 189 of yacc.c */ -#line 24 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 371 of yacc.c */ +#line 24 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" /* Note: YYTHD is passed as an argument to yyparse(), and subsequently to yylex(). @@ -169,18 +163,18 @@
   yyerrlab1:
   #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
-    __attribute__ ((__unused__))
+    MY_ATTRIBUTE ((__unused__))
   #endif
 
- This usage of __attribute__ is illegal, so we remove it. + This usage of MY_ATTRIBUTE is illegal, so we remove it. See the following references for details: http://lists.gnu.org/archive/html/bug-bison/2004-02/msg00014.html http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14273 */ #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) -#undef __attribute__ -#define __attribute__(X) +#undef MY_ATTRIBUTE +#define MY_ATTRIBUTE(X) #endif @@ -1021,14 +1015,16 @@ +/* Line 371 of yacc.c */ +#line 1020 "/export/home/pb2/build/sb_0-20199989-1472210623.26/dist_GPL/sql/sql_yacc.cc" -/* Line 189 of yacc.c */ -#line 1027 "/export/home/pb2/build/sb_0-16512983-1442585853.06/dist_GPL/sql/sql_yacc.cc" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -1038,11 +1034,17 @@ # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "sql_yacc.h". */ +#ifndef YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED +# define YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int MYSQLdebug; #endif - /* Tokens. */ #ifndef YYTOKENTYPE @@ -2292,13 +2294,11 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 214 of yacc.c */ -#line 968 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 387 of yacc.c */ +#line 968 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" int num; ulong ulong_num; @@ -2357,9 +2357,8 @@ bool is_not_empty; - -/* Line 214 of yacc.c */ -#line 2363 "/export/home/pb2/build/sb_0-16512983-1442585853.06/dist_GPL/sql/sql_yacc.cc" +/* Line 387 of yacc.c */ +#line 2362 "/export/home/pb2/build/sb_0-20199989-1472210623.26/dist_GPL/sql/sql_yacc.cc" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -2367,16 +2366,30 @@ #endif -/* Copy the second part of user declarations. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int MYSQLparse (void *YYPARSE_PARAM); +#else +int MYSQLparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int MYSQLparse (class THD *YYTHD); +#else +int MYSQLparse (); +#endif +#endif /* ! YYPARSE_PARAM */ -/* Line 264 of yacc.c */ -#line 1026 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +#endif /* !YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED */ -bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); +/* Copy the second part of user declarations. */ +/* Line 390 of yacc.c */ +#line 1026 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" +bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); -/* Line 264 of yacc.c */ -#line 2380 "/export/home/pb2/build/sb_0-16512983-1442585853.06/dist_GPL/sql/sql_yacc.cc" +/* Line 390 of yacc.c */ +#line 2393 "/export/home/pb2/build/sb_0-20199989-1472210623.26/dist_GPL/sql/sql_yacc.cc" #ifdef short # undef short @@ -2426,27 +2439,27 @@ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -2479,11 +2492,12 @@ # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # endif @@ -2506,24 +2520,24 @@ # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined _STDLIB_H \ +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif @@ -2552,23 +2566,7 @@ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif +# define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of @@ -2588,6 +2586,26 @@ #endif +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + /* YYFINAL -- State number of the termination state. */ #define YYFINAL 597 /* YYLAST -- Last index in YYTABLE. */ @@ -3773,265 +3791,265 @@ 2326, 2333, 2336, 2338, 2339, 2343, 2357, 2361, 2377, 2381, 2394, 2393, 2439, 2444, 2438, 2451, 2456, 2449, 2463, 2468, 2461, 2474, 2473, 2486, 2485, 2493, 2497, 2501, 2505, 2512, - 2525, 2526, 2530, 2534, 2538, 2542, 2546, 2551, 2555, 2563, - 2562, 2594, 2593, 2600, 2607, 2608, 2614, 2620, 2630, 2636, - 2642, 2644, 2651, 2652, 2656, 2662, 2671, 2672, 2680, 2680, - 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, - 2745, 2746, 2747, 2752, 2766, 2780, 2799, 2800, 2804, 2805, - 2810, 2812, 2814, 2816, 2818, 2820, 2822, 2828, 2829, 2830, - 2834, 2838, 2846, 2845, 2858, 2860, 2863, 2865, 2869, 2873, - 2880, 2882, 2886, 2887, 2892, 2911, 2941, 2943, 2947, 2948, - 2952, 2981, 2982, 2983, 2984, 2988, 2989, 2993, 2994, 2999, - 3002, 3029, 3028, 3112, 3129, 3128, 3203, 3202, 3275, 3276, - 3281, 3283, 3288, 3311, 3322, 3326, 3348, 3349, 3353, 3357, - 3370, 3376, 3382, 3391, 3406, 3432, 3438, 3439, 3445, 3448, - 3452, 3460, 3480, 3482, 3500, 3506, 3508, 3510, 3512, 3514, - 3516, 3518, 3520, 3522, 3524, 3526, 3528, 3533, 3549, 3565, - 3566, 3571, 3577, 3586, 3592, 3601, 3609, 3638, 3647, 3649, - 3658, 3663, 3669, 3678, 3686, 3688, 3690, 3692, 3694, 3696, - 3698, 3700, 3702, 3704, 3706, 3708, 3710, 3715, 3735, 3759, - 3761, 3760, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, - 3775, 3776, 3777, 3778, 3779, 3784, 3783, 3794, 3794, 3851, - 3850, 3907, 3907, 3929, 3988, 4038, 4063, 4062, 4088, 4111, - 4113, 4114, 4118, 4136, 4157, 4166, 4202, 4157, 4231, 4233, - 4234, 4238, 4239, 4244, 4255, 4243, 4306, 4305, 4319, 4320, - 4324, 4325, 4330, 4339, 4329, 4388, 4397, 4387, 4441, 4454, - 4459, 4458, 4496, 4497, 4502, 4501, 4535, 4535, 4554, 4553, - 4603, 4620, 4629, 4619, 4683, 4692, 4682, 4732, 4734, 4739, - 4741, 4743, 4760, 4765, 4771, 4778, 4779, 4787, 4793, 4802, - 4808, 4814, 4815, 4819, 4819, 4824, 4825, 4826, 4830, 4831, - 4832, 4835, 4837, 4841, 4842, 4843, 4847, 4848, 4849, 4850, - 4851, 4852, 4853, 4854, 4857, 4859, 4863, 4864, 4865, 4869, - 4870, 4871, 4872, 4873, 4876, 4878, 4882, 4883, 4884, 4888, - 4889, 4890, 4891, 4892, 4893, 4894, 4897, 4899, 4903, 4904, - 4905, 4909, 4910, 4911, 4916, 4924, 4932, 4940, 4952, 4964, - 4969, 4974, 4982, 4990, 4998, 5006, 5014, 5022, 5030, 5043, - 5056, 5070, 5075, 5088, 5089, 5140, 5141, 5144, 5159, 5177, - 5182, 5180, 5187, 5189, 5188, 5192, 5191, 5197, 5234, 5235, - 5240, 5239, 5258, 5277, 5276, 5293, 5297, 5305, 5304, 5307, - 5309, 5311, 5313, 5318, 5319, 5325, 5326, 5343, 5344, 5348, - 5349, 5353, 5372, 5382, 5393, 5402, 5403, 5419, 5421, 5420, - 5425, 5423, 5434, 5435, 5439, 5457, 5473, 5474, 5490, 5505, - 5527, 5528, 5533, 5532, 5556, 5566, 5588, 5587, 5605, 5604, - 5624, 5646, 5650, 5679, 5691, 5692, 5697, 5708, 5696, 5733, - 5734, 5738, 5751, 5772, 5785, 5811, 5812, 5817, 5816, 5853, - 5858, 5859, 5863, 5864, 5868, 5870, 5876, 5878, 5880, 5882, - 5884, 5886, 5896, 5911, 5895, 5925, 5926, 5930, 5931, 5935, - 5936, 5940, 5941, 5945, 5946, 5950, 5951, 5955, 5959, 5960, - 5963, 5965, 5969, 5970, 5974, 5975, 5976, 5980, 5985, 5990, - 5995, 6000, 6005, 6010, 6015, 6030, 6036, 6051, 6056, 6071, - 6077, 6095, 6100, 6105, 6110, 6115, 6121, 6120, 6146, 6147, - 6148, 6153, 6158, 6163, 6165, 6167, 6169, 6175, 6183, 6201, - 6218, 6244, 6262, 6263, 6264, 6265, 6266, 6267, 6271, 6272, - 6273, 6277, 6278, 6282, 6283, 6284, 6285, 6290, 6297, 6298, - 6302, 6303, 6307, 6308, 6315, 6320, 6326, 6332, 6338, 6357, - 6363, 6365, 6369, 6373, 6374, 6378, 6383, 6382, 6405, 6406, - 6407, 6408, 6413, 6417, 6422, 6427, 6431, 6436, 6441, 6447, - 6452, 6458, 6462, 6467, 6472, 6490, 6492, 6494, 6510, 6512, - 6517, 6522, 6534, 6539, 6544, 6549, 6551, 6553, 6555, 6557, - 6559, 6561, 6563, 6566, 6565, 6570, 6569, 6573, 6575, 6584, - 6585, 6586, 6592, 6593, 6594, 6595, 6596, 6600, 6604, 6605, - 6609, 6610, 6614, 6615, 6616, 6617, 6618, 6622, 6623, 6624, - 6625, 6626, 6630, 6635, 6637, 6643, 6644, 6646, 6651, 6661, - 6662, 6666, 6667, 6668, 6676, 6677, 6681, 6682, 6686, 6687, - 6688, 6692, 6693, 6694, 6695, 6698, 6699, 6703, 6704, 6708, - 6709, 6713, 6714, 6718, 6719, 6720, 6721, 6722, 6723, 6729, - 6735, 6741, 6747, 6748, 6761, 6767, 6773, 6779, 6784, 6789, - 6798, 6819, 6827, 6828, 6833, 6834, 6838, 6846, 6850, 6851, - 6855, 6856, 6860, 6869, 6873, 6874, 6878, 6886, 6887, 6891, - 6892, 6896, 6897, 6902, 6903, 6907, 6914, 6923, 6928, 6936, - 6937, 6938, 6939, 6940, 6941, 6946, 6954, 6955, 6960, 6959, - 6972, 6973, 6977, 6980, 6981, 6982, 6983, 6987, 6995, 7002, - 7003, 7007, 7017, 7018, 7022, 7023, 7026, 7028, 7032, 7044, - 7045, 7049, 7056, 7069, 7070, 7072, 7074, 7080, 7085, 7091, - 7097, 7104, 7114, 7115, 7116, 7117, 7118, 7122, 7126, 7127, - 7131, 7132, 7136, 7137, 7141, 7142, 7143, 7147, 7148, 7152, - 7156, 7169, 7181, 7182, 7186, 7187, 7191, 7192, 7196, 7197, - 7201, 7202, 7206, 7207, 7211, 7212, 7216, 7217, 7221, 7223, - 7227, 7228, 7232, 7236, 7237, 7250, 7251, 7252, 7256, 7257, - 7261, 7267, 7281, 7282, 7286, 7287, 7291, 7292, 7300, 7299, - 7345, 7344, 7358, 7370, 7369, 7388, 7387, 7406, 7405, 7424, - 7418, 7438, 7437, 7470, 7475, 7480, 7485, 7490, 7497, 7504, - 7509, 7517, 7518, 7519, 7520, 7524, 7525, 7537, 7538, 7542, - 7543, 7546, 7548, 7556, 7564, 7566, 7568, 7569, 7577, 7578, - 7582, 7591, 7589, 7603, 7617, 7616, 7630, 7628, 7642, 7649, - 7660, 7661, 7689, 7696, 7700, 7705, 7704, 7720, 7722, 7727, - 7735, 7734, 7750, 7754, 7753, 7765, 7766, 7770, 7785, 7786, - 7790, 7799, 7803, 7808, 7814, 7813, 7824, 7833, 7823, 7848, - 7857, 7866, 7875, 7884, 7890, 7896, 7905, 7914, 7942, 7963, - 7973, 7977, 7982, 7983, 7986, 7988, 7989, 7990, 7991, 7994, - 7999, 8010, 8015, 8026, 8027, 8031, 8032, 8036, 8037, 8038, - 8042, 8043, 8048, 8056, 8057, 8058, 8059, 8064, 8063, 8092, - 8102, 8119, 8122, 8129, 8133, 8140, 8144, 8148, 8155, 8160, - 8163, 8170, 8173, 8180, 8183, 8190, 8193, 8201, 8204, 8211, - 8215, 8222, 8226, 8233, 8234, 8259, 8260, 8261, 8266, 8271, - 8279, 8278, 8290, 8291, 8292, 8297, 8296, 8318, 8319, 8323, - 8324, 8328, 8329, 8330, 8335, 8334, 8356, 8365, 8364, 8391, - 8392, 8396, 8397, 8401, 8402, 8403, 8404, 8405, 8406, 8411, - 8410, 8432, 8433, 8434, 8439, 8438, 8444, 8451, 8456, 8464, - 8465, 8469, 8483, 8482, 8495, 8496, 8500, 8501, 8505, 8515, - 8525, 8526, 8531, 8530, 8541, 8542, 8546, 8547, 8551, 8561, - 8572, 8571, 8579, 8579, 8590, 8591, 8596, 8597, 8606, 8615, - 8616, 8620, 8625, 8630, 8635, 8640, 8639, 8659, 8667, 8659, - 8674, 8675, 8676, 8677, 8678, 8682, 8689, 8696, 8698, 8709, - 8710, 8714, 8715, 8743, 8773, 8775, 8781, 8791, 8792, 8793, - 8808, 8815, 8840, 8846, 8852, 8853, 8854, 8855, 8856, 8860, - 8861, 8866, 8917, 8924, 8967, 8973, 8979, 8985, 8991, 8997, - 9003, 9009, 9013, 9019, 9025, 9031, 9037, 9043, 9047, 9053, - 9063, 9069, 9077, 9083, 9093, 9099, 9108, 9118, 9124, 9134, - 9140, 9149, 9153, 9159, 9165, 9171, 9177, 9183, 9189, 9195, - 9201, 9207, 9213, 9219, 9225, 9231, 9237, 9241, 9242, 9246, - 9247, 9251, 9252, 9256, 9257, 9261, 9262, 9263, 9264, 9265, - 9266, 9270, 9271, 9275, 9276, 9277, 9278, 9279, 9280, 9292, - 9293, 9294, 9295, 9296, 9302, 9306, 9312, 9318, 9324, 9330, - 9332, 9339, 9346, 9352, 9393, 9402, 9409, 9417, 9423, 9430, - 9436, 9450, 9457, 9473, 9479, 9485, 9493, 9499, 9505, 9511, - 9517, 9532, 9544, 9550, 9556, 9562, 9568, 9574, 9580, 9586, - 9592, 9598, 9604, 9610, 9616, 9622, 9628, 9634, 9640, 9648, - 9669, 9676, 9682, 9689, 9696, 9703, 9710, 9716, 9722, 9727, - 9733, 9740, 9746, 9752, 9758, 9764, 9770, 9788, 9794, 9800, - 9807, 9814, 9829, 9835, 9841, 9847, 9853, 9860, 9866, 9872, - 9878, 9884, 9890, 9898, 9911, 9917, 9923, 9929, 9935, 9943, - 9949, 9961, 9967, 9973, 9981, 9991, 9997, 10013, 10019, 10026, - 10033, 10040, 10047, 10054, 10058, 10078, 10077, 10150, 10190, 10192, - 10197, 10198, 10202, 10203, 10207, 10208, 10212, 10219, 10227, 10253, - 10259, 10265, 10271, 10277, 10283, 10292, 10299, 10301, 10298, 10308, - 10319, 10325, 10331, 10337, 10343, 10349, 10355, 10361, 10367, 10374, - 10373, 10393, 10392, 10407, 10418, 10426, 10442, 10443, 10448, 10453, - 10456, 10459, 10458, 10475, 10477, 10483, 10482, 10499, 10501, 10503, - 10505, 10507, 10509, 10511, 10513, 10515, 10517, 10519, 10524, 10525, - 10529, 10536, 10544, 10545, 10549, 10556, 10564, 10565, 10569, 10570, - 10574, 10582, 10593, 10594, 10603, 10614, 10615, 10621, 10622, 10642, - 10644, 10648, 10646, 10663, 10661, 10679, 10677, 10684, 10693, 10691, - 10709, 10708, 10718, 10729, 10727, 10746, 10745, 10756, 10767, 10768, - 10769, 10777, 10778, 10782, 10797, 10797, 10812, 10852, 10925, 10936, - 10941, 10933, 10960, 10980, 10988, 10980, 10997, 10996, 11019, 11036, - 11019, 11043, 11047, 11073, 11074, 11079, 11082, 11083, 11084, 11088, - 11089, 11094, 11093, 11099, 11098, 11106, 11107, 11110, 11112, 11112, - 11116, 11116, 11121, 11122, 11126, 11128, 11133, 11134, 11138, 11149, - 11162, 11163, 11164, 11165, 11166, 11167, 11168, 11169, 11170, 11171, - 11172, 11173, 11177, 11178, 11179, 11180, 11181, 11182, 11183, 11184, - 11185, 11189, 11190, 11191, 11192, 11195, 11197, 11198, 11202, 11203, - 11211, 11213, 11217, 11219, 11218, 11232, 11235, 11234, 11249, 11255, - 11270, 11272, 11276, 11278, 11283, 11284, 11304, 11335, 11339, 11340, - 11344, 11357, 11359, 11364, 11363, 11398, 11400, 11405, 11406, 11407, - 11412, 11418, 11422, 11423, 11427, 11434, 11441, 11448, 11458, 11485, - 11489, 11495, 11501, 11511, 11515, 11525, 11526, 11527, 11528, 11529, - 11530, 11534, 11535, 11536, 11537, 11538, 11542, 11543, 11544, 11545, - 11546, 11550, 11551, 11552, 11553, 11557, 11562, 11563, 11566, 11569, - 11568, 11602, 11603, 11607, 11615, 11628, 11628, 11638, 11639, 11643, - 11662, 11702, 11701, 11714, 11722, 11713, 11724, 11736, 11748, 11747, - 11765, 11764, 11775, 11776, 11775, 11792, 11799, 11820, 11841, 11853, - 11858, 11857, 11867, 11873, 11880, 11885, 11890, 11900, 11901, 11905, - 11916, 11929, 11930, 11934, 11945, 11946, 11950, 11951, 11954, 11956, - 11959, 11960, 11961, 11965, 11966, 11974, 11982, 11973, 11992, 11999, - 11991, 12009, 12021, 12022, 12035, 12039, 12040, 12056, 12057, 12061, - 12070, 12071, 12072, 12074, 12073, 12084, 12085, 12089, 12090, 12092, - 12091, 12095, 12094, 12100, 12101, 12105, 12106, 12110, 12120, 12121, - 12125, 12126, 12131, 12130, 12144, 12145, 12149, 12154, 12162, 12163, - 12171, 12173, 12173, 12181, 12189, 12180, 12211, 12212, 12216, 12224, - 12225, 12229, 12239, 12240, 12247, 12246, 12262, 12261, 12275, 12274, - 12286, 12285, 12299, 12300, 12304, 12317, 12333, 12334, 12338, 12339, - 12343, 12344, 12345, 12350, 12349, 12371, 12373, 12376, 12378, 12381, - 12382, 12385, 12389, 12393, 12397, 12401, 12405, 12409, 12413, 12417, - 12425, 12428, 12438, 12437, 12452, 12459, 12467, 12475, 12483, 12491, - 12499, 12506, 12508, 12510, 12519, 12523, 12528, 12527, 12533, 12532, - 12537, 12546, 12553, 12558, 12560, 12562, 12564, 12566, 12574, 12585, - 12593, 12595, 12603, 12610, 12617, 12627, 12634, 12640, 12649, 12657, - 12661, 12665, 12672, 12679, 12685, 12692, 12699, 12704, 12709, 12717, - 12719, 12721, 12726, 12727, 12730, 12732, 12736, 12737, 12741, 12742, - 12746, 12747, 12751, 12752, 12756, 12757, 12760, 12762, 12769, 12780, - 12779, 12795, 12794, 12801, 12802, 12803, 12804, 12805, 12809, 12810, - 12815, 12819, 12825, 12831, 12853, 12854, 12855, 12870, 12869, 12882, - 12891, 12881, 12893, 12897, 12898, 12910, 12909, 12931, 12932, 12937, - 12939, 12941, 12943, 12945, 12947, 12949, 12951, 12953, 12955, 12957, - 12959, 12961, 12966, 12967, 12972, 12971, 12981, 12982, 12986, 12986, - 12988, 12989, 12993, 12994, 12999, 12998, 13009, 13013, 13017, 13029, - 13039, 13040, 13041, 13047, 13059, 13071, 13081, 13091, 13058, 13099, - 13100, 13104, 13105, 13109, 13110, 13122, 13126, 13127, 13128, 13131, - 13133, 13137, 13138, 13142, 13147, 13154, 13159, 13166, 13168, 13172, - 13173, 13177, 13182, 13190, 13191, 13194, 13196, 13204, 13206, 13210, - 13211, 13212, 13216, 13218, 13223, 13224, 13233, 13234, 13238, 13239, - 13243, 13263, 13287, 13299, 13310, 13329, 13337, 13349, 13364, 13385, - 13386, 13387, 13396, 13397, 13398, 13399, 13414, 13420, 13426, 13432, - 13438, 13469, 13502, 13512, 13522, 13528, 13537, 13549, 13555, 13561, - 13577, 13578, 13582, 13591, 13607, 13611, 13662, 13666, 13684, 13688, - 13768, 13793, 13824, 13825, 13841, 13851, 13855, 13861, 13867, 13877, - 13883, 13892, 13902, 13903, 13933, 13946, 13962, 13978, 13995, 13996, - 14007, 14008, 14019, 14020, 14021, 14025, 14052, 14085, 14100, 14101, - 14102, 14103, 14104, 14105, 14106, 14107, 14108, 14109, 14110, 14111, - 14112, 14113, 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, - 14122, 14123, 14124, 14125, 14126, 14127, 14128, 14129, 14130, 14131, - 14132, 14133, 14134, 14135, 14136, 14137, 14138, 14139, 14140, 14141, - 14142, 14143, 14144, 14145, 14146, 14147, 14148, 14149, 14159, 14160, - 14161, 14162, 14163, 14164, 14165, 14166, 14167, 14168, 14169, 14170, - 14171, 14172, 14173, 14174, 14175, 14176, 14177, 14178, 14179, 14180, - 14181, 14182, 14183, 14184, 14185, 14186, 14187, 14188, 14189, 14190, - 14191, 14192, 14193, 14194, 14195, 14196, 14197, 14198, 14199, 14200, - 14201, 14202, 14203, 14208, 14209, 14210, 14211, 14212, 14213, 14214, - 14215, 14216, 14217, 14218, 14219, 14220, 14221, 14222, 14223, 14224, - 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, - 14235, 14236, 14237, 14238, 14239, 14240, 14241, 14242, 14243, 14244, - 14245, 14246, 14247, 14248, 14249, 14250, 14251, 14252, 14253, 14254, - 14255, 14256, 14257, 14258, 14259, 14260, 14261, 14262, 14263, 14264, - 14265, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14274, - 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, - 14285, 14286, 14287, 14288, 14289, 14290, 14291, 14292, 14293, 14294, - 14295, 14296, 14297, 14298, 14299, 14300, 14301, 14302, 14303, 14304, - 14305, 14306, 14307, 14308, 14309, 14310, 14311, 14312, 14313, 14314, - 14315, 14316, 14317, 14318, 14319, 14320, 14321, 14322, 14323, 14324, - 14325, 14326, 14327, 14328, 14329, 14330, 14331, 14332, 14333, 14334, - 14335, 14336, 14337, 14338, 14339, 14340, 14341, 14342, 14343, 14344, - 14345, 14346, 14347, 14348, 14349, 14350, 14351, 14352, 14353, 14354, - 14355, 14356, 14357, 14358, 14359, 14360, 14361, 14362, 14363, 14364, - 14365, 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, - 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14384, - 14385, 14386, 14387, 14388, 14389, 14390, 14391, 14392, 14393, 14394, - 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, - 14405, 14406, 14407, 14408, 14409, 14410, 14411, 14412, 14413, 14414, - 14415, 14416, 14417, 14418, 14419, 14420, 14421, 14422, 14423, 14424, - 14425, 14426, 14427, 14428, 14429, 14430, 14431, 14432, 14433, 14434, - 14435, 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14443, 14444, - 14445, 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, - 14455, 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14475, - 14474, 14494, 14493, 14500, 14499, 14509, 14508, 14519, 14518, 14524, - 14532, 14534, 14539, 14539, 14548, 14547, 14561, 14560, 14565, 14569, - 14570, 14571, 14575, 14576, 14577, 14578, 14582, 14583, 14584, 14585, - 14590, 14616, 14615, 14715, 14726, 14739, 14755, 14768, 14790, 14825, - 14867, 14895, 14941, 14955, 14956, 14957, 14958, 14962, 14980, 14998, - 14999, 15003, 15004, 15005, 15006, 15010, 15011, 15029, 15043, 15044, - 15045, 15051, 15057, 15069, 15068, 15084, 15085, 15089, 15090, 15094, - 15107, 15108, 15109, 15114, 15119, 15118, 15138, 15154, 15171, 15170, - 15209, 15210, 15214, 15215, 15219, 15220, 15221, 15222, 15224, 15223, - 15237, 15238, 15239, 15240, 15241, 15247, 15247, 15252, 15257, 15267, - 15277, 15281, 15290, 15290, 15295, 15301, 15312, 15323, 15331, 15333, - 15337, 15344, 15351, 15353, 15357, 15358, 15363, 15362, 15366, 15365, - 15369, 15368, 15372, 15371, 15374, 15375, 15376, 15377, 15378, 15379, - 15380, 15381, 15382, 15383, 15384, 15385, 15386, 15387, 15388, 15389, - 15390, 15391, 15392, 15393, 15394, 15395, 15396, 15397, 15398, 15399, - 15403, 15404, 15408, 15409, 15413, 15423, 15433, 15446, 15461, 15474, - 15487, 15499, 15504, 15512, 15517, 15525, 15543, 15563, 15575, 15588, - 15597, 15601, 15605, 15606, 15610, 15637, 15639, 15643, 15647, 15651, - 15658, 15659, 15663, 15664, 15668, 15669, 15673, 15674, 15680, 15686, - 15692, 15702, 15701, 15711, 15712, 15717, 15718, 15719, 15724, 15725, - 15726, 15730, 15731, 15735, 15747, 15756, 15766, 15775, 15789, 15790, - 15795, 15794, 15810, 15811, 15812, 15816, 15817, 15821, 15821, 15845, - 15846, 15850, 15851, 15852, 15856, 15860, 15867, 15870, 15868, 15884, - 15891, 15912, 15936, 15938, 15942, 15943, 15947, 15948, 15956, 15957, - 15958, 15959, 15965, 15971, 15981, 15983, 15985, 15990, 15991, 15992, - 15993, 15994, 15998, 15999, 16000, 16001, 16002, 16003, 16013, 16014, - 16019, 16032, 16045, 16047, 16049, 16054, 16059, 16061, 16063, 16069, - 16070, 16072, 16078, 16077, 16095, 16096, 16100, 16105, 16113, 16113, - 16139, 16138, 16155, 16159, 16164, 16169, 16168, 16180, 16181, 16183, - 16185, 16203, 16209, 16214, 16196, 16277, 16295, 16320, 16352, 16357, - 16365, 16388, 16316, 16454, 16474, 16487, 16497, 16453, 16518, 16522, - 16526, 16530, 16534, 16538, 16545, 16552, 16559, 16569, 16570, 16574, - 16575, 16576, 16580, 16581, 16586, 16588, 16587, 16593, 16594, 16598, - 16608 + 2530, 2531, 2535, 2539, 2543, 2547, 2551, 2556, 2560, 2568, + 2567, 2599, 2598, 2605, 2612, 2613, 2619, 2625, 2635, 2641, + 2647, 2649, 2656, 2657, 2661, 2667, 2676, 2677, 2685, 2685, + 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, + 2750, 2751, 2752, 2757, 2771, 2785, 2804, 2805, 2809, 2810, + 2815, 2817, 2819, 2821, 2823, 2825, 2827, 2833, 2834, 2835, + 2839, 2843, 2851, 2850, 2863, 2865, 2868, 2870, 2874, 2878, + 2885, 2887, 2891, 2892, 2897, 2916, 2946, 2948, 2952, 2953, + 2957, 2986, 2987, 2988, 2989, 2993, 2994, 2998, 2999, 3004, + 3007, 3034, 3033, 3117, 3134, 3133, 3208, 3207, 3280, 3281, + 3286, 3288, 3293, 3316, 3327, 3331, 3353, 3354, 3358, 3362, + 3375, 3381, 3387, 3396, 3411, 3437, 3443, 3444, 3450, 3453, + 3457, 3465, 3485, 3487, 3505, 3511, 3513, 3515, 3517, 3519, + 3521, 3523, 3525, 3527, 3529, 3531, 3533, 3538, 3554, 3570, + 3571, 3576, 3582, 3591, 3597, 3606, 3614, 3643, 3652, 3654, + 3663, 3668, 3674, 3683, 3691, 3693, 3695, 3697, 3699, 3701, + 3703, 3705, 3707, 3709, 3711, 3713, 3715, 3720, 3740, 3764, + 3766, 3765, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, + 3780, 3781, 3782, 3783, 3784, 3789, 3788, 3799, 3799, 3856, + 3855, 3912, 3912, 3934, 3993, 4043, 4068, 4067, 4093, 4116, + 4118, 4119, 4123, 4141, 4162, 4171, 4207, 4162, 4236, 4238, + 4239, 4243, 4244, 4249, 4260, 4248, 4311, 4310, 4324, 4325, + 4329, 4330, 4335, 4344, 4334, 4393, 4402, 4392, 4446, 4459, + 4464, 4463, 4501, 4502, 4507, 4506, 4540, 4540, 4559, 4558, + 4608, 4625, 4634, 4624, 4688, 4697, 4687, 4737, 4739, 4744, + 4746, 4748, 4765, 4770, 4776, 4783, 4784, 4792, 4798, 4807, + 4813, 4819, 4820, 4824, 4824, 4829, 4830, 4831, 4835, 4836, + 4837, 4840, 4842, 4846, 4847, 4848, 4852, 4853, 4854, 4855, + 4856, 4857, 4858, 4859, 4862, 4864, 4868, 4869, 4870, 4874, + 4875, 4876, 4877, 4878, 4881, 4883, 4887, 4888, 4889, 4893, + 4894, 4895, 4896, 4897, 4898, 4899, 4902, 4904, 4908, 4909, + 4910, 4914, 4915, 4916, 4921, 4929, 4937, 4945, 4957, 4969, + 4974, 4979, 4987, 4995, 5003, 5011, 5019, 5027, 5035, 5048, + 5061, 5075, 5080, 5093, 5094, 5145, 5146, 5149, 5164, 5182, + 5187, 5185, 5192, 5194, 5193, 5197, 5196, 5202, 5239, 5240, + 5245, 5244, 5263, 5282, 5281, 5298, 5302, 5310, 5309, 5312, + 5314, 5316, 5318, 5323, 5324, 5330, 5331, 5348, 5349, 5353, + 5354, 5358, 5377, 5387, 5398, 5407, 5408, 5424, 5426, 5425, + 5430, 5428, 5439, 5440, 5444, 5462, 5478, 5479, 5495, 5510, + 5532, 5533, 5538, 5537, 5561, 5571, 5593, 5592, 5610, 5609, + 5629, 5651, 5655, 5684, 5696, 5697, 5702, 5713, 5701, 5738, + 5739, 5743, 5756, 5777, 5790, 5816, 5817, 5822, 5821, 5858, + 5863, 5864, 5868, 5869, 5873, 5875, 5881, 5883, 5885, 5887, + 5889, 5891, 5901, 5916, 5900, 5930, 5931, 5935, 5936, 5940, + 5941, 5945, 5946, 5950, 5951, 5955, 5956, 5960, 5964, 5965, + 5968, 5970, 5974, 5975, 5979, 5980, 5981, 5985, 5990, 5995, + 6000, 6005, 6010, 6015, 6020, 6035, 6041, 6056, 6061, 6076, + 6082, 6100, 6105, 6110, 6115, 6120, 6126, 6125, 6151, 6152, + 6153, 6158, 6163, 6168, 6170, 6172, 6174, 6180, 6188, 6206, + 6223, 6249, 6267, 6268, 6269, 6270, 6271, 6272, 6276, 6277, + 6278, 6282, 6283, 6287, 6288, 6289, 6290, 6295, 6302, 6303, + 6307, 6308, 6312, 6313, 6320, 6325, 6331, 6337, 6343, 6362, + 6368, 6370, 6374, 6378, 6379, 6383, 6388, 6387, 6410, 6411, + 6412, 6413, 6418, 6422, 6427, 6432, 6436, 6441, 6446, 6452, + 6457, 6463, 6467, 6472, 6477, 6495, 6497, 6499, 6515, 6517, + 6522, 6527, 6539, 6544, 6549, 6554, 6556, 6558, 6560, 6562, + 6564, 6566, 6568, 6571, 6570, 6575, 6574, 6578, 6580, 6589, + 6590, 6591, 6597, 6598, 6599, 6600, 6601, 6605, 6609, 6610, + 6614, 6615, 6619, 6620, 6621, 6622, 6623, 6627, 6628, 6629, + 6630, 6631, 6635, 6640, 6642, 6648, 6649, 6651, 6656, 6666, + 6667, 6671, 6672, 6673, 6681, 6682, 6686, 6687, 6691, 6692, + 6693, 6697, 6698, 6699, 6700, 6703, 6704, 6708, 6709, 6713, + 6714, 6718, 6719, 6723, 6724, 6725, 6726, 6727, 6728, 6734, + 6740, 6746, 6752, 6753, 6766, 6772, 6778, 6784, 6789, 6794, + 6803, 6824, 6832, 6833, 6838, 6839, 6843, 6851, 6855, 6856, + 6860, 6861, 6865, 6874, 6878, 6879, 6883, 6891, 6892, 6896, + 6897, 6901, 6902, 6907, 6908, 6912, 6919, 6928, 6933, 6941, + 6942, 6943, 6944, 6945, 6946, 6951, 6959, 6960, 6965, 6964, + 6977, 6978, 6982, 6985, 6986, 6987, 6988, 6992, 7000, 7007, + 7008, 7012, 7022, 7023, 7027, 7028, 7031, 7033, 7037, 7049, + 7050, 7054, 7061, 7074, 7075, 7077, 7079, 7085, 7090, 7096, + 7102, 7109, 7119, 7120, 7121, 7122, 7123, 7127, 7131, 7132, + 7136, 7137, 7141, 7142, 7146, 7147, 7148, 7152, 7153, 7157, + 7161, 7174, 7186, 7187, 7191, 7192, 7196, 7197, 7201, 7202, + 7206, 7207, 7211, 7212, 7216, 7217, 7221, 7222, 7226, 7228, + 7232, 7233, 7237, 7241, 7242, 7255, 7256, 7257, 7261, 7262, + 7266, 7272, 7286, 7287, 7291, 7292, 7296, 7297, 7305, 7304, + 7350, 7349, 7363, 7375, 7374, 7393, 7392, 7411, 7410, 7429, + 7423, 7443, 7442, 7475, 7480, 7485, 7490, 7495, 7502, 7509, + 7514, 7522, 7523, 7524, 7525, 7529, 7530, 7542, 7543, 7547, + 7548, 7551, 7553, 7561, 7569, 7571, 7573, 7574, 7582, 7583, + 7587, 7596, 7594, 7608, 7622, 7621, 7635, 7633, 7647, 7654, + 7665, 7666, 7694, 7701, 7705, 7710, 7709, 7725, 7727, 7732, + 7740, 7739, 7755, 7759, 7758, 7770, 7771, 7775, 7790, 7791, + 7795, 7804, 7808, 7813, 7819, 7818, 7829, 7838, 7828, 7853, + 7862, 7871, 7880, 7889, 7895, 7901, 7910, 7919, 7947, 7968, + 7978, 7982, 7987, 7988, 7991, 7993, 7994, 7995, 7996, 7999, + 8004, 8015, 8020, 8031, 8032, 8036, 8037, 8041, 8042, 8043, + 8047, 8048, 8053, 8061, 8062, 8063, 8064, 8069, 8068, 8097, + 8107, 8124, 8127, 8134, 8138, 8145, 8149, 8153, 8160, 8165, + 8168, 8175, 8178, 8185, 8188, 8195, 8198, 8206, 8209, 8216, + 8220, 8227, 8231, 8238, 8239, 8264, 8265, 8266, 8271, 8276, + 8284, 8283, 8295, 8296, 8297, 8302, 8301, 8323, 8324, 8328, + 8329, 8333, 8334, 8335, 8340, 8339, 8361, 8370, 8369, 8396, + 8397, 8401, 8402, 8406, 8407, 8408, 8409, 8410, 8411, 8416, + 8415, 8437, 8438, 8439, 8444, 8443, 8449, 8456, 8461, 8469, + 8470, 8474, 8488, 8487, 8500, 8501, 8505, 8506, 8510, 8520, + 8530, 8531, 8536, 8535, 8546, 8547, 8551, 8552, 8556, 8566, + 8577, 8576, 8584, 8584, 8595, 8596, 8601, 8602, 8611, 8620, + 8621, 8625, 8630, 8635, 8640, 8645, 8644, 8664, 8672, 8664, + 8679, 8680, 8681, 8682, 8683, 8687, 8694, 8701, 8703, 8714, + 8715, 8719, 8720, 8748, 8778, 8780, 8789, 8802, 8803, 8804, + 8819, 8826, 8851, 8857, 8863, 8864, 8865, 8866, 8867, 8871, + 8872, 8877, 8928, 8935, 8978, 8984, 8990, 8996, 9002, 9008, + 9014, 9020, 9024, 9030, 9036, 9042, 9048, 9054, 9058, 9064, + 9074, 9080, 9088, 9094, 9104, 9110, 9119, 9129, 9135, 9145, + 9151, 9160, 9164, 9170, 9176, 9182, 9188, 9194, 9200, 9206, + 9212, 9218, 9224, 9230, 9236, 9242, 9248, 9252, 9253, 9257, + 9258, 9262, 9263, 9267, 9268, 9272, 9273, 9274, 9275, 9276, + 9277, 9281, 9282, 9286, 9287, 9288, 9289, 9290, 9291, 9303, + 9304, 9305, 9306, 9307, 9313, 9317, 9323, 9329, 9335, 9341, + 9343, 9350, 9357, 9363, 9404, 9413, 9420, 9428, 9434, 9441, + 9447, 9461, 9468, 9484, 9490, 9496, 9504, 9510, 9516, 9522, + 9528, 9543, 9555, 9561, 9567, 9573, 9579, 9585, 9591, 9597, + 9603, 9609, 9615, 9621, 9627, 9633, 9639, 9645, 9651, 9659, + 9680, 9687, 9693, 9700, 9707, 9714, 9721, 9727, 9733, 9738, + 9744, 9751, 9757, 9763, 9769, 9775, 9781, 9799, 9805, 9811, + 9818, 9825, 9840, 9846, 9852, 9858, 9864, 9871, 9877, 9883, + 9889, 9895, 9901, 9909, 9922, 9928, 9934, 9940, 9946, 9954, + 9960, 9972, 9978, 9984, 9992, 10002, 10008, 10024, 10030, 10037, + 10044, 10051, 10058, 10065, 10069, 10089, 10088, 10161, 10201, 10203, + 10208, 10209, 10213, 10214, 10218, 10219, 10223, 10230, 10238, 10264, + 10270, 10276, 10282, 10288, 10294, 10303, 10310, 10312, 10309, 10319, + 10330, 10336, 10342, 10348, 10354, 10360, 10366, 10372, 10378, 10385, + 10384, 10404, 10403, 10418, 10429, 10437, 10453, 10454, 10459, 10464, + 10467, 10470, 10469, 10486, 10488, 10494, 10493, 10510, 10512, 10514, + 10516, 10518, 10520, 10522, 10524, 10526, 10528, 10530, 10535, 10536, + 10540, 10547, 10555, 10556, 10560, 10567, 10575, 10576, 10580, 10581, + 10585, 10593, 10604, 10605, 10614, 10625, 10626, 10632, 10633, 10653, + 10655, 10659, 10657, 10674, 10672, 10690, 10688, 10695, 10704, 10702, + 10720, 10719, 10729, 10740, 10738, 10757, 10756, 10767, 10778, 10779, + 10780, 10788, 10789, 10793, 10808, 10808, 10823, 10863, 10936, 10947, + 10952, 10944, 10971, 10991, 10999, 10991, 11008, 11007, 11030, 11047, + 11030, 11054, 11058, 11084, 11085, 11090, 11093, 11094, 11095, 11099, + 11100, 11105, 11104, 11110, 11109, 11117, 11118, 11121, 11123, 11123, + 11127, 11127, 11132, 11133, 11137, 11139, 11144, 11145, 11149, 11160, + 11173, 11174, 11175, 11176, 11177, 11178, 11179, 11180, 11181, 11182, + 11183, 11184, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, + 11196, 11200, 11201, 11202, 11203, 11206, 11208, 11209, 11213, 11214, + 11222, 11224, 11228, 11230, 11229, 11243, 11246, 11245, 11260, 11266, + 11281, 11283, 11287, 11289, 11294, 11295, 11315, 11346, 11350, 11351, + 11355, 11368, 11370, 11375, 11374, 11409, 11411, 11416, 11417, 11418, + 11423, 11429, 11433, 11434, 11438, 11445, 11452, 11459, 11469, 11496, + 11500, 11506, 11512, 11522, 11526, 11536, 11537, 11538, 11539, 11540, + 11541, 11545, 11546, 11547, 11548, 11549, 11553, 11554, 11555, 11556, + 11557, 11561, 11562, 11563, 11564, 11568, 11573, 11574, 11577, 11580, + 11579, 11613, 11614, 11618, 11626, 11639, 11639, 11649, 11650, 11654, + 11673, 11713, 11712, 11725, 11733, 11724, 11735, 11747, 11759, 11758, + 11776, 11775, 11786, 11787, 11786, 11803, 11810, 11831, 11852, 11864, + 11869, 11868, 11878, 11884, 11891, 11896, 11901, 11911, 11912, 11916, + 11927, 11940, 11941, 11945, 11956, 11957, 11961, 11962, 11965, 11967, + 11970, 11971, 11972, 11976, 11977, 11985, 11993, 11984, 12003, 12010, + 12002, 12020, 12032, 12033, 12046, 12050, 12051, 12067, 12068, 12072, + 12081, 12082, 12083, 12085, 12084, 12095, 12096, 12100, 12101, 12103, + 12102, 12106, 12105, 12111, 12112, 12116, 12117, 12121, 12131, 12132, + 12136, 12137, 12142, 12141, 12155, 12156, 12160, 12165, 12173, 12174, + 12182, 12184, 12184, 12192, 12200, 12191, 12222, 12223, 12227, 12235, + 12236, 12240, 12250, 12251, 12258, 12257, 12273, 12272, 12286, 12285, + 12297, 12296, 12310, 12311, 12315, 12328, 12344, 12345, 12349, 12350, + 12354, 12355, 12356, 12361, 12360, 12382, 12384, 12387, 12389, 12392, + 12393, 12396, 12400, 12404, 12408, 12412, 12416, 12420, 12424, 12428, + 12436, 12439, 12449, 12448, 12463, 12470, 12478, 12486, 12494, 12502, + 12510, 12517, 12519, 12521, 12530, 12534, 12539, 12538, 12544, 12543, + 12548, 12557, 12564, 12569, 12571, 12573, 12575, 12577, 12585, 12596, + 12604, 12606, 12614, 12621, 12628, 12638, 12645, 12651, 12660, 12668, + 12672, 12676, 12683, 12690, 12696, 12703, 12710, 12715, 12720, 12728, + 12730, 12732, 12737, 12738, 12741, 12743, 12747, 12748, 12752, 12753, + 12757, 12758, 12762, 12763, 12767, 12768, 12771, 12773, 12780, 12791, + 12790, 12806, 12805, 12812, 12813, 12814, 12815, 12816, 12820, 12821, + 12826, 12830, 12836, 12842, 12864, 12865, 12866, 12881, 12880, 12893, + 12902, 12892, 12904, 12908, 12909, 12921, 12920, 12942, 12943, 12948, + 12950, 12952, 12954, 12956, 12958, 12960, 12962, 12964, 12966, 12968, + 12970, 12972, 12977, 12978, 12983, 12982, 12992, 12993, 12997, 12997, + 12999, 13000, 13004, 13005, 13010, 13009, 13020, 13024, 13028, 13040, + 13050, 13051, 13052, 13058, 13070, 13082, 13092, 13102, 13069, 13110, + 13111, 13115, 13116, 13120, 13121, 13133, 13137, 13138, 13139, 13142, + 13144, 13148, 13149, 13153, 13158, 13165, 13170, 13177, 13179, 13183, + 13184, 13188, 13193, 13201, 13202, 13205, 13207, 13215, 13217, 13221, + 13222, 13223, 13227, 13229, 13234, 13235, 13244, 13245, 13249, 13250, + 13254, 13274, 13298, 13310, 13321, 13340, 13348, 13360, 13375, 13396, + 13397, 13398, 13407, 13408, 13409, 13410, 13425, 13431, 13437, 13443, + 13449, 13480, 13513, 13523, 13533, 13539, 13548, 13560, 13566, 13572, + 13588, 13589, 13593, 13602, 13618, 13622, 13673, 13677, 13695, 13699, + 13779, 13804, 13835, 13836, 13852, 13862, 13866, 13872, 13878, 13888, + 13894, 13903, 13913, 13914, 13944, 13957, 13973, 13989, 14006, 14007, + 14018, 14019, 14030, 14031, 14032, 14036, 14063, 14096, 14111, 14112, + 14113, 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, 14122, + 14123, 14124, 14125, 14126, 14127, 14128, 14129, 14130, 14131, 14132, + 14133, 14134, 14135, 14136, 14137, 14138, 14139, 14140, 14141, 14142, + 14143, 14144, 14145, 14146, 14147, 14148, 14149, 14150, 14151, 14152, + 14153, 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14170, 14171, + 14172, 14173, 14174, 14175, 14176, 14177, 14178, 14179, 14180, 14181, + 14182, 14183, 14184, 14185, 14186, 14187, 14188, 14189, 14190, 14191, + 14192, 14193, 14194, 14195, 14196, 14197, 14198, 14199, 14200, 14201, + 14202, 14203, 14204, 14205, 14206, 14207, 14208, 14209, 14210, 14211, + 14212, 14213, 14214, 14219, 14220, 14221, 14222, 14223, 14224, 14225, + 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, + 14236, 14237, 14238, 14239, 14240, 14241, 14242, 14243, 14244, 14245, + 14246, 14247, 14248, 14249, 14250, 14251, 14252, 14253, 14254, 14255, + 14256, 14257, 14258, 14259, 14260, 14261, 14262, 14263, 14264, 14265, + 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14274, 14275, + 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, + 14286, 14287, 14288, 14289, 14290, 14291, 14292, 14293, 14294, 14295, + 14296, 14297, 14298, 14299, 14300, 14301, 14302, 14303, 14304, 14305, + 14306, 14307, 14308, 14309, 14310, 14311, 14312, 14313, 14314, 14315, + 14316, 14317, 14318, 14319, 14320, 14321, 14322, 14323, 14324, 14325, + 14326, 14327, 14328, 14329, 14330, 14331, 14332, 14333, 14334, 14335, + 14336, 14337, 14338, 14339, 14340, 14341, 14342, 14343, 14344, 14345, + 14346, 14347, 14348, 14349, 14350, 14351, 14352, 14353, 14354, 14355, + 14356, 14357, 14358, 14359, 14360, 14361, 14362, 14363, 14364, 14365, + 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, 14375, + 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14384, 14385, + 14386, 14387, 14388, 14389, 14390, 14391, 14392, 14393, 14394, 14395, + 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, 14405, + 14406, 14407, 14408, 14409, 14410, 14411, 14412, 14413, 14414, 14415, + 14416, 14417, 14418, 14419, 14420, 14421, 14422, 14423, 14424, 14425, + 14426, 14427, 14428, 14429, 14430, 14431, 14432, 14433, 14434, 14435, + 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14443, 14444, 14445, + 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, 14455, + 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14464, 14465, + 14466, 14467, 14468, 14469, 14470, 14471, 14472, 14473, 14474, 14486, + 14485, 14505, 14504, 14511, 14510, 14520, 14519, 14530, 14529, 14535, + 14543, 14545, 14550, 14550, 14559, 14558, 14572, 14571, 14576, 14580, + 14581, 14582, 14586, 14587, 14588, 14589, 14593, 14594, 14595, 14596, + 14601, 14627, 14626, 14726, 14737, 14750, 14766, 14779, 14801, 14836, + 14878, 14906, 14952, 14966, 14967, 14968, 14969, 14973, 14991, 15009, + 15010, 15014, 15015, 15016, 15017, 15021, 15022, 15040, 15054, 15055, + 15056, 15062, 15068, 15080, 15079, 15095, 15096, 15100, 15101, 15105, + 15118, 15119, 15120, 15125, 15130, 15129, 15149, 15165, 15182, 15181, + 15220, 15221, 15225, 15226, 15230, 15231, 15232, 15233, 15235, 15234, + 15248, 15249, 15250, 15251, 15252, 15258, 15258, 15263, 15268, 15278, + 15288, 15292, 15301, 15301, 15306, 15312, 15323, 15334, 15342, 15344, + 15348, 15355, 15362, 15364, 15368, 15369, 15374, 15373, 15377, 15376, + 15380, 15379, 15383, 15382, 15385, 15386, 15387, 15388, 15389, 15390, + 15391, 15392, 15393, 15394, 15395, 15396, 15397, 15398, 15399, 15400, + 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15410, + 15414, 15415, 15419, 15420, 15424, 15434, 15444, 15457, 15472, 15485, + 15498, 15510, 15515, 15523, 15528, 15536, 15554, 15574, 15586, 15599, + 15608, 15612, 15616, 15617, 15621, 15648, 15650, 15654, 15658, 15662, + 15669, 15670, 15674, 15675, 15679, 15680, 15684, 15685, 15691, 15697, + 15703, 15713, 15712, 15722, 15723, 15728, 15729, 15730, 15735, 15736, + 15737, 15741, 15742, 15746, 15758, 15767, 15777, 15786, 15800, 15801, + 15806, 15805, 15821, 15822, 15823, 15827, 15828, 15832, 15832, 15856, + 15857, 15861, 15862, 15863, 15867, 15871, 15878, 15881, 15879, 15895, + 15902, 15923, 15947, 15949, 15953, 15954, 15958, 15959, 15967, 15968, + 15969, 15970, 15976, 15982, 15992, 15994, 15996, 16001, 16002, 16003, + 16004, 16005, 16009, 16010, 16011, 16012, 16013, 16014, 16024, 16025, + 16030, 16043, 16056, 16058, 16060, 16065, 16070, 16072, 16074, 16080, + 16081, 16083, 16089, 16088, 16106, 16107, 16111, 16116, 16124, 16124, + 16150, 16149, 16166, 16170, 16175, 16180, 16179, 16191, 16192, 16194, + 16196, 16214, 16220, 16225, 16207, 16288, 16306, 16331, 16363, 16368, + 16376, 16399, 16327, 16465, 16485, 16498, 16508, 16464, 16529, 16533, + 16537, 16541, 16545, 16549, 16556, 16563, 16570, 16580, 16581, 16585, + 16586, 16587, 16591, 16592, 16597, 16599, 16598, 16604, 16605, 16609, + 16619 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -4410,7 +4428,7 @@ "udf_tail", "sf_tail", "$@198", "$@199", "$@200", "$@201", "$@202", "sp_tail", "$@203", "$@204", "$@205", "$@206", "xa", "xid", "begin_or_start", "opt_join_or_resume", "opt_one_phase", "opt_suspend", - "$@207", "opt_migrate", "install", "uninstall", 0 + "$@207", "opt_migrate", "install", "uninstall", YY_NULL }; #endif @@ -5032,8 +5050,8 @@ 3 }; -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero +/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { @@ -6156,8 +6174,7 @@ /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ + number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -2610 static const yytype_int16 yytable[] = { @@ -11719,6 +11736,12 @@ 0, 0, 488 }; +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-3874))) + +#define yytable_value_is_error(Yytable_value) \ + YYID (0) + static const yytype_int16 yycheck[] = { 6, 638, 647, 648, 594, 575, 574, 575, 953, 1137, @@ -17750,78 +17773,50 @@ /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ #define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (YYTHD, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) - +/* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - +/* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ - #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else @@ -17872,6 +17867,8 @@ class THD *YYTHD; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; YYUSE (YYTHD); @@ -17884,7 +17881,7 @@ switch (yytype) { default: - break; + break; } } @@ -18012,7 +18009,6 @@ # define YYMAXDEPTH 10000 #endif - #if YYERROR_VERBOSE @@ -18115,115 +18111,145 @@ } # endif -/* Copy into YYRESULT an error message about the unexpected token - YYCHAR while in state YYSTATE. Return the number of bytes copied, - including the terminating null byte. If YYRESULT is null, do not - copy anything; just return the number of bytes that would be - copied. As a special case, return 0 if an ordinary "syntax error" - message will do. Return YYSIZE_MAXIMUM if overflow occurs during - size calculation. */ -static YYSIZE_T -yysyntax_error (char *yyresult, int yystate, int yychar) +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) { - int yyn = yypact[yystate]; - - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULL; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - Assume YYFAIL is not used. It's too flawed to consider. See + + for details. YYERROR is fine as it does not invoke this + function. + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -# if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -# endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } - if (yysize_overflow) - return YYSIZE_MAXIMUM; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } - if (yyresult) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yyresult; - int yyi = 0; - while ((*yyp = *yyf) != '\0') - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - } - return yysize; + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; } #endif /* YYERROR_VERBOSE */ - /*-----------------------------------------------. | Release the memory associated to this symbol. | @@ -18254,32 +18280,16 @@ { default: - break; + break; } } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (class THD *YYTHD); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - -/*-------------------------. -| yyparse or yypush_parse. | -`-------------------------*/ +/*----------. +| yyparse. | +`----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -18306,8 +18316,31 @@ /* The lookahead symbol. */ int yychar; + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +static YYSTYPE yyval_default; +# define YY_INITIAL_VALUE(Value) = Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -18320,7 +18353,7 @@ `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -18338,7 +18371,7 @@ int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -18356,9 +18389,8 @@ Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -18367,14 +18399,6 @@ yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -18466,7 +18490,7 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ @@ -18497,8 +18521,8 @@ yyn = yytable[yyn]; if (yyn <= 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yytable_value_is_error (yyn)) + goto yyerrlab; yyn = -yyn; goto yyreduce; } @@ -18515,7 +18539,9 @@ yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -18552,9 +18578,8 @@ switch (yyn) { case 2: - -/* Line 1455 of yacc.c */ -#line 1970 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 1970 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; if (!thd->bootstrap && @@ -18569,9 +18594,8 @@ break; case 3: - -/* Line 1455 of yacc.c */ -#line 1982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 1982 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex_input_stream *lip = YYLIP; @@ -18597,9 +18621,8 @@ break; case 5: - -/* Line 1455 of yacc.c */ -#line 2007 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2007 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Single query, not terminated. */ YYLIP->found_semicolon= NULL; @@ -18607,9 +18630,8 @@ break; case 62: - -/* Line 1455 of yacc.c */ -#line 2081 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2081 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -18619,9 +18641,8 @@ break; case 65: - -/* Line 1455 of yacc.c */ -#line 2096 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2096 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -18641,9 +18662,8 @@ break; case 66: - -/* Line 1455 of yacc.c */ -#line 2116 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2116 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -18653,9 +18673,8 @@ break; case 67: - -/* Line 1455 of yacc.c */ -#line 2123 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2123 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -18665,9 +18684,8 @@ break; case 68: - -/* Line 1455 of yacc.c */ -#line 2133 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2133 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -18677,16 +18695,14 @@ break; case 69: - -/* Line 1455 of yacc.c */ -#line 2140 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2140 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 74: - -/* Line 1455 of yacc.c */ -#line 2155 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2155 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; LEX_STRING *lexstr= (LEX_STRING*)sql_memdup(&(yyvsp[(2) - (2)].lex_str), sizeof(LEX_STRING)); @@ -18696,9 +18712,8 @@ break; case 75: - -/* Line 1455 of yacc.c */ -#line 2167 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2167 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->sphead) { @@ -18709,9 +18724,8 @@ break; case 76: - -/* Line 1455 of yacc.c */ -#line 2175 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_HELP; @@ -18720,9 +18734,8 @@ break; case 77: - -/* Line 1455 of yacc.c */ -#line 2186 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2186 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex = Lex; lex->sql_command = SQLCOM_CHANGE_MASTER; @@ -18738,43 +18751,38 @@ break; case 78: - -/* Line 1455 of yacc.c */ -#line 2199 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2199 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 81: - -/* Line 1455 of yacc.c */ -#line 2209 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2209 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.host = (yyvsp[(3) - (3)].lex_str).str; } break; case 82: - -/* Line 1455 of yacc.c */ -#line 2213 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2213 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.bind_addr = (yyvsp[(3) - (3)].lex_str).str; } break; case 83: - -/* Line 1455 of yacc.c */ -#line 2217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2217 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.user = (yyvsp[(3) - (3)].lex_str).str; } break; case 84: - -/* Line 1455 of yacc.c */ -#line 2221 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.password = (yyvsp[(3) - (3)].lex_str).str; Lex->contains_plaintext_password= true; @@ -18782,27 +18790,24 @@ break; case 85: - -/* Line 1455 of yacc.c */ -#line 2226 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2226 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.port = (yyvsp[(3) - (3)].ulong_num); } break; case 86: - -/* Line 1455 of yacc.c */ -#line 2230 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2230 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.connect_retry = (yyvsp[(3) - (3)].ulong_num); } break; case 87: - -/* Line 1455 of yacc.c */ -#line 2234 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2234 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.retry_count= (yyvsp[(3) - (3)].ulong_num); Lex->mi.retry_count_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; @@ -18810,9 +18815,8 @@ break; case 88: - -/* Line 1455 of yacc.c */ -#line 2239 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2239 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(3) - (3)].ulong_num) > MASTER_DELAY_MAX) { @@ -18828,9 +18832,8 @@ break; case 89: - -/* Line 1455 of yacc.c */ -#line 2252 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2252 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl= (yyvsp[(3) - (3)].ulong_num) ? LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE; @@ -18838,54 +18841,48 @@ break; case 90: - -/* Line 1455 of yacc.c */ -#line 2257 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2257 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_ca= (yyvsp[(3) - (3)].lex_str).str; } break; case 91: - -/* Line 1455 of yacc.c */ -#line 2261 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2261 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_capath= (yyvsp[(3) - (3)].lex_str).str; } break; case 92: - -/* Line 1455 of yacc.c */ -#line 2265 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2265 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_cert= (yyvsp[(3) - (3)].lex_str).str; } break; case 93: - -/* Line 1455 of yacc.c */ -#line 2269 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2269 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_cipher= (yyvsp[(3) - (3)].lex_str).str; } break; case 94: - -/* Line 1455 of yacc.c */ -#line 2273 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2273 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_key= (yyvsp[(3) - (3)].lex_str).str; } break; case 95: - -/* Line 1455 of yacc.c */ -#line 2277 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_verify_server_cert= (yyvsp[(3) - (3)].ulong_num) ? LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE; @@ -18893,27 +18890,24 @@ break; case 96: - -/* Line 1455 of yacc.c */ -#line 2282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2282 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_crl= (yyvsp[(3) - (3)].lex_str).str; } break; case 97: - -/* Line 1455 of yacc.c */ -#line 2286 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2286 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.ssl_crlpath= (yyvsp[(3) - (3)].lex_str).str; } break; case 98: - -/* Line 1455 of yacc.c */ -#line 2291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2291 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.heartbeat_period= (float) (yyvsp[(3) - (3)].item_num)->val_real(); if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD || @@ -18947,18 +18941,16 @@ break; case 99: - -/* Line 1455 of yacc.c */ -#line 2322 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2322 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.repl_ignore_server_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; } break; case 100: - -/* Line 1455 of yacc.c */ -#line 2327 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2327 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.auto_position= (yyvsp[(3) - (3)].ulong_num) ? LEX_MASTER_INFO::LEX_MI_ENABLE : @@ -18967,9 +18959,8 @@ break; case 105: - -/* Line 1455 of yacc.c */ -#line 2344 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->mi.repl_ignore_server_ids.elements == 0) { @@ -18984,18 +18975,16 @@ break; case 106: - -/* Line 1455 of yacc.c */ -#line 2358 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2358 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.log_file_name = (yyvsp[(3) - (3)].lex_str).str; } break; case 107: - -/* Line 1455 of yacc.c */ -#line 2362 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2362 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.pos = (yyvsp[(3) - (3)].ulonglong_number); /* @@ -19014,18 +19003,16 @@ break; case 108: - -/* Line 1455 of yacc.c */ -#line 2378 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2378 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.relay_log_name = (yyvsp[(3) - (3)].lex_str).str; } break; case 109: - -/* Line 1455 of yacc.c */ -#line 2382 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2382 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.relay_log_pos = (yyvsp[(3) - (3)].ulong_num); /* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */ @@ -19035,9 +19022,8 @@ break; case 110: - -/* Line 1455 of yacc.c */ -#line 2394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2394 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19066,9 +19052,8 @@ break; case 111: - -/* Line 1455 of yacc.c */ -#line 2420 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2420 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19090,9 +19075,8 @@ break; case 112: - -/* Line 1455 of yacc.c */ -#line 2439 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2439 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index_prepare(Lex, (yyvsp[(7) - (7)].table))) MYSQL_YYABORT; @@ -19100,9 +19084,8 @@ break; case 113: - -/* Line 1455 of yacc.c */ -#line 2444 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2444 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index(Lex, (yyvsp[(2) - (12)].key_type), (yyvsp[(4) - (12)].lex_str))) MYSQL_YYABORT; @@ -19110,16 +19093,14 @@ break; case 114: - -/* Line 1455 of yacc.c */ -#line 2448 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2448 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 115: - -/* Line 1455 of yacc.c */ -#line 2451 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2451 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index_prepare(Lex, (yyvsp[(7) - (7)].table))) MYSQL_YYABORT; @@ -19127,9 +19108,8 @@ break; case 116: - -/* Line 1455 of yacc.c */ -#line 2456 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2456 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index(Lex, (yyvsp[(2) - (12)].key_type), (yyvsp[(4) - (12)].lex_str))) MYSQL_YYABORT; @@ -19137,16 +19117,14 @@ break; case 117: - -/* Line 1455 of yacc.c */ -#line 2460 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2460 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 118: - -/* Line 1455 of yacc.c */ -#line 2463 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2463 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index_prepare(Lex, (yyvsp[(7) - (7)].table))) MYSQL_YYABORT; @@ -19154,9 +19132,8 @@ break; case 119: - -/* Line 1455 of yacc.c */ -#line 2468 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2468 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index(Lex, (yyvsp[(2) - (12)].key_type), (yyvsp[(4) - (12)].lex_str))) MYSQL_YYABORT; @@ -19164,16 +19141,14 @@ break; case 120: - -/* Line 1455 of yacc.c */ -#line 2472 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2472 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 121: - -/* Line 1455 of yacc.c */ -#line 2474 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2474 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.default_table_charset= NULL; Lex->create_info.used_fields= 0; @@ -19181,9 +19156,8 @@ break; case 122: - -/* Line 1455 of yacc.c */ -#line 2479 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2479 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command=SQLCOM_CREATE_DB; @@ -19193,9 +19167,8 @@ break; case 123: - -/* Line 1455 of yacc.c */ -#line 2486 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2486 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_mode= VIEW_CREATE_NEW; Lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; @@ -19204,53 +19177,52 @@ break; case 124: - -/* Line 1455 of yacc.c */ -#line 2492 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2492 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 125: - -/* Line 1455 of yacc.c */ -#line 2494 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2494 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_CREATE_USER; } break; case 126: - -/* Line 1455 of yacc.c */ -#line 2498 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2498 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_tablespace_info->ts_cmd_type= CREATE_LOGFILE_GROUP; } break; case 127: - -/* Line 1455 of yacc.c */ -#line 2502 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2502 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_tablespace_info->ts_cmd_type= CREATE_TABLESPACE; } break; case 128: - -/* Line 1455 of yacc.c */ -#line 2506 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2506 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_CREATE_SERVER; } break; case 129: - -/* Line 1455 of yacc.c */ -#line 2517 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2517 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { + if ((yyvsp[(2) - (10)].lex_str).length == 0) + { + my_error(ER_WRONG_VALUE, MYF(0), "server name", ""); + MYSQL_YYABORT; + } Lex->server_options.server_name= (yyvsp[(2) - (10)].lex_str).str; Lex->server_options.server_name_length= (yyvsp[(2) - (10)].lex_str).length; Lex->server_options.scheme= (yyvsp[(6) - (10)].lex_str).str; @@ -19258,45 +19230,40 @@ break; case 132: - -/* Line 1455 of yacc.c */ -#line 2531 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2536 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.username= (yyvsp[(2) - (2)].lex_str).str; } break; case 133: - -/* Line 1455 of yacc.c */ -#line 2535 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2540 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.host= (yyvsp[(2) - (2)].lex_str).str; } break; case 134: - -/* Line 1455 of yacc.c */ -#line 2539 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2544 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.db= (yyvsp[(2) - (2)].lex_str).str; } break; case 135: - -/* Line 1455 of yacc.c */ -#line 2543 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2548 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.owner= (yyvsp[(2) - (2)].lex_str).str; } break; case 136: - -/* Line 1455 of yacc.c */ -#line 2547 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2552 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.password= (yyvsp[(2) - (2)].lex_str).str; Lex->contains_plaintext_password= true; @@ -19304,27 +19271,24 @@ break; case 137: - -/* Line 1455 of yacc.c */ -#line 2552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.socket= (yyvsp[(2) - (2)].lex_str).str; } break; case 138: - -/* Line 1455 of yacc.c */ -#line 2556 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2561 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->server_options.port= (yyvsp[(2) - (2)].ulong_num); } break; case 139: - -/* Line 1455 of yacc.c */ -#line 2563 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2568 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex=Lex; @@ -19343,9 +19307,8 @@ break; case 140: - -/* Line 1455 of yacc.c */ -#line 2583 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2588 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* sql_command is set here because some rules in ev_sql_stmt @@ -19356,9 +19319,8 @@ break; case 141: - -/* Line 1455 of yacc.c */ -#line 2594 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2599 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->item_expression= (yyvsp[(2) - (3)].item); Lex->event_parse_data->interval= (yyvsp[(3) - (3)].interval); @@ -19366,25 +19328,22 @@ break; case 143: - -/* Line 1455 of yacc.c */ -#line 2601 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2606 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->item_execute_at= (yyvsp[(2) - (2)].item); } break; case 144: - -/* Line 1455 of yacc.c */ -#line 2607 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2612 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 145: - -/* Line 1455 of yacc.c */ -#line 2609 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2614 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->status= Event_parse_data::ENABLED; Lex->event_parse_data->status_changed= true; @@ -19393,9 +19352,8 @@ break; case 146: - -/* Line 1455 of yacc.c */ -#line 2615 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2620 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->status= Event_parse_data::SLAVESIDE_DISABLED; Lex->event_parse_data->status_changed= true; @@ -19404,9 +19362,8 @@ break; case 147: - -/* Line 1455 of yacc.c */ -#line 2621 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2626 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->status= Event_parse_data::DISABLED; Lex->event_parse_data->status_changed= true; @@ -19415,9 +19372,8 @@ break; case 148: - -/* Line 1455 of yacc.c */ -#line 2630 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2635 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item= new (YYTHD->mem_root) Item_func_now_local(0); if (item == NULL) @@ -19427,34 +19383,30 @@ break; case 149: - -/* Line 1455 of yacc.c */ -#line 2637 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2642 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->item_starts= (yyvsp[(2) - (2)].item); } break; case 151: - -/* Line 1455 of yacc.c */ -#line 2645 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2650 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->item_ends= (yyvsp[(2) - (2)].item); } break; case 152: - -/* Line 1455 of yacc.c */ -#line 2651 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2656 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 154: - -/* Line 1455 of yacc.c */ -#line 2657 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2662 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->on_completion= Event_parse_data::ON_COMPLETION_PRESERVE; @@ -19463,9 +19415,8 @@ break; case 155: - -/* Line 1455 of yacc.c */ -#line 2663 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2668 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->event_parse_data->on_completion= Event_parse_data::ON_COMPLETION_DROP; @@ -19474,16 +19425,14 @@ break; case 156: - -/* Line 1455 of yacc.c */ -#line 2671 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2676 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 157: - -/* Line 1455 of yacc.c */ -#line 2673 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2678 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->comment= Lex->event_parse_data->comment= (yyvsp[(2) - (2)].lex_str); (yyval.num)= 1; @@ -19491,9 +19440,8 @@ break; case 158: - -/* Line 1455 of yacc.c */ -#line 2680 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2685 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19539,9 +19487,8 @@ break; case 159: - -/* Line 1455 of yacc.c */ -#line 2723 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2728 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19554,9 +19501,8 @@ break; case 173: - -/* Line 1455 of yacc.c */ -#line 2752 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2757 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->users_list.empty(); @@ -19571,9 +19517,8 @@ break; case 174: - -/* Line 1455 of yacc.c */ -#line 2767 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2772 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(yyvsp[(1) - (3)].lex_str).str || (check_and_convert_db_name(&(yyvsp[(1) - (3)].lex_str), FALSE) != IDENT_NAME_OK)) @@ -19590,9 +19535,8 @@ break; case 175: - -/* Line 1455 of yacc.c */ -#line 2781 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2786 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19611,125 +19555,108 @@ break; case 176: - -/* Line 1455 of yacc.c */ -#line 2799 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2804 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 177: - -/* Line 1455 of yacc.c */ -#line 2800 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2805 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 178: - -/* Line 1455 of yacc.c */ -#line 2804 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2809 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 179: - -/* Line 1455 of yacc.c */ -#line 2805 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2810 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 180: - -/* Line 1455 of yacc.c */ -#line 2811 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2816 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.comment= (yyvsp[(2) - (2)].lex_str); } break; case 181: - -/* Line 1455 of yacc.c */ -#line 2813 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2818 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Just parse it, we only have one language for now. */ } break; case 182: - -/* Line 1455 of yacc.c */ -#line 2815 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2820 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.daccess= SP_NO_SQL; } break; case 183: - -/* Line 1455 of yacc.c */ -#line 2817 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2822 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.daccess= SP_CONTAINS_SQL; } break; case 184: - -/* Line 1455 of yacc.c */ -#line 2819 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2824 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.daccess= SP_READS_SQL_DATA; } break; case 185: - -/* Line 1455 of yacc.c */ -#line 2821 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2826 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.daccess= SP_MODIFIES_SQL_DATA; } break; case 186: - -/* Line 1455 of yacc.c */ -#line 2823 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2828 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 187: - -/* Line 1455 of yacc.c */ -#line 2828 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2833 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 188: - -/* Line 1455 of yacc.c */ -#line 2829 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2834 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.detistic= TRUE; } break; case 189: - -/* Line 1455 of yacc.c */ -#line 2830 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2835 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.detistic= FALSE; } break; case 190: - -/* Line 1455 of yacc.c */ -#line 2835 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2840 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.suid= SP_IS_SUID; } break; case 191: - -/* Line 1455 of yacc.c */ -#line 2839 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2844 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sp_chistics.suid= SP_IS_NOT_SUID; } break; case 192: - -/* Line 1455 of yacc.c */ -#line 2846 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2851 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex = Lex; @@ -19741,34 +19668,30 @@ break; case 193: - -/* Line 1455 of yacc.c */ -#line 2854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2859 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 198: - -/* Line 1455 of yacc.c */ -#line 2870 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2875 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->value_list.push_back((yyvsp[(3) - (3)].item)); } break; case 199: - -/* Line 1455 of yacc.c */ -#line 2874 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2879 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->value_list.push_back((yyvsp[(1) - (1)].item)); } break; case 204: - -/* Line 1455 of yacc.c */ -#line 2892 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2897 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -19788,9 +19711,8 @@ break; case 205: - -/* Line 1455 of yacc.c */ -#line 2912 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2917 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19820,9 +19742,8 @@ break; case 210: - -/* Line 1455 of yacc.c */ -#line 2953 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2958 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19851,60 +19772,52 @@ break; case 211: - -/* Line 1455 of yacc.c */ -#line 2981 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2986 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_variable::MODE_IN; } break; case 212: - -/* Line 1455 of yacc.c */ -#line 2982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2987 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_variable::MODE_IN; } break; case 213: - -/* Line 1455 of yacc.c */ -#line 2983 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2988 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_variable::MODE_OUT; } break; case 214: - -/* Line 1455 of yacc.c */ -#line 2984 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2989 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_variable::MODE_INOUT; } break; case 215: - -/* Line 1455 of yacc.c */ -#line 2988 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2993 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 217: - -/* Line 1455 of yacc.c */ -#line 2993 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 2998 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 219: - -/* Line 1455 of yacc.c */ -#line 2999 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3004 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spblock).vars= (yyval.spblock).conds= (yyval.spblock).hndlrs= (yyval.spblock).curs= 0; } break; case 220: - -/* Line 1455 of yacc.c */ -#line 3003 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3008 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* We check for declarations out of (standard) order this way because letting the grammar rules reflect it caused tricky @@ -19930,9 +19843,8 @@ break; case 221: - -/* Line 1455 of yacc.c */ -#line 3029 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3034 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -19945,9 +19857,8 @@ break; case 222: - -/* Line 1455 of yacc.c */ -#line 3040 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3045 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20023,9 +19934,8 @@ break; case 223: - -/* Line 1455 of yacc.c */ -#line 3113 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3118 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20044,9 +19954,8 @@ break; case 224: - -/* Line 1455 of yacc.c */ -#line 3129 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3134 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20089,9 +19998,8 @@ break; case 225: - -/* Line 1455 of yacc.c */ -#line 3169 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3174 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -20128,9 +20036,8 @@ break; case 226: - -/* Line 1455 of yacc.c */ -#line 3203 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3208 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -20142,9 +20049,8 @@ break; case 227: - -/* Line 1455 of yacc.c */ -#line 3212 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3217 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *cursor_lex= Lex; @@ -20208,37 +20114,32 @@ break; case 228: - -/* Line 1455 of yacc.c */ -#line 3275 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3280 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_handler::EXIT; } break; case 229: - -/* Line 1455 of yacc.c */ -#line 3276 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3281 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= sp_handler::CONTINUE; } break; case 230: - -/* Line 1455 of yacc.c */ -#line 3282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3287 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 231: - -/* Line 1455 of yacc.c */ -#line 3284 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3289 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)+= 1; } break; case 232: - -/* Line 1455 of yacc.c */ -#line 3289 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3294 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -20261,9 +20162,8 @@ break; case 233: - -/* Line 1455 of yacc.c */ -#line 3312 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3317 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* mysql errno */ if ((yyvsp[(1) - (1)].ulong_num) == 0) { @@ -20277,9 +20177,8 @@ break; case 235: - -/* Line 1455 of yacc.c */ -#line 3327 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3332 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* SQLSTATE */ /* @@ -20301,32 +20200,28 @@ break; case 236: - -/* Line 1455 of yacc.c */ -#line 3348 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3353 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 237: - -/* Line 1455 of yacc.c */ -#line 3349 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3354 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 238: - -/* Line 1455 of yacc.c */ -#line 3354 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3359 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); } break; case 239: - -/* Line 1455 of yacc.c */ -#line 3358 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3363 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); @@ -20342,9 +20237,8 @@ break; case 240: - -/* Line 1455 of yacc.c */ -#line 3371 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3376 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::WARNING); if ((yyval.spcondvalue) == NULL) @@ -20353,9 +20247,8 @@ break; case 241: - -/* Line 1455 of yacc.c */ -#line 3377 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3382 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::NOT_FOUND); if ((yyval.spcondvalue) == NULL) @@ -20364,9 +20257,8 @@ break; case 242: - -/* Line 1455 of yacc.c */ -#line 3383 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3388 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::EXCEPTION); if ((yyval.spcondvalue) == NULL) @@ -20375,9 +20267,8 @@ break; case 243: - -/* Line 1455 of yacc.c */ -#line 3392 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20392,9 +20283,8 @@ break; case 244: - -/* Line 1455 of yacc.c */ -#line 3407 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3412 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); @@ -20423,39 +20313,34 @@ break; case 245: - -/* Line 1455 of yacc.c */ -#line 3433 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); } break; case 246: - -/* Line 1455 of yacc.c */ -#line 3438 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3443 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= NULL; } break; case 247: - -/* Line 1455 of yacc.c */ -#line 3440 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3445 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); } break; case 248: - -/* Line 1455 of yacc.c */ -#line 3445 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3450 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { YYTHD->m_parser_state->m_yacc.m_set_signal_info.clear(); } break; case 250: - -/* Line 1455 of yacc.c */ -#line 3453 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3458 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Set_signal_information *info; info= & YYTHD->m_parser_state->m_yacc.m_set_signal_info; @@ -20466,9 +20351,8 @@ break; case 251: - -/* Line 1455 of yacc.c */ -#line 3462 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3467 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Set_signal_information *info; info= & YYTHD->m_parser_state->m_yacc.m_set_signal_info; @@ -20484,16 +20368,14 @@ break; case 252: - -/* Line 1455 of yacc.c */ -#line 3481 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3486 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 253: - -/* Line 1455 of yacc.c */ -#line 3483 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3488 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(1) - (1)].item)->type() == Item::FUNC_ITEM) { @@ -20514,100 +20396,86 @@ break; case 254: - -/* Line 1455 of yacc.c */ -#line 3501 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3506 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 255: - -/* Line 1455 of yacc.c */ -#line 3507 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3512 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CLASS_ORIGIN; } break; case 256: - -/* Line 1455 of yacc.c */ -#line 3509 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3514 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_SUBCLASS_ORIGIN; } break; case 257: - -/* Line 1455 of yacc.c */ -#line 3511 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3516 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_CATALOG; } break; case 258: - -/* Line 1455 of yacc.c */ -#line 3513 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3518 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_SCHEMA; } break; case 259: - -/* Line 1455 of yacc.c */ -#line 3515 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3520 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_NAME; } break; case 260: - -/* Line 1455 of yacc.c */ -#line 3517 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3522 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CATALOG_NAME; } break; case 261: - -/* Line 1455 of yacc.c */ -#line 3519 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3524 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_SCHEMA_NAME; } break; case 262: - -/* Line 1455 of yacc.c */ -#line 3521 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3526 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_TABLE_NAME; } break; case 263: - -/* Line 1455 of yacc.c */ -#line 3523 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3528 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_COLUMN_NAME; } break; case 264: - -/* Line 1455 of yacc.c */ -#line 3525 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3530 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_CURSOR_NAME; } break; case 265: - -/* Line 1455 of yacc.c */ -#line 3527 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3532 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_MESSAGE_TEXT; } break; case 266: - -/* Line 1455 of yacc.c */ -#line 3529 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3534 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_condition_item_name)= DIAG_MYSQL_ERRNO; } break; case 267: - -/* Line 1455 of yacc.c */ -#line 3534 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3539 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20623,9 +20491,8 @@ break; case 268: - -/* Line 1455 of yacc.c */ -#line 3550 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3555 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Diagnostics_information *info= (yyvsp[(4) - (4)].diag_info); @@ -20640,23 +20507,20 @@ break; case 269: - -/* Line 1455 of yacc.c */ -#line 3565 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3570 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_area)= Diagnostics_information::CURRENT_AREA; } break; case 270: - -/* Line 1455 of yacc.c */ -#line 3567 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3572 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_area)= Diagnostics_information::CURRENT_AREA; } break; case 271: - -/* Line 1455 of yacc.c */ -#line 3572 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3577 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_info)= new (YYTHD->mem_root) Statement_information((yyvsp[(1) - (1)].stmt_info_list)); if ((yyval.diag_info) == NULL) @@ -20665,9 +20529,8 @@ break; case 272: - -/* Line 1455 of yacc.c */ -#line 3578 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3583 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.diag_info)= new (YYTHD->mem_root) Condition_information((yyvsp[(2) - (3)].item), (yyvsp[(3) - (3)].cond_info_list)); if ((yyval.diag_info) == NULL) @@ -20676,9 +20539,8 @@ break; case 273: - -/* Line 1455 of yacc.c */ -#line 3587 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3592 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.stmt_info_list)= new (YYTHD->mem_root) List; if ((yyval.stmt_info_list) == NULL || (yyval.stmt_info_list)->push_back((yyvsp[(1) - (1)].stmt_info_item))) @@ -20687,9 +20549,8 @@ break; case 274: - -/* Line 1455 of yacc.c */ -#line 3593 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3598 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(1) - (3)].stmt_info_list)->push_back((yyvsp[(3) - (3)].stmt_info_item))) MYSQL_YYABORT; @@ -20698,9 +20559,8 @@ break; case 275: - -/* Line 1455 of yacc.c */ -#line 3602 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3607 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.stmt_info_item)= new (YYTHD->mem_root) Statement_information_item((yyvsp[(3) - (3)].stmt_info_item_name), (yyvsp[(1) - (3)].item)); if ((yyval.stmt_info_item) == NULL) @@ -20709,9 +20569,8 @@ break; case 276: - -/* Line 1455 of yacc.c */ -#line 3610 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3615 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -20743,9 +20602,8 @@ break; case 277: - -/* Line 1455 of yacc.c */ -#line 3639 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3644 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_get_user_var((yyvsp[(2) - (2)].lex_str)); if ((yyval.item) == NULL) @@ -20754,30 +20612,26 @@ break; case 278: - -/* Line 1455 of yacc.c */ -#line 3648 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3653 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.stmt_info_item_name)= Statement_information_item::NUMBER; } break; case 279: - -/* Line 1455 of yacc.c */ -#line 3650 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3655 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.stmt_info_item_name)= Statement_information_item::ROW_COUNT; } break; case 280: - -/* Line 1455 of yacc.c */ -#line 3659 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3664 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 281: - -/* Line 1455 of yacc.c */ -#line 3664 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3669 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_list)= new (YYTHD->mem_root) List; if ((yyval.cond_info_list) == NULL || (yyval.cond_info_list)->push_back((yyvsp[(1) - (1)].cond_info_item))) @@ -20786,9 +20640,8 @@ break; case 282: - -/* Line 1455 of yacc.c */ -#line 3670 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3675 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(1) - (3)].cond_info_list)->push_back((yyvsp[(3) - (3)].cond_info_item))) MYSQL_YYABORT; @@ -20797,9 +20650,8 @@ break; case 283: - -/* Line 1455 of yacc.c */ -#line 3679 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3684 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item)= new (YYTHD->mem_root) Condition_information_item((yyvsp[(3) - (3)].cond_info_item_name), (yyvsp[(1) - (3)].item)); if ((yyval.cond_info_item) == NULL) @@ -20808,100 +20660,86 @@ break; case 284: - -/* Line 1455 of yacc.c */ -#line 3687 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3692 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CLASS_ORIGIN; } break; case 285: - -/* Line 1455 of yacc.c */ -#line 3689 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3694 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::SUBCLASS_ORIGIN; } break; case 286: - -/* Line 1455 of yacc.c */ -#line 3691 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3696 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_CATALOG; } break; case 287: - -/* Line 1455 of yacc.c */ -#line 3693 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3698 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_SCHEMA; } break; case 288: - -/* Line 1455 of yacc.c */ -#line 3695 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3700 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_NAME; } break; case 289: - -/* Line 1455 of yacc.c */ -#line 3697 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3702 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CATALOG_NAME; } break; case 290: - -/* Line 1455 of yacc.c */ -#line 3699 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::SCHEMA_NAME; } break; case 291: - -/* Line 1455 of yacc.c */ -#line 3701 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3706 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::TABLE_NAME; } break; case 292: - -/* Line 1455 of yacc.c */ -#line 3703 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3708 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::COLUMN_NAME; } break; case 293: - -/* Line 1455 of yacc.c */ -#line 3705 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3710 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::CURSOR_NAME; } break; case 294: - -/* Line 1455 of yacc.c */ -#line 3707 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3712 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::MESSAGE_TEXT; } break; case 295: - -/* Line 1455 of yacc.c */ -#line 3709 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3714 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::MYSQL_ERRNO; } break; case 296: - -/* Line 1455 of yacc.c */ -#line 3711 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3716 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cond_info_item_name)= Condition_information_item::RETURNED_SQLSTATE; } break; case 297: - -/* Line 1455 of yacc.c */ -#line 3716 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3721 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* NOTE: field definition is filled in sp_decl section. */ @@ -20924,9 +20762,8 @@ break; case 298: - -/* Line 1455 of yacc.c */ -#line 3736 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3741 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* NOTE: field definition is filled in sp_decl section. */ @@ -20949,37 +20786,32 @@ break; case 299: - -/* Line 1455 of yacc.c */ -#line 3759 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3764 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = NULL; } break; case 300: - -/* Line 1455 of yacc.c */ -#line 3761 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3766 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sphead->m_parser_data.push_expr_start_ptr(YY_TOKEN_END); } break; case 301: - -/* Line 1455 of yacc.c */ -#line 3763 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3768 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = (yyvsp[(3) - (3)].item); } break; case 315: - -/* Line 1455 of yacc.c */ -#line 3784 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3789 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sphead->m_parser_data.new_cont_backpatch(); } break; case 316: - -/* Line 1455 of yacc.c */ -#line 3786 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3791 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { sp_head *sp= Lex->sphead; @@ -20988,9 +20820,8 @@ break; case 317: - -/* Line 1455 of yacc.c */ -#line 3794 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3799 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21003,9 +20834,8 @@ break; case 318: - -/* Line 1455 of yacc.c */ -#line 3804 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3809 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21052,9 +20882,8 @@ break; case 319: - -/* Line 1455 of yacc.c */ -#line 3851 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3856 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21067,9 +20896,8 @@ break; case 320: - -/* Line 1455 of yacc.c */ -#line 3861 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3866 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21116,9 +20944,8 @@ break; case 321: - -/* Line 1455 of yacc.c */ -#line 3907 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3912 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Unlabeled controls get a secret label. */ THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21132,9 +20959,8 @@ break; case 322: - -/* Line 1455 of yacc.c */ -#line 3918 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3923 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21146,9 +20972,8 @@ break; case 323: - -/* Line 1455 of yacc.c */ -#line 3930 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3935 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21207,9 +21032,8 @@ break; case 324: - -/* Line 1455 of yacc.c */ -#line 3989 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 3994 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21259,9 +21083,8 @@ break; case 325: - -/* Line 1455 of yacc.c */ -#line 4039 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4044 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21285,9 +21108,8 @@ break; case 326: - -/* Line 1455 of yacc.c */ -#line 4063 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4068 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21311,16 +21133,14 @@ break; case 327: - -/* Line 1455 of yacc.c */ -#line 4084 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4089 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 328: - -/* Line 1455 of yacc.c */ -#line 4089 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4094 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21344,9 +21164,8 @@ break; case 332: - -/* Line 1455 of yacc.c */ -#line 4119 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4124 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21367,9 +21186,8 @@ break; case 333: - -/* Line 1455 of yacc.c */ -#line 4137 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4142 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21390,9 +21208,8 @@ break; case 334: - -/* Line 1455 of yacc.c */ -#line 4157 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4162 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21404,9 +21221,8 @@ break; case 335: - -/* Line 1455 of yacc.c */ -#line 4166 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21445,9 +21261,8 @@ break; case 336: - -/* Line 1455 of yacc.c */ -#line 4202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4207 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21469,9 +21284,8 @@ break; case 337: - -/* Line 1455 of yacc.c */ -#line 4221 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4226 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21483,9 +21297,8 @@ break; case 343: - -/* Line 1455 of yacc.c */ -#line 4244 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4249 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21499,9 +21312,8 @@ break; case 344: - -/* Line 1455 of yacc.c */ -#line 4255 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4260 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21545,36 +21357,32 @@ break; case 345: - -/* Line 1455 of yacc.c */ -#line 4299 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4304 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { case_stmt_action_end_case(Lex, true); } break; case 346: - -/* Line 1455 of yacc.c */ -#line 4306 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4311 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { case_stmt_action_case(YYTHD); } break; case 347: - -/* Line 1455 of yacc.c */ -#line 4313 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4318 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { case_stmt_action_end_case(Lex, false); } break; case 352: - -/* Line 1455 of yacc.c */ -#line 4330 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4335 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21586,9 +21394,8 @@ break; case 353: - -/* Line 1455 of yacc.c */ -#line 4339 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Simple case: = */ @@ -21631,9 +21438,8 @@ break; case 354: - -/* Line 1455 of yacc.c */ -#line 4380 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4385 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (case_stmt_action_then(YYTHD, Lex)) MYSQL_YYABORT; @@ -21641,9 +21447,8 @@ break; case 355: - -/* Line 1455 of yacc.c */ -#line 4388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4393 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21655,9 +21460,8 @@ break; case 356: - -/* Line 1455 of yacc.c */ -#line 4397 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4402 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21695,9 +21499,8 @@ break; case 357: - -/* Line 1455 of yacc.c */ -#line 4433 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (case_stmt_action_then(YYTHD, Lex)) MYSQL_YYABORT; @@ -21705,9 +21508,8 @@ break; case 358: - -/* Line 1455 of yacc.c */ -#line 4441 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4446 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21724,9 +21526,8 @@ break; case 360: - -/* Line 1455 of yacc.c */ -#line 4459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4464 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21747,9 +21548,8 @@ break; case 361: - -/* Line 1455 of yacc.c */ -#line 4477 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4482 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21769,23 +21569,20 @@ break; case 362: - -/* Line 1455 of yacc.c */ -#line 4496 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4501 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= null_lex_str; } break; case 363: - -/* Line 1455 of yacc.c */ -#line 4497 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4502 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 364: - -/* Line 1455 of yacc.c */ -#line 4502 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4507 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21804,9 +21601,8 @@ break; case 365: - -/* Line 1455 of yacc.c */ -#line 4518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4523 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); @@ -21824,9 +21620,8 @@ break; case 366: - -/* Line 1455 of yacc.c */ -#line 4535 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4540 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Unlabeled blocks get a secret label. */ LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -21840,9 +21635,8 @@ break; case 367: - -/* Line 1455 of yacc.c */ -#line 4546 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4551 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->get_sp_current_parsing_ctx()->pop_label(); @@ -21850,9 +21644,8 @@ break; case 368: - -/* Line 1455 of yacc.c */ -#line 4554 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4559 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* QQ This is just a dummy for grouping declarations and statements together. No [[NOT] ATOMIC] yet, and we need to figure out how make it coexist with the existing BEGIN COMMIT/ROLLBACK. */ @@ -21868,9 +21661,8 @@ break; case 369: - -/* Line 1455 of yacc.c */ -#line 4569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4574 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21905,9 +21697,8 @@ break; case 370: - -/* Line 1455 of yacc.c */ -#line 4605 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21925,9 +21716,8 @@ break; case 371: - -/* Line 1455 of yacc.c */ -#line 4620 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4625 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -21939,9 +21729,8 @@ break; case 372: - -/* Line 1455 of yacc.c */ -#line 4629 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4634 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -21980,9 +21769,8 @@ break; case 373: - -/* Line 1455 of yacc.c */ -#line 4667 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4672 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -22001,9 +21789,8 @@ break; case 374: - -/* Line 1455 of yacc.c */ -#line 4683 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4688 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -22015,9 +21802,8 @@ break; case 375: - -/* Line 1455 of yacc.c */ -#line 4692 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4697 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -22057,51 +21843,44 @@ break; case 377: - -/* Line 1455 of yacc.c */ -#line 4733 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4738 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TRG_ACTION_BEFORE; } break; case 378: - -/* Line 1455 of yacc.c */ -#line 4735 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4740 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TRG_ACTION_AFTER; } break; case 379: - -/* Line 1455 of yacc.c */ -#line 4740 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4745 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TRG_EVENT_INSERT; } break; case 380: - -/* Line 1455 of yacc.c */ -#line 4742 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4747 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TRG_EVENT_UPDATE; } break; case 381: - -/* Line 1455 of yacc.c */ -#line 4744 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4749 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TRG_EVENT_DELETE; } break; case 385: - -/* Line 1455 of yacc.c */ -#line 4778 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4783 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 386: - -/* Line 1455 of yacc.c */ -#line 4780 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4785 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->logfile_group_name= (yyvsp[(4) - (4)].lex_str).str; @@ -22109,34 +21888,30 @@ break; case 387: - -/* Line 1455 of yacc.c */ -#line 4790 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4795 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_ADD_FILE; } break; case 388: - -/* Line 1455 of yacc.c */ -#line 4796 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4801 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_DROP_FILE; } break; case 393: - -/* Line 1455 of yacc.c */ -#line 4819 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4824 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 444: - -/* Line 1455 of yacc.c */ -#line 4917 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4922 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->data_file_name= (yyvsp[(2) - (2)].lex_str).str; @@ -22144,9 +21919,8 @@ break; case 445: - -/* Line 1455 of yacc.c */ -#line 4925 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4930 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->undo_file_name= (yyvsp[(2) - (2)].lex_str).str; @@ -22154,9 +21928,8 @@ break; case 446: - -/* Line 1455 of yacc.c */ -#line 4933 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4938 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->redo_file_name= (yyvsp[(2) - (2)].lex_str).str; @@ -22164,9 +21937,8 @@ break; case 447: - -/* Line 1455 of yacc.c */ -#line 4941 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4946 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info= new st_alter_tablespace(); @@ -22178,9 +21950,8 @@ break; case 448: - -/* Line 1455 of yacc.c */ -#line 4953 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4958 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info= new st_alter_tablespace(); @@ -22192,9 +21963,8 @@ break; case 449: - -/* Line 1455 of yacc.c */ -#line 4965 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4970 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_ONLY; @@ -22202,9 +21972,8 @@ break; case 450: - -/* Line 1455 of yacc.c */ -#line 4970 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4975 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_WRITE; @@ -22212,9 +21981,8 @@ break; case 451: - -/* Line 1455 of yacc.c */ -#line 4975 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4980 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_NOT_ACCESSIBLE; @@ -22222,9 +21990,8 @@ break; case 452: - -/* Line 1455 of yacc.c */ -#line 4983 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4988 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->initial_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22232,9 +21999,8 @@ break; case 453: - -/* Line 1455 of yacc.c */ -#line 4991 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 4996 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->autoextend_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22242,9 +22008,8 @@ break; case 454: - -/* Line 1455 of yacc.c */ -#line 4999 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5004 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->max_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22252,9 +22017,8 @@ break; case 455: - -/* Line 1455 of yacc.c */ -#line 5007 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5012 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->extent_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22262,9 +22026,8 @@ break; case 456: - -/* Line 1455 of yacc.c */ -#line 5015 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5020 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->undo_buffer_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22272,9 +22035,8 @@ break; case 457: - -/* Line 1455 of yacc.c */ -#line 5023 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5028 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->redo_buffer_size= (yyvsp[(3) - (3)].ulonglong_number); @@ -22282,9 +22044,8 @@ break; case 458: - -/* Line 1455 of yacc.c */ -#line 5031 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5036 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->alter_tablespace_info->nodegroup_id != UNDEF_NODEGROUP) @@ -22297,9 +22058,8 @@ break; case 459: - -/* Line 1455 of yacc.c */ -#line 5044 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5049 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->alter_tablespace_info->ts_comment != NULL) @@ -22312,9 +22072,8 @@ break; case 460: - -/* Line 1455 of yacc.c */ -#line 5057 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5062 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->alter_tablespace_info->storage_engine != NULL) @@ -22328,9 +22087,8 @@ break; case 461: - -/* Line 1455 of yacc.c */ -#line 5071 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5076 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->wait_until_completed= TRUE; @@ -22338,9 +22096,8 @@ break; case 462: - -/* Line 1455 of yacc.c */ -#line 5076 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5081 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (!(lex->alter_tablespace_info->wait_until_completed)) @@ -22353,16 +22110,14 @@ break; case 463: - -/* Line 1455 of yacc.c */ -#line 5088 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5093 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulonglong_number)= (yyvsp[(1) - (1)].ulonglong_number);} break; case 464: - -/* Line 1455 of yacc.c */ -#line 5090 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5095 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { ulonglong number; uint text_shift_number= 0; @@ -22409,23 +22164,20 @@ break; case 465: - -/* Line 1455 of yacc.c */ -#line 5140 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5145 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 466: - -/* Line 1455 of yacc.c */ -#line 5143 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5148 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 467: - -/* Line 1455 of yacc.c */ -#line 5145 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; TABLE_LIST *src_table; @@ -22443,9 +22195,8 @@ break; case 468: - -/* Line 1455 of yacc.c */ -#line 5160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5165 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; TABLE_LIST *src_table; @@ -22463,65 +22214,56 @@ break; case 469: - -/* Line 1455 of yacc.c */ -#line 5179 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5184 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 470: - -/* Line 1455 of yacc.c */ -#line 5182 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5187 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_braces(1);} break; case 471: - -/* Line 1455 of yacc.c */ -#line 5183 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5188 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 472: - -/* Line 1455 of yacc.c */ -#line 5187 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5192 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 473: - -/* Line 1455 of yacc.c */ -#line 5189 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5194 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_braces(0);} break; case 474: - -/* Line 1455 of yacc.c */ -#line 5190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 475: - -/* Line 1455 of yacc.c */ -#line 5192 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5197 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_braces(1);} break; case 476: - -/* Line 1455 of yacc.c */ -#line 5193 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5198 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 477: - -/* Line 1455 of yacc.c */ -#line 5198 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5203 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Remove all tables used in PARTITION clause from the global table @@ -22534,16 +22276,14 @@ break; case 478: - -/* Line 1455 of yacc.c */ -#line 5234 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5239 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 480: - -/* Line 1455 of yacc.c */ -#line 5240 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5245 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->part_info= new partition_info(); @@ -22560,9 +22300,8 @@ break; case 482: - -/* Line 1455 of yacc.c */ -#line 5258 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5263 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef WITH_PARTITION_STORAGE_ENGINE LEX_STRING partition_name={C_STRING_WITH_LEN("partition")}; @@ -22581,9 +22320,8 @@ break; case 483: - -/* Line 1455 of yacc.c */ -#line 5277 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5282 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (!lex->part_info) @@ -22599,16 +22337,14 @@ break; case 484: - -/* Line 1455 of yacc.c */ -#line 5289 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5294 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 486: - -/* Line 1455 of yacc.c */ -#line 5298 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5303 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->list_of_part_fields= TRUE; @@ -22618,72 +22354,62 @@ break; case 487: - -/* Line 1455 of yacc.c */ -#line 5305 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5310 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->part_type= HASH_PARTITION; } break; case 488: - -/* Line 1455 of yacc.c */ -#line 5306 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5311 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 489: - -/* Line 1455 of yacc.c */ -#line 5308 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5313 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->part_type= RANGE_PARTITION; } break; case 490: - -/* Line 1455 of yacc.c */ -#line 5310 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5315 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->part_type= RANGE_PARTITION; } break; case 491: - -/* Line 1455 of yacc.c */ -#line 5312 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5317 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->part_type= LIST_PARTITION; } break; case 492: - -/* Line 1455 of yacc.c */ -#line 5314 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5319 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->part_type= LIST_PARTITION; } break; case 493: - -/* Line 1455 of yacc.c */ -#line 5318 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5323 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 494: - -/* Line 1455 of yacc.c */ -#line 5320 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5325 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->linear_hash_ind= TRUE;} break; case 495: - -/* Line 1455 of yacc.c */ -#line 5325 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5330 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->key_algorithm= partition_info::KEY_ALGORITHM_NONE;} break; case 496: - -/* Line 1455 of yacc.c */ -#line 5327 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5332 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { switch ((yyvsp[(3) - (3)].ulong_num)) { case 1: @@ -22700,37 +22426,32 @@ break; case 497: - -/* Line 1455 of yacc.c */ -#line 5343 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5348 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 498: - -/* Line 1455 of yacc.c */ -#line 5344 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 499: - -/* Line 1455 of yacc.c */ -#line 5348 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5353 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 500: - -/* Line 1455 of yacc.c */ -#line 5349 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5354 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 501: - -/* Line 1455 of yacc.c */ -#line 5354 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5359 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->num_columns++; @@ -22749,9 +22470,8 @@ break; case 502: - -/* Line 1455 of yacc.c */ -#line 5373 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5378 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->column_list= TRUE; @@ -22760,9 +22480,8 @@ break; case 503: - -/* Line 1455 of yacc.c */ -#line 5383 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5388 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->set_part_expr((yyvsp[(2) - (5)].simple_string)+1, (yyvsp[(3) - (5)].item), (yyvsp[(4) - (5)].simple_string), FALSE)) @@ -22773,9 +22492,8 @@ break; case 504: - -/* Line 1455 of yacc.c */ -#line 5394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5399 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->part_info->set_part_expr((yyvsp[(2) - (5)].simple_string)+1, (yyvsp[(3) - (5)].item), (yyvsp[(4) - (5)].simple_string), TRUE)) { MYSQL_YYABORT; } @@ -22783,16 +22501,14 @@ break; case 505: - -/* Line 1455 of yacc.c */ -#line 5402 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 506: - -/* Line 1455 of yacc.c */ -#line 5404 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { uint num_parts= (yyvsp[(2) - (2)].ulong_num); partition_info *part_info= Lex->part_info; @@ -22808,30 +22524,26 @@ break; case 507: - -/* Line 1455 of yacc.c */ -#line 5419 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5424 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 508: - -/* Line 1455 of yacc.c */ -#line 5421 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5426 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->subpart_type= HASH_PARTITION; } break; case 509: - -/* Line 1455 of yacc.c */ -#line 5422 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5427 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 510: - -/* Line 1455 of yacc.c */ -#line 5425 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5430 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->subpart_type= HASH_PARTITION; @@ -22840,30 +22552,26 @@ break; case 511: - -/* Line 1455 of yacc.c */ -#line 5430 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5435 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 512: - -/* Line 1455 of yacc.c */ -#line 5434 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5439 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 513: - -/* Line 1455 of yacc.c */ -#line 5435 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5440 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 514: - -/* Line 1455 of yacc.c */ -#line 5440 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5445 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->subpart_field_list.push_back((yyvsp[(1) - (1)].lex_str).str)) @@ -22881,9 +22589,8 @@ break; case 515: - -/* Line 1455 of yacc.c */ -#line 5458 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5463 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; bool not_corr_func; @@ -22899,16 +22606,14 @@ break; case 516: - -/* Line 1455 of yacc.c */ -#line 5473 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5478 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 517: - -/* Line 1455 of yacc.c */ -#line 5475 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5480 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { uint num_parts= (yyvsp[(2) - (2)].ulong_num); LEX *lex= Lex; @@ -22923,9 +22628,8 @@ break; case 518: - -/* Line 1455 of yacc.c */ -#line 5490 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5495 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->part_type == RANGE_PARTITION) @@ -22944,9 +22648,8 @@ break; case 519: - -/* Line 1455 of yacc.c */ -#line 5506 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; uint count_curr_parts= part_info->partitions.elements; @@ -22968,23 +22671,20 @@ break; case 520: - -/* Line 1455 of yacc.c */ -#line 5527 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5532 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 521: - -/* Line 1455 of yacc.c */ -#line 5528 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5533 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 522: - -/* Line 1455 of yacc.c */ -#line 5533 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5538 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; partition_element *p_elem= new partition_element(); @@ -23003,16 +22703,14 @@ break; case 523: - -/* Line 1455 of yacc.c */ -#line 5552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 524: - -/* Line 1455 of yacc.c */ -#line 5557 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5562 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; partition_element *p_elem= part_info->curr_part_elem; @@ -23021,9 +22719,8 @@ break; case 525: - -/* Line 1455 of yacc.c */ -#line 5566 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5571 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -23048,9 +22745,8 @@ break; case 526: - -/* Line 1455 of yacc.c */ -#line 5588 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5593 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -23069,16 +22765,14 @@ break; case 527: - -/* Line 1455 of yacc.c */ -#line 5603 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5608 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 528: - -/* Line 1455 of yacc.c */ -#line 5605 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -23097,16 +22791,14 @@ break; case 529: - -/* Line 1455 of yacc.c */ -#line 5620 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5625 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 530: - -/* Line 1455 of yacc.c */ -#line 5625 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5630 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; @@ -23131,16 +22823,14 @@ break; case 531: - -/* Line 1455 of yacc.c */ -#line 5646 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5651 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 532: - -/* Line 1455 of yacc.c */ -#line 5651 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5656 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -23172,9 +22862,8 @@ break; case 533: - -/* Line 1455 of yacc.c */ -#line 5680 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5685 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->num_columns < 2U) @@ -23186,23 +22875,20 @@ break; case 534: - -/* Line 1455 of yacc.c */ -#line 5691 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5696 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 535: - -/* Line 1455 of yacc.c */ -#line 5692 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5697 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 536: - -/* Line 1455 of yacc.c */ -#line 5697 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5702 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->print_debug("( part_value_item", NULL); @@ -23217,16 +22903,14 @@ break; case 537: - -/* Line 1455 of yacc.c */ -#line 5708 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5713 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 538: - -/* Line 1455 of yacc.c */ -#line 5710 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5715 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->print_debug(") part_value_item", NULL); @@ -23250,23 +22934,20 @@ break; case 539: - -/* Line 1455 of yacc.c */ -#line 5733 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5738 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 540: - -/* Line 1455 of yacc.c */ -#line 5734 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5739 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 541: - -/* Line 1455 of yacc.c */ -#line 5739 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5744 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->part_type == LIST_PARTITION) @@ -23282,9 +22963,8 @@ break; case 542: - -/* Line 1455 of yacc.c */ -#line 5752 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5757 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -23303,9 +22983,8 @@ break; case 543: - -/* Line 1455 of yacc.c */ -#line 5772 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5777 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->num_subparts != 0 && @@ -23322,9 +23001,8 @@ break; case 544: - -/* Line 1455 of yacc.c */ -#line 5786 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5791 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; if (part_info->num_subparts != 0) @@ -23350,23 +23028,20 @@ break; case 545: - -/* Line 1455 of yacc.c */ -#line 5811 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5816 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 546: - -/* Line 1455 of yacc.c */ -#line 5812 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5817 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 547: - -/* Line 1455 of yacc.c */ -#line 5817 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5822 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; partition_element *curr_part= part_info->current_partition; @@ -23402,58 +23077,50 @@ break; case 548: - -/* Line 1455 of yacc.c */ -#line 5849 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5854 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 549: - -/* Line 1455 of yacc.c */ -#line 5854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5859 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->partition_name= (yyvsp[(1) - (1)].lex_str).str; } break; case 550: - -/* Line 1455 of yacc.c */ -#line 5858 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5863 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 551: - -/* Line 1455 of yacc.c */ -#line 5859 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5864 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 552: - -/* Line 1455 of yacc.c */ -#line 5863 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5868 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 553: - -/* Line 1455 of yacc.c */ -#line 5864 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5869 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 554: - -/* Line 1455 of yacc.c */ -#line 5869 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5874 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->tablespace_name= (yyvsp[(3) - (3)].lex_str).str; } break; case 555: - -/* Line 1455 of yacc.c */ -#line 5871 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5876 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->curr_part_elem->engine_type= (yyvsp[(4) - (4)].db_type); @@ -23462,51 +23129,44 @@ break; case 556: - -/* Line 1455 of yacc.c */ -#line 5877 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5882 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->nodegroup_id= (uint16) (yyvsp[(3) - (3)].ulong_num); } break; case 557: - -/* Line 1455 of yacc.c */ -#line 5879 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5884 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->part_max_rows= (ha_rows) (yyvsp[(3) - (3)].ulonglong_number); } break; case 558: - -/* Line 1455 of yacc.c */ -#line 5881 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5886 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->part_min_rows= (ha_rows) (yyvsp[(3) - (3)].ulonglong_number); } break; case 559: - -/* Line 1455 of yacc.c */ -#line 5883 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5888 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->data_file_name= (yyvsp[(4) - (4)].lex_str).str; } break; case 560: - -/* Line 1455 of yacc.c */ -#line 5885 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5890 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->index_file_name= (yyvsp[(4) - (4)].lex_str).str; } break; case 561: - -/* Line 1455 of yacc.c */ -#line 5887 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5892 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->curr_part_elem->part_comment= (yyvsp[(3) - (3)].lex_str).str; } break; case 562: - -/* Line 1455 of yacc.c */ -#line 5896 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5901 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->sql_command == SQLCOM_INSERT) @@ -23524,18 +23184,16 @@ break; case 563: - -/* Line 1455 of yacc.c */ -#line 5911 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5916 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 564: - -/* Line 1455 of yacc.c */ -#line 5915 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5920 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* The following work only with the local list, the global list @@ -23546,114 +23204,98 @@ break; case 565: - -/* Line 1455 of yacc.c */ -#line 5925 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5930 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 566: - -/* Line 1455 of yacc.c */ -#line 5926 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5931 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 567: - -/* Line 1455 of yacc.c */ -#line 5930 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5935 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 568: - -/* Line 1455 of yacc.c */ -#line 5931 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5936 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 569: - -/* Line 1455 of yacc.c */ -#line 5935 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5940 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 570: - -/* Line 1455 of yacc.c */ -#line 5936 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5941 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 571: - -/* Line 1455 of yacc.c */ -#line 5940 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5945 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 572: - -/* Line 1455 of yacc.c */ -#line 5941 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5946 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 573: - -/* Line 1455 of yacc.c */ -#line 5945 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5950 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 574: - -/* Line 1455 of yacc.c */ -#line 5946 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5951 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (1)].num);} break; case 575: - -/* Line 1455 of yacc.c */ -#line 5950 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5955 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=(yyvsp[(1) - (1)].num); } break; case 576: - -/* Line 1455 of yacc.c */ -#line 5951 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5956 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (2)].num) | (yyvsp[(2) - (2)].num); } break; case 577: - -/* Line 1455 of yacc.c */ -#line 5955 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5960 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=HA_LEX_CREATE_TMP_TABLE; } break; case 578: - -/* Line 1455 of yacc.c */ -#line 5959 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5964 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 579: - -/* Line 1455 of yacc.c */ -#line 5960 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5965 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=HA_LEX_CREATE_IF_NOT_EXISTS; } break; case 587: - -/* Line 1455 of yacc.c */ -#line 5981 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5986 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.db_type= (yyvsp[(3) - (3)].db_type); Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; @@ -23661,9 +23303,8 @@ break; case 588: - -/* Line 1455 of yacc.c */ -#line 5986 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5991 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.max_rows= (yyvsp[(3) - (3)].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_MAX_ROWS; @@ -23671,9 +23312,8 @@ break; case 589: - -/* Line 1455 of yacc.c */ -#line 5991 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 5996 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.min_rows= (yyvsp[(3) - (3)].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_MIN_ROWS; @@ -23681,9 +23321,8 @@ break; case 590: - -/* Line 1455 of yacc.c */ -#line 5996 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6001 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.avg_row_length=(yyvsp[(3) - (3)].ulong_num); Lex->create_info.used_fields|= HA_CREATE_USED_AVG_ROW_LENGTH; @@ -23691,9 +23330,8 @@ break; case 591: - -/* Line 1455 of yacc.c */ -#line 6001 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6006 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.password=(yyvsp[(3) - (3)].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_PASSWORD; @@ -23701,9 +23339,8 @@ break; case 592: - -/* Line 1455 of yacc.c */ -#line 6006 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6011 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.comment=(yyvsp[(3) - (3)].lex_str); Lex->create_info.used_fields|= HA_CREATE_USED_COMMENT; @@ -23711,9 +23348,8 @@ break; case 593: - -/* Line 1455 of yacc.c */ -#line 6011 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6016 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.auto_increment_value=(yyvsp[(3) - (3)].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_AUTO; @@ -23721,9 +23357,8 @@ break; case 594: - -/* Line 1455 of yacc.c */ -#line 6016 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6021 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { switch((yyvsp[(3) - (3)].ulong_num)) { case 0: @@ -23741,9 +23376,8 @@ break; case 595: - -/* Line 1455 of yacc.c */ -#line 6031 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6036 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.table_options&= ~(HA_OPTION_PACK_KEYS | HA_OPTION_NO_PACK_KEYS); @@ -23752,9 +23386,8 @@ break; case 596: - -/* Line 1455 of yacc.c */ -#line 6037 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6042 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { switch((yyvsp[(3) - (3)].ulong_num)) { case 0: @@ -23772,9 +23405,8 @@ break; case 597: - -/* Line 1455 of yacc.c */ -#line 6052 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6057 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.stats_auto_recalc= HA_STATS_AUTO_RECALC_DEFAULT; Lex->create_info.used_fields|= HA_CREATE_USED_STATS_AUTO_RECALC; @@ -23782,9 +23414,8 @@ break; case 598: - -/* Line 1455 of yacc.c */ -#line 6057 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6062 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { switch((yyvsp[(3) - (3)].ulong_num)) { case 0: @@ -23802,9 +23433,8 @@ break; case 599: - -/* Line 1455 of yacc.c */ -#line 6072 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6077 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.table_options&= ~(HA_OPTION_STATS_PERSISTENT | HA_OPTION_NO_STATS_PERSISTENT); @@ -23813,9 +23443,8 @@ break; case 600: - -/* Line 1455 of yacc.c */ -#line 6078 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6083 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* From user point of view STATS_SAMPLE_PAGES can be specified as STATS_SAMPLE_PAGES=N (where 0create_info.stats_sample_pages=0; Lex->create_info.used_fields|= HA_CREATE_USED_STATS_SAMPLE_PAGES; @@ -23846,9 +23474,8 @@ break; case 602: - -/* Line 1455 of yacc.c */ -#line 6101 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6106 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; @@ -23856,9 +23483,8 @@ break; case 603: - -/* Line 1455 of yacc.c */ -#line 6106 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6111 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; @@ -23866,9 +23492,8 @@ break; case 604: - -/* Line 1455 of yacc.c */ -#line 6111 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6116 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; Lex->create_info.used_fields|= HA_CREATE_USED_DELAY_KEY_WRITE; @@ -23876,9 +23501,8 @@ break; case 605: - -/* Line 1455 of yacc.c */ -#line 6116 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6121 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.row_type= (yyvsp[(3) - (3)].row_type); Lex->create_info.used_fields|= HA_CREATE_USED_ROW_FORMAT; @@ -23886,18 +23510,16 @@ break; case 606: - -/* Line 1455 of yacc.c */ -#line 6121 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6126 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->select_lex.table_list.save_and_clear(&Lex->save_list); } break; case 607: - -/* Line 1455 of yacc.c */ -#line 6125 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6130 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Move the union list to the merge_list and exclude its tables @@ -23922,9 +23544,8 @@ break; case 610: - -/* Line 1455 of yacc.c */ -#line 6149 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6154 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.merge_insert_method= (yyvsp[(3) - (3)].ulong_num); Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD; @@ -23932,9 +23553,8 @@ break; case 611: - -/* Line 1455 of yacc.c */ -#line 6154 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6159 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.data_file_name= (yyvsp[(4) - (4)].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_DATADIR; @@ -23942,9 +23562,8 @@ break; case 612: - -/* Line 1455 of yacc.c */ -#line 6159 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6164 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.index_file_name= (yyvsp[(4) - (4)].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_INDEXDIR; @@ -23952,30 +23571,26 @@ break; case 613: - -/* Line 1455 of yacc.c */ -#line 6164 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6169 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {Lex->create_info.tablespace= (yyvsp[(2) - (2)].lex_str).str;} break; case 614: - -/* Line 1455 of yacc.c */ -#line 6166 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {Lex->create_info.storage_media= HA_SM_DISK;} break; case 615: - -/* Line 1455 of yacc.c */ -#line 6168 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6173 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {Lex->create_info.storage_media= HA_SM_MEMORY;} break; case 616: - -/* Line 1455 of yacc.c */ -#line 6170 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.connect_string.str= (yyvsp[(3) - (3)].lex_str).str; Lex->create_info.connect_string.length= (yyvsp[(3) - (3)].lex_str).length; @@ -23984,9 +23599,8 @@ break; case 617: - -/* Line 1455 of yacc.c */ -#line 6176 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6181 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE; Lex->create_info.key_block_size= (yyvsp[(3) - (3)].ulong_num); @@ -23994,9 +23608,8 @@ break; case 618: - -/* Line 1455 of yacc.c */ -#line 6184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { HA_CREATE_INFO *cinfo= &Lex->create_info; if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && @@ -24014,9 +23627,8 @@ break; case 619: - -/* Line 1455 of yacc.c */ -#line 6202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6207 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { HA_CREATE_INFO *cinfo= &Lex->create_info; if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && @@ -24033,9 +23645,8 @@ break; case 620: - -/* Line 1455 of yacc.c */ -#line 6219 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6224 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; plugin_ref plugin= @@ -24061,9 +23672,8 @@ break; case 621: - -/* Line 1455 of yacc.c */ -#line 6245 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6250 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -24081,125 +23691,108 @@ break; case 622: - -/* Line 1455 of yacc.c */ -#line 6262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6267 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_DEFAULT; } break; case 623: - -/* Line 1455 of yacc.c */ -#line 6263 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6268 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_FIXED; } break; case 624: - -/* Line 1455 of yacc.c */ -#line 6264 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6269 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_DYNAMIC; } break; case 625: - -/* Line 1455 of yacc.c */ -#line 6265 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6270 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_COMPRESSED; } break; case 626: - -/* Line 1455 of yacc.c */ -#line 6266 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6271 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_REDUNDANT; } break; case 627: - -/* Line 1455 of yacc.c */ -#line 6267 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6272 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.row_type)= ROW_TYPE_COMPACT; } break; case 628: - -/* Line 1455 of yacc.c */ -#line 6271 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6276 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= MERGE_INSERT_DISABLED; } break; case 629: - -/* Line 1455 of yacc.c */ -#line 6272 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= MERGE_INSERT_TO_FIRST; } break; case 630: - -/* Line 1455 of yacc.c */ -#line 6273 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6278 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= MERGE_INSERT_TO_LAST; } break; case 631: - -/* Line 1455 of yacc.c */ -#line 6277 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6282 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 633: - -/* Line 1455 of yacc.c */ -#line 6282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6287 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.num) = (int) STRING_RESULT; } break; case 634: - -/* Line 1455 of yacc.c */ -#line 6283 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6288 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.num) = (int) REAL_RESULT; } break; case 635: - -/* Line 1455 of yacc.c */ -#line 6284 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6289 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.num) = (int) DECIMAL_RESULT; } break; case 636: - -/* Line 1455 of yacc.c */ -#line 6285 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6290 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.num) = (int) INT_RESULT; } break; case 637: - -/* Line 1455 of yacc.c */ -#line 6291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6296 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_last_non_select_table= Lex->last_table(); } break; case 643: - -/* Line 1455 of yacc.c */ -#line 6309 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6314 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->col_list.empty(); /* Alloced by sql_alloc */ } break; case 644: - -/* Line 1455 of yacc.c */ -#line 6316 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6321 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index (Lex, (yyvsp[(1) - (7)].key_type), (yyvsp[(2) - (7)].lex_str))) MYSQL_YYABORT; @@ -24207,9 +23800,8 @@ break; case 645: - -/* Line 1455 of yacc.c */ -#line 6322 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6327 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index (Lex, (yyvsp[(1) - (8)].key_type), (yyvsp[(3) - (8)].lex_str))) MYSQL_YYABORT; @@ -24217,9 +23809,8 @@ break; case 646: - -/* Line 1455 of yacc.c */ -#line 6328 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6333 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index (Lex, (yyvsp[(1) - (8)].key_type), (yyvsp[(3) - (8)].lex_str))) MYSQL_YYABORT; @@ -24227,9 +23818,8 @@ break; case 647: - -/* Line 1455 of yacc.c */ -#line 6334 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6339 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_create_index (Lex, (yyvsp[(2) - (8)].key_type), (yyvsp[(3) - (8)].lex_str).str ? (yyvsp[(3) - (8)].lex_str) : (yyvsp[(1) - (8)].lex_str))) MYSQL_YYABORT; @@ -24237,9 +23827,8 @@ break; case 648: - -/* Line 1455 of yacc.c */ -#line 6339 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Key *key= new Foreign_key((yyvsp[(4) - (8)].lex_str).str ? (yyvsp[(4) - (8)].lex_str) : (yyvsp[(1) - (8)].lex_str), lex->col_list, @@ -24261,39 +23850,34 @@ break; case 649: - -/* Line 1455 of yacc.c */ -#line 6358 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6363 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->col_list.empty(); /* Alloced by sql_alloc */ } break; case 653: - -/* Line 1455 of yacc.c */ -#line 6373 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6378 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= null_lex_str; } break; case 654: - -/* Line 1455 of yacc.c */ -#line 6374 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6379 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 655: - -/* Line 1455 of yacc.c */ -#line 6378 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6383 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } break; case 656: - -/* Line 1455 of yacc.c */ -#line 6383 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6388 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->length=lex->dec=0; @@ -24305,9 +23889,8 @@ break; case 657: - -/* Line 1455 of yacc.c */ -#line 6392 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (add_field_to_list(lex->thd, &(yyvsp[(1) - (4)].lex_str), (enum enum_field_types) (yyvsp[(3) - (4)].num), @@ -24321,30 +23904,26 @@ break; case 658: - -/* Line 1455 of yacc.c */ -#line 6405 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6410 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=(yyvsp[(1) - (3)].num); } break; case 659: - -/* Line 1455 of yacc.c */ -#line 6406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6411 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=(yyvsp[(1) - (3)].num); } break; case 660: - -/* Line 1455 of yacc.c */ -#line 6407 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6412 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_FLOAT; } break; case 661: - -/* Line 1455 of yacc.c */ -#line 6409 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6414 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; (yyval.num)=MYSQL_TYPE_BIT; @@ -24352,18 +23931,16 @@ break; case 662: - -/* Line 1455 of yacc.c */ -#line 6414 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6419 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_BIT; } break; case 663: - -/* Line 1455 of yacc.c */ -#line 6418 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6423 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; (yyval.num)=MYSQL_TYPE_TINY; @@ -24371,9 +23948,8 @@ break; case 664: - -/* Line 1455 of yacc.c */ -#line 6423 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6428 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; (yyval.num)=MYSQL_TYPE_TINY; @@ -24381,18 +23957,16 @@ break; case 665: - -/* Line 1455 of yacc.c */ -#line 6428 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6433 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_STRING; } break; case 666: - -/* Line 1455 of yacc.c */ -#line 6432 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6437 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; (yyval.num)=MYSQL_TYPE_STRING; @@ -24400,9 +23974,8 @@ break; case 667: - -/* Line 1455 of yacc.c */ -#line 6437 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6442 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_STRING; Lex->charset=national_charset_info; @@ -24410,9 +23983,8 @@ break; case 668: - -/* Line 1455 of yacc.c */ -#line 6442 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6447 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; (yyval.num)=MYSQL_TYPE_STRING; @@ -24421,9 +23993,8 @@ break; case 669: - -/* Line 1455 of yacc.c */ -#line 6448 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6453 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_STRING; @@ -24431,9 +24002,8 @@ break; case 670: - -/* Line 1455 of yacc.c */ -#line 6453 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6458 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (char*) "1"; Lex->charset=&my_charset_bin; @@ -24442,18 +24012,16 @@ break; case 671: - -/* Line 1455 of yacc.c */ -#line 6459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6464 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_TYPE_VARCHAR; } break; case 672: - -/* Line 1455 of yacc.c */ -#line 6463 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6468 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_TYPE_VARCHAR; Lex->charset=national_charset_info; @@ -24461,9 +24029,8 @@ break; case 673: - -/* Line 1455 of yacc.c */ -#line 6468 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6473 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)= MYSQL_TYPE_VARCHAR; @@ -24471,9 +24038,8 @@ break; case 674: - -/* Line 1455 of yacc.c */ -#line 6473 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6478 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->length) { @@ -24494,23 +24060,20 @@ break; case 675: - -/* Line 1455 of yacc.c */ -#line 6491 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6496 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_DATE; } break; case 676: - -/* Line 1455 of yacc.c */ -#line 6493 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6498 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_TYPE_TIME2; } break; case 677: - -/* Line 1455 of yacc.c */ -#line 6495 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6500 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (YYTHD->variables.sql_mode & MODE_MAXDB) (yyval.num)=MYSQL_TYPE_DATETIME2; @@ -24529,16 +24092,14 @@ break; case 678: - -/* Line 1455 of yacc.c */ -#line 6511 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6516 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_TYPE_DATETIME2; } break; case 679: - -/* Line 1455 of yacc.c */ -#line 6513 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6518 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_TINY_BLOB; @@ -24546,9 +24107,8 @@ break; case 680: - -/* Line 1455 of yacc.c */ -#line 6518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6523 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_BLOB; @@ -24556,9 +24116,8 @@ break; case 681: - -/* Line 1455 of yacc.c */ -#line 6523 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6528 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_SPATIAL Lex->charset=&my_charset_bin; @@ -24573,9 +24132,8 @@ break; case 682: - -/* Line 1455 of yacc.c */ -#line 6535 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6540 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_MEDIUM_BLOB; @@ -24583,9 +24141,8 @@ break; case 683: - -/* Line 1455 of yacc.c */ -#line 6540 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6545 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_LONG_BLOB; @@ -24593,9 +24150,8 @@ break; case 684: - -/* Line 1455 of yacc.c */ -#line 6545 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6550 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; (yyval.num)=MYSQL_TYPE_MEDIUM_BLOB; @@ -24603,100 +24159,86 @@ break; case 685: - -/* Line 1455 of yacc.c */ -#line 6550 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6555 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_MEDIUM_BLOB; } break; case 686: - -/* Line 1455 of yacc.c */ -#line 6552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_TINY_BLOB; } break; case 687: - -/* Line 1455 of yacc.c */ -#line 6554 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6559 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_BLOB; } break; case 688: - -/* Line 1455 of yacc.c */ -#line 6556 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6561 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_MEDIUM_BLOB; } break; case 689: - -/* Line 1455 of yacc.c */ -#line 6558 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6563 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_LONG_BLOB; } break; case 690: - -/* Line 1455 of yacc.c */ -#line 6560 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6565 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_NEWDECIMAL;} break; case 691: - -/* Line 1455 of yacc.c */ -#line 6562 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6567 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_NEWDECIMAL;} break; case 692: - -/* Line 1455 of yacc.c */ -#line 6564 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6569 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_NEWDECIMAL;} break; case 693: - -/* Line 1455 of yacc.c */ -#line 6566 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6571 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {Lex->interval_list.empty();} break; case 694: - -/* Line 1455 of yacc.c */ -#line 6568 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6573 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_ENUM; } break; case 695: - -/* Line 1455 of yacc.c */ -#line 6570 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6575 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->interval_list.empty();} break; case 696: - -/* Line 1455 of yacc.c */ -#line 6572 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6577 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_SET; } break; case 697: - -/* Line 1455 of yacc.c */ -#line 6574 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6579 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_MEDIUM_BLOB; } break; case 698: - -/* Line 1455 of yacc.c */ -#line 6576 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6581 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_LONGLONG; Lex->type|= (AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG | @@ -24705,23 +24247,20 @@ break; case 699: - -/* Line 1455 of yacc.c */ -#line 6584 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6589 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_GEOMETRY; } break; case 700: - -/* Line 1455 of yacc.c */ -#line 6585 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6590 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_GEOMETRYCOLLECTION; } break; case 701: - -/* Line 1455 of yacc.c */ -#line 6587 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6592 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= const_cast(STRINGIFY_ARG (MAX_LEN_GEOM_POINT_FIELD)); @@ -24730,149 +24269,128 @@ break; case 702: - -/* Line 1455 of yacc.c */ -#line 6592 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6597 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_MULTIPOINT; } break; case 703: - -/* Line 1455 of yacc.c */ -#line 6593 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6598 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_LINESTRING; } break; case 704: - -/* Line 1455 of yacc.c */ -#line 6594 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6599 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_MULTILINESTRING; } break; case 705: - -/* Line 1455 of yacc.c */ -#line 6595 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6600 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_POLYGON; } break; case 706: - -/* Line 1455 of yacc.c */ -#line 6596 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6601 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= Field::GEOM_MULTIPOLYGON; } break; case 707: - -/* Line 1455 of yacc.c */ -#line 6600 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6605 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 708: - -/* Line 1455 of yacc.c */ -#line 6604 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6609 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 709: - -/* Line 1455 of yacc.c */ -#line 6605 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 710: - -/* Line 1455 of yacc.c */ -#line 6609 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6614 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 711: - -/* Line 1455 of yacc.c */ -#line 6610 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6615 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 712: - -/* Line 1455 of yacc.c */ -#line 6614 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6619 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 713: - -/* Line 1455 of yacc.c */ -#line 6615 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6620 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 714: - -/* Line 1455 of yacc.c */ -#line 6616 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6621 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 715: - -/* Line 1455 of yacc.c */ -#line 6617 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6622 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 716: - -/* Line 1455 of yacc.c */ -#line 6618 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6623 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 717: - -/* Line 1455 of yacc.c */ -#line 6622 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6627 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_LONG; } break; case 718: - -/* Line 1455 of yacc.c */ -#line 6623 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6628 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_TINY; } break; case 719: - -/* Line 1455 of yacc.c */ -#line 6624 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6629 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_SHORT; } break; case 720: - -/* Line 1455 of yacc.c */ -#line 6625 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6630 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_INT24; } break; case 721: - -/* Line 1455 of yacc.c */ -#line 6626 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6631 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_LONGLONG; } break; case 722: - -/* Line 1455 of yacc.c */ -#line 6631 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6636 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ? MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; @@ -24880,44 +24398,38 @@ break; case 723: - -/* Line 1455 of yacc.c */ -#line 6636 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6641 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_DOUBLE; } break; case 724: - -/* Line 1455 of yacc.c */ -#line 6638 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6643 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=MYSQL_TYPE_DOUBLE; } break; case 725: - -/* Line 1455 of yacc.c */ -#line 6643 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6648 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->dec=Lex->length= (char*)0; } break; case 726: - -/* Line 1455 of yacc.c */ -#line 6645 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6650 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->dec= (char*)0; } break; case 727: - -/* Line 1455 of yacc.c */ -#line 6647 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6652 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 728: - -/* Line 1455 of yacc.c */ -#line 6652 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6657 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->length=(yyvsp[(2) - (5)].lex_str).str; @@ -24926,37 +24438,32 @@ break; case 729: - -/* Line 1455 of yacc.c */ -#line 6661 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6666 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->dec= (char *) 0; } break; case 730: - -/* Line 1455 of yacc.c */ -#line 6662 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6667 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->dec= (yyvsp[(2) - (3)].lex_str).str; } break; case 731: - -/* Line 1455 of yacc.c */ -#line 6666 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6671 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 0; } break; case 732: - -/* Line 1455 of yacc.c */ -#line 6667 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6672 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 0; } break; case 733: - -/* Line 1455 of yacc.c */ -#line 6669 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6674 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(2) - (3)].lex_str).str, NULL, &error); @@ -24964,170 +24471,146 @@ break; case 734: - -/* Line 1455 of yacc.c */ -#line 6676 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6681 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 735: - -/* Line 1455 of yacc.c */ -#line 6677 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6682 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 736: - -/* Line 1455 of yacc.c */ -#line 6681 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6686 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 737: - -/* Line 1455 of yacc.c */ -#line 6682 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6687 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 738: - -/* Line 1455 of yacc.c */ -#line 6686 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6691 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 739: - -/* Line 1455 of yacc.c */ -#line 6687 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6692 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= UNSIGNED_FLAG;} break; case 740: - -/* Line 1455 of yacc.c */ -#line 6688 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6693 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; } break; case 741: - -/* Line 1455 of yacc.c */ -#line 6692 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6697 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } break; case 742: - -/* Line 1455 of yacc.c */ -#line 6693 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6698 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } break; case 743: - -/* Line 1455 of yacc.c */ -#line 6694 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6699 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } break; case 744: - -/* Line 1455 of yacc.c */ -#line 6695 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6700 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } break; case 745: - -/* Line 1455 of yacc.c */ -#line 6698 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6703 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->length=(char*) 0; /* use default length */ } break; case 746: - -/* Line 1455 of yacc.c */ -#line 6699 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 747: - -/* Line 1455 of yacc.c */ -#line 6703 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6708 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 748: - -/* Line 1455 of yacc.c */ -#line 6704 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6709 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 749: - -/* Line 1455 of yacc.c */ -#line 6708 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6713 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 750: - -/* Line 1455 of yacc.c */ -#line 6709 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6714 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 751: - -/* Line 1455 of yacc.c */ -#line 6713 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6718 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 753: - -/* Line 1455 of yacc.c */ -#line 6718 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6723 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~ NOT_NULL_FLAG; } break; case 754: - -/* Line 1455 of yacc.c */ -#line 6719 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6724 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= NOT_NULL_FLAG; } break; case 755: - -/* Line 1455 of yacc.c */ -#line 6720 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6725 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->default_value=(yyvsp[(2) - (2)].item); } break; case 756: - -/* Line 1455 of yacc.c */ -#line 6721 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6726 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->on_update_value= (yyvsp[(3) - (3)].item); } break; case 757: - -/* Line 1455 of yacc.c */ -#line 6722 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6727 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; } break; case 758: - -/* Line 1455 of yacc.c */ -#line 6724 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6729 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG; @@ -25136,9 +24619,8 @@ break; case 759: - -/* Line 1455 of yacc.c */ -#line 6730 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6735 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; @@ -25147,9 +24629,8 @@ break; case 760: - -/* Line 1455 of yacc.c */ -#line 6736 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6741 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->type|= UNIQUE_FLAG; @@ -25158,9 +24639,8 @@ break; case 761: - -/* Line 1455 of yacc.c */ -#line 6742 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6747 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->type|= UNIQUE_KEY_FLAG; @@ -25169,16 +24649,14 @@ break; case 762: - -/* Line 1455 of yacc.c */ -#line 6747 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6752 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->comment= (yyvsp[(2) - (2)].lex_str); } break; case 763: - -/* Line 1455 of yacc.c */ -#line 6749 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6754 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->charset && !my_charset_same(Lex->charset,(yyvsp[(2) - (2)].charset))) { @@ -25194,9 +24672,8 @@ break; case 764: - -/* Line 1455 of yacc.c */ -#line 6762 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6767 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_COLUMN_FORMAT_MASK); Lex->type|= @@ -25205,9 +24682,8 @@ break; case 765: - -/* Line 1455 of yacc.c */ -#line 6768 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6773 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_COLUMN_FORMAT_MASK); Lex->type|= @@ -25216,9 +24692,8 @@ break; case 766: - -/* Line 1455 of yacc.c */ -#line 6774 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6779 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_COLUMN_FORMAT_MASK); Lex->type|= @@ -25227,9 +24702,8 @@ break; case 767: - -/* Line 1455 of yacc.c */ -#line 6780 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6785 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_STORAGE_MEDIA_MASK); Lex->type|= (HA_SM_DEFAULT << FIELD_FLAGS_STORAGE_MEDIA); @@ -25237,9 +24711,8 @@ break; case 768: - -/* Line 1455 of yacc.c */ -#line 6785 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6790 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_STORAGE_MEDIA_MASK); Lex->type|= (HA_SM_DISK << FIELD_FLAGS_STORAGE_MEDIA); @@ -25247,9 +24720,8 @@ break; case 769: - -/* Line 1455 of yacc.c */ -#line 6790 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6795 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type&= ~(FIELD_FLAGS_STORAGE_MEDIA_MASK); Lex->type|= (HA_SM_MEMORY << FIELD_FLAGS_STORAGE_MEDIA); @@ -25257,9 +24729,8 @@ break; case 770: - -/* Line 1455 of yacc.c */ -#line 6799 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6804 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (2)].num); @@ -25279,9 +24750,8 @@ break; case 771: - -/* Line 1455 of yacc.c */ -#line 6820 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6825 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_now_local((yyvsp[(2) - (2)].ulong_num)); if ((yyval.item) == NULL) @@ -25290,30 +24760,26 @@ break; case 773: - -/* Line 1455 of yacc.c */ -#line 6829 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6834 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=(yyvsp[(1) - (1)].item); } break; case 774: - -/* Line 1455 of yacc.c */ -#line 6833 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6838 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 775: - -/* Line 1455 of yacc.c */ -#line 6834 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6839 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 776: - -/* Line 1455 of yacc.c */ -#line 6839 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6844 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.charset)=get_charset_by_csname((yyvsp[(1) - (1)].lex_str).str,MY_CS_PRIMARY,MYF(0)))) { @@ -25324,44 +24790,38 @@ break; case 777: - -/* Line 1455 of yacc.c */ -#line 6846 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6851 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)= &my_charset_bin; } break; case 778: - -/* Line 1455 of yacc.c */ -#line 6850 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6855 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=(yyvsp[(1) - (1)].charset); } break; case 779: - -/* Line 1455 of yacc.c */ -#line 6851 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6856 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=NULL; } break; case 780: - -/* Line 1455 of yacc.c */ -#line 6855 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6860 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)= NULL; } break; case 781: - -/* Line 1455 of yacc.c */ -#line 6856 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6861 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)= (yyvsp[(2) - (2)].charset); } break; case 782: - -/* Line 1455 of yacc.c */ -#line 6861 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6866 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.charset)=get_charset_by_csname((yyvsp[(1) - (1)].lex_str).str,MY_CS_PRIMARY,MYF(0))) && !((yyval.charset)=get_old_charset_by_name((yyvsp[(1) - (1)].lex_str).str))) @@ -25373,30 +24833,26 @@ break; case 783: - -/* Line 1455 of yacc.c */ -#line 6869 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6874 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)= &my_charset_bin; } break; case 784: - -/* Line 1455 of yacc.c */ -#line 6873 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6878 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=(yyvsp[(1) - (1)].charset); } break; case 785: - -/* Line 1455 of yacc.c */ -#line 6874 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6879 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=NULL; } break; case 786: - -/* Line 1455 of yacc.c */ -#line 6879 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6884 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.charset)= mysqld_collation_get_by_name((yyvsp[(1) - (1)].lex_str).str))) MYSQL_YYABORT; @@ -25404,76 +24860,66 @@ break; case 787: - -/* Line 1455 of yacc.c */ -#line 6886 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6891 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=NULL; } break; case 788: - -/* Line 1455 of yacc.c */ -#line 6887 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6892 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=(yyvsp[(2) - (2)].charset); } break; case 789: - -/* Line 1455 of yacc.c */ -#line 6891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6896 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=(yyvsp[(1) - (1)].charset); } break; case 790: - -/* Line 1455 of yacc.c */ -#line 6892 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6897 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.charset)=NULL; } break; case 791: - -/* Line 1455 of yacc.c */ -#line 6896 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6901 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 792: - -/* Line 1455 of yacc.c */ -#line 6897 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 793: - -/* Line 1455 of yacc.c */ -#line 6902 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6907 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset= &my_charset_latin1; } break; case 794: - -/* Line 1455 of yacc.c */ -#line 6904 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6909 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset= &my_charset_latin1_bin; } break; case 795: - -/* Line 1455 of yacc.c */ -#line 6908 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6913 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset= &my_charset_latin1_bin; } break; case 796: - -/* Line 1455 of yacc.c */ -#line 6915 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6920 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(Lex->charset=get_charset_by_csname("ucs2", MY_CS_PRIMARY,MYF(0)))) @@ -25485,9 +24931,8 @@ break; case 797: - -/* Line 1455 of yacc.c */ -#line 6924 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6929 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(Lex->charset= mysqld_collation_get_by_name("ucs2_bin"))) MYSQL_YYABORT; @@ -25495,9 +24940,8 @@ break; case 798: - -/* Line 1455 of yacc.c */ -#line 6929 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6934 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(Lex->charset= mysqld_collation_get_by_name("ucs2_bin"))) my_error(ER_UNKNOWN_COLLATION, MYF(0), "ucs2_bin"); @@ -25505,30 +24949,26 @@ break; case 799: - -/* Line 1455 of yacc.c */ -#line 6936 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6941 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=NULL; } break; case 802: - -/* Line 1455 of yacc.c */ -#line 6939 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6944 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=&my_charset_bin; } break; case 803: - -/* Line 1455 of yacc.c */ -#line 6940 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6945 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset=(yyvsp[(2) - (3)].charset); } break; case 804: - -/* Line 1455 of yacc.c */ -#line 6942 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6947 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset= NULL; Lex->type|= BINCMP_FLAG; @@ -25536,9 +24976,8 @@ break; case 805: - -/* Line 1455 of yacc.c */ -#line 6947 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6952 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->charset= (yyvsp[(3) - (3)].charset); Lex->type|= BINCMP_FLAG; @@ -25546,23 +24985,20 @@ break; case 806: - -/* Line 1455 of yacc.c */ -#line 6954 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6959 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 807: - -/* Line 1455 of yacc.c */ -#line 6955 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6960 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= BINCMP_FLAG; } break; case 808: - -/* Line 1455 of yacc.c */ -#line 6960 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6965 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(2) - (2)].ulong_num) == 0) { @@ -25573,65 +25009,56 @@ break; case 809: - -/* Line 1455 of yacc.c */ -#line 6968 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6973 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(2) - (4)].ulong_num); } break; case 810: - -/* Line 1455 of yacc.c */ -#line 6972 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6977 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 0; } break; case 811: - -/* Line 1455 of yacc.c */ -#line 6973 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6978 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 1 << MY_STRXFRM_DESC_SHIFT; } break; case 812: - -/* Line 1455 of yacc.c */ -#line 6977 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6982 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 1 << MY_STRXFRM_REVERSE_SHIFT; } break; case 813: - -/* Line 1455 of yacc.c */ -#line 6980 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6985 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 0; } break; case 814: - -/* Line 1455 of yacc.c */ -#line 6981 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6986 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } break; case 815: - -/* Line 1455 of yacc.c */ -#line 6982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6987 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (2)].ulong_num) | (yyvsp[(2) - (2)].ulong_num); } break; case 816: - -/* Line 1455 of yacc.c */ -#line 6983 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6988 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num) ; } break; case 817: - -/* Line 1455 of yacc.c */ -#line 6988 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 6993 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num) < 1 ? 1 : ((yyvsp[(1) - (1)].ulong_num) > MY_STRXFRM_NLEVELS ? MY_STRXFRM_NLEVELS : (yyvsp[(1) - (1)].ulong_num)); (yyval.ulong_num)--; @@ -25639,32 +25066,28 @@ break; case 818: - -/* Line 1455 of yacc.c */ -#line 6996 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7001 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (1 | (yyvsp[(2) - (2)].ulong_num)) << (yyvsp[(1) - (2)].ulong_num); } break; case 819: - -/* Line 1455 of yacc.c */ -#line 7002 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7007 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } break; case 820: - -/* Line 1455 of yacc.c */ -#line 7003 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7008 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)|= (yyvsp[(3) - (3)].ulong_num); } break; case 821: - -/* Line 1455 of yacc.c */ -#line 7008 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7013 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { uint start= (yyvsp[(1) - (3)].ulong_num); uint end= (yyvsp[(3) - (3)].ulong_num); @@ -25674,53 +25097,46 @@ break; case 822: - -/* Line 1455 of yacc.c */ -#line 7017 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7022 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } break; case 823: - -/* Line 1455 of yacc.c */ -#line 7018 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7023 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } break; case 824: - -/* Line 1455 of yacc.c */ -#line 7022 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7027 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= 0; } break; case 825: - -/* Line 1455 of yacc.c */ -#line 7023 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7028 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (yyvsp[(2) - (2)].ulong_num); } break; case 828: - -/* Line 1455 of yacc.c */ -#line 7037 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7042 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table)=(yyvsp[(2) - (5)].table); } break; case 829: - -/* Line 1455 of yacc.c */ -#line 7044 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7049 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ref_list.empty(); } break; case 831: - -/* Line 1455 of yacc.c */ -#line 7050 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7055 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Key_part_spec *key= new Key_part_spec((yyvsp[(3) - (3)].lex_str), 0); if (key == NULL) @@ -25730,9 +25146,8 @@ break; case 832: - -/* Line 1455 of yacc.c */ -#line 7057 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7062 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Key_part_spec *key= new Key_part_spec((yyvsp[(1) - (1)].lex_str), 0); if (key == NULL) @@ -25744,37 +25159,32 @@ break; case 833: - -/* Line 1455 of yacc.c */ -#line 7069 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7074 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->fk_match_option= Foreign_key::FK_MATCH_UNDEF; } break; case 834: - -/* Line 1455 of yacc.c */ -#line 7071 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7076 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } break; case 835: - -/* Line 1455 of yacc.c */ -#line 7073 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7078 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } break; case 836: - -/* Line 1455 of yacc.c */ -#line 7075 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7080 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; } break; case 837: - -/* Line 1455 of yacc.c */ -#line 7080 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7085 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; @@ -25783,9 +25193,8 @@ break; case 838: - -/* Line 1455 of yacc.c */ -#line 7086 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7091 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->fk_update_opt= (yyvsp[(3) - (3)].m_fk_option); @@ -25794,9 +25203,8 @@ break; case 839: - -/* Line 1455 of yacc.c */ -#line 7092 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7097 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; @@ -25805,9 +25213,8 @@ break; case 840: - -/* Line 1455 of yacc.c */ -#line 7099 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7104 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->fk_update_opt= (yyvsp[(3) - (6)].m_fk_option); @@ -25816,9 +25223,8 @@ break; case 841: - -/* Line 1455 of yacc.c */ -#line 7106 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7111 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->fk_update_opt= (yyvsp[(6) - (6)].m_fk_option); @@ -25827,128 +25233,110 @@ break; case 842: - -/* Line 1455 of yacc.c */ -#line 7114 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7119 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_fk_option)= Foreign_key::FK_OPTION_RESTRICT; } break; case 843: - -/* Line 1455 of yacc.c */ -#line 7115 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7120 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_fk_option)= Foreign_key::FK_OPTION_CASCADE; } break; case 844: - -/* Line 1455 of yacc.c */ -#line 7116 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7121 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_fk_option)= Foreign_key::FK_OPTION_SET_NULL; } break; case 845: - -/* Line 1455 of yacc.c */ -#line 7117 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7122 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_fk_option)= Foreign_key::FK_OPTION_NO_ACTION; } break; case 846: - -/* Line 1455 of yacc.c */ -#line 7118 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7123 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_fk_option)= Foreign_key::FK_OPTION_DEFAULT; } break; case 847: - -/* Line 1455 of yacc.c */ -#line 7122 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7127 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::MULTIPLE; } break; case 848: - -/* Line 1455 of yacc.c */ -#line 7126 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7131 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::PRIMARY; } break; case 849: - -/* Line 1455 of yacc.c */ -#line 7127 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7132 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::UNIQUE; } break; case 850: - -/* Line 1455 of yacc.c */ -#line 7131 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7136 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 851: - -/* Line 1455 of yacc.c */ -#line 7132 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7137 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 852: - -/* Line 1455 of yacc.c */ -#line 7136 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7141 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 854: - -/* Line 1455 of yacc.c */ -#line 7141 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7146 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 855: - -/* Line 1455 of yacc.c */ -#line 7142 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7147 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 856: - -/* Line 1455 of yacc.c */ -#line 7143 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7148 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 857: - -/* Line 1455 of yacc.c */ -#line 7147 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7152 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::MULTIPLE; } break; case 858: - -/* Line 1455 of yacc.c */ -#line 7148 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7153 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::UNIQUE; } break; case 859: - -/* Line 1455 of yacc.c */ -#line 7152 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7157 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_type)= Key::FULLTEXT;} break; case 860: - -/* Line 1455 of yacc.c */ -#line 7157 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7162 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_SPATIAL (yyval.key_type)= Key::SPATIAL; @@ -25961,67 +25349,58 @@ break; case 861: - -/* Line 1455 of yacc.c */ -#line 7169 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7174 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->key_create_info= default_key_create_info; } break; case 864: - -/* Line 1455 of yacc.c */ -#line 7186 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7191 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 866: - -/* Line 1455 of yacc.c */ -#line 7191 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7196 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 868: - -/* Line 1455 of yacc.c */ -#line 7196 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7201 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 876: - -/* Line 1455 of yacc.c */ -#line 7216 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->key_create_info.algorithm= (yyvsp[(2) - (2)].key_alg); } break; case 877: - -/* Line 1455 of yacc.c */ -#line 7217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7222 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->key_create_info.algorithm= (yyvsp[(2) - (2)].key_alg); } break; case 878: - -/* Line 1455 of yacc.c */ -#line 7222 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7227 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->key_create_info.block_size= (yyvsp[(3) - (3)].ulong_num); } break; case 879: - -/* Line 1455 of yacc.c */ -#line 7223 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->key_create_info.comment= (yyvsp[(2) - (2)].lex_str); } break; case 884: - -/* Line 1455 of yacc.c */ -#line 7238 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7243 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (plugin_is_ready(&(yyvsp[(3) - (3)].lex_str), MYSQL_FTPARSER_PLUGIN)) Lex->key_create_info.parser_name= (yyvsp[(3) - (3)].lex_str); @@ -26034,44 +25413,38 @@ break; case 885: - -/* Line 1455 of yacc.c */ -#line 7250 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7255 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_alg)= HA_KEY_ALG_BTREE; } break; case 886: - -/* Line 1455 of yacc.c */ -#line 7251 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7256 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_alg)= HA_KEY_ALG_RTREE; } break; case 887: - -/* Line 1455 of yacc.c */ -#line 7252 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7257 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_alg)= HA_KEY_ALG_HASH; } break; case 888: - -/* Line 1455 of yacc.c */ -#line 7256 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7261 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->col_list.push_back((yyvsp[(3) - (4)].key_part)); } break; case 889: - -/* Line 1455 of yacc.c */ -#line 7257 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7262 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->col_list.push_back((yyvsp[(1) - (2)].key_part)); } break; case 890: - -/* Line 1455 of yacc.c */ -#line 7262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7267 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.key_part)= new Key_part_spec((yyvsp[(1) - (1)].lex_str), 0); if ((yyval.key_part) == NULL) @@ -26080,9 +25453,8 @@ break; case 891: - -/* Line 1455 of yacc.c */ -#line 7268 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7273 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int key_part_len= atoi((yyvsp[(3) - (4)].lex_str).str); if (!key_part_len) @@ -26096,51 +25468,44 @@ break; case 892: - -/* Line 1455 of yacc.c */ -#line 7281 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7286 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= null_lex_str; } break; case 893: - -/* Line 1455 of yacc.c */ -#line 7282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7287 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 894: - -/* Line 1455 of yacc.c */ -#line 7286 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7291 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= null_lex_str; } break; case 895: - -/* Line 1455 of yacc.c */ -#line 7287 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7292 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(2) - (2)].lex_str); } break; case 896: - -/* Line 1455 of yacc.c */ -#line 7291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7296 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->interval_list.push_back((yyvsp[(1) - (1)].string)); } break; case 897: - -/* Line 1455 of yacc.c */ -#line 7292 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7297 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->interval_list.push_back((yyvsp[(3) - (3)].string)); } break; case 898: - -/* Line 1455 of yacc.c */ -#line 7300 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7305 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26176,9 +25541,8 @@ break; case 899: - -/* Line 1455 of yacc.c */ -#line 7333 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7338 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26193,9 +25557,8 @@ break; case 900: - -/* Line 1455 of yacc.c */ -#line 7345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7350 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.default_table_charset= NULL; Lex->create_info.used_fields= 0; @@ -26203,9 +25566,8 @@ break; case 901: - -/* Line 1455 of yacc.c */ -#line 7350 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7355 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command=SQLCOM_ALTER_DB; @@ -26217,9 +25579,8 @@ break; case 902: - -/* Line 1455 of yacc.c */ -#line 7359 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7364 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->sphead) @@ -26233,9 +25594,8 @@ break; case 903: - -/* Line 1455 of yacc.c */ -#line 7370 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7375 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -26249,9 +25609,8 @@ break; case 904: - -/* Line 1455 of yacc.c */ -#line 7381 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7386 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; @@ -26261,9 +25620,8 @@ break; case 905: - -/* Line 1455 of yacc.c */ -#line 7388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7393 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -26277,9 +25635,8 @@ break; case 906: - -/* Line 1455 of yacc.c */ -#line 7399 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7404 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; @@ -26289,9 +25646,8 @@ break; case 907: - -/* Line 1455 of yacc.c */ -#line 7406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7411 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -26305,16 +25661,14 @@ break; case 908: - -/* Line 1455 of yacc.c */ -#line 7417 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7422 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 909: - -/* Line 1455 of yacc.c */ -#line 7424 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7429 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -26329,16 +25683,14 @@ break; case 910: - -/* Line 1455 of yacc.c */ -#line 7436 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7441 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 911: - -/* Line 1455 of yacc.c */ -#line 7438 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7443 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* It is safe to use Lex->spname because @@ -26357,9 +25709,8 @@ break; case 912: - -/* Line 1455 of yacc.c */ -#line 7458 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7463 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyvsp[(6) - (10)].num) || (yyvsp[(7) - (10)].num) || (yyvsp[(8) - (10)].num) || (yyvsp[(9) - (10)].num) || (yyvsp[(10) - (10)].num))) { @@ -26375,9 +25726,8 @@ break; case 913: - -/* Line 1455 of yacc.c */ -#line 7471 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7476 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_TABLESPACE; @@ -26385,9 +25735,8 @@ break; case 914: - -/* Line 1455 of yacc.c */ -#line 7476 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7481 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_LOGFILE_GROUP; @@ -26395,9 +25744,8 @@ break; case 915: - -/* Line 1455 of yacc.c */ -#line 7481 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7486 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= CHANGE_FILE_TABLESPACE; @@ -26405,9 +25753,8 @@ break; case 916: - -/* Line 1455 of yacc.c */ -#line 7486 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7491 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_ACCESS_MODE_TABLESPACE; @@ -26415,9 +25762,8 @@ break; case 917: - -/* Line 1455 of yacc.c */ -#line 7491 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7496 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_ALTER_SERVER; @@ -26427,18 +25773,16 @@ break; case 918: - -/* Line 1455 of yacc.c */ -#line 7498 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7503 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_ALTER_USER; } break; case 919: - -/* Line 1455 of yacc.c */ -#line 7505 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7510 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(1) - (3)].lex_user))) MYSQL_YYABORT; @@ -26446,9 +25790,8 @@ break; case 920: - -/* Line 1455 of yacc.c */ -#line 7510 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7515 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(3) - (5)].lex_user))) MYSQL_YYABORT; @@ -26456,44 +25799,38 @@ break; case 921: - -/* Line 1455 of yacc.c */ -#line 7517 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7522 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0;} break; case 922: - -/* Line 1455 of yacc.c */ -#line 7518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7523 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 923: - -/* Line 1455 of yacc.c */ -#line 7519 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7524 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 924: - -/* Line 1455 of yacc.c */ -#line 7520 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7525 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 925: - -/* Line 1455 of yacc.c */ -#line 7524 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7529 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0;} break; case 926: - -/* Line 1455 of yacc.c */ -#line 7526 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7531 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Use lex's spname to hold the new name. @@ -26505,37 +25842,32 @@ break; case 927: - -/* Line 1455 of yacc.c */ -#line 7537 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7542 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0;} break; case 928: - -/* Line 1455 of yacc.c */ -#line 7538 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7543 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 929: - -/* Line 1455 of yacc.c */ -#line 7542 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7547 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str).str= 0; (yyval.lex_str).length= 0; } break; case 930: - -/* Line 1455 of yacc.c */ -#line 7543 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7548 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 932: - -/* Line 1455 of yacc.c */ -#line 7549 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7554 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->m_sql_cmd= new (YYTHD->mem_root) Sql_cmd_discard_import_tablespace( @@ -26546,9 +25878,8 @@ break; case 933: - -/* Line 1455 of yacc.c */ -#line 7557 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7562 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->m_sql_cmd= new (YYTHD->mem_root) Sql_cmd_discard_import_tablespace( @@ -26559,18 +25890,16 @@ break; case 939: - -/* Line 1455 of yacc.c */ -#line 7579 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7584 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_DROP_PARTITION; } break; case 940: - -/* Line 1455 of yacc.c */ -#line 7584 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7589 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_info.flags|= Alter_info::ALTER_REBUILD_PARTITION; @@ -26579,9 +25908,8 @@ break; case 941: - -/* Line 1455 of yacc.c */ -#line 7591 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7596 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26596,9 +25924,8 @@ break; case 943: - -/* Line 1455 of yacc.c */ -#line 7605 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26613,9 +25940,8 @@ break; case 944: - -/* Line 1455 of yacc.c */ -#line 7617 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7622 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26629,9 +25955,8 @@ break; case 946: - -/* Line 1455 of yacc.c */ -#line 7630 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7635 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26646,9 +25971,8 @@ break; case 948: - -/* Line 1455 of yacc.c */ -#line 7643 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7648 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_info.flags|= Alter_info::ALTER_COALESCE_PARTITION; @@ -26658,9 +25982,8 @@ break; case 949: - -/* Line 1455 of yacc.c */ -#line 7650 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7655 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26674,9 +25997,8 @@ break; case 951: - -/* Line 1455 of yacc.c */ -#line 7663 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7668 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -26703,27 +26025,24 @@ break; case 952: - -/* Line 1455 of yacc.c */ -#line 7690 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7695 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_REMOVE_PARTITIONING; } break; case 953: - -/* Line 1455 of yacc.c */ -#line 7697 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7702 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_ALL_PARTITION; } break; case 955: - -/* Line 1455 of yacc.c */ -#line 7705 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7710 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->part_info= new partition_info(); @@ -26738,16 +26057,14 @@ break; case 956: - -/* Line 1455 of yacc.c */ -#line 7717 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7722 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 958: - -/* Line 1455 of yacc.c */ -#line 7723 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7728 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->part_info->num_parts= lex->part_info->partitions.elements; @@ -26755,18 +26072,16 @@ break; case 959: - -/* Line 1455 of yacc.c */ -#line 7728 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7733 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->part_info->num_parts= (yyvsp[(2) - (2)].ulong_num); } break; case 960: - -/* Line 1455 of yacc.c */ -#line 7735 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7740 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->part_info= new partition_info(); @@ -26780,27 +26095,24 @@ break; case 962: - -/* Line 1455 of yacc.c */ -#line 7750 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7755 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_TABLE_REORG; } break; case 963: - -/* Line 1455 of yacc.c */ -#line 7754 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7759 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_REORGANIZE_PARTITION; } break; case 964: - -/* Line 1455 of yacc.c */ -#line 7758 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7763 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { partition_info *part_info= Lex->part_info; part_info->num_parts= part_info->partitions.elements; @@ -26808,23 +26120,20 @@ break; case 965: - -/* Line 1455 of yacc.c */ -#line 7765 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7770 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 966: - -/* Line 1455 of yacc.c */ -#line 7766 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7771 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 967: - -/* Line 1455 of yacc.c */ -#line 7771 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7776 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->alter_info.partition_names.push_back((yyvsp[(1) - (1)].lex_str).str)) { @@ -26835,9 +26144,8 @@ break; case 970: - -/* Line 1455 of yacc.c */ -#line 7791 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7796 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->change=0; @@ -26846,18 +26154,16 @@ break; case 971: - -/* Line 1455 of yacc.c */ -#line 7800 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7805 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_last_non_select_table= Lex->last_table(); } break; case 972: - -/* Line 1455 of yacc.c */ -#line 7804 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7809 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_last_non_select_table= Lex->last_table(); Lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; @@ -26865,9 +26171,8 @@ break; case 973: - -/* Line 1455 of yacc.c */ -#line 7809 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7814 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_ADD_COLUMN | Alter_info::ALTER_ADD_INDEX; @@ -26875,9 +26180,8 @@ break; case 974: - -/* Line 1455 of yacc.c */ -#line 7814 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7819 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->change= (yyvsp[(3) - (3)].lex_str).str; @@ -26886,18 +26190,16 @@ break; case 975: - -/* Line 1455 of yacc.c */ -#line 7820 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7825 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_last_non_select_table= Lex->last_table(); } break; case 976: - -/* Line 1455 of yacc.c */ -#line 7824 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7829 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->length=lex->dec=0; lex->type=0; @@ -26909,9 +26211,8 @@ break; case 977: - -/* Line 1455 of yacc.c */ -#line 7833 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7838 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (add_field_to_list(lex->thd,&(yyvsp[(3) - (6)].lex_str), @@ -26926,18 +26227,16 @@ break; case 978: - -/* Line 1455 of yacc.c */ -#line 7845 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7850 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_last_non_select_table= Lex->last_table(); } break; case 979: - -/* Line 1455 of yacc.c */ -#line 7849 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7854 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_drop *ad= new Alter_drop(Alter_drop::COLUMN, (yyvsp[(3) - (4)].lex_str).str); @@ -26949,9 +26248,8 @@ break; case 980: - -/* Line 1455 of yacc.c */ -#line 7858 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7863 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_drop *ad= new Alter_drop(Alter_drop::FOREIGN_KEY, (yyvsp[(4) - (4)].lex_str).str); @@ -26963,9 +26261,8 @@ break; case 981: - -/* Line 1455 of yacc.c */ -#line 7867 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7872 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_drop *ad= new Alter_drop(Alter_drop::KEY, primary_key_name); @@ -26977,9 +26274,8 @@ break; case 982: - -/* Line 1455 of yacc.c */ -#line 7876 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7881 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_drop *ad= new Alter_drop(Alter_drop::KEY, (yyvsp[(3) - (3)].lex_str).str); @@ -26991,9 +26287,8 @@ break; case 983: - -/* Line 1455 of yacc.c */ -#line 7885 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7890 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->alter_info.keys_onoff= Alter_info::DISABLE; @@ -27002,9 +26297,8 @@ break; case 984: - -/* Line 1455 of yacc.c */ -#line 7891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7896 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->alter_info.keys_onoff= Alter_info::ENABLE; @@ -27013,9 +26307,8 @@ break; case 985: - -/* Line 1455 of yacc.c */ -#line 7897 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_column *ac= new Alter_column((yyvsp[(3) - (6)].lex_str).str,(yyvsp[(6) - (6)].item)); @@ -27027,9 +26320,8 @@ break; case 986: - -/* Line 1455 of yacc.c */ -#line 7906 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7911 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_column *ac= new Alter_column((yyvsp[(3) - (5)].lex_str).str, (Item*) 0); @@ -27041,9 +26333,8 @@ break; case 987: - -/* Line 1455 of yacc.c */ -#line 7915 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7920 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; size_t dummy; @@ -27074,9 +26365,8 @@ break; case 988: - -/* Line 1455 of yacc.c */ -#line 7943 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7948 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(yyvsp[(4) - (5)].charset)) { @@ -27095,14 +26385,13 @@ lex->create_info.default_table_charset= (yyvsp[(5) - (5)].charset); lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET | HA_CREATE_USED_DEFAULT_CHARSET); - lex->alter_info.flags|= Alter_info::ALTER_CONVERT; + lex->alter_info.flags|= Alter_info::ALTER_OPTIONS; } break; case 989: - -/* Line 1455 of yacc.c */ -#line 7964 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7969 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->alter_info.flags|= Alter_info::ALTER_OPTIONS; @@ -27115,18 +26404,16 @@ break; case 990: - -/* Line 1455 of yacc.c */ -#line 7974 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7979 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_RECREATE; } break; case 991: - -/* Line 1455 of yacc.c */ -#line 7978 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 7983 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->alter_info.flags|= Alter_info::ALTER_ORDER; @@ -27134,9 +26421,8 @@ break; case 999: - -/* Line 1455 of yacc.c */ -#line 7995 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8000 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.requested_algorithm= Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT; @@ -27144,9 +26430,8 @@ break; case 1000: - -/* Line 1455 of yacc.c */ -#line 8000 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8005 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->alter_info.set_requested_algorithm(&(yyvsp[(3) - (3)].lex_str))) { @@ -27157,9 +26442,8 @@ break; case 1001: - -/* Line 1455 of yacc.c */ -#line 8011 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8016 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.requested_lock= Alter_info::ALTER_TABLE_LOCK_DEFAULT; @@ -27167,9 +26451,8 @@ break; case 1002: - -/* Line 1455 of yacc.c */ -#line 8016 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8021 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->alter_info.set_requested_lock(&(yyvsp[(3) - (3)].lex_str))) { @@ -27180,65 +26463,56 @@ break; case 1003: - -/* Line 1455 of yacc.c */ -#line 8026 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8031 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1004: - -/* Line 1455 of yacc.c */ -#line 8027 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8032 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1005: - -/* Line 1455 of yacc.c */ -#line 8031 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8036 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ignore= 0;} break; case 1006: - -/* Line 1455 of yacc.c */ -#line 8032 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8037 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ignore= 1;} break; case 1007: - -/* Line 1455 of yacc.c */ -#line 8036 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8041 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->drop_mode= DROP_DEFAULT; } break; case 1008: - -/* Line 1455 of yacc.c */ -#line 8037 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8042 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->drop_mode= DROP_RESTRICT; } break; case 1009: - -/* Line 1455 of yacc.c */ -#line 8038 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8043 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->drop_mode= DROP_CASCADE; } break; case 1010: - -/* Line 1455 of yacc.c */ -#line 8042 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8047 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1011: - -/* Line 1455 of yacc.c */ -#line 8044 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8049 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { store_position_for_column((yyvsp[(2) - (2)].lex_str).str); Lex->alter_info.flags |= Alter_info::ALTER_COLUMN_ORDER; @@ -27246,9 +26520,8 @@ break; case 1012: - -/* Line 1455 of yacc.c */ -#line 8049 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8054 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { store_position_for_column(first_keyword); Lex->alter_info.flags |= Alter_info::ALTER_COLUMN_ORDER; @@ -27256,37 +26529,32 @@ break; case 1013: - -/* Line 1455 of yacc.c */ -#line 8056 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8061 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1014: - -/* Line 1455 of yacc.c */ -#line 8057 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8062 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1015: - -/* Line 1455 of yacc.c */ -#line 8058 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8063 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1016: - -/* Line 1455 of yacc.c */ -#line 8059 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8064 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1017: - -/* Line 1455 of yacc.c */ -#line 8064 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8069 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; /* Clean previous slave connection values */ @@ -27300,9 +26568,8 @@ break; case 1018: - -/* Line 1455 of yacc.c */ -#line 8076 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8081 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* It is not possible to set user's information when @@ -27322,9 +26589,8 @@ break; case 1019: - -/* Line 1455 of yacc.c */ -#line 8093 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8098 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_STOP; @@ -27334,9 +26600,8 @@ break; case 1020: - -/* Line 1455 of yacc.c */ -#line 8103 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8108 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_BEGIN; @@ -27352,99 +26617,88 @@ break; case 1021: - -/* Line 1455 of yacc.c */ -#line 8119 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8124 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1022: - -/* Line 1455 of yacc.c */ -#line 8123 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8128 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (1)].num); } break; case 1023: - -/* Line 1455 of yacc.c */ -#line 8130 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8135 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (1)].num); } break; case 1024: - -/* Line 1455 of yacc.c */ -#line 8134 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8139 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (3)].num) | (yyvsp[(3) - (3)].num); } break; case 1025: - -/* Line 1455 of yacc.c */ -#line 8141 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8146 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT; } break; case 1026: - -/* Line 1455 of yacc.c */ -#line 8145 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_START_TRANS_OPT_READ_ONLY; } break; case 1027: - -/* Line 1455 of yacc.c */ -#line 8149 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8154 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= MYSQL_START_TRANS_OPT_READ_WRITE; } break; case 1029: - -/* Line 1455 of yacc.c */ -#line 8160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8165 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* empty */ } break; case 1030: - -/* Line 1455 of yacc.c */ -#line 8164 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8169 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->slave_connection.user= (yyvsp[(3) - (3)].lex_str).str; } break; case 1031: - -/* Line 1455 of yacc.c */ -#line 8170 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* empty */ } break; case 1032: - -/* Line 1455 of yacc.c */ -#line 8174 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8179 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->slave_connection.password= (yyvsp[(3) - (3)].lex_str).str; Lex->contains_plaintext_password= true; @@ -27452,106 +26706,94 @@ break; case 1033: - -/* Line 1455 of yacc.c */ -#line 8180 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8185 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* empty */ } break; case 1034: - -/* Line 1455 of yacc.c */ -#line 8184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->slave_connection.plugin_auth= (yyvsp[(3) - (3)].lex_str).str; } break; case 1035: - -/* Line 1455 of yacc.c */ -#line 8190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* empty */ } break; case 1036: - -/* Line 1455 of yacc.c */ -#line 8194 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8199 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->slave_connection.plugin_dir= (yyvsp[(3) - (3)].lex_str).str; } break; case 1037: - -/* Line 1455 of yacc.c */ -#line 8201 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8206 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1038: - -/* Line 1455 of yacc.c */ -#line 8205 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8210 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (1)].num); } break; case 1039: - -/* Line 1455 of yacc.c */ -#line 8212 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8217 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (1)].num); } break; case 1040: - -/* Line 1455 of yacc.c */ -#line 8216 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (3)].num) | (yyvsp[(3) - (3)].num); } break; case 1041: - -/* Line 1455 of yacc.c */ -#line 8223 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= SLAVE_SQL; } break; case 1042: - -/* Line 1455 of yacc.c */ -#line 8227 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8232 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= SLAVE_IO; } break; case 1043: - -/* Line 1455 of yacc.c */ -#line 8233 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8238 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1044: - -/* Line 1455 of yacc.c */ -#line 8235 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8240 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (((lex->mi.log_file_name || lex->mi.pos) && @@ -27576,9 +26818,8 @@ break; case 1047: - -/* Line 1455 of yacc.c */ -#line 8262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8267 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.gtid= (yyvsp[(3) - (3)].lex_str).str; Lex->mi.gtid_until_condition= LEX_MASTER_INFO::UNTIL_SQL_BEFORE_GTIDS; @@ -27586,9 +26827,8 @@ break; case 1048: - -/* Line 1455 of yacc.c */ -#line 8267 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8272 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.gtid= (yyvsp[(3) - (3)].lex_str).str; Lex->mi.gtid_until_condition= LEX_MASTER_INFO::UNTIL_SQL_AFTER_GTIDS; @@ -27596,18 +26836,16 @@ break; case 1049: - -/* Line 1455 of yacc.c */ -#line 8272 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.until_after_gaps= true; } break; case 1050: - -/* Line 1455 of yacc.c */ -#line 8279 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8284 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_CHECKSUM; @@ -27617,37 +26855,32 @@ break; case 1051: - -/* Line 1455 of yacc.c */ -#line 8286 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8291 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1052: - -/* Line 1455 of yacc.c */ -#line 8290 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8295 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags= 0; } break; case 1053: - -/* Line 1455 of yacc.c */ -#line 8291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8296 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags= T_QUICK; } break; case 1054: - -/* Line 1455 of yacc.c */ -#line 8292 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8297 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags= T_EXTEND; } break; case 1055: - -/* Line 1455 of yacc.c */ -#line 8297 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8302 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_REPAIR; @@ -27660,9 +26893,8 @@ break; case 1056: - -/* Line 1455 of yacc.c */ -#line 8307 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8312 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX* lex= thd->lex; @@ -27674,58 +26906,50 @@ break; case 1057: - -/* Line 1455 of yacc.c */ -#line 8318 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8323 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags = T_MEDIUM; } break; case 1058: - -/* Line 1455 of yacc.c */ -#line 8319 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8324 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1059: - -/* Line 1455 of yacc.c */ -#line 8323 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8328 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1060: - -/* Line 1455 of yacc.c */ -#line 8324 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8329 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1061: - -/* Line 1455 of yacc.c */ -#line 8328 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8333 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_QUICK; } break; case 1062: - -/* Line 1455 of yacc.c */ -#line 8329 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8334 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_EXTEND; } break; case 1063: - -/* Line 1455 of yacc.c */ -#line 8330 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8335 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.sql_flags|= TT_USEFRM; } break; case 1064: - -/* Line 1455 of yacc.c */ -#line 8335 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8340 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_ANALYZE; @@ -27738,9 +26962,8 @@ break; case 1065: - -/* Line 1455 of yacc.c */ -#line 8345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8350 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX* lex= thd->lex; @@ -27752,9 +26975,8 @@ break; case 1066: - -/* Line 1455 of yacc.c */ -#line 8357 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8362 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT; Lex->comment= (yyvsp[(2) - (2)].lex_str); @@ -27762,9 +26984,8 @@ break; case 1067: - -/* Line 1455 of yacc.c */ -#line 8365 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8370 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; @@ -27782,9 +27003,8 @@ break; case 1068: - -/* Line 1455 of yacc.c */ -#line 8380 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8385 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX* lex= thd->lex; @@ -27796,79 +27016,68 @@ break; case 1069: - -/* Line 1455 of yacc.c */ -#line 8391 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8396 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags = T_MEDIUM; } break; case 1070: - -/* Line 1455 of yacc.c */ -#line 8392 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1071: - -/* Line 1455 of yacc.c */ -#line 8396 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8401 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1072: - -/* Line 1455 of yacc.c */ -#line 8397 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8402 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1073: - -/* Line 1455 of yacc.c */ -#line 8401 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8406 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_QUICK; } break; case 1074: - -/* Line 1455 of yacc.c */ -#line 8402 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_FAST; } break; case 1075: - -/* Line 1455 of yacc.c */ -#line 8403 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8408 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_MEDIUM; } break; case 1076: - -/* Line 1455 of yacc.c */ -#line 8404 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_EXTEND; } break; case 1077: - -/* Line 1455 of yacc.c */ -#line 8405 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8410 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; } break; case 1078: - -/* Line 1455 of yacc.c */ -#line 8406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8411 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; } break; case 1079: - -/* Line 1455 of yacc.c */ -#line 8411 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8416 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_OPTIMIZE; @@ -27881,9 +27090,8 @@ break; case 1080: - -/* Line 1455 of yacc.c */ -#line 8421 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8426 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX* lex= thd->lex; @@ -27895,55 +27103,48 @@ break; case 1081: - -/* Line 1455 of yacc.c */ -#line 8432 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8437 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1082: - -/* Line 1455 of yacc.c */ -#line 8433 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 1083: - -/* Line 1455 of yacc.c */ -#line 8434 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8439 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 1084: - -/* Line 1455 of yacc.c */ -#line 8439 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8444 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_RENAME_TABLE; } break; case 1085: - -/* Line 1455 of yacc.c */ -#line 8443 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8448 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1086: - -/* Line 1455 of yacc.c */ -#line 8445 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8450 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_RENAME_USER; } break; case 1087: - -/* Line 1455 of yacc.c */ -#line 8452 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8457 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(1) - (3)].lex_user)) || Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user))) MYSQL_YYABORT; @@ -27951,9 +27152,8 @@ break; case 1088: - -/* Line 1455 of yacc.c */ -#line 8457 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8462 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(3) - (5)].lex_user)) || Lex->users_list.push_back((yyvsp[(5) - (5)].lex_user))) MYSQL_YYABORT; @@ -27961,9 +27161,8 @@ break; case 1091: - -/* Line 1455 of yacc.c */ -#line 8470 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8475 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; SELECT_LEX *sl= lex->current_select; @@ -27976,18 +27175,16 @@ break; case 1092: - -/* Line 1455 of yacc.c */ -#line 8483 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8488 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.reset(); } break; case 1093: - -/* Line 1455 of yacc.c */ -#line 8487 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8492 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_ASSIGN_TO_KEYCACHE; @@ -27996,9 +27193,8 @@ break; case 1098: - -/* Line 1455 of yacc.c */ -#line 8506 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (2)].table), NULL, 0, TL_READ, MDL_SHARED_READ, @@ -28008,9 +27204,8 @@ break; case 1099: - -/* Line 1455 of yacc.c */ -#line 8516 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8521 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (3)].table), NULL, 0, TL_READ, MDL_SHARED_READ, @@ -28020,23 +27215,20 @@ break; case 1100: - -/* Line 1455 of yacc.c */ -#line 8525 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8530 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 1101: - -/* Line 1455 of yacc.c */ -#line 8526 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8531 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str) = default_key_cache_base; } break; case 1102: - -/* Line 1455 of yacc.c */ -#line 8531 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8536 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command=SQLCOM_PRELOAD_KEYS; @@ -28045,16 +27237,14 @@ break; case 1103: - -/* Line 1455 of yacc.c */ -#line 8537 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8542 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1108: - -/* Line 1455 of yacc.c */ -#line 8552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (3)].table), NULL, (yyvsp[(3) - (3)].num), TL_READ, MDL_SHARED_READ, @@ -28064,9 +27254,8 @@ break; case 1109: - -/* Line 1455 of yacc.c */ -#line 8562 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8567 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (4)].table), NULL, (yyvsp[(4) - (4)].num), TL_READ, MDL_SHARED_READ, @@ -28076,18 +27265,16 @@ break; case 1110: - -/* Line 1455 of yacc.c */ -#line 8572 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8577 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->alter_info.flags|= Alter_info::ALTER_ADMIN_PARTITION; } break; case 1112: - -/* Line 1455 of yacc.c */ -#line 8579 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8584 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->select_lex.alloc_index_hints(YYTHD); Select->set_index_hint_type(INDEX_HINT_USE, @@ -28098,30 +27285,26 @@ break; case 1114: - -/* Line 1455 of yacc.c */ -#line 8590 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8595 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 1116: - -/* Line 1455 of yacc.c */ -#line 8596 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8601 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1117: - -/* Line 1455 of yacc.c */ -#line 8597 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8602 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TL_OPTION_IGNORE_LEAVES; } break; case 1118: - -/* Line 1455 of yacc.c */ -#line 8607 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8612 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SELECT; @@ -28129,9 +27312,8 @@ break; case 1121: - -/* Line 1455 of yacc.c */ -#line 8621 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8626 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (setup_select_in_parentheses(Lex)) MYSQL_YYABORT; @@ -28139,9 +27321,8 @@ break; case 1123: - -/* Line 1455 of yacc.c */ -#line 8631 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8636 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (setup_select_in_parentheses(Lex)) MYSQL_YYABORT; @@ -28149,9 +27330,8 @@ break; case 1125: - -/* Line 1455 of yacc.c */ -#line 8640 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8645 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX * sel= lex->current_select; @@ -28170,9 +27350,8 @@ break; case 1127: - -/* Line 1455 of yacc.c */ -#line 8659 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8664 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -28183,25 +27362,22 @@ break; case 1128: - -/* Line 1455 of yacc.c */ -#line 8667 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8672 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 1130: - -/* Line 1455 of yacc.c */ -#line 8674 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8679 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1135: - -/* Line 1455 of yacc.c */ -#line 8684 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8689 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->context.table_list= Select->context.first_name_resolution_table= @@ -28210,9 +27386,8 @@ break; case 1138: - -/* Line 1455 of yacc.c */ -#line 8699 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Select->options & SELECT_DISTINCT && Select->options & SELECT_ALL) { @@ -28223,9 +27398,8 @@ break; case 1142: - -/* Line 1455 of yacc.c */ -#line 8716 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8721 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Allow this flag only on the first top-level SELECT statement, if @@ -28256,9 +27430,8 @@ break; case 1143: - -/* Line 1455 of yacc.c */ -#line 8744 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8749 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Allow this flag only on the first top-level SELECT statement, if @@ -28289,32 +27462,35 @@ break; case 1145: - -/* Line 1455 of yacc.c */ -#line 8776 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8781 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; - lex->current_select->set_lock_for_tables(TL_WRITE); - lex->safe_to_cache_query=0; + if (!lex->describe) + { + lex->current_select->set_lock_for_tables(TL_WRITE); + lex->safe_to_cache_query=0; + } } break; case 1146: - -/* Line 1455 of yacc.c */ -#line 8782 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8790 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; - lex->current_select-> - set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); - lex->safe_to_cache_query=0; + if (!lex->describe) + { + lex->current_select-> + set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); + lex->safe_to_cache_query=0; + } } break; case 1149: - -/* Line 1455 of yacc.c */ -#line 8794 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8805 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Item *item= new (thd->mem_root) @@ -28329,9 +27505,8 @@ break; case 1150: - -/* Line 1455 of yacc.c */ -#line 8809 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8820 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; @@ -28341,9 +27516,8 @@ break; case 1151: - -/* Line 1455 of yacc.c */ -#line 8816 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8827 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; DBUG_ASSERT((yyvsp[(1) - (4)].simple_string) < (yyvsp[(3) - (4)].simple_string)); @@ -28368,76 +27542,66 @@ break; case 1152: - -/* Line 1455 of yacc.c */ -#line 8840 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8851 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.simple_string)= (char*) YYLIP->get_cpp_tok_start(); } break; case 1153: - -/* Line 1455 of yacc.c */ -#line 8846 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8857 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.simple_string)= (char*) YYLIP->get_cpp_tok_end(); } break; case 1154: - -/* Line 1455 of yacc.c */ -#line 8852 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8863 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=null_lex_str;} break; case 1155: - -/* Line 1455 of yacc.c */ -#line 8853 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8864 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } break; case 1156: - -/* Line 1455 of yacc.c */ -#line 8854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8865 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } break; case 1157: - -/* Line 1455 of yacc.c */ -#line 8855 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8866 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } break; case 1158: - -/* Line 1455 of yacc.c */ -#line 8856 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8867 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } break; case 1159: - -/* Line 1455 of yacc.c */ -#line 8860 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8871 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1160: - -/* Line 1455 of yacc.c */ -#line 8861 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8872 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1161: - -/* Line 1455 of yacc.c */ -#line 8867 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8878 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Design notes: @@ -28491,9 +27655,8 @@ break; case 1162: - -/* Line 1455 of yacc.c */ -#line 8918 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8929 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* XOR is a proprietary extension */ (yyval.item) = new (YYTHD->mem_root) Item_func_xor((yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); @@ -28503,9 +27666,8 @@ break; case 1163: - -/* Line 1455 of yacc.c */ -#line 8925 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8936 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* See comments in rule expr: expr or expr */ Item_cond_and *item1; @@ -28551,9 +27713,8 @@ break; case 1164: - -/* Line 1455 of yacc.c */ -#line 8968 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8979 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= negate_expression(YYTHD, (yyvsp[(2) - (2)].item)); if ((yyval.item) == NULL) @@ -28562,9 +27723,8 @@ break; case 1165: - -/* Line 1455 of yacc.c */ -#line 8974 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8985 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_istrue((yyvsp[(1) - (3)].item)); if ((yyval.item) == NULL) @@ -28573,9 +27733,8 @@ break; case 1166: - -/* Line 1455 of yacc.c */ -#line 8980 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8991 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnottrue((yyvsp[(1) - (4)].item)); if ((yyval.item) == NULL) @@ -28584,9 +27743,8 @@ break; case 1167: - -/* Line 1455 of yacc.c */ -#line 8986 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 8997 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isfalse((yyvsp[(1) - (3)].item)); if ((yyval.item) == NULL) @@ -28595,9 +27753,8 @@ break; case 1168: - -/* Line 1455 of yacc.c */ -#line 8992 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9003 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnotfalse((yyvsp[(1) - (4)].item)); if ((yyval.item) == NULL) @@ -28606,9 +27763,8 @@ break; case 1169: - -/* Line 1455 of yacc.c */ -#line 8998 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9009 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnull((yyvsp[(1) - (3)].item)); if ((yyval.item) == NULL) @@ -28617,9 +27773,8 @@ break; case 1170: - -/* Line 1455 of yacc.c */ -#line 9004 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9015 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnotnull((yyvsp[(1) - (4)].item)); if ((yyval.item) == NULL) @@ -28628,9 +27783,8 @@ break; case 1172: - -/* Line 1455 of yacc.c */ -#line 9014 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9025 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnull((yyvsp[(1) - (3)].item)); if ((yyval.item) == NULL) @@ -28639,9 +27793,8 @@ break; case 1173: - -/* Line 1455 of yacc.c */ -#line 9020 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9031 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_isnotnull((yyvsp[(1) - (4)].item)); if ((yyval.item) == NULL) @@ -28650,9 +27803,8 @@ break; case 1174: - -/* Line 1455 of yacc.c */ -#line 9026 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9037 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_equal((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28661,9 +27813,8 @@ break; case 1175: - -/* Line 1455 of yacc.c */ -#line 9032 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9043 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (*(yyvsp[(2) - (3)].boolfunc2creator))(0)->create((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28672,9 +27823,8 @@ break; case 1176: - -/* Line 1455 of yacc.c */ -#line 9038 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9049 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= all_any_subquery_creator((yyvsp[(1) - (6)].item), (yyvsp[(2) - (6)].boolfunc2creator), (yyvsp[(3) - (6)].num), (yyvsp[(5) - (6)].select_lex)); if ((yyval.item) == NULL) @@ -28683,9 +27833,8 @@ break; case 1178: - -/* Line 1455 of yacc.c */ -#line 9048 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9059 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_in_subselect((yyvsp[(1) - (5)].item), (yyvsp[(4) - (5)].select_lex)); if ((yyval.item) == NULL) @@ -28694,9 +27843,8 @@ break; case 1179: - -/* Line 1455 of yacc.c */ -#line 9054 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9065 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Item *item= new (thd->mem_root) Item_in_subselect((yyvsp[(1) - (6)].item), (yyvsp[(5) - (6)].select_lex)); @@ -28709,9 +27857,8 @@ break; case 1180: - -/* Line 1455 of yacc.c */ -#line 9064 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9075 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= handle_sql2003_note184_exception(YYTHD, (yyvsp[(1) - (5)].item), true, (yyvsp[(4) - (5)].item)); if ((yyval.item) == NULL) @@ -28720,9 +27867,8 @@ break; case 1181: - -/* Line 1455 of yacc.c */ -#line 9070 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9081 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(6) - (7)].item_list)->push_front((yyvsp[(4) - (7)].item)); (yyvsp[(6) - (7)].item_list)->push_front((yyvsp[(1) - (7)].item)); @@ -28733,9 +27879,8 @@ break; case 1182: - -/* Line 1455 of yacc.c */ -#line 9078 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9089 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= handle_sql2003_note184_exception(YYTHD, (yyvsp[(1) - (6)].item), false, (yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -28744,9 +27889,8 @@ break; case 1183: - -/* Line 1455 of yacc.c */ -#line 9084 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9095 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(5) - (8)].item)); (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(1) - (8)].item)); @@ -28759,9 +27903,8 @@ break; case 1184: - -/* Line 1455 of yacc.c */ -#line 9094 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9105 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_between((yyvsp[(1) - (5)].item),(yyvsp[(3) - (5)].item),(yyvsp[(5) - (5)].item)); if ((yyval.item) == NULL) @@ -28770,9 +27913,8 @@ break; case 1185: - -/* Line 1455 of yacc.c */ -#line 9100 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9111 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_func_between *item; item= new (YYTHD->mem_root) Item_func_between((yyvsp[(1) - (6)].item),(yyvsp[(4) - (6)].item),(yyvsp[(6) - (6)].item)); @@ -28784,9 +27926,8 @@ break; case 1186: - -/* Line 1455 of yacc.c */ -#line 9109 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9120 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item1= new (YYTHD->mem_root) Item_func_soundex((yyvsp[(1) - (4)].item)); Item *item4= new (YYTHD->mem_root) Item_func_soundex((yyvsp[(4) - (4)].item)); @@ -28799,9 +27940,8 @@ break; case 1187: - -/* Line 1455 of yacc.c */ -#line 9119 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9130 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_like((yyvsp[(1) - (4)].item),(yyvsp[(3) - (4)].item),(yyvsp[(4) - (4)].item),Lex->escape_used); if ((yyval.item) == NULL) @@ -28810,9 +27950,8 @@ break; case 1188: - -/* Line 1455 of yacc.c */ -#line 9125 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9136 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item= new (YYTHD->mem_root) Item_func_like((yyvsp[(1) - (5)].item),(yyvsp[(4) - (5)].item),(yyvsp[(5) - (5)].item), Lex->escape_used); @@ -28825,9 +27964,8 @@ break; case 1189: - -/* Line 1455 of yacc.c */ -#line 9135 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9146 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_regex((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28836,9 +27974,8 @@ break; case 1190: - -/* Line 1455 of yacc.c */ -#line 9141 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9152 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item= new (YYTHD->mem_root) Item_func_regex((yyvsp[(1) - (4)].item),(yyvsp[(4) - (4)].item)); if (item == NULL) @@ -28850,9 +27987,8 @@ break; case 1192: - -/* Line 1455 of yacc.c */ -#line 9154 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9165 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_bit_or((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28861,9 +27997,8 @@ break; case 1193: - -/* Line 1455 of yacc.c */ -#line 9160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_bit_and((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28872,9 +28007,8 @@ break; case 1194: - -/* Line 1455 of yacc.c */ -#line 9166 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9177 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_shift_left((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28883,9 +28017,8 @@ break; case 1195: - -/* Line 1455 of yacc.c */ -#line 9172 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9183 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_shift_right((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28894,9 +28027,8 @@ break; case 1196: - -/* Line 1455 of yacc.c */ -#line 9178 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_plus((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28905,9 +28037,8 @@ break; case 1197: - -/* Line 1455 of yacc.c */ -#line 9184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_minus((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28916,9 +28047,8 @@ break; case 1198: - -/* Line 1455 of yacc.c */ -#line 9190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9201 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(1) - (5)].item),(yyvsp[(4) - (5)].item),(yyvsp[(5) - (5)].interval),0); if ((yyval.item) == NULL) @@ -28927,9 +28057,8 @@ break; case 1199: - -/* Line 1455 of yacc.c */ -#line 9196 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9207 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(1) - (5)].item),(yyvsp[(4) - (5)].item),(yyvsp[(5) - (5)].interval),1); if ((yyval.item) == NULL) @@ -28938,9 +28067,8 @@ break; case 1200: - -/* Line 1455 of yacc.c */ -#line 9202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9213 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_mul((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28949,9 +28077,8 @@ break; case 1201: - -/* Line 1455 of yacc.c */ -#line 9208 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9219 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_div((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28960,9 +28087,8 @@ break; case 1202: - -/* Line 1455 of yacc.c */ -#line 9214 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9225 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_mod((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28971,9 +28097,8 @@ break; case 1203: - -/* Line 1455 of yacc.c */ -#line 9220 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9231 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_int_div((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28982,9 +28107,8 @@ break; case 1204: - -/* Line 1455 of yacc.c */ -#line 9226 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9237 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_mod((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -28993,9 +28117,8 @@ break; case 1205: - -/* Line 1455 of yacc.c */ -#line 9232 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9243 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_bit_xor((yyvsp[(1) - (3)].item),(yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -29004,65 +28127,56 @@ break; case 1215: - -/* Line 1455 of yacc.c */ -#line 9261 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9272 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_eq_creator; } break; case 1216: - -/* Line 1455 of yacc.c */ -#line 9262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9273 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_ge_creator; } break; case 1217: - -/* Line 1455 of yacc.c */ -#line 9263 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9274 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_gt_creator; } break; case 1218: - -/* Line 1455 of yacc.c */ -#line 9264 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9275 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_le_creator; } break; case 1219: - -/* Line 1455 of yacc.c */ -#line 9265 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9276 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_lt_creator; } break; case 1220: - -/* Line 1455 of yacc.c */ -#line 9266 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.boolfunc2creator) = &comp_ne_creator; } break; case 1221: - -/* Line 1455 of yacc.c */ -#line 9270 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9281 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) = 1; } break; case 1222: - -/* Line 1455 of yacc.c */ -#line 9271 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9282 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) = 0; } break; case 1228: - -/* Line 1455 of yacc.c */ -#line 9281 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9292 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Item *i1= new (thd->mem_root) Item_string((yyvsp[(3) - (3)].lex_str).str, @@ -29077,9 +28191,8 @@ break; case 1233: - -/* Line 1455 of yacc.c */ -#line 9297 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9308 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_concat((yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); if ((yyval.item) == NULL) @@ -29088,18 +28201,16 @@ break; case 1234: - -/* Line 1455 of yacc.c */ -#line 9303 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9314 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(2) - (2)].item); } break; case 1235: - -/* Line 1455 of yacc.c */ -#line 9307 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9318 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_neg((yyvsp[(2) - (2)].item)); if ((yyval.item) == NULL) @@ -29108,9 +28219,8 @@ break; case 1236: - -/* Line 1455 of yacc.c */ -#line 9313 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9324 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_bit_neg((yyvsp[(2) - (2)].item)); if ((yyval.item) == NULL) @@ -29119,9 +28229,8 @@ break; case 1237: - -/* Line 1455 of yacc.c */ -#line 9319 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9330 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= negate_expression(YYTHD, (yyvsp[(2) - (2)].item)); if ((yyval.item) == NULL) @@ -29130,9 +28239,8 @@ break; case 1238: - -/* Line 1455 of yacc.c */ -#line 9325 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9336 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_singlerow_subselect((yyvsp[(2) - (3)].select_lex)); if ((yyval.item) == NULL) @@ -29141,16 +28249,14 @@ break; case 1239: - -/* Line 1455 of yacc.c */ -#line 9331 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9342 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(2) - (3)].item); } break; case 1240: - -/* Line 1455 of yacc.c */ -#line 9333 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(4) - (5)].item_list)->push_front((yyvsp[(2) - (5)].item)); (yyval.item)= new (YYTHD->mem_root) Item_row(*(yyvsp[(4) - (5)].item_list)); @@ -29160,9 +28266,8 @@ break; case 1241: - -/* Line 1455 of yacc.c */ -#line 9340 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9351 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(5) - (6)].item_list)->push_front((yyvsp[(3) - (6)].item)); (yyval.item)= new (YYTHD->mem_root) Item_row(*(yyvsp[(5) - (6)].item_list)); @@ -29172,9 +28277,8 @@ break; case 1242: - -/* Line 1455 of yacc.c */ -#line 9347 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9358 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_exists_subselect((yyvsp[(3) - (4)].select_lex)); if ((yyval.item) == NULL) @@ -29183,9 +28287,8 @@ break; case 1243: - -/* Line 1455 of yacc.c */ -#line 9353 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9364 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_string *item; (yyval.item)= NULL; @@ -29229,9 +28332,8 @@ break; case 1244: - -/* Line 1455 of yacc.c */ -#line 9394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9405 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(2) - (7)].item_list)->push_front((yyvsp[(5) - (7)].item)); Item_func_match *i1= new (YYTHD->mem_root) Item_func_match(*(yyvsp[(2) - (7)].item_list), (yyvsp[(6) - (7)].num)); @@ -29243,9 +28345,8 @@ break; case 1245: - -/* Line 1455 of yacc.c */ -#line 9403 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9414 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= create_func_cast(YYTHD, (yyvsp[(2) - (2)].item), ITEM_CAST_CHAR, NULL, NULL, &my_charset_bin); @@ -29255,9 +28356,8 @@ break; case 1246: - -/* Line 1455 of yacc.c */ -#line 9410 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9421 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; (yyval.item)= create_func_cast(YYTHD, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].cast_type), lex->length, lex->dec, @@ -29268,9 +28368,8 @@ break; case 1247: - -/* Line 1455 of yacc.c */ -#line 9418 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9429 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_case(* (yyvsp[(3) - (5)].item_list), (yyvsp[(2) - (5)].item), (yyvsp[(4) - (5)].item) ); if ((yyval.item) == NULL) @@ -29279,9 +28378,8 @@ break; case 1248: - -/* Line 1455 of yacc.c */ -#line 9424 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9435 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= create_func_cast(YYTHD, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].cast_type), Lex->length, Lex->dec, Lex->charset); @@ -29291,9 +28389,8 @@ break; case 1249: - -/* Line 1455 of yacc.c */ -#line 9431 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9442 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_conv_charset((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].charset)); if ((yyval.item) == NULL) @@ -29302,9 +28399,8 @@ break; case 1250: - -/* Line 1455 of yacc.c */ -#line 9437 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9448 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(3) - (4)].item)->is_splocal()) { @@ -29321,9 +28417,8 @@ break; case 1251: - -/* Line 1455 of yacc.c */ -#line 9451 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9462 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(), (yyvsp[(3) - (4)].item)); @@ -29333,9 +28428,8 @@ break; case 1252: - -/* Line 1455 of yacc.c */ -#line 9459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9470 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(5) - (5)].item),(yyvsp[(2) - (5)].item),(yyvsp[(3) - (5)].interval),0); if ((yyval.item) == NULL) @@ -29344,9 +28438,8 @@ break; case 1253: - -/* Line 1455 of yacc.c */ -#line 9474 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9485 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_char(*(yyvsp[(3) - (4)].item_list)); if ((yyval.item) == NULL) @@ -29355,9 +28448,8 @@ break; case 1254: - -/* Line 1455 of yacc.c */ -#line 9480 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9491 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_char(*(yyvsp[(3) - (6)].item_list), (yyvsp[(5) - (6)].charset)); if ((yyval.item) == NULL) @@ -29366,9 +28458,8 @@ break; case 1255: - -/* Line 1455 of yacc.c */ -#line 9486 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9497 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context()); if ((yyval.item) == NULL) @@ -29379,9 +28470,8 @@ break; case 1256: - -/* Line 1455 of yacc.c */ -#line 9494 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9505 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_typecast((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29390,9 +28480,8 @@ break; case 1257: - -/* Line 1455 of yacc.c */ -#line 9500 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_dayofmonth((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29401,9 +28490,8 @@ break; case 1258: - -/* Line 1455 of yacc.c */ -#line 9506 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9517 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_hour((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29412,9 +28500,8 @@ break; case 1259: - -/* Line 1455 of yacc.c */ -#line 9512 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9523 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_insert((yyvsp[(3) - (10)].item),(yyvsp[(5) - (10)].item),(yyvsp[(7) - (10)].item),(yyvsp[(9) - (10)].item)); if ((yyval.item) == NULL) @@ -29423,9 +28510,8 @@ break; case 1260: - -/* Line 1455 of yacc.c */ -#line 9518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9529 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; List *list= new (thd->mem_root) List; @@ -29443,9 +28529,8 @@ break; case 1261: - -/* Line 1455 of yacc.c */ -#line 9533 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9544 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(5) - (8)].item)); @@ -29460,9 +28545,8 @@ break; case 1262: - -/* Line 1455 of yacc.c */ -#line 9545 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9556 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_left((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29471,9 +28555,8 @@ break; case 1263: - -/* Line 1455 of yacc.c */ -#line 9551 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9562 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_minute((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29482,9 +28565,8 @@ break; case 1264: - -/* Line 1455 of yacc.c */ -#line 9557 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9568 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_month((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29493,9 +28575,8 @@ break; case 1265: - -/* Line 1455 of yacc.c */ -#line 9563 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9574 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_right((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29504,9 +28585,8 @@ break; case 1266: - -/* Line 1455 of yacc.c */ -#line 9569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9580 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_second((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29515,9 +28595,8 @@ break; case 1267: - -/* Line 1455 of yacc.c */ -#line 9575 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9586 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_time_typecast((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29526,9 +28605,8 @@ break; case 1268: - -/* Line 1455 of yacc.c */ -#line 9581 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9592 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_datetime_typecast((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29537,9 +28615,8 @@ break; case 1269: - -/* Line 1455 of yacc.c */ -#line 9587 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9598 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_add_time((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), 1, 0); if ((yyval.item) == NULL) @@ -29548,9 +28625,8 @@ break; case 1270: - -/* Line 1455 of yacc.c */ -#line 9593 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9604 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_trim((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29559,9 +28635,8 @@ break; case 1271: - -/* Line 1455 of yacc.c */ -#line 9599 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_ltrim((yyvsp[(6) - (7)].item),(yyvsp[(4) - (7)].item)); if ((yyval.item) == NULL) @@ -29570,9 +28645,8 @@ break; case 1272: - -/* Line 1455 of yacc.c */ -#line 9605 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9616 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_rtrim((yyvsp[(6) - (7)].item),(yyvsp[(4) - (7)].item)); if ((yyval.item) == NULL) @@ -29581,9 +28655,8 @@ break; case 1273: - -/* Line 1455 of yacc.c */ -#line 9611 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9622 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_trim((yyvsp[(6) - (7)].item),(yyvsp[(4) - (7)].item)); if ((yyval.item) == NULL) @@ -29592,9 +28665,8 @@ break; case 1274: - -/* Line 1455 of yacc.c */ -#line 9617 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9628 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_ltrim((yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29603,9 +28675,8 @@ break; case 1275: - -/* Line 1455 of yacc.c */ -#line 9623 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9634 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_rtrim((yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29614,9 +28685,8 @@ break; case 1276: - -/* Line 1455 of yacc.c */ -#line 9629 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9640 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_trim((yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29625,9 +28695,8 @@ break; case 1277: - -/* Line 1455 of yacc.c */ -#line 9635 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9646 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_trim((yyvsp[(5) - (6)].item),(yyvsp[(3) - (6)].item)); if ((yyval.item) == NULL) @@ -29636,9 +28705,8 @@ break; case 1278: - -/* Line 1455 of yacc.c */ -#line 9641 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9652 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_user(); if ((yyval.item) == NULL) @@ -29649,9 +28717,8 @@ break; case 1279: - -/* Line 1455 of yacc.c */ -#line 9649 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9660 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_year((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29660,9 +28727,8 @@ break; case 1280: - -/* Line 1455 of yacc.c */ -#line 9670 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9681 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), INTERVAL_DAY, 0); @@ -29672,9 +28738,8 @@ break; case 1281: - -/* Line 1455 of yacc.c */ -#line 9677 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9688 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 0); if ((yyval.item) == NULL) @@ -29683,9 +28748,8 @@ break; case 1282: - -/* Line 1455 of yacc.c */ -#line 9683 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9694 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_curdate_local(); if ((yyval.item) == NULL) @@ -29695,9 +28759,8 @@ break; case 1283: - -/* Line 1455 of yacc.c */ -#line 9690 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9701 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_curtime_local((yyvsp[(2) - (2)].ulong_num)); if ((yyval.item) == NULL) @@ -29707,9 +28770,8 @@ break; case 1284: - -/* Line 1455 of yacc.c */ -#line 9698 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9709 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (8)].item),(yyvsp[(6) - (8)].item),(yyvsp[(7) - (8)].interval),0); if ((yyval.item) == NULL) @@ -29718,9 +28780,8 @@ break; case 1285: - -/* Line 1455 of yacc.c */ -#line 9705 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9716 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (8)].item),(yyvsp[(6) - (8)].item),(yyvsp[(7) - (8)].interval),1); if ((yyval.item) == NULL) @@ -29729,9 +28790,8 @@ break; case 1286: - -/* Line 1455 of yacc.c */ -#line 9711 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9722 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=new (YYTHD->mem_root) Item_extract( (yyvsp[(3) - (6)].interval), (yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29740,9 +28800,8 @@ break; case 1287: - -/* Line 1455 of yacc.c */ -#line 9717 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9728 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_get_format((yyvsp[(3) - (6)].date_time_type), (yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29751,9 +28810,8 @@ break; case 1288: - -/* Line 1455 of yacc.c */ -#line 9723 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9734 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); Lex->safe_to_cache_query= 0; @@ -29761,9 +28819,8 @@ break; case 1289: - -/* Line 1455 of yacc.c */ -#line 9728 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9739 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = new (YYTHD->mem_root) Item_func_locate((yyvsp[(5) - (6)].item),(yyvsp[(3) - (6)].item)); if ((yyval.item) == NULL) @@ -29772,9 +28829,8 @@ break; case 1290: - -/* Line 1455 of yacc.c */ -#line 9734 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9745 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), INTERVAL_DAY, 1); @@ -29784,9 +28840,8 @@ break; case 1291: - -/* Line 1455 of yacc.c */ -#line 9741 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9752 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 1); if ((yyval.item) == NULL) @@ -29795,9 +28850,8 @@ break; case 1292: - -/* Line 1455 of yacc.c */ -#line 9747 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9758 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_substr((yyvsp[(3) - (8)].item),(yyvsp[(5) - (8)].item),(yyvsp[(7) - (8)].item)); if ((yyval.item) == NULL) @@ -29806,9 +28860,8 @@ break; case 1293: - -/* Line 1455 of yacc.c */ -#line 9753 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9764 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_substr((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29817,9 +28870,8 @@ break; case 1294: - -/* Line 1455 of yacc.c */ -#line 9759 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9770 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_substr((yyvsp[(3) - (8)].item),(yyvsp[(5) - (8)].item),(yyvsp[(7) - (8)].item)); if ((yyval.item) == NULL) @@ -29828,9 +28880,8 @@ break; case 1295: - -/* Line 1455 of yacc.c */ -#line 9765 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9776 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_substr((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29839,9 +28890,8 @@ break; case 1296: - -/* Line 1455 of yacc.c */ -#line 9771 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9782 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Unlike other time-related functions, SYSDATE() is @@ -29862,9 +28912,8 @@ break; case 1297: - -/* Line 1455 of yacc.c */ -#line 9789 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9800 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_date_add_interval((yyvsp[(7) - (8)].item),(yyvsp[(5) - (8)].item),(yyvsp[(3) - (8)].interval_time_st),0); if ((yyval.item) == NULL) @@ -29873,9 +28922,8 @@ break; case 1298: - -/* Line 1455 of yacc.c */ -#line 9795 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9806 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_timestamp_diff((yyvsp[(5) - (8)].item),(yyvsp[(7) - (8)].item),(yyvsp[(3) - (8)].interval_time_st)); if ((yyval.item) == NULL) @@ -29884,9 +28932,8 @@ break; case 1299: - -/* Line 1455 of yacc.c */ -#line 9801 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9812 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_curdate_utc(); if ((yyval.item) == NULL) @@ -29896,9 +28943,8 @@ break; case 1300: - -/* Line 1455 of yacc.c */ -#line 9808 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9819 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_curtime_utc((yyvsp[(2) - (2)].ulong_num)); if ((yyval.item) == NULL) @@ -29908,9 +28954,8 @@ break; case 1301: - -/* Line 1455 of yacc.c */ -#line 9815 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9826 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_now_utc((yyvsp[(2) - (2)].ulong_num)); if ((yyval.item) == NULL) @@ -29920,9 +28965,8 @@ break; case 1302: - -/* Line 1455 of yacc.c */ -#line 9830 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9841 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_ascii((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29931,9 +28975,8 @@ break; case 1303: - -/* Line 1455 of yacc.c */ -#line 9836 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9847 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_charset((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29942,9 +28985,8 @@ break; case 1304: - -/* Line 1455 of yacc.c */ -#line 9842 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9853 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_coalesce(* (yyvsp[(3) - (4)].item_list)); if ((yyval.item) == NULL) @@ -29953,9 +28995,8 @@ break; case 1305: - -/* Line 1455 of yacc.c */ -#line 9848 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9859 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_collation((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -29964,9 +29005,8 @@ break; case 1306: - -/* Line 1455 of yacc.c */ -#line 9854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9865 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_database(); if ((yyval.item) == NULL) @@ -29976,9 +29016,8 @@ break; case 1307: - -/* Line 1455 of yacc.c */ -#line 9861 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9872 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_if((yyvsp[(3) - (8)].item),(yyvsp[(5) - (8)].item),(yyvsp[(7) - (8)].item)); if ((yyval.item) == NULL) @@ -29987,9 +29026,8 @@ break; case 1308: - -/* Line 1455 of yacc.c */ -#line 9867 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9878 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_format((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -29998,9 +29036,8 @@ break; case 1309: - -/* Line 1455 of yacc.c */ -#line 9873 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9884 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_format((yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); if ((yyval.item) == NULL) @@ -30009,9 +29046,8 @@ break; case 1310: - -/* Line 1455 of yacc.c */ -#line 9879 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9890 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_microsecond((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30020,9 +29056,8 @@ break; case 1311: - -/* Line 1455 of yacc.c */ -#line 9885 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9896 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = new (YYTHD->mem_root) Item_func_mod((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -30031,9 +29066,8 @@ break; case 1312: - -/* Line 1455 of yacc.c */ -#line 9891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { WARN_DEPRECATED(YYTHD, "OLD_PASSWORD", "PASSWORD"); (yyval.item)= new (YYTHD->mem_root) Item_func_old_password((yyvsp[(3) - (4)].item)); @@ -30044,9 +29078,8 @@ break; case 1313: - -/* Line 1455 of yacc.c */ -#line 9899 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9910 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Item* i1; @@ -30062,9 +29095,8 @@ break; case 1314: - -/* Line 1455 of yacc.c */ -#line 9912 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9923 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = new (YYTHD->mem_root) Item_func_quarter((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30073,9 +29105,8 @@ break; case 1315: - -/* Line 1455 of yacc.c */ -#line 9918 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9929 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_repeat((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -30084,9 +29115,8 @@ break; case 1316: - -/* Line 1455 of yacc.c */ -#line 9924 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9935 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_replace((yyvsp[(3) - (8)].item),(yyvsp[(5) - (8)].item),(yyvsp[(7) - (8)].item)); if ((yyval.item) == NULL) @@ -30095,9 +29125,8 @@ break; case 1317: - -/* Line 1455 of yacc.c */ -#line 9930 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9941 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_reverse((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30106,9 +29135,8 @@ break; case 1318: - -/* Line 1455 of yacc.c */ -#line 9936 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9947 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_row_count(); if ((yyval.item) == NULL) @@ -30119,9 +29147,8 @@ break; case 1319: - -/* Line 1455 of yacc.c */ -#line 9944 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9955 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_round((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item),1); if ((yyval.item) == NULL) @@ -30130,9 +29157,8 @@ break; case 1320: - -/* Line 1455 of yacc.c */ -#line 9950 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9961 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Item *i1= new (thd->mem_root) Item_int(NAME_STRING("0"), @@ -30147,9 +29173,8 @@ break; case 1321: - -/* Line 1455 of yacc.c */ -#line 9962 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9973 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_week((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item)); if ((yyval.item) == NULL) @@ -30158,9 +29183,8 @@ break; case 1322: - -/* Line 1455 of yacc.c */ -#line 9968 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9979 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_weight_string((yyvsp[(3) - (5)].item), 0, 0, (yyvsp[(4) - (5)].ulong_num)); if ((yyval.item) == NULL) @@ -30169,9 +29193,8 @@ break; case 1323: - -/* Line 1455 of yacc.c */ -#line 9974 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9985 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_weight_string((yyvsp[(3) - (8)].item), 0, (yyvsp[(6) - (8)].ulong_num), @@ -30182,9 +29205,8 @@ break; case 1324: - -/* Line 1455 of yacc.c */ -#line 9982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 9993 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item= new (YYTHD->mem_root) Item_char_typecast((yyvsp[(3) - (7)].item), (yyvsp[(6) - (7)].ulong_num), &my_charset_bin); if (item == NULL) @@ -30197,9 +29219,8 @@ break; case 1325: - -/* Line 1455 of yacc.c */ -#line 9992 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10003 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_weight_string((yyvsp[(3) - (10)].item), (yyvsp[(5) - (10)].ulong_num), (yyvsp[(7) - (10)].ulong_num), (yyvsp[(9) - (10)].ulong_num)); if ((yyval.item) == NULL) @@ -30208,9 +29229,8 @@ break; case 1326: - -/* Line 1455 of yacc.c */ -#line 9998 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10009 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_SPATIAL (yyval.item)= (yyvsp[(1) - (1)].item); @@ -30226,9 +29246,8 @@ break; case 1327: - -/* Line 1455 of yacc.c */ -#line 10014 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10025 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_mbr_rel((yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), @@ -30237,9 +29256,8 @@ break; case 1328: - -/* Line 1455 of yacc.c */ -#line 10020 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10031 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30249,9 +29267,8 @@ break; case 1329: - -/* Line 1455 of yacc.c */ -#line 10027 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10038 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30261,9 +29278,8 @@ break; case 1330: - -/* Line 1455 of yacc.c */ -#line 10034 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10045 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30273,9 +29289,8 @@ break; case 1331: - -/* Line 1455 of yacc.c */ -#line 10041 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10052 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30285,9 +29300,8 @@ break; case 1332: - -/* Line 1455 of yacc.c */ -#line 10048 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10059 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30297,18 +29311,16 @@ break; case 1333: - -/* Line 1455 of yacc.c */ -#line 10055 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10066 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_point((yyvsp[(3) - (6)].item),(yyvsp[(5) - (6)].item))); } break; case 1334: - -/* Line 1455 of yacc.c */ -#line 10059 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10070 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= GEOM_NEW(YYTHD, Item_func_spatial_collection(* (yyvsp[(3) - (4)].item_list), @@ -30318,9 +29330,8 @@ break; case 1335: - -/* Line 1455 of yacc.c */ -#line 10078 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10089 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_DLOPEN udf_func *udf= 0; @@ -30342,9 +29353,8 @@ break; case 1336: - -/* Line 1455 of yacc.c */ -#line 10097 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10108 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Create_func *builder; @@ -30401,9 +29411,8 @@ break; case 1337: - -/* Line 1455 of yacc.c */ -#line 10151 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10162 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Create_qfunc *builder; @@ -30443,65 +29452,56 @@ break; case 1338: - -/* Line 1455 of yacc.c */ -#line 10191 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10202 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= (yyvsp[(1) - (2)].num) | (yyvsp[(2) - (2)].num); } break; case 1339: - -/* Line 1455 of yacc.c */ -#line 10193 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10204 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= FT_BOOL; } break; case 1340: - -/* Line 1455 of yacc.c */ -#line 10197 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10208 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= FT_NL; } break; case 1341: - -/* Line 1455 of yacc.c */ -#line 10198 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10209 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= FT_NL; } break; case 1342: - -/* Line 1455 of yacc.c */ -#line 10202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10213 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1343: - -/* Line 1455 of yacc.c */ -#line 10203 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10214 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= FT_EXPAND; } break; case 1344: - -/* Line 1455 of yacc.c */ -#line 10207 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10218 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= NULL; } break; case 1345: - -/* Line 1455 of yacc.c */ -#line 10208 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10219 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= (yyvsp[(1) - (1)].item_list); } break; case 1346: - -/* Line 1455 of yacc.c */ -#line 10213 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10224 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= new (YYTHD->mem_root) List; if ((yyval.item_list) == NULL) @@ -30511,9 +29511,8 @@ break; case 1347: - -/* Line 1455 of yacc.c */ -#line 10220 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10231 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item)); (yyval.item_list)= (yyvsp[(1) - (3)].item_list); @@ -30521,9 +29520,8 @@ break; case 1348: - -/* Line 1455 of yacc.c */ -#line 10228 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10239 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Use Item::name as a storage for the attribute value of user @@ -30549,9 +29547,8 @@ break; case 1349: - -/* Line 1455 of yacc.c */ -#line 10254 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10265 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_avg((yyvsp[(3) - (4)].item), FALSE); if ((yyval.item) == NULL) @@ -30560,9 +29557,8 @@ break; case 1350: - -/* Line 1455 of yacc.c */ -#line 10260 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10271 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_avg((yyvsp[(4) - (5)].item), TRUE); if ((yyval.item) == NULL) @@ -30571,9 +29567,8 @@ break; case 1351: - -/* Line 1455 of yacc.c */ -#line 10266 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_and((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30582,9 +29577,8 @@ break; case 1352: - -/* Line 1455 of yacc.c */ -#line 10272 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10283 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_or((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30593,9 +29587,8 @@ break; case 1353: - -/* Line 1455 of yacc.c */ -#line 10278 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10289 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_xor((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30604,9 +29597,8 @@ break; case 1354: - -/* Line 1455 of yacc.c */ -#line 10284 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10295 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *item= new (YYTHD->mem_root) Item_int((int32) 0L,1); if (item == NULL) @@ -30618,9 +29610,8 @@ break; case 1355: - -/* Line 1455 of yacc.c */ -#line 10293 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10304 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_count((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30629,23 +29620,20 @@ break; case 1356: - -/* Line 1455 of yacc.c */ -#line 10299 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10310 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->in_sum_expr++; } break; case 1357: - -/* Line 1455 of yacc.c */ -#line 10301 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10312 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->in_sum_expr--; } break; case 1358: - -/* Line 1455 of yacc.c */ -#line 10303 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10314 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_count(* (yyvsp[(5) - (7)].item_list)); if ((yyval.item) == NULL) @@ -30654,9 +29642,8 @@ break; case 1359: - -/* Line 1455 of yacc.c */ -#line 10309 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10320 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_min((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30665,9 +29652,8 @@ break; case 1360: - -/* Line 1455 of yacc.c */ -#line 10320 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10331 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_min((yyvsp[(4) - (5)].item)); if ((yyval.item) == NULL) @@ -30676,9 +29662,8 @@ break; case 1361: - -/* Line 1455 of yacc.c */ -#line 10326 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10337 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_max((yyvsp[(3) - (4)].item)); if ((yyval.item) == NULL) @@ -30687,9 +29672,8 @@ break; case 1362: - -/* Line 1455 of yacc.c */ -#line 10332 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10343 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_max((yyvsp[(4) - (5)].item)); if ((yyval.item) == NULL) @@ -30698,9 +29682,8 @@ break; case 1363: - -/* Line 1455 of yacc.c */ -#line 10338 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_std((yyvsp[(3) - (4)].item), 0); if ((yyval.item) == NULL) @@ -30709,9 +29692,8 @@ break; case 1364: - -/* Line 1455 of yacc.c */ -#line 10344 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10355 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_variance((yyvsp[(3) - (4)].item), 0); if ((yyval.item) == NULL) @@ -30720,9 +29702,8 @@ break; case 1365: - -/* Line 1455 of yacc.c */ -#line 10350 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10361 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_std((yyvsp[(3) - (4)].item), 1); if ((yyval.item) == NULL) @@ -30731,9 +29712,8 @@ break; case 1366: - -/* Line 1455 of yacc.c */ -#line 10356 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10367 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_variance((yyvsp[(3) - (4)].item), 1); if ((yyval.item) == NULL) @@ -30742,9 +29722,8 @@ break; case 1367: - -/* Line 1455 of yacc.c */ -#line 10362 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10373 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_sum((yyvsp[(3) - (4)].item), FALSE); if ((yyval.item) == NULL) @@ -30753,9 +29732,8 @@ break; case 1368: - -/* Line 1455 of yacc.c */ -#line 10368 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10379 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_sum_sum((yyvsp[(4) - (5)].item), TRUE); if ((yyval.item) == NULL) @@ -30764,16 +29742,14 @@ break; case 1369: - -/* Line 1455 of yacc.c */ -#line 10374 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10385 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->in_sum_expr++; } break; case 1370: - -/* Line 1455 of yacc.c */ -#line 10378 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10389 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->in_sum_expr--; @@ -30788,9 +29764,8 @@ break; case 1371: - -/* Line 1455 of yacc.c */ -#line 10393 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10404 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (! Lex->parsing_options.allows_variable) { @@ -30801,18 +29776,16 @@ break; case 1372: - -/* Line 1455 of yacc.c */ -#line 10401 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10412 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(3) - (3)].item); } break; case 1373: - -/* Line 1455 of yacc.c */ -#line 10408 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10419 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_func_set_user_var *item; (yyval.item)= item= @@ -30826,9 +29799,8 @@ break; case 1374: - -/* Line 1455 of yacc.c */ -#line 10419 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10430 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_func_get_user_var((yyvsp[(1) - (1)].lex_str)); if ((yyval.item) == NULL) @@ -30839,9 +29811,8 @@ break; case 1375: - -/* Line 1455 of yacc.c */ -#line 10427 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* disallow "SELECT @@global.global.variable" */ if ((yyvsp[(3) - (4)].lex_str).str && (yyvsp[(4) - (4)].lex_str).str && check_reserved_words(&(yyvsp[(3) - (4)].lex_str))) @@ -30857,23 +29828,20 @@ break; case 1376: - -/* Line 1455 of yacc.c */ -#line 10442 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10453 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) = 0; } break; case 1377: - -/* Line 1455 of yacc.c */ -#line 10443 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10454 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) = 1; } break; case 1378: - -/* Line 1455 of yacc.c */ -#line 10448 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10459 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.string)= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1); if ((yyval.string) == NULL) @@ -30882,16 +29850,14 @@ break; case 1379: - -/* Line 1455 of yacc.c */ -#line 10453 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10464 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.string) = (yyvsp[(2) - (2)].string); } break; case 1381: - -/* Line 1455 of yacc.c */ -#line 10459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10470 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -30907,23 +29873,20 @@ break; case 1383: - -/* Line 1455 of yacc.c */ -#line 10476 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10487 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_gorder_to_list(YYTHD, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } break; case 1384: - -/* Line 1455 of yacc.c */ -#line 10478 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10489 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_gorder_to_list(YYTHD, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } break; case 1385: - -/* Line 1455 of yacc.c */ -#line 10483 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10494 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->current_select->inc_in_sum_expr()) @@ -30935,9 +29898,8 @@ break; case 1386: - -/* Line 1455 of yacc.c */ -#line 10492 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10503 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->in_sum_expr--; (yyval.item)= (yyvsp[(3) - (3)].item); @@ -30945,100 +29907,86 @@ break; case 1387: - -/* Line 1455 of yacc.c */ -#line 10500 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->charset= &my_charset_bin; Lex->dec= 0; } break; case 1388: - -/* Line 1455 of yacc.c */ -#line 10502 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10513 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->dec= 0; } break; case 1389: - -/* Line 1455 of yacc.c */ -#line 10504 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10515 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->charset= national_charset_info; Lex->dec=0; } break; case 1390: - -/* Line 1455 of yacc.c */ -#line 10506 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10517 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } break; case 1391: - -/* Line 1455 of yacc.c */ -#line 10508 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10519 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } break; case 1392: - -/* Line 1455 of yacc.c */ -#line 10510 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10521 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } break; case 1393: - -/* Line 1455 of yacc.c */ -#line 10512 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10523 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } break; case 1394: - -/* Line 1455 of yacc.c */ -#line 10514 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10525 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)= ITEM_CAST_DATE; Lex->charset= NULL; Lex->dec= Lex->length= (char *) 0; } break; case 1395: - -/* Line 1455 of yacc.c */ -#line 10516 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10527 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)= ITEM_CAST_TIME; Lex->charset= NULL; Lex->length= (char *) 0; } break; case 1396: - -/* Line 1455 of yacc.c */ -#line 10518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10529 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)= ITEM_CAST_DATETIME; Lex->charset= NULL; Lex->length= (char *) 0; } break; case 1397: - -/* Line 1455 of yacc.c */ -#line 10520 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10531 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.cast_type)=ITEM_CAST_DECIMAL; Lex->charset= NULL; } break; case 1398: - -/* Line 1455 of yacc.c */ -#line 10524 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10535 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= NULL; } break; case 1399: - -/* Line 1455 of yacc.c */ -#line 10525 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10536 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= (yyvsp[(1) - (1)].item_list);} break; case 1400: - -/* Line 1455 of yacc.c */ -#line 10530 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10541 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= new (YYTHD->mem_root) List; if ((yyval.item_list) == NULL) @@ -31048,9 +29996,8 @@ break; case 1401: - -/* Line 1455 of yacc.c */ -#line 10537 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10548 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item)); (yyval.item_list)= (yyvsp[(1) - (3)].item_list); @@ -31058,23 +30005,20 @@ break; case 1402: - -/* Line 1455 of yacc.c */ -#line 10544 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10555 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= (yyvsp[(1) - (1)].item_list); } break; case 1403: - -/* Line 1455 of yacc.c */ -#line 10545 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10556 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= (yyvsp[(2) - (3)].item_list); } break; case 1404: - -/* Line 1455 of yacc.c */ -#line 10550 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10561 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= new (YYTHD->mem_root) List; if ((yyval.item_list) == NULL) @@ -31084,9 +30028,8 @@ break; case 1405: - -/* Line 1455 of yacc.c */ -#line 10557 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10568 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item)); (yyval.item_list)= (yyvsp[(1) - (3)].item_list); @@ -31094,37 +30037,32 @@ break; case 1406: - -/* Line 1455 of yacc.c */ -#line 10564 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10575 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= NULL; } break; case 1407: - -/* Line 1455 of yacc.c */ -#line 10565 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10576 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 1408: - -/* Line 1455 of yacc.c */ -#line 10569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10580 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= NULL; } break; case 1409: - -/* Line 1455 of yacc.c */ -#line 10570 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10581 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(2) - (2)].item); } break; case 1410: - -/* Line 1455 of yacc.c */ -#line 10575 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10586 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_list)= new List; if ((yyval.item_list) == NULL) @@ -31135,9 +30073,8 @@ break; case 1411: - -/* Line 1455 of yacc.c */ -#line 10583 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10594 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(1) - (5)].item_list)->push_back((yyvsp[(3) - (5)].item)); (yyvsp[(1) - (5)].item_list)->push_back((yyvsp[(5) - (5)].item)); @@ -31146,16 +30083,14 @@ break; case 1412: - -/* Line 1455 of yacc.c */ -#line 10593 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10604 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } break; case 1413: - -/* Line 1455 of yacc.c */ -#line 10595 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10606 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->nest_last_join(lex->thd))) @@ -31164,60 +30099,52 @@ break; case 1414: - -/* Line 1455 of yacc.c */ -#line 10603 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10614 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyval.table_list)=(yyvsp[(1) - (1)].table_list)); } break; case 1415: - -/* Line 1455 of yacc.c */ -#line 10614 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10625 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } break; case 1416: - -/* Line 1455 of yacc.c */ -#line 10615 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10626 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table_list)=(yyvsp[(3) - (4)].table_list); } break; case 1417: - -/* Line 1455 of yacc.c */ -#line 10621 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10632 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } break; case 1418: - -/* Line 1455 of yacc.c */ -#line 10623 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10634 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].table_list) && ((yyval.table_list)=(yyvsp[(3) - (3)].table_list))); } break; case 1419: - -/* Line 1455 of yacc.c */ -#line 10643 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10654 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].table_list) && ((yyval.table_list)=(yyvsp[(3) - (3)].table_list))); } break; case 1420: - -/* Line 1455 of yacc.c */ -#line 10645 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10656 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].table_list) && ((yyval.table_list)=(yyvsp[(3) - (3)].table_list))); (yyvsp[(3) - (3)].table_list)->straight=1; } break; case 1421: - -/* Line 1455 of yacc.c */ -#line 10648 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10659 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && (yyvsp[(3) - (4)].table_list)); /* Change the current name resolution context to a local context. */ @@ -31228,9 +30155,8 @@ break; case 1422: - -/* Line 1455 of yacc.c */ -#line 10656 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10667 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { add_join_on((yyvsp[(3) - (6)].table_list),(yyvsp[(6) - (6)].item)); Lex->pop_context(); @@ -31239,9 +30165,8 @@ break; case 1423: - -/* Line 1455 of yacc.c */ -#line 10663 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10674 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && (yyvsp[(3) - (4)].table_list)); /* Change the current name resolution context to a local context. */ @@ -31252,9 +30177,8 @@ break; case 1424: - -/* Line 1455 of yacc.c */ -#line 10671 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10682 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(3) - (6)].table_list)->straight=1; add_join_on((yyvsp[(3) - (6)].table_list),(yyvsp[(6) - (6)].item)); @@ -31264,25 +30188,22 @@ break; case 1425: - -/* Line 1455 of yacc.c */ -#line 10679 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10690 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && (yyvsp[(3) - (4)].table_list)); } break; case 1426: - -/* Line 1455 of yacc.c */ -#line 10683 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10694 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { add_join_natural((yyvsp[(1) - (8)].table_list),(yyvsp[(3) - (8)].table_list),(yyvsp[(7) - (8)].string_list),Select); (yyval.table_list)=(yyvsp[(3) - (8)].table_list); } break; case 1427: - -/* Line 1455 of yacc.c */ -#line 10685 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10696 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && ((yyval.table_list)=(yyvsp[(4) - (4)].table_list))); add_join_natural((yyvsp[(1) - (4)].table_list),(yyvsp[(4) - (4)].table_list),NULL,Select); @@ -31290,9 +30211,8 @@ break; case 1428: - -/* Line 1455 of yacc.c */ -#line 10693 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(5) - (6)].table_list)); /* Change the current name resolution context to a local context. */ @@ -31303,9 +30223,8 @@ break; case 1429: - -/* Line 1455 of yacc.c */ -#line 10701 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10712 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { add_join_on((yyvsp[(5) - (8)].table_list),(yyvsp[(8) - (8)].item)); Lex->pop_context(); @@ -31316,18 +30235,16 @@ break; case 1430: - -/* Line 1455 of yacc.c */ -#line 10709 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10720 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].table_list) && (yyvsp[(5) - (5)].table_list)); } break; case 1431: - -/* Line 1455 of yacc.c */ -#line 10713 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10724 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { add_join_natural((yyvsp[(1) - (10)].table_list),(yyvsp[(5) - (10)].table_list),(yyvsp[(9) - (10)].string_list),Select); (yyvsp[(5) - (10)].table_list)->outer_join|=JOIN_TYPE_LEFT; @@ -31336,9 +30253,8 @@ break; case 1432: - -/* Line 1455 of yacc.c */ -#line 10719 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10730 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(6) - (6)].table_list)); add_join_natural((yyvsp[(1) - (6)].table_list),(yyvsp[(6) - (6)].table_list),NULL,Select); @@ -31348,9 +30264,8 @@ break; case 1433: - -/* Line 1455 of yacc.c */ -#line 10729 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10740 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(5) - (6)].table_list)); /* Change the current name resolution context to a local context. */ @@ -31361,9 +30276,8 @@ break; case 1434: - -/* Line 1455 of yacc.c */ -#line 10737 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10748 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->convert_right_join())) @@ -31375,18 +30289,16 @@ break; case 1435: - -/* Line 1455 of yacc.c */ -#line 10746 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10757 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].table_list) && (yyvsp[(5) - (5)].table_list)); } break; case 1436: - -/* Line 1455 of yacc.c */ -#line 10750 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10761 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->convert_right_join())) @@ -31396,9 +30308,8 @@ break; case 1437: - -/* Line 1455 of yacc.c */ -#line 10757 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10768 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(6) - (6)].table_list)); add_join_natural((yyvsp[(6) - (6)].table_list),(yyvsp[(1) - (6)].table_list),NULL,Select); @@ -31409,46 +30320,40 @@ break; case 1438: - -/* Line 1455 of yacc.c */ -#line 10767 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10778 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1439: - -/* Line 1455 of yacc.c */ -#line 10768 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10779 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1440: - -/* Line 1455 of yacc.c */ -#line 10769 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10780 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1441: - -/* Line 1455 of yacc.c */ -#line 10777 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10788 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.string_list)= 0;} break; case 1443: - -/* Line 1455 of yacc.c */ -#line 10783 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10794 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.string_list)= (yyvsp[(3) - (5)].string_list); } break; case 1444: - -/* Line 1455 of yacc.c */ -#line 10797 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10808 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->table_join_options= 0; @@ -31456,9 +30361,8 @@ break; case 1445: - -/* Line 1455 of yacc.c */ -#line 10802 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10813 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.table_list)= Select->add_table_to_list(YYTHD, (yyvsp[(2) - (5)].table), (yyvsp[(4) - (5)].lex_str_ptr), Select->get_table_join_options(), @@ -31472,9 +30376,8 @@ break; case 1446: - -/* Line 1455 of yacc.c */ -#line 10813 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10824 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -31499,9 +30402,8 @@ break; case 1447: - -/* Line 1455 of yacc.c */ -#line 10853 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10864 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Use $2 instead of Lex->current_select as derived table will alter value of Lex->current_select. */ @@ -31554,9 +30456,8 @@ break; case 1448: - -/* Line 1455 of yacc.c */ -#line 10926 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10937 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(1) - (2)].table_list) && (yyvsp[(2) - (2)].is_not_empty)) { @@ -31567,9 +30468,8 @@ break; case 1449: - -/* Line 1455 of yacc.c */ -#line 10936 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10947 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_select_to_union_list(Lex, (bool)(yyvsp[(3) - (3)].num), FALSE)) MYSQL_YYABORT; @@ -31577,9 +30477,8 @@ break; case 1450: - -/* Line 1455 of yacc.c */ -#line 10941 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10952 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Remove from the name resolution context stack the context of the @@ -31590,9 +30489,8 @@ break; case 1451: - -/* Line 1455 of yacc.c */ -#line 10949 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10960 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(1) - (7)].table_list) != NULL) { @@ -31603,9 +30501,8 @@ break; case 1452: - -/* Line 1455 of yacc.c */ -#line 10961 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10972 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX * sel= lex->current_select; @@ -31624,9 +30521,8 @@ break; case 1453: - -/* Line 1455 of yacc.c */ -#line 10980 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10991 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -31637,18 +30533,16 @@ break; case 1454: - -/* Line 1455 of yacc.c */ -#line 10988 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 10999 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 1456: - -/* Line 1455 of yacc.c */ -#line 10997 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11008 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if ((yyvsp[(1) - (1)].select_lex)->init_nested_join(lex->thd)) @@ -31657,9 +30551,8 @@ break; case 1457: - -/* Line 1455 of yacc.c */ -#line 11003 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11014 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; /* for normal joins, $3 != NULL and end_nested_join() != NULL, @@ -31676,9 +30569,8 @@ break; case 1458: - -/* Line 1455 of yacc.c */ -#line 11019 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11030 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->derived_tables|= DERIVED_SUBQUERY; @@ -31698,25 +30590,22 @@ break; case 1459: - -/* Line 1455 of yacc.c */ -#line 11036 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11047 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 1461: - -/* Line 1455 of yacc.c */ -#line 11043 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11054 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.select_lex)= Select; } break; case 1462: - -/* Line 1455 of yacc.c */ -#line 11048 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11059 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -31742,127 +30631,110 @@ break; case 1463: - -/* Line 1455 of yacc.c */ -#line 11073 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11084 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1464: - -/* Line 1455 of yacc.c */ -#line 11074 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11085 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1465: - -/* Line 1455 of yacc.c */ -#line 11079 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11090 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= old_mode ? INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL; } break; case 1466: - -/* Line 1455 of yacc.c */ -#line 11082 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11093 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= INDEX_HINT_MASK_JOIN; } break; case 1467: - -/* Line 1455 of yacc.c */ -#line 11083 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11094 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= INDEX_HINT_MASK_ORDER; } break; case 1468: - -/* Line 1455 of yacc.c */ -#line 11084 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11095 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= INDEX_HINT_MASK_GROUP; } break; case 1469: - -/* Line 1455 of yacc.c */ -#line 11088 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11099 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.index_hint)= INDEX_HINT_FORCE; } break; case 1470: - -/* Line 1455 of yacc.c */ -#line 11089 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11100 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.index_hint)= INDEX_HINT_IGNORE; } break; case 1471: - -/* Line 1455 of yacc.c */ -#line 11094 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11105 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_index_hint_type((yyvsp[(1) - (3)].index_hint), (yyvsp[(3) - (3)].num)); } break; case 1473: - -/* Line 1455 of yacc.c */ -#line 11099 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11110 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_index_hint_type(INDEX_HINT_USE, (yyvsp[(3) - (3)].num)); } break; case 1478: - -/* Line 1455 of yacc.c */ -#line 11112 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11123 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->alloc_index_hints(YYTHD); } break; case 1480: - -/* Line 1455 of yacc.c */ -#line 11116 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11127 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->clear_index_hints(); } break; case 1482: - -/* Line 1455 of yacc.c */ -#line 11121 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11132 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->add_index_hint(YYTHD, NULL, 0); } break; case 1483: - -/* Line 1455 of yacc.c */ -#line 11122 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11133 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1484: - -/* Line 1455 of yacc.c */ -#line 11127 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11138 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->add_index_hint(YYTHD, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); } break; case 1485: - -/* Line 1455 of yacc.c */ -#line 11129 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11140 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); } break; case 1488: - -/* Line 1455 of yacc.c */ -#line 11139 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.string_list)= new List)) MYSQL_YYABORT; @@ -31876,9 +30748,8 @@ break; case 1489: - -/* Line 1455 of yacc.c */ -#line 11150 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11161 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { String *s= new (YYTHD->mem_root) String((const char *) (yyvsp[(3) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).length, @@ -31891,191 +30762,164 @@ break; case 1490: - -/* Line 1455 of yacc.c */ -#line 11162 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11173 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1491: - -/* Line 1455 of yacc.c */ -#line 11163 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11174 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_DAY_HOUR; } break; case 1492: - -/* Line 1455 of yacc.c */ -#line 11164 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_DAY_MICROSECOND; } break; case 1493: - -/* Line 1455 of yacc.c */ -#line 11165 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11176 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_DAY_MINUTE; } break; case 1494: - -/* Line 1455 of yacc.c */ -#line 11166 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11177 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_DAY_SECOND; } break; case 1495: - -/* Line 1455 of yacc.c */ -#line 11167 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11178 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_HOUR_MICROSECOND; } break; case 1496: - -/* Line 1455 of yacc.c */ -#line 11168 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11179 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_HOUR_MINUTE; } break; case 1497: - -/* Line 1455 of yacc.c */ -#line 11169 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11180 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_HOUR_SECOND; } break; case 1498: - -/* Line 1455 of yacc.c */ -#line 11170 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11181 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_MINUTE_MICROSECOND; } break; case 1499: - -/* Line 1455 of yacc.c */ -#line 11171 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11182 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_MINUTE_SECOND; } break; case 1500: - -/* Line 1455 of yacc.c */ -#line 11172 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11183 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_SECOND_MICROSECOND; } break; case 1501: - -/* Line 1455 of yacc.c */ -#line 11173 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11184 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval)=INTERVAL_YEAR_MONTH; } break; case 1502: - -/* Line 1455 of yacc.c */ -#line 11177 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11188 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_DAY; } break; case 1503: - -/* Line 1455 of yacc.c */ -#line 11178 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_WEEK; } break; case 1504: - -/* Line 1455 of yacc.c */ -#line 11179 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11190 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_HOUR; } break; case 1505: - -/* Line 1455 of yacc.c */ -#line 11180 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11191 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_MINUTE; } break; case 1506: - -/* Line 1455 of yacc.c */ -#line 11181 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11192 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_MONTH; } break; case 1507: - -/* Line 1455 of yacc.c */ -#line 11182 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11193 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_QUARTER; } break; case 1508: - -/* Line 1455 of yacc.c */ -#line 11183 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11194 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_SECOND; } break; case 1509: - -/* Line 1455 of yacc.c */ -#line 11184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_MICROSECOND; } break; case 1510: - -/* Line 1455 of yacc.c */ -#line 11185 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11196 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.interval_time_st)=INTERVAL_YEAR; } break; case 1511: - -/* Line 1455 of yacc.c */ -#line 11189 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11200 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.date_time_type)= MYSQL_TIMESTAMP_DATE; } break; case 1512: - -/* Line 1455 of yacc.c */ -#line 11190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11201 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.date_time_type)= MYSQL_TIMESTAMP_TIME; } break; case 1513: - -/* Line 1455 of yacc.c */ -#line 11191 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11202 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.date_time_type)= MYSQL_TIMESTAMP_DATETIME; } break; case 1514: - -/* Line 1455 of yacc.c */ -#line 11192 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11203 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.date_time_type)= MYSQL_TIMESTAMP_DATETIME; } break; case 1518: - -/* Line 1455 of yacc.c */ -#line 11202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11213 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str_ptr)=0; } break; case 1519: - -/* Line 1455 of yacc.c */ -#line 11204 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11215 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str_ptr)= (LEX_STRING*) sql_memdup(&(yyvsp[(2) - (2)].lex_str),sizeof(LEX_STRING)); if ((yyval.lex_str_ptr) == NULL) @@ -32084,25 +30928,22 @@ break; case 1522: - -/* Line 1455 of yacc.c */ -#line 11217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->where= 0; } break; case 1523: - -/* Line 1455 of yacc.c */ -#line 11219 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11230 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= IN_WHERE; } break; case 1524: - -/* Line 1455 of yacc.c */ -#line 11223 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11234 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *select= Select; select->where= (yyvsp[(3) - (3)].item); @@ -32113,18 +30954,16 @@ break; case 1526: - -/* Line 1455 of yacc.c */ -#line 11235 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11246 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= IN_HAVING; } break; case 1527: - -/* Line 1455 of yacc.c */ -#line 11239 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11250 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->having= (yyvsp[(3) - (3)].item); @@ -32135,9 +30974,8 @@ break; case 1528: - -/* Line 1455 of yacc.c */ -#line 11250 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11261 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->escape_used= TRUE; (yyval.item)= (yyvsp[(2) - (2)].item); @@ -32145,9 +30983,8 @@ break; case 1529: - -/* Line 1455 of yacc.c */ -#line 11255 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11266 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; Lex->escape_used= FALSE; @@ -32160,30 +30997,26 @@ break; case 1532: - -/* Line 1455 of yacc.c */ -#line 11277 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11288 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_group_to_list(YYTHD, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } break; case 1533: - -/* Line 1455 of yacc.c */ -#line 11279 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11290 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_group_to_list(YYTHD, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } break; case 1534: - -/* Line 1455 of yacc.c */ -#line 11283 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11294 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1535: - -/* Line 1455 of yacc.c */ -#line 11285 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11296 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* 'WITH CUBE' is reserved in the MySQL syntax, but not implemented, @@ -32206,9 +31039,8 @@ break; case 1536: - -/* Line 1455 of yacc.c */ -#line 11305 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11316 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* 'WITH ROLLUP' is needed for backward compatibility, @@ -32235,9 +31067,8 @@ break; case 1540: - -/* Line 1455 of yacc.c */ -#line 11345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11356 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; bool ascending= ((yyvsp[(2) - (2)].num) == 1) ? true : false; @@ -32247,9 +31078,8 @@ break; case 1543: - -/* Line 1455 of yacc.c */ -#line 11364 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11375 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; SELECT_LEX *sel= lex->current_select; @@ -32283,44 +31113,38 @@ break; case 1545: - -/* Line 1455 of yacc.c */ -#line 11399 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11410 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_order_to_list(YYTHD, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } break; case 1546: - -/* Line 1455 of yacc.c */ -#line 11401 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11412 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_order_to_list(YYTHD, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } break; case 1547: - -/* Line 1455 of yacc.c */ -#line 11405 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11416 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) = 1; } break; case 1548: - -/* Line 1455 of yacc.c */ -#line 11406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11417 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) =1; } break; case 1549: - -/* Line 1455 of yacc.c */ -#line 11407 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11418 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num) =0; } break; case 1550: - -/* Line 1455 of yacc.c */ -#line 11412 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11423 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -32330,39 +31154,34 @@ break; case 1551: - -/* Line 1455 of yacc.c */ -#line 11418 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11429 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1552: - -/* Line 1455 of yacc.c */ -#line 11422 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11433 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1553: - -/* Line 1455 of yacc.c */ -#line 11423 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11434 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1554: - -/* Line 1455 of yacc.c */ -#line 11428 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11439 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_LIMIT); } break; case 1555: - -/* Line 1455 of yacc.c */ -#line 11435 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11446 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->select_limit= (yyvsp[(1) - (1)].item); @@ -32372,9 +31191,8 @@ break; case 1556: - -/* Line 1455 of yacc.c */ -#line 11442 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11453 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->select_limit= (yyvsp[(3) - (3)].item); @@ -32384,9 +31202,8 @@ break; case 1557: - -/* Line 1455 of yacc.c */ -#line 11449 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11460 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->select_limit= (yyvsp[(1) - (3)].item); @@ -32396,9 +31213,8 @@ break; case 1558: - -/* Line 1455 of yacc.c */ -#line 11459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11470 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -32428,18 +31244,16 @@ break; case 1559: - -/* Line 1455 of yacc.c */ -#line 11486 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11497 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { ((Item_param *) (yyvsp[(1) - (1)].item))->limit_clause_param= TRUE; } break; case 1560: - -/* Line 1455 of yacc.c */ -#line 11490 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11501 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_uint((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item) == NULL) @@ -32448,9 +31262,8 @@ break; case 1561: - -/* Line 1455 of yacc.c */ -#line 11496 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11507 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_uint((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item) == NULL) @@ -32459,9 +31272,8 @@ break; case 1562: - -/* Line 1455 of yacc.c */ -#line 11502 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11513 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_uint((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item) == NULL) @@ -32470,9 +31282,8 @@ break; case 1563: - -/* Line 1455 of yacc.c */ -#line 11511 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11522 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->current_select->select_limit= 0; @@ -32480,9 +31291,8 @@ break; case 1564: - -/* Line 1455 of yacc.c */ -#line 11516 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11527 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; sel->select_limit= (yyvsp[(2) - (2)].item); @@ -32492,156 +31302,134 @@ break; case 1565: - -/* Line 1455 of yacc.c */ -#line 11525 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11536 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1566: - -/* Line 1455 of yacc.c */ -#line 11526 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11537 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (ulong) strtol((yyvsp[(1) - (1)].lex_str).str, (char**) 0, 16); } break; case 1567: - -/* Line 1455 of yacc.c */ -#line 11527 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11538 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1568: - -/* Line 1455 of yacc.c */ -#line 11528 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11539 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1569: - -/* Line 1455 of yacc.c */ -#line 11529 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11540 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1570: - -/* Line 1455 of yacc.c */ -#line 11530 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11541 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1571: - -/* Line 1455 of yacc.c */ -#line 11534 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11545 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1572: - -/* Line 1455 of yacc.c */ -#line 11535 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11546 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ulong_num)= (ulong) strtol((yyvsp[(1) - (1)].lex_str).str, (char**) 0, 16); } break; case 1573: - -/* Line 1455 of yacc.c */ -#line 11536 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11547 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1574: - -/* Line 1455 of yacc.c */ -#line 11537 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11548 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1575: - -/* Line 1455 of yacc.c */ -#line 11538 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11549 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT; } break; case 1576: - -/* Line 1455 of yacc.c */ -#line 11542 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11553 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1577: - -/* Line 1455 of yacc.c */ -#line 11543 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11554 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1578: - -/* Line 1455 of yacc.c */ -#line 11544 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11555 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1579: - -/* Line 1455 of yacc.c */ -#line 11545 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11556 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1580: - -/* Line 1455 of yacc.c */ -#line 11546 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1581: - -/* Line 1455 of yacc.c */ -#line 11550 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11561 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1582: - -/* Line 1455 of yacc.c */ -#line 11551 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11562 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1583: - -/* Line 1455 of yacc.c */ -#line 11552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11563 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } break; case 1584: - -/* Line 1455 of yacc.c */ -#line 11553 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11564 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT; } break; case 1585: - -/* Line 1455 of yacc.c */ -#line 11558 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11569 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { my_parse_error(ER(ER_ONLY_INTEGERS_ALLOWED)); } break; case 1589: - -/* Line 1455 of yacc.c */ -#line 11569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11580 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -32674,25 +31462,22 @@ break; case 1591: - -/* Line 1455 of yacc.c */ -#line 11602 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11613 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1592: - -/* Line 1455 of yacc.c */ -#line 11604 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11615 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->proc_analyse->max_tree_elements= (yyvsp[(1) - (1)].ulonglong_number); } break; case 1593: - -/* Line 1455 of yacc.c */ -#line 11608 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11619 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->proc_analyse->max_tree_elements= (yyvsp[(1) - (3)].ulonglong_number); Lex->proc_analyse->max_treemem= (yyvsp[(3) - (3)].ulonglong_number); @@ -32700,9 +31485,8 @@ break; case 1594: - -/* Line 1455 of yacc.c */ -#line 11616 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11627 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); @@ -32715,9 +31499,8 @@ break; case 1595: - -/* Line 1455 of yacc.c */ -#line 11628 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11639 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!lex->describe && (!(lex->result= new select_dumpvar()))) @@ -32726,23 +31509,20 @@ break; case 1596: - -/* Line 1455 of yacc.c */ -#line 11634 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11645 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1598: - -/* Line 1455 of yacc.c */ -#line 11639 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11650 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1599: - -/* Line 1455 of yacc.c */ -#line 11644 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11655 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->result) @@ -32764,9 +31544,8 @@ break; case 1600: - -/* Line 1455 of yacc.c */ -#line 11663 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11674 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; #ifndef DBUG_OFF @@ -32805,9 +31584,8 @@ break; case 1601: - -/* Line 1455 of yacc.c */ -#line 11702 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11713 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (! Lex->parsing_options.allows_select_into) { @@ -32818,9 +31596,8 @@ break; case 1603: - -/* Line 1455 of yacc.c */ -#line 11714 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11725 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->uncacheable(UNCACHEABLE_SIDEEFFECT); @@ -32831,16 +31608,14 @@ break; case 1604: - -/* Line 1455 of yacc.c */ -#line 11722 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11733 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->exchange->cs= (yyvsp[(4) - (4)].charset); } break; case 1606: - -/* Line 1455 of yacc.c */ -#line 11725 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11736 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!lex->describe) @@ -32855,18 +31630,16 @@ break; case 1607: - -/* Line 1455 of yacc.c */ -#line 11737 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11748 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); } break; case 1608: - -/* Line 1455 of yacc.c */ -#line 11748 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11759 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_DO; @@ -32875,18 +31648,16 @@ break; case 1609: - -/* Line 1455 of yacc.c */ -#line 11754 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11765 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->insert_list= (yyvsp[(3) - (3)].item_list); } break; case 1610: - -/* Line 1455 of yacc.c */ -#line 11765 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11776 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_DROP_TABLE; @@ -32898,23 +31669,20 @@ break; case 1611: - -/* Line 1455 of yacc.c */ -#line 11774 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11785 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1612: - -/* Line 1455 of yacc.c */ -#line 11775 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11786 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1613: - -/* Line 1455 of yacc.c */ -#line 11776 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11787 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; Alter_drop *ad= new Alter_drop(Alter_drop::KEY, (yyvsp[(3) - (6)].lex_str).str); @@ -32933,16 +31701,14 @@ break; case 1614: - -/* Line 1455 of yacc.c */ -#line 11791 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11802 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1615: - -/* Line 1455 of yacc.c */ -#line 11793 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11804 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_DROP_DB; @@ -32952,9 +31718,8 @@ break; case 1616: - -/* Line 1455 of yacc.c */ -#line 11800 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11811 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -32978,9 +31743,8 @@ break; case 1617: - -/* Line 1455 of yacc.c */ -#line 11821 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11832 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -33004,9 +31768,8 @@ break; case 1618: - -/* Line 1455 of yacc.c */ -#line 11842 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11853 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->sphead) @@ -33021,18 +31784,16 @@ break; case 1619: - -/* Line 1455 of yacc.c */ -#line 11854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11865 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_DROP_USER; } break; case 1620: - -/* Line 1455 of yacc.c */ -#line 11858 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11869 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_DROP_VIEW; @@ -33043,16 +31804,14 @@ break; case 1621: - -/* Line 1455 of yacc.c */ -#line 11866 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11877 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1622: - -/* Line 1455 of yacc.c */ -#line 11868 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11879 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->drop_if_exists= (yyvsp[(3) - (4)].num); Lex->spname= (yyvsp[(4) - (4)].spname); @@ -33061,9 +31820,8 @@ break; case 1623: - -/* Line 1455 of yacc.c */ -#line 11874 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11885 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_DROP_TRIGGER; @@ -33073,9 +31831,8 @@ break; case 1624: - -/* Line 1455 of yacc.c */ -#line 11881 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11892 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= DROP_TABLESPACE; @@ -33083,9 +31840,8 @@ break; case 1625: - -/* Line 1455 of yacc.c */ -#line 11886 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11897 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= DROP_LOGFILE_GROUP; @@ -33093,9 +31849,8 @@ break; case 1626: - -/* Line 1455 of yacc.c */ -#line 11891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_DROP_SERVER; Lex->drop_if_exists= (yyvsp[(3) - (4)].num); @@ -33105,9 +31860,8 @@ break; case 1629: - -/* Line 1455 of yacc.c */ -#line 11906 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11917 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (1)].table), NULL, TL_OPTION_UPDATING, @@ -33118,9 +31872,8 @@ break; case 1630: - -/* Line 1455 of yacc.c */ -#line 11917 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11928 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (2)].table), NULL, TL_OPTION_UPDATING, @@ -33133,9 +31886,8 @@ break; case 1633: - -/* Line 1455 of yacc.c */ -#line 11935 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11946 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(1) - (1)].table), NULL, TL_OPTION_UPDATING | TL_OPTION_ALIAS, @@ -33146,37 +31898,32 @@ break; case 1634: - -/* Line 1455 of yacc.c */ -#line 11945 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11956 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1635: - -/* Line 1455 of yacc.c */ -#line 11946 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11957 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 1636: - -/* Line 1455 of yacc.c */ -#line 11950 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11961 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 1637: - -/* Line 1455 of yacc.c */ -#line 11951 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11962 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 1645: - -/* Line 1455 of yacc.c */ -#line 11974 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11985 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_INSERT; @@ -33186,9 +31933,8 @@ break; case 1646: - -/* Line 1455 of yacc.c */ -#line 11982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11993 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_lock_for_tables((yyvsp[(3) - (5)].lock_type)); Lex->current_select= &Lex->select_lex; @@ -33196,16 +31942,14 @@ break; case 1647: - -/* Line 1455 of yacc.c */ -#line 11987 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 11998 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1648: - -/* Line 1455 of yacc.c */ -#line 11992 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12003 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_REPLACE; @@ -33215,9 +31959,8 @@ break; case 1649: - -/* Line 1455 of yacc.c */ -#line 11999 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12010 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_lock_for_tables((yyvsp[(3) - (4)].lock_type)); Lex->current_select= &Lex->select_lex; @@ -33225,16 +31968,14 @@ break; case 1650: - -/* Line 1455 of yacc.c */ -#line 12004 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12015 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1651: - -/* Line 1455 of yacc.c */ -#line 12009 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12020 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_QUERY_CACHE /* @@ -33250,16 +31991,14 @@ break; case 1652: - -/* Line 1455 of yacc.c */ -#line 12021 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12032 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } break; case 1653: - -/* Line 1455 of yacc.c */ -#line 12023 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12034 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - YYTHD->query()); @@ -33275,23 +32014,20 @@ break; case 1654: - -/* Line 1455 of yacc.c */ -#line 12035 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12046 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE; } break; case 1655: - -/* Line 1455 of yacc.c */ -#line 12039 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12050 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= (yyvsp[(1) - (1)].lock_type); } break; case 1656: - -/* Line 1455 of yacc.c */ -#line 12041 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12052 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - YYTHD->query()); @@ -33307,23 +32043,20 @@ break; case 1657: - -/* Line 1455 of yacc.c */ -#line 12056 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12067 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1658: - -/* Line 1455 of yacc.c */ -#line 12057 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12068 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1659: - -/* Line 1455 of yacc.c */ -#line 12062 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12073 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->field_list.empty(); @@ -33333,30 +32066,26 @@ break; case 1660: - -/* Line 1455 of yacc.c */ -#line 12070 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12081 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1661: - -/* Line 1455 of yacc.c */ -#line 12071 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12082 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1662: - -/* Line 1455 of yacc.c */ -#line 12072 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12083 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1663: - -/* Line 1455 of yacc.c */ -#line 12074 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12085 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!(lex->insert_list = new List_item) || @@ -33366,65 +32095,56 @@ break; case 1665: - -/* Line 1455 of yacc.c */ -#line 12084 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12095 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->field_list.push_back((yyvsp[(3) - (3)].item)); } break; case 1666: - -/* Line 1455 of yacc.c */ -#line 12085 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12096 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->field_list.push_back((yyvsp[(1) - (1)].item)); } break; case 1667: - -/* Line 1455 of yacc.c */ -#line 12089 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12100 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1668: - -/* Line 1455 of yacc.c */ -#line 12090 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12101 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1669: - -/* Line 1455 of yacc.c */ -#line 12092 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12103 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_braces(0);} break; case 1670: - -/* Line 1455 of yacc.c */ -#line 12093 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12104 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1671: - -/* Line 1455 of yacc.c */ -#line 12095 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12106 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->set_braces(1);} break; case 1672: - -/* Line 1455 of yacc.c */ -#line 12096 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12107 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1677: - -/* Line 1455 of yacc.c */ -#line 12111 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12122 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->field_list.push_back((yyvsp[(1) - (3)].item)) || @@ -33434,37 +32154,32 @@ break; case 1678: - -/* Line 1455 of yacc.c */ -#line 12120 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12131 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1679: - -/* Line 1455 of yacc.c */ -#line 12121 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12132 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1680: - -/* Line 1455 of yacc.c */ -#line 12125 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12136 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1681: - -/* Line 1455 of yacc.c */ -#line 12126 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12137 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1682: - -/* Line 1455 of yacc.c */ -#line 12131 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12142 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!(Lex->insert_list = new List_item)) MYSQL_YYABORT; @@ -33472,9 +32187,8 @@ break; case 1683: - -/* Line 1455 of yacc.c */ -#line 12136 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12147 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->many_values.push_back(lex->insert_list)) @@ -33483,16 +32197,14 @@ break; case 1684: - -/* Line 1455 of yacc.c */ -#line 12144 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12155 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1686: - -/* Line 1455 of yacc.c */ -#line 12150 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12161 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->insert_list->push_back((yyvsp[(3) - (3)].item))) MYSQL_YYABORT; @@ -33500,9 +32212,8 @@ break; case 1687: - -/* Line 1455 of yacc.c */ -#line 12155 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12166 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->insert_list->push_back((yyvsp[(1) - (1)].item))) MYSQL_YYABORT; @@ -33510,16 +32221,14 @@ break; case 1688: - -/* Line 1455 of yacc.c */ -#line 12162 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12173 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item);} break; case 1689: - -/* Line 1455 of yacc.c */ -#line 12164 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_default_value(Lex->current_context()); if ((yyval.item) == NULL) @@ -33528,16 +32237,14 @@ break; case 1691: - -/* Line 1455 of yacc.c */ -#line 12173 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12184 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->duplicates= DUP_UPDATE; } break; case 1693: - -/* Line 1455 of yacc.c */ -#line 12181 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12192 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; mysql_init_select(lex); @@ -33547,9 +32254,8 @@ break; case 1694: - -/* Line 1455 of yacc.c */ -#line 12189 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12200 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->select_lex.table_list.elements > 1) @@ -33571,16 +32277,14 @@ break; case 1695: - -/* Line 1455 of yacc.c */ -#line 12207 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12218 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1698: - -/* Line 1455 of yacc.c */ -#line 12217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_item_to_list(YYTHD, (yyvsp[(1) - (3)].item)) || add_value_to_list(YYTHD, (yyvsp[(3) - (3)].item))) MYSQL_YYABORT; @@ -33588,9 +32292,8 @@ break; case 1701: - -/* Line 1455 of yacc.c */ -#line 12230 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12241 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->update_list.push_back((yyvsp[(1) - (3)].item)) || @@ -33600,23 +32303,20 @@ break; case 1702: - -/* Line 1455 of yacc.c */ -#line 12239 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12250 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE_DEFAULT; } break; case 1703: - -/* Line 1455 of yacc.c */ -#line 12240 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12251 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } break; case 1704: - -/* Line 1455 of yacc.c */ -#line 12247 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12258 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_DELETE; @@ -33630,9 +32330,8 @@ break; case 1706: - -/* Line 1455 of yacc.c */ -#line 12262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12273 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!Select->add_table_to_list(YYTHD, (yyvsp[(2) - (3)].table), NULL, TL_OPTION_UPDATING, YYPS->m_lock_type, @@ -33646,16 +32345,14 @@ break; case 1707: - -/* Line 1455 of yacc.c */ -#line 12273 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12284 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1708: - -/* Line 1455 of yacc.c */ -#line 12275 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12286 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { mysql_init_multi_delete(Lex); YYPS->m_lock_type= TL_READ_DEFAULT; @@ -33664,9 +32361,8 @@ break; case 1709: - -/* Line 1455 of yacc.c */ -#line 12281 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12292 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; @@ -33674,9 +32370,8 @@ break; case 1710: - -/* Line 1455 of yacc.c */ -#line 12286 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12297 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { mysql_init_multi_delete(Lex); YYPS->m_lock_type= TL_READ_DEFAULT; @@ -33685,9 +32380,8 @@ break; case 1711: - -/* Line 1455 of yacc.c */ -#line 12292 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12303 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; @@ -33695,9 +32389,8 @@ break; case 1714: - -/* Line 1455 of yacc.c */ -#line 12305 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12316 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Table_ident *ti= new Table_ident((yyvsp[(1) - (2)].lex_str)); if (ti == NULL) @@ -33713,9 +32406,8 @@ break; case 1715: - -/* Line 1455 of yacc.c */ -#line 12318 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12329 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Table_ident *ti= new Table_ident(YYTHD, (yyvsp[(1) - (4)].lex_str), (yyvsp[(3) - (4)].lex_str), 0); if (ti == NULL) @@ -33731,58 +32423,50 @@ break; case 1716: - -/* Line 1455 of yacc.c */ -#line 12333 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1717: - -/* Line 1455 of yacc.c */ -#line 12334 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12345 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1718: - -/* Line 1455 of yacc.c */ -#line 12338 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1719: - -/* Line 1455 of yacc.c */ -#line 12339 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12350 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1720: - -/* Line 1455 of yacc.c */ -#line 12343 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12354 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= OPTION_QUICK; } break; case 1721: - -/* Line 1455 of yacc.c */ -#line 12344 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12355 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { YYPS->m_lock_type= TL_WRITE_LOW_PRIORITY; } break; case 1722: - -/* Line 1455 of yacc.c */ -#line 12345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12356 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ignore= 1; } break; case 1723: - -/* Line 1455 of yacc.c */ -#line 12350 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12361 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX* lex= Lex; lex->sql_command= SQLCOM_TRUNCATE; @@ -33796,9 +32480,8 @@ break; case 1724: - -/* Line 1455 of yacc.c */ -#line 12361 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12372 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX* lex= thd->lex; @@ -33810,108 +32493,96 @@ break; case 1731: - -/* Line 1455 of yacc.c */ -#line 12386 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_CPU; } break; case 1732: - -/* Line 1455 of yacc.c */ -#line 12390 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12401 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_MEMORY; } break; case 1733: - -/* Line 1455 of yacc.c */ -#line 12394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12405 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_BLOCK_IO; } break; case 1734: - -/* Line 1455 of yacc.c */ -#line 12398 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_CONTEXT; } break; case 1735: - -/* Line 1455 of yacc.c */ -#line 12402 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12413 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_PAGE_FAULTS; } break; case 1736: - -/* Line 1455 of yacc.c */ -#line 12406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12417 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_IPC; } break; case 1737: - -/* Line 1455 of yacc.c */ -#line 12410 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12421 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_SWAPS; } break; case 1738: - -/* Line 1455 of yacc.c */ -#line 12414 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12425 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_SOURCE; } break; case 1739: - -/* Line 1455 of yacc.c */ -#line 12418 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12429 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_options|= PROFILE_ALL; } break; case 1740: - -/* Line 1455 of yacc.c */ -#line 12425 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12436 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_query_id= 0; } break; case 1741: - -/* Line 1455 of yacc.c */ -#line 12429 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12440 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->profile_query_id= atoi((yyvsp[(3) - (3)].lex_str).str); } break; case 1742: - -/* Line 1455 of yacc.c */ -#line 12438 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12449 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->wild=0; @@ -33922,18 +32593,16 @@ break; case 1743: - -/* Line 1455 of yacc.c */ -#line 12446 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12457 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 1744: - -/* Line 1455 of yacc.c */ -#line 12453 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12464 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_DATABASES; @@ -33943,9 +32612,8 @@ break; case 1745: - -/* Line 1455 of yacc.c */ -#line 12460 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12471 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TABLES; @@ -33956,9 +32624,8 @@ break; case 1746: - -/* Line 1455 of yacc.c */ -#line 12468 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12479 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TRIGGERS; @@ -33969,9 +32636,8 @@ break; case 1747: - -/* Line 1455 of yacc.c */ -#line 12476 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12487 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_EVENTS; @@ -33982,9 +32648,8 @@ break; case 1748: - -/* Line 1455 of yacc.c */ -#line 12484 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12495 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TABLE_STATUS; @@ -33995,9 +32660,8 @@ break; case 1749: - -/* Line 1455 of yacc.c */ -#line 12492 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12503 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_OPEN_TABLES; @@ -34008,9 +32672,8 @@ break; case 1750: - -/* Line 1455 of yacc.c */ -#line 12500 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_PLUGINS; @@ -34020,23 +32683,20 @@ break; case 1751: - -/* Line 1455 of yacc.c */ -#line 12507 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12518 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.db_type= (yyvsp[(2) - (3)].db_type); } break; case 1752: - -/* Line 1455 of yacc.c */ -#line 12509 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12520 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_info.db_type= NULL; } break; case 1753: - -/* Line 1455 of yacc.c */ -#line 12511 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12522 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_FIELDS; @@ -34048,27 +32708,24 @@ break; case 1754: - -/* Line 1455 of yacc.c */ -#line 12520 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12531 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_BINLOGS; } break; case 1755: - -/* Line 1455 of yacc.c */ -#line 12524 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12535 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_SLAVE_HOSTS; } break; case 1756: - -/* Line 1455 of yacc.c */ -#line 12528 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12539 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS; @@ -34076,9 +32733,8 @@ break; case 1758: - -/* Line 1455 of yacc.c */ -#line 12533 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12544 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_RELAYLOG_EVENTS; @@ -34086,9 +32742,8 @@ break; case 1760: - -/* Line 1455 of yacc.c */ -#line 12538 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12549 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_KEYS; @@ -34100,9 +32755,8 @@ break; case 1761: - -/* Line 1455 of yacc.c */ -#line 12547 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12558 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; @@ -34112,9 +32766,8 @@ break; case 1762: - -/* Line 1455 of yacc.c */ -#line 12554 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12565 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_PRIVILEGES; @@ -34122,37 +32775,32 @@ break; case 1763: - -/* Line 1455 of yacc.c */ -#line 12559 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12570 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (void) create_select_for_variable("warning_count"); } break; case 1764: - -/* Line 1455 of yacc.c */ -#line 12561 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12572 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (void) create_select_for_variable("error_count"); } break; case 1765: - -/* Line 1455 of yacc.c */ -#line 12563 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12574 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_WARNS;} break; case 1766: - -/* Line 1455 of yacc.c */ -#line 12565 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12576 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_ERRORS;} break; case 1767: - -/* Line 1455 of yacc.c */ -#line 12567 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12578 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ER_WARN_DEPRECATED_SYNTAX, @@ -34163,9 +32811,8 @@ break; case 1768: - -/* Line 1455 of yacc.c */ -#line 12575 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12586 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ER_WARN_DEPRECATED_SYNTAX, @@ -34179,9 +32826,8 @@ break; case 1769: - -/* Line 1455 of yacc.c */ -#line 12586 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12597 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS; @@ -34192,16 +32838,14 @@ break; case 1770: - -/* Line 1455 of yacc.c */ -#line 12594 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12605 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} break; case 1771: - -/* Line 1455 of yacc.c */ -#line 12596 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12607 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_VARIABLES; @@ -34212,9 +32856,8 @@ break; case 1772: - -/* Line 1455 of yacc.c */ -#line 12604 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12615 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_CHARSETS; @@ -34224,9 +32867,8 @@ break; case 1773: - -/* Line 1455 of yacc.c */ -#line 12611 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12622 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_COLLATIONS; @@ -34236,9 +32878,8 @@ break; case 1774: - -/* Line 1455 of yacc.c */ -#line 12618 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12629 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_GRANTS; @@ -34251,9 +32892,8 @@ break; case 1775: - -/* Line 1455 of yacc.c */ -#line 12628 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12639 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_GRANTS; @@ -34263,9 +32903,8 @@ break; case 1776: - -/* Line 1455 of yacc.c */ -#line 12635 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12646 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command=SQLCOM_SHOW_CREATE_DB; Lex->create_info.options=(yyvsp[(3) - (4)].num); @@ -34274,9 +32913,8 @@ break; case 1777: - -/* Line 1455 of yacc.c */ -#line 12641 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12652 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE; @@ -34288,9 +32926,8 @@ break; case 1778: - -/* Line 1455 of yacc.c */ -#line 12650 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12661 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE; @@ -34301,27 +32938,24 @@ break; case 1779: - -/* Line 1455 of yacc.c */ -#line 12658 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12669 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_MASTER_STAT; } break; case 1780: - -/* Line 1455 of yacc.c */ -#line 12662 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12673 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; } break; case 1781: - -/* Line 1455 of yacc.c */ -#line 12666 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12677 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -34331,9 +32965,8 @@ break; case 1782: - -/* Line 1455 of yacc.c */ -#line 12673 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12684 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -34343,9 +32976,8 @@ break; case 1783: - -/* Line 1455 of yacc.c */ -#line 12680 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12691 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_CREATE_TRIGGER; @@ -34354,9 +32986,8 @@ break; case 1784: - -/* Line 1455 of yacc.c */ -#line 12686 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12697 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_PROC; @@ -34366,9 +32997,8 @@ break; case 1785: - -/* Line 1455 of yacc.c */ -#line 12693 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_FUNC; @@ -34378,9 +33008,8 @@ break; case 1786: - -/* Line 1455 of yacc.c */ -#line 12700 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12711 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_PROC_CODE; Lex->spname= (yyvsp[(3) - (3)].spname); @@ -34388,9 +33017,8 @@ break; case 1787: - -/* Line 1455 of yacc.c */ -#line 12705 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12716 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_FUNC_CODE; Lex->spname= (yyvsp[(3) - (3)].spname); @@ -34398,9 +33026,8 @@ break; case 1788: - -/* Line 1455 of yacc.c */ -#line 12710 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12721 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->spname= (yyvsp[(3) - (3)].spname); Lex->sql_command = SQLCOM_SHOW_CREATE_EVENT; @@ -34408,86 +33035,74 @@ break; case 1789: - -/* Line 1455 of yacc.c */ -#line 12718 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12729 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_ENGINE_STATUS; } break; case 1790: - -/* Line 1455 of yacc.c */ -#line 12720 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12731 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_ENGINE_MUTEX; } break; case 1791: - -/* Line 1455 of yacc.c */ -#line 12722 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12733 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_SHOW_ENGINE_LOGS; } break; case 1796: - -/* Line 1455 of yacc.c */ -#line 12736 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12747 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.simple_string)= 0; } break; case 1797: - -/* Line 1455 of yacc.c */ -#line 12737 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12748 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.simple_string)= (yyvsp[(2) - (2)].lex_str).str; } break; case 1798: - -/* Line 1455 of yacc.c */ -#line 12741 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12752 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->verbose=0; } break; case 1799: - -/* Line 1455 of yacc.c */ -#line 12742 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12753 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->verbose=1; } break; case 1802: - -/* Line 1455 of yacc.c */ -#line 12751 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12762 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.log_file_name = 0; } break; case 1803: - -/* Line 1455 of yacc.c */ -#line 12752 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12763 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.log_file_name = (yyvsp[(2) - (2)].lex_str).str; } break; case 1804: - -/* Line 1455 of yacc.c */ -#line 12756 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12767 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.pos = 4; /* skip magic number */ } break; case 1805: - -/* Line 1455 of yacc.c */ -#line 12757 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12768 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->mi.pos = (yyvsp[(2) - (2)].ulonglong_number); } break; case 1807: - -/* Line 1455 of yacc.c */ -#line 12763 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12774 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->wild= new (YYTHD->mem_root) String((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, system_charset_info); @@ -34497,9 +33112,8 @@ break; case 1808: - -/* Line 1455 of yacc.c */ -#line 12770 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12781 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->where= (yyvsp[(2) - (2)].item); if ((yyvsp[(2) - (2)].item)) @@ -34508,9 +33122,8 @@ break; case 1809: - -/* Line 1455 of yacc.c */ -#line 12780 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12791 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; mysql_init_select(lex); @@ -34524,32 +33137,28 @@ break; case 1810: - -/* Line 1455 of yacc.c */ -#line 12791 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12802 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->parsing_place= NO_MATTER; } break; case 1811: - -/* Line 1455 of yacc.c */ -#line 12795 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12806 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->describe|= DESCRIBE_NORMAL; } break; case 1812: - -/* Line 1455 of yacc.c */ -#line 12797 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12808 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->select_lex.options|= SELECT_DESCRIBE; } break; case 1820: - -/* Line 1455 of yacc.c */ -#line 12815 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12826 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((Lex->explain_format= new Explain_format_traditional) == NULL) MYSQL_YYABORT; @@ -34557,9 +33166,8 @@ break; case 1821: - -/* Line 1455 of yacc.c */ -#line 12820 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12831 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((Lex->explain_format= new Explain_format_traditional) == NULL) MYSQL_YYABORT; @@ -34568,9 +33176,8 @@ break; case 1822: - -/* Line 1455 of yacc.c */ -#line 12826 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12837 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((Lex->explain_format= new Explain_format_traditional) == NULL) MYSQL_YYABORT; @@ -34579,9 +33186,8 @@ break; case 1823: - -/* Line 1455 of yacc.c */ -#line 12832 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12843 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!my_strcasecmp(system_charset_info, (yyvsp[(3) - (3)].lex_str).str, "JSON")) { @@ -34603,23 +33209,20 @@ break; case 1824: - -/* Line 1455 of yacc.c */ -#line 12853 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12864 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1825: - -/* Line 1455 of yacc.c */ -#line 12854 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12865 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->wild= (yyvsp[(1) - (1)].string); } break; case 1826: - -/* Line 1455 of yacc.c */ -#line 12856 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12867 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->wild= new (YYTHD->mem_root) String((const char*) (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, @@ -34630,9 +33233,8 @@ break; case 1827: - -/* Line 1455 of yacc.c */ -#line 12870 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12881 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_FLUSH; @@ -34642,16 +33244,14 @@ break; case 1828: - -/* Line 1455 of yacc.c */ -#line 12877 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12888 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1829: - -/* Line 1455 of yacc.c */ -#line 12882 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12893 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_TABLES; /* @@ -34664,30 +33264,26 @@ break; case 1830: - -/* Line 1455 of yacc.c */ -#line 12891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1831: - -/* Line 1455 of yacc.c */ -#line 12892 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12903 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1833: - -/* Line 1455 of yacc.c */ -#line 12897 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12908 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1834: - -/* Line 1455 of yacc.c */ -#line 12899 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12910 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { TABLE_LIST *tables= Lex->query_tables; Lex->type|= REFRESH_READ_LOCK; @@ -34701,9 +33297,8 @@ break; case 1835: - -/* Line 1455 of yacc.c */ -#line 12910 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12921 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->query_tables == NULL) // Table list can't be empty { @@ -34714,9 +33309,8 @@ break; case 1836: - -/* Line 1455 of yacc.c */ -#line 12918 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12929 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { TABLE_LIST *tables= Lex->query_tables; Lex->type|= REFRESH_FOR_EXPORT; @@ -34730,121 +33324,104 @@ break; case 1838: - -/* Line 1455 of yacc.c */ -#line 12933 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12944 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1839: - -/* Line 1455 of yacc.c */ -#line 12938 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12949 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_ERROR_LOG; } break; case 1840: - -/* Line 1455 of yacc.c */ -#line 12940 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12951 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_ENGINE_LOG; } break; case 1841: - -/* Line 1455 of yacc.c */ -#line 12942 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12953 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_GENERAL_LOG; } break; case 1842: - -/* Line 1455 of yacc.c */ -#line 12944 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12955 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_SLOW_LOG; } break; case 1843: - -/* Line 1455 of yacc.c */ -#line 12946 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12957 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_BINARY_LOG; } break; case 1844: - -/* Line 1455 of yacc.c */ -#line 12948 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12959 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_RELAY_LOG; } break; case 1845: - -/* Line 1455 of yacc.c */ -#line 12950 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12961 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_QUERY_CACHE_FREE; } break; case 1846: - -/* Line 1455 of yacc.c */ -#line 12952 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12963 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_HOSTS; } break; case 1847: - -/* Line 1455 of yacc.c */ -#line 12954 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12965 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_GRANT; } break; case 1848: - -/* Line 1455 of yacc.c */ -#line 12956 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12967 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_LOG; } break; case 1849: - -/* Line 1455 of yacc.c */ -#line 12958 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12969 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_STATUS; } break; case 1850: - -/* Line 1455 of yacc.c */ -#line 12960 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12971 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_DES_KEY_FILE; } break; case 1851: - -/* Line 1455 of yacc.c */ -#line 12962 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12973 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_USER_RESOURCES; } break; case 1852: - -/* Line 1455 of yacc.c */ -#line 12966 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12977 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1853: - -/* Line 1455 of yacc.c */ -#line 12967 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12978 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1854: - -/* Line 1455 of yacc.c */ -#line 12972 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12983 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_RESET; lex->type=0; @@ -34852,58 +33429,50 @@ break; case 1855: - -/* Line 1455 of yacc.c */ -#line 12977 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12988 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1858: - -/* Line 1455 of yacc.c */ -#line 12986 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12997 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_SLAVE; } break; case 1859: - -/* Line 1455 of yacc.c */ -#line 12987 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12998 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 1860: - -/* Line 1455 of yacc.c */ -#line 12988 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 12999 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_MASTER; } break; case 1861: - -/* Line 1455 of yacc.c */ -#line 12989 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13000 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type|= REFRESH_QUERY_CACHE;} break; case 1862: - -/* Line 1455 of yacc.c */ -#line 12993 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13004 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->reset_slave_info.all= false; } break; case 1863: - -/* Line 1455 of yacc.c */ -#line 12994 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13005 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->reset_slave_info.all= true; } break; case 1864: - -/* Line 1455 of yacc.c */ -#line 12999 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13010 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->type=0; @@ -34912,25 +33481,22 @@ break; case 1865: - -/* Line 1455 of yacc.c */ -#line 13005 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13016 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1867: - -/* Line 1455 of yacc.c */ -#line 13014 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13025 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->to_log = (yyvsp[(2) - (2)].lex_str).str; } break; case 1868: - -/* Line 1455 of yacc.c */ -#line 13018 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13029 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->value_list.empty(); @@ -34940,9 +33506,8 @@ break; case 1869: - -/* Line 1455 of yacc.c */ -#line 13030 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13041 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->value_list.empty(); @@ -34952,30 +33517,26 @@ break; case 1870: - -/* Line 1455 of yacc.c */ -#line 13039 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13050 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type= 0; } break; case 1871: - -/* Line 1455 of yacc.c */ -#line 13040 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13051 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type= 0; } break; case 1872: - -/* Line 1455 of yacc.c */ -#line 13041 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13052 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->type= ONLY_KILL_QUERY; } break; case 1873: - -/* Line 1455 of yacc.c */ -#line 13048 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13059 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command=SQLCOM_CHANGE_DB; @@ -34984,9 +33545,8 @@ break; case 1874: - -/* Line 1455 of yacc.c */ -#line 13059 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13070 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -35001,9 +33561,8 @@ break; case 1875: - -/* Line 1455 of yacc.c */ -#line 13071 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13082 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_LOAD; @@ -35016,9 +33575,8 @@ break; case 1876: - -/* Line 1455 of yacc.c */ -#line 13081 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13092 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!Select->add_table_to_list(YYTHD, (yyvsp[(12) - (13)].table), NULL, TL_OPTION_UPDATING, @@ -35031,58 +33589,50 @@ break; case 1877: - -/* Line 1455 of yacc.c */ -#line 13091 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13102 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->exchange->cs= (yyvsp[(15) - (15)].charset); } break; case 1878: - -/* Line 1455 of yacc.c */ -#line 13095 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13106 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1879: - -/* Line 1455 of yacc.c */ -#line 13099 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13110 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.filetype)= FILETYPE_CSV; } break; case 1880: - -/* Line 1455 of yacc.c */ -#line 13100 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13111 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.filetype)= FILETYPE_XML; } break; case 1881: - -/* Line 1455 of yacc.c */ -#line 13104 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13115 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=0;} break; case 1882: - -/* Line 1455 of yacc.c */ -#line 13105 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13116 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=1;} break; case 1883: - -/* Line 1455 of yacc.c */ -#line 13109 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13120 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE_DEFAULT; } break; case 1884: - -/* Line 1455 of yacc.c */ -#line 13111 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13122 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { #ifdef HAVE_QUERY_CACHE /* @@ -35097,37 +33647,32 @@ break; case 1885: - -/* Line 1455 of yacc.c */ -#line 13122 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13133 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } break; case 1886: - -/* Line 1455 of yacc.c */ -#line 13126 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13137 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->duplicates=DUP_ERROR; } break; case 1887: - -/* Line 1455 of yacc.c */ -#line 13127 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13138 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->duplicates=DUP_REPLACE; } break; case 1888: - -/* Line 1455 of yacc.c */ -#line 13128 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13139 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ignore= 1; } break; case 1893: - -/* Line 1455 of yacc.c */ -#line 13143 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13154 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->field_term= (yyvsp[(3) - (3)].string); @@ -35135,9 +33680,8 @@ break; case 1894: - -/* Line 1455 of yacc.c */ -#line 13148 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13159 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; DBUG_ASSERT(lex->exchange != 0); @@ -35147,9 +33691,8 @@ break; case 1895: - -/* Line 1455 of yacc.c */ -#line 13155 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13166 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->enclosed= (yyvsp[(3) - (3)].string); @@ -35157,9 +33700,8 @@ break; case 1896: - -/* Line 1455 of yacc.c */ -#line 13160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->escaped= (yyvsp[(3) - (3)].string); @@ -35167,9 +33709,8 @@ break; case 1901: - -/* Line 1455 of yacc.c */ -#line 13178 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->line_term= (yyvsp[(3) - (3)].string); @@ -35177,9 +33718,8 @@ break; case 1902: - -/* Line 1455 of yacc.c */ -#line 13183 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13194 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->line_start= (yyvsp[(3) - (3)].string); @@ -35187,23 +33727,20 @@ break; case 1903: - -/* Line 1455 of yacc.c */ -#line 13190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13201 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 1904: - -/* Line 1455 of yacc.c */ -#line 13192 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13203 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->exchange->line_term = (yyvsp[(4) - (4)].string); } break; case 1906: - -/* Line 1455 of yacc.c */ -#line 13197 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13208 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { DBUG_ASSERT(Lex->exchange != 0); Lex->exchange->skip_lines= atol((yyvsp[(2) - (3)].lex_str).str); @@ -35211,65 +33748,56 @@ break; case 1907: - -/* Line 1455 of yacc.c */ -#line 13204 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13215 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 1908: - -/* Line 1455 of yacc.c */ -#line 13206 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13217 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { } break; case 1909: - -/* Line 1455 of yacc.c */ -#line 13210 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1910: - -/* Line 1455 of yacc.c */ -#line 13211 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13222 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1911: - -/* Line 1455 of yacc.c */ -#line 13212 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13223 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1912: - -/* Line 1455 of yacc.c */ -#line 13217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->field_list.push_back((yyvsp[(3) - (3)].item)); } break; case 1913: - -/* Line 1455 of yacc.c */ -#line 13219 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13230 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->field_list.push_back((yyvsp[(1) - (1)].item)); } break; case 1914: - -/* Line 1455 of yacc.c */ -#line 13223 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13234 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {(yyval.item)= (yyvsp[(1) - (1)].item);} break; case 1915: - -/* Line 1455 of yacc.c */ -#line 13225 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13236 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_user_var_as_out_param((yyvsp[(2) - (2)].lex_str)); if ((yyval.item) == NULL) @@ -35278,23 +33806,20 @@ break; case 1916: - -/* Line 1455 of yacc.c */ -#line 13233 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13244 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1917: - -/* Line 1455 of yacc.c */ -#line 13234 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13245 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1920: - -/* Line 1455 of yacc.c */ -#line 13244 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13255 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; uint length= (uint) ((yyvsp[(5) - (5)].simple_string) - (yyvsp[(3) - (5)].simple_string)); @@ -35312,9 +33837,8 @@ break; case 1921: - -/* Line 1455 of yacc.c */ -#line 13264 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13275 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX_STRING tmp; THD *thd= YYTHD; @@ -35341,9 +33865,8 @@ break; case 1922: - -/* Line 1455 of yacc.c */ -#line 13288 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13299 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { uint repertoire= Lex->text_string_is_7bit ? MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; @@ -35358,9 +33881,8 @@ break; case 1923: - -/* Line 1455 of yacc.c */ -#line 13300 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13311 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_string *str= new (YYTHD->mem_root) Item_string((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, (yyvsp[(1) - (2)].charset)); @@ -35374,9 +33896,8 @@ break; case 1924: - -/* Line 1455 of yacc.c */ -#line 13311 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13322 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_string* item= (Item_string*) (yyvsp[(1) - (2)].item); item->append((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length); @@ -35395,9 +33916,8 @@ break; case 1925: - -/* Line 1455 of yacc.c */ -#line 13330 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13341 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.string)= new (YYTHD->mem_root) String((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, @@ -35408,9 +33928,8 @@ break; case 1926: - -/* Line 1455 of yacc.c */ -#line 13338 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *tmp= new (YYTHD->mem_root) Item_hex_string((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if (tmp == NULL) @@ -35425,9 +33944,8 @@ break; case 1927: - -/* Line 1455 of yacc.c */ -#line 13350 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13361 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *tmp= new (YYTHD->mem_root) Item_bin_string((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if (tmp == NULL) @@ -35442,9 +33960,8 @@ break; case 1928: - -/* Line 1455 of yacc.c */ -#line 13365 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13376 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -35465,23 +33982,20 @@ break; case 1929: - -/* Line 1455 of yacc.c */ -#line 13385 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13396 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = (yyvsp[(1) - (1)].item); } break; case 1930: - -/* Line 1455 of yacc.c */ -#line 13386 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = (yyvsp[(2) - (2)].item_num); } break; case 1931: - -/* Line 1455 of yacc.c */ -#line 13388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13399 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyvsp[(2) - (2)].item_num)->max_length++; (yyval.item)= (yyvsp[(2) - (2)].item_num)->neg(); @@ -35489,30 +34003,26 @@ break; case 1932: - -/* Line 1455 of yacc.c */ -#line 13396 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = (yyvsp[(1) - (1)].item); } break; case 1933: - -/* Line 1455 of yacc.c */ -#line 13397 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13408 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = (yyvsp[(1) - (1)].item_num); } break; case 1934: - -/* Line 1455 of yacc.c */ -#line 13398 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 1935: - -/* Line 1455 of yacc.c */ -#line 13400 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13411 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex_input_stream *lip= YYLIP; /* @@ -35530,9 +34040,8 @@ break; case 1936: - -/* Line 1455 of yacc.c */ -#line 13415 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13426 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_int(NAME_STRING("FALSE"), 0, 1); if ((yyval.item) == NULL) @@ -35541,9 +34050,8 @@ break; case 1937: - -/* Line 1455 of yacc.c */ -#line 13421 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13432 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_int(NAME_STRING("TRUE"), 1, 1); if ((yyval.item) == NULL) @@ -35552,9 +34060,8 @@ break; case 1938: - -/* Line 1455 of yacc.c */ -#line 13427 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item) = new (YYTHD->mem_root) Item_hex_string((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item) == NULL) @@ -35563,9 +34070,8 @@ break; case 1939: - -/* Line 1455 of yacc.c */ -#line 13433 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13444 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= new (YYTHD->mem_root) Item_bin_string((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item) == NULL) @@ -35574,9 +34080,8 @@ break; case 1940: - -/* Line 1455 of yacc.c */ -#line 13439 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13450 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *tmp= new (YYTHD->mem_root) Item_hex_string((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length); if (tmp == NULL) @@ -35610,9 +34115,8 @@ break; case 1941: - -/* Line 1455 of yacc.c */ -#line 13470 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13481 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item *tmp= new (YYTHD->mem_root) Item_bin_string((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length); if (tmp == NULL) @@ -35645,9 +34149,8 @@ break; case 1942: - -/* Line 1455 of yacc.c */ -#line 13503 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13514 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.item_num)= new (YYTHD->mem_root) @@ -35660,9 +34163,8 @@ break; case 1943: - -/* Line 1455 of yacc.c */ -#line 13513 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13524 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { int error; (yyval.item_num)= new (YYTHD->mem_root) @@ -35675,9 +34177,8 @@ break; case 1944: - -/* Line 1455 of yacc.c */ -#line 13523 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13534 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_num)= new (YYTHD->mem_root) Item_uint((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if ((yyval.item_num) == NULL) @@ -35686,9 +34187,8 @@ break; case 1945: - -/* Line 1455 of yacc.c */ -#line 13529 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13540 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_num)= new (YYTHD->mem_root) Item_decimal((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, YYTHD->charset()); @@ -35700,9 +34200,8 @@ break; case 1946: - -/* Line 1455 of yacc.c */ -#line 13538 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13549 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item_num)= new (YYTHD->mem_root) Item_float((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); if (((yyval.item_num) == NULL) || (YYTHD->is_error())) @@ -35713,9 +34212,8 @@ break; case 1947: - -/* Line 1455 of yacc.c */ -#line 13550 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13561 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.item)= create_temporal_literal(YYTHD, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, MYSQL_TYPE_DATE, true))) @@ -35724,9 +34222,8 @@ break; case 1948: - -/* Line 1455 of yacc.c */ -#line 13556 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13567 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.item)= create_temporal_literal(YYTHD, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, MYSQL_TYPE_TIME, true))) @@ -35735,9 +34232,8 @@ break; case 1949: - -/* Line 1455 of yacc.c */ -#line 13562 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13573 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.item)= create_temporal_literal(YYTHD, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, MYSQL_TYPE_DATETIME, true))) @@ -35746,23 +34242,20 @@ break; case 1950: - -/* Line 1455 of yacc.c */ -#line 13577 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13588 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=(yyvsp[(1) - (1)].item); } break; case 1951: - -/* Line 1455 of yacc.c */ -#line 13578 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13589 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=(yyvsp[(1) - (1)].item); } break; case 1952: - -/* Line 1455 of yacc.c */ -#line 13583 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13594 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { SELECT_LEX *sel= Select; (yyval.item)= new (YYTHD->mem_root) Item_field(Lex->current_context(), @@ -35774,9 +34267,8 @@ break; case 1953: - -/* Line 1455 of yacc.c */ -#line 13592 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13603 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; SELECT_LEX *sel= Select; @@ -35792,16 +34284,14 @@ break; case 1954: - -/* Line 1455 of yacc.c */ -#line 13607 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13618 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=(yyvsp[(1) - (1)].item); } break; case 1955: - -/* Line 1455 of yacc.c */ -#line 13612 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13623 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -35855,16 +34345,14 @@ break; case 1956: - -/* Line 1455 of yacc.c */ -#line 13662 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13673 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 1957: - -/* Line 1455 of yacc.c */ -#line 13667 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13678 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; SELECT_LEX *sel=Select; @@ -35885,16 +34373,14 @@ break; case 1958: - -/* Line 1455 of yacc.c */ -#line 13684 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13695 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)= (yyvsp[(1) - (1)].item); } break; case 1959: - -/* Line 1455 of yacc.c */ -#line 13689 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13700 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -35977,9 +34463,8 @@ break; case 1960: - -/* Line 1455 of yacc.c */ -#line 13769 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13780 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -36007,9 +34492,8 @@ break; case 1961: - -/* Line 1455 of yacc.c */ -#line 13794 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13805 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -36040,16 +34524,14 @@ break; case 1962: - -/* Line 1455 of yacc.c */ -#line 13824 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13835 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} break; case 1963: - -/* Line 1455 of yacc.c */ -#line 13826 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13837 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { TABLE_LIST *table= Select->table_list.first; if (my_strcasecmp(table_alias_charset, (yyvsp[(1) - (5)].lex_str).str, table->db)) @@ -36068,9 +34550,8 @@ break; case 1964: - -/* Line 1455 of yacc.c */ -#line 13842 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13853 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { TABLE_LIST *table= Select->table_list.first; if (my_strcasecmp(table_alias_charset, (yyvsp[(1) - (3)].lex_str).str, table->alias)) @@ -36083,16 +34564,14 @@ break; case 1965: - -/* Line 1455 of yacc.c */ -#line 13851 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13862 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str);} break; case 1966: - -/* Line 1455 of yacc.c */ -#line 13856 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13867 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table)= new Table_ident((yyvsp[(1) - (1)].lex_str)); if ((yyval.table) == NULL) @@ -36101,9 +34580,8 @@ break; case 1967: - -/* Line 1455 of yacc.c */ -#line 13862 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13873 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table)= new Table_ident(YYTHD, (yyvsp[(1) - (3)].lex_str),(yyvsp[(3) - (3)].lex_str),0); if ((yyval.table) == NULL) @@ -36112,9 +34590,8 @@ break; case 1968: - -/* Line 1455 of yacc.c */ -#line 13868 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13879 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* For Delphi */ (yyval.table)= new Table_ident((yyvsp[(2) - (2)].lex_str)); @@ -36124,9 +34601,8 @@ break; case 1969: - -/* Line 1455 of yacc.c */ -#line 13878 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13889 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table)= new Table_ident((yyvsp[(1) - (2)].lex_str)); if ((yyval.table) == NULL) @@ -36135,9 +34611,8 @@ break; case 1970: - -/* Line 1455 of yacc.c */ -#line 13884 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13895 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.table)= new Table_ident(YYTHD, (yyvsp[(1) - (4)].lex_str),(yyvsp[(3) - (4)].lex_str),0); if ((yyval.table) == NULL) @@ -36146,9 +34621,8 @@ break; case 1971: - -/* Line 1455 of yacc.c */ -#line 13893 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13904 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX_STRING db={(char*) any_db,3}; (yyval.table)= new Table_ident(YYTHD, db,(yyvsp[(1) - (1)].lex_str),0); @@ -36158,16 +34632,14 @@ break; case 1972: - -/* Line 1455 of yacc.c */ -#line 13902 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13913 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } break; case 1973: - -/* Line 1455 of yacc.c */ -#line 13904 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13915 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; @@ -36197,9 +34669,8 @@ break; case 1974: - -/* Line 1455 of yacc.c */ -#line 13934 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13945 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!strcont((yyvsp[(1) - (1)].lex_str).str, "\n")) (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); @@ -36212,9 +34683,8 @@ break; case 1975: - -/* Line 1455 of yacc.c */ -#line 13947 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13958 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; @@ -36230,9 +34700,8 @@ break; case 1976: - -/* Line 1455 of yacc.c */ -#line 13963 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13974 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; @@ -36248,9 +34717,8 @@ break; case 1977: - -/* Line 1455 of yacc.c */ -#line 13979 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 13990 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; @@ -36267,16 +34735,14 @@ break; case 1978: - -/* Line 1455 of yacc.c */ -#line 13995 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14006 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } break; case 1979: - -/* Line 1455 of yacc.c */ -#line 13997 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14008 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; (yyval.lex_str).str= thd->strmake((yyvsp[(1) - (1)].symbol).str, (yyvsp[(1) - (1)].symbol).length); @@ -36287,16 +34753,14 @@ break; case 1980: - -/* Line 1455 of yacc.c */ -#line 14007 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14018 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } break; case 1981: - -/* Line 1455 of yacc.c */ -#line 14009 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14020 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; (yyval.lex_str).str= thd->strmake((yyvsp[(1) - (1)].symbol).str, (yyvsp[(1) - (1)].symbol).length); @@ -36307,30 +34771,26 @@ break; case 1982: - -/* Line 1455 of yacc.c */ -#line 14019 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14030 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} break; case 1983: - -/* Line 1455 of yacc.c */ -#line 14020 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14031 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} break; case 1984: - -/* Line 1455 of yacc.c */ -#line 14021 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14032 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} break; case 1985: - -/* Line 1455 of yacc.c */ -#line 14026 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14037 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; if (!((yyval.lex_user)=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) @@ -36360,9 +34820,8 @@ break; case 1986: - -/* Line 1455 of yacc.c */ -#line 14053 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14064 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; if (!((yyval.lex_user)=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) @@ -36398,9 +34857,8 @@ break; case 1987: - -/* Line 1455 of yacc.c */ -#line 14086 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14097 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (!((yyval.lex_user)=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user)))) MYSQL_YYABORT; @@ -36414,2466 +34872,2114 @@ break; case 1988: - -/* Line 1455 of yacc.c */ -#line 14100 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14111 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1989: - -/* Line 1455 of yacc.c */ -#line 14101 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14112 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1990: - -/* Line 1455 of yacc.c */ -#line 14102 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14113 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1991: - -/* Line 1455 of yacc.c */ -#line 14103 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14114 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1992: - -/* Line 1455 of yacc.c */ -#line 14104 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14115 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1993: - -/* Line 1455 of yacc.c */ -#line 14105 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14116 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1994: - -/* Line 1455 of yacc.c */ -#line 14106 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14117 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1995: - -/* Line 1455 of yacc.c */ -#line 14107 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14118 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1996: - -/* Line 1455 of yacc.c */ -#line 14108 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14119 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1997: - -/* Line 1455 of yacc.c */ -#line 14109 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14120 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1998: - -/* Line 1455 of yacc.c */ -#line 14110 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14121 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 1999: - -/* Line 1455 of yacc.c */ -#line 14111 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14122 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2000: - -/* Line 1455 of yacc.c */ -#line 14112 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14123 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2001: - -/* Line 1455 of yacc.c */ -#line 14113 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14124 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2002: - -/* Line 1455 of yacc.c */ -#line 14114 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14125 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2003: - -/* Line 1455 of yacc.c */ -#line 14115 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14126 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2004: - -/* Line 1455 of yacc.c */ -#line 14116 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14127 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2005: - -/* Line 1455 of yacc.c */ -#line 14117 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14128 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2006: - -/* Line 1455 of yacc.c */ -#line 14118 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14129 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2007: - -/* Line 1455 of yacc.c */ -#line 14119 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14130 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2008: - -/* Line 1455 of yacc.c */ -#line 14120 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14131 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2009: - -/* Line 1455 of yacc.c */ -#line 14121 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14132 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2010: - -/* Line 1455 of yacc.c */ -#line 14122 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14133 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2011: - -/* Line 1455 of yacc.c */ -#line 14123 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14134 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2012: - -/* Line 1455 of yacc.c */ -#line 14124 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14135 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2013: - -/* Line 1455 of yacc.c */ -#line 14125 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14136 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2014: - -/* Line 1455 of yacc.c */ -#line 14126 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14137 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2015: - -/* Line 1455 of yacc.c */ -#line 14127 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14138 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2016: - -/* Line 1455 of yacc.c */ -#line 14128 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14139 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2017: - -/* Line 1455 of yacc.c */ -#line 14129 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14140 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2018: - -/* Line 1455 of yacc.c */ -#line 14130 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14141 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2019: - -/* Line 1455 of yacc.c */ -#line 14131 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14142 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2020: - -/* Line 1455 of yacc.c */ -#line 14132 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14143 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2021: - -/* Line 1455 of yacc.c */ -#line 14133 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14144 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2022: - -/* Line 1455 of yacc.c */ -#line 14134 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14145 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2023: - -/* Line 1455 of yacc.c */ -#line 14135 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14146 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2024: - -/* Line 1455 of yacc.c */ -#line 14136 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14147 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2025: - -/* Line 1455 of yacc.c */ -#line 14137 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14148 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2026: - -/* Line 1455 of yacc.c */ -#line 14138 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14149 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2027: - -/* Line 1455 of yacc.c */ -#line 14139 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2028: - -/* Line 1455 of yacc.c */ -#line 14140 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14151 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2029: - -/* Line 1455 of yacc.c */ -#line 14141 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14152 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2030: - -/* Line 1455 of yacc.c */ -#line 14142 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14153 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2031: - -/* Line 1455 of yacc.c */ -#line 14143 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14154 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2032: - -/* Line 1455 of yacc.c */ -#line 14144 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14155 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2033: - -/* Line 1455 of yacc.c */ -#line 14145 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14156 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2034: - -/* Line 1455 of yacc.c */ -#line 14146 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14157 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2035: - -/* Line 1455 of yacc.c */ -#line 14147 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14158 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2036: - -/* Line 1455 of yacc.c */ -#line 14148 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14159 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2037: - -/* Line 1455 of yacc.c */ -#line 14149 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14160 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2038: - -/* Line 1455 of yacc.c */ -#line 14159 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14170 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2039: - -/* Line 1455 of yacc.c */ -#line 14160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2040: - -/* Line 1455 of yacc.c */ -#line 14161 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14172 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2041: - -/* Line 1455 of yacc.c */ -#line 14162 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14173 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2042: - -/* Line 1455 of yacc.c */ -#line 14163 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14174 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2043: - -/* Line 1455 of yacc.c */ -#line 14164 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14175 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2044: - -/* Line 1455 of yacc.c */ -#line 14165 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14176 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2045: - -/* Line 1455 of yacc.c */ -#line 14166 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14177 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2046: - -/* Line 1455 of yacc.c */ -#line 14167 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14178 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2047: - -/* Line 1455 of yacc.c */ -#line 14168 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14179 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2048: - -/* Line 1455 of yacc.c */ -#line 14169 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14180 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2049: - -/* Line 1455 of yacc.c */ -#line 14170 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14181 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2050: - -/* Line 1455 of yacc.c */ -#line 14171 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14182 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2051: - -/* Line 1455 of yacc.c */ -#line 14172 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14183 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2052: - -/* Line 1455 of yacc.c */ -#line 14173 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14184 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2053: - -/* Line 1455 of yacc.c */ -#line 14174 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14185 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2054: - -/* Line 1455 of yacc.c */ -#line 14175 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14186 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2055: - -/* Line 1455 of yacc.c */ -#line 14176 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14187 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2056: - -/* Line 1455 of yacc.c */ -#line 14177 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14188 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2057: - -/* Line 1455 of yacc.c */ -#line 14178 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14189 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2058: - -/* Line 1455 of yacc.c */ -#line 14179 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14190 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2059: - -/* Line 1455 of yacc.c */ -#line 14180 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14191 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2060: - -/* Line 1455 of yacc.c */ -#line 14181 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14192 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2061: - -/* Line 1455 of yacc.c */ -#line 14182 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14193 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2062: - -/* Line 1455 of yacc.c */ -#line 14183 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14194 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2063: - -/* Line 1455 of yacc.c */ -#line 14184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2064: - -/* Line 1455 of yacc.c */ -#line 14185 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14196 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2065: - -/* Line 1455 of yacc.c */ -#line 14186 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14197 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2066: - -/* Line 1455 of yacc.c */ -#line 14187 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14198 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2067: - -/* Line 1455 of yacc.c */ -#line 14188 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14199 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2068: - -/* Line 1455 of yacc.c */ -#line 14189 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14200 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2069: - -/* Line 1455 of yacc.c */ -#line 14190 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14201 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2070: - -/* Line 1455 of yacc.c */ -#line 14191 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14202 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2071: - -/* Line 1455 of yacc.c */ -#line 14192 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14203 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2072: - -/* Line 1455 of yacc.c */ -#line 14193 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14204 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2073: - -/* Line 1455 of yacc.c */ -#line 14194 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14205 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2074: - -/* Line 1455 of yacc.c */ -#line 14195 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14206 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2075: - -/* Line 1455 of yacc.c */ -#line 14196 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14207 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2076: - -/* Line 1455 of yacc.c */ -#line 14197 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14208 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2077: - -/* Line 1455 of yacc.c */ -#line 14198 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14209 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2078: - -/* Line 1455 of yacc.c */ -#line 14199 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14210 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2079: - -/* Line 1455 of yacc.c */ -#line 14200 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14211 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2080: - -/* Line 1455 of yacc.c */ -#line 14201 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14212 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2081: - -/* Line 1455 of yacc.c */ -#line 14202 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14213 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2082: - -/* Line 1455 of yacc.c */ -#line 14203 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14214 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2083: - -/* Line 1455 of yacc.c */ -#line 14208 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14219 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2084: - -/* Line 1455 of yacc.c */ -#line 14209 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14220 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2085: - -/* Line 1455 of yacc.c */ -#line 14210 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2086: - -/* Line 1455 of yacc.c */ -#line 14211 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14222 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2087: - -/* Line 1455 of yacc.c */ -#line 14212 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14223 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2088: - -/* Line 1455 of yacc.c */ -#line 14213 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14224 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2089: - -/* Line 1455 of yacc.c */ -#line 14214 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14225 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2090: - -/* Line 1455 of yacc.c */ -#line 14215 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14226 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2091: - -/* Line 1455 of yacc.c */ -#line 14216 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14227 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2092: - -/* Line 1455 of yacc.c */ -#line 14217 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14228 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2093: - -/* Line 1455 of yacc.c */ -#line 14218 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14229 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2094: - -/* Line 1455 of yacc.c */ -#line 14219 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14230 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2095: - -/* Line 1455 of yacc.c */ -#line 14220 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14231 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2096: - -/* Line 1455 of yacc.c */ -#line 14221 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14232 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2097: - -/* Line 1455 of yacc.c */ -#line 14222 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14233 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2098: - -/* Line 1455 of yacc.c */ -#line 14223 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14234 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2099: - -/* Line 1455 of yacc.c */ -#line 14224 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14235 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2100: - -/* Line 1455 of yacc.c */ -#line 14225 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14236 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2101: - -/* Line 1455 of yacc.c */ -#line 14226 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14237 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2102: - -/* Line 1455 of yacc.c */ -#line 14227 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14238 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2103: - -/* Line 1455 of yacc.c */ -#line 14228 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14239 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2104: - -/* Line 1455 of yacc.c */ -#line 14229 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14240 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2105: - -/* Line 1455 of yacc.c */ -#line 14230 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14241 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2106: - -/* Line 1455 of yacc.c */ -#line 14231 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14242 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2107: - -/* Line 1455 of yacc.c */ -#line 14232 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14243 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2108: - -/* Line 1455 of yacc.c */ -#line 14233 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14244 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2109: - -/* Line 1455 of yacc.c */ -#line 14234 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14245 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2110: - -/* Line 1455 of yacc.c */ -#line 14235 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14246 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2111: - -/* Line 1455 of yacc.c */ -#line 14236 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14247 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2112: - -/* Line 1455 of yacc.c */ -#line 14237 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14248 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2113: - -/* Line 1455 of yacc.c */ -#line 14238 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14249 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2114: - -/* Line 1455 of yacc.c */ -#line 14239 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14250 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2115: - -/* Line 1455 of yacc.c */ -#line 14240 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14251 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2116: - -/* Line 1455 of yacc.c */ -#line 14241 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14252 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2117: - -/* Line 1455 of yacc.c */ -#line 14242 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14253 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2118: - -/* Line 1455 of yacc.c */ -#line 14243 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14254 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2119: - -/* Line 1455 of yacc.c */ -#line 14244 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14255 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2120: - -/* Line 1455 of yacc.c */ -#line 14245 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14256 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2121: - -/* Line 1455 of yacc.c */ -#line 14246 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14257 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2122: - -/* Line 1455 of yacc.c */ -#line 14247 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14258 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2123: - -/* Line 1455 of yacc.c */ -#line 14248 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14259 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2124: - -/* Line 1455 of yacc.c */ -#line 14249 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14260 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2125: - -/* Line 1455 of yacc.c */ -#line 14250 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14261 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2126: - -/* Line 1455 of yacc.c */ -#line 14251 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14262 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2127: - -/* Line 1455 of yacc.c */ -#line 14252 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14263 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2128: - -/* Line 1455 of yacc.c */ -#line 14253 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14264 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2129: - -/* Line 1455 of yacc.c */ -#line 14254 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14265 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2130: - -/* Line 1455 of yacc.c */ -#line 14255 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14266 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2131: - -/* Line 1455 of yacc.c */ -#line 14256 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14267 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2132: - -/* Line 1455 of yacc.c */ -#line 14257 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14268 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2133: - -/* Line 1455 of yacc.c */ -#line 14258 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14269 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2134: - -/* Line 1455 of yacc.c */ -#line 14259 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14270 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2135: - -/* Line 1455 of yacc.c */ -#line 14260 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14271 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2136: - -/* Line 1455 of yacc.c */ -#line 14261 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14272 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2137: - -/* Line 1455 of yacc.c */ -#line 14262 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14273 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2138: - -/* Line 1455 of yacc.c */ -#line 14263 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14274 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2139: - -/* Line 1455 of yacc.c */ -#line 14264 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14275 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2140: - -/* Line 1455 of yacc.c */ -#line 14265 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14276 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2141: - -/* Line 1455 of yacc.c */ -#line 14266 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14277 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2142: - -/* Line 1455 of yacc.c */ -#line 14267 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14278 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2143: - -/* Line 1455 of yacc.c */ -#line 14268 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14279 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2144: - -/* Line 1455 of yacc.c */ -#line 14269 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14280 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2145: - -/* Line 1455 of yacc.c */ -#line 14270 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14281 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2146: - -/* Line 1455 of yacc.c */ -#line 14271 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14282 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2147: - -/* Line 1455 of yacc.c */ -#line 14272 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14283 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2148: - -/* Line 1455 of yacc.c */ -#line 14273 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14284 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2149: - -/* Line 1455 of yacc.c */ -#line 14274 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14285 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2150: - -/* Line 1455 of yacc.c */ -#line 14275 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14286 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2151: - -/* Line 1455 of yacc.c */ -#line 14276 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14287 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2152: - -/* Line 1455 of yacc.c */ -#line 14277 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14288 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2153: - -/* Line 1455 of yacc.c */ -#line 14278 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14289 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2154: - -/* Line 1455 of yacc.c */ -#line 14279 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14290 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2155: - -/* Line 1455 of yacc.c */ -#line 14280 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14291 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2156: - -/* Line 1455 of yacc.c */ -#line 14281 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14292 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2157: - -/* Line 1455 of yacc.c */ -#line 14282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14293 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2158: - -/* Line 1455 of yacc.c */ -#line 14283 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14294 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2159: - -/* Line 1455 of yacc.c */ -#line 14284 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14295 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2160: - -/* Line 1455 of yacc.c */ -#line 14285 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14296 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2161: - -/* Line 1455 of yacc.c */ -#line 14286 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14297 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2162: - -/* Line 1455 of yacc.c */ -#line 14287 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14298 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2163: - -/* Line 1455 of yacc.c */ -#line 14288 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14299 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2164: - -/* Line 1455 of yacc.c */ -#line 14289 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14300 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2165: - -/* Line 1455 of yacc.c */ -#line 14290 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14301 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2166: - -/* Line 1455 of yacc.c */ -#line 14291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14302 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2167: - -/* Line 1455 of yacc.c */ -#line 14292 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14303 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2168: - -/* Line 1455 of yacc.c */ -#line 14293 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14304 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2169: - -/* Line 1455 of yacc.c */ -#line 14294 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14305 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2170: - -/* Line 1455 of yacc.c */ -#line 14295 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14306 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2171: - -/* Line 1455 of yacc.c */ -#line 14296 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14307 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2172: - -/* Line 1455 of yacc.c */ -#line 14297 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14308 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2173: - -/* Line 1455 of yacc.c */ -#line 14298 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14309 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2174: - -/* Line 1455 of yacc.c */ -#line 14299 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14310 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2175: - -/* Line 1455 of yacc.c */ -#line 14300 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14311 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2176: - -/* Line 1455 of yacc.c */ -#line 14301 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14312 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2177: - -/* Line 1455 of yacc.c */ -#line 14302 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14313 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2178: - -/* Line 1455 of yacc.c */ -#line 14303 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14314 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2179: - -/* Line 1455 of yacc.c */ -#line 14304 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14315 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2180: - -/* Line 1455 of yacc.c */ -#line 14305 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14316 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2181: - -/* Line 1455 of yacc.c */ -#line 14306 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14317 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2182: - -/* Line 1455 of yacc.c */ -#line 14307 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14318 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2183: - -/* Line 1455 of yacc.c */ -#line 14308 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14319 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2184: - -/* Line 1455 of yacc.c */ -#line 14309 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14320 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2185: - -/* Line 1455 of yacc.c */ -#line 14310 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14321 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2186: - -/* Line 1455 of yacc.c */ -#line 14311 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14322 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2187: - -/* Line 1455 of yacc.c */ -#line 14312 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14323 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2188: - -/* Line 1455 of yacc.c */ -#line 14313 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14324 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2189: - -/* Line 1455 of yacc.c */ -#line 14314 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14325 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2190: - -/* Line 1455 of yacc.c */ -#line 14315 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14326 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2191: - -/* Line 1455 of yacc.c */ -#line 14316 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14327 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2192: - -/* Line 1455 of yacc.c */ -#line 14317 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14328 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2193: - -/* Line 1455 of yacc.c */ -#line 14318 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14329 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2194: - -/* Line 1455 of yacc.c */ -#line 14319 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14330 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2195: - -/* Line 1455 of yacc.c */ -#line 14320 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14331 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2196: - -/* Line 1455 of yacc.c */ -#line 14321 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14332 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2197: - -/* Line 1455 of yacc.c */ -#line 14322 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14333 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2198: - -/* Line 1455 of yacc.c */ -#line 14323 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14334 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2199: - -/* Line 1455 of yacc.c */ -#line 14324 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14335 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2200: - -/* Line 1455 of yacc.c */ -#line 14325 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14336 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2201: - -/* Line 1455 of yacc.c */ -#line 14326 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14337 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2202: - -/* Line 1455 of yacc.c */ -#line 14327 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14338 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2203: - -/* Line 1455 of yacc.c */ -#line 14328 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14339 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2204: - -/* Line 1455 of yacc.c */ -#line 14329 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14340 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2205: - -/* Line 1455 of yacc.c */ -#line 14330 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14341 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2206: - -/* Line 1455 of yacc.c */ -#line 14331 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14342 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2207: - -/* Line 1455 of yacc.c */ -#line 14332 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14343 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2208: - -/* Line 1455 of yacc.c */ -#line 14333 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14344 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2209: - -/* Line 1455 of yacc.c */ -#line 14334 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14345 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2210: - -/* Line 1455 of yacc.c */ -#line 14335 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14346 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2211: - -/* Line 1455 of yacc.c */ -#line 14336 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14347 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2212: - -/* Line 1455 of yacc.c */ -#line 14337 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14348 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2213: - -/* Line 1455 of yacc.c */ -#line 14338 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2214: - -/* Line 1455 of yacc.c */ -#line 14339 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14350 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2215: - -/* Line 1455 of yacc.c */ -#line 14340 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14351 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2216: - -/* Line 1455 of yacc.c */ -#line 14341 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14352 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2217: - -/* Line 1455 of yacc.c */ -#line 14342 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14353 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2218: - -/* Line 1455 of yacc.c */ -#line 14343 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14354 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2219: - -/* Line 1455 of yacc.c */ -#line 14344 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14355 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2220: - -/* Line 1455 of yacc.c */ -#line 14345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14356 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2221: - -/* Line 1455 of yacc.c */ -#line 14346 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14357 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2222: - -/* Line 1455 of yacc.c */ -#line 14347 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14358 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2223: - -/* Line 1455 of yacc.c */ -#line 14348 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14359 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2224: - -/* Line 1455 of yacc.c */ -#line 14349 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14360 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2225: - -/* Line 1455 of yacc.c */ -#line 14350 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14361 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2226: - -/* Line 1455 of yacc.c */ -#line 14351 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14362 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2227: - -/* Line 1455 of yacc.c */ -#line 14352 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14363 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2228: - -/* Line 1455 of yacc.c */ -#line 14353 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14364 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2229: - -/* Line 1455 of yacc.c */ -#line 14354 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14365 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2230: - -/* Line 1455 of yacc.c */ -#line 14355 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14366 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2231: - -/* Line 1455 of yacc.c */ -#line 14356 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14367 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2232: - -/* Line 1455 of yacc.c */ -#line 14357 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14368 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2233: - -/* Line 1455 of yacc.c */ -#line 14358 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14369 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2234: - -/* Line 1455 of yacc.c */ -#line 14359 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14370 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2235: - -/* Line 1455 of yacc.c */ -#line 14360 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14371 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2236: - -/* Line 1455 of yacc.c */ -#line 14361 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14372 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2237: - -/* Line 1455 of yacc.c */ -#line 14362 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14373 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2238: - -/* Line 1455 of yacc.c */ -#line 14363 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14374 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2239: - -/* Line 1455 of yacc.c */ -#line 14364 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14375 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2240: - -/* Line 1455 of yacc.c */ -#line 14365 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14376 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2241: - -/* Line 1455 of yacc.c */ -#line 14366 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14377 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2242: - -/* Line 1455 of yacc.c */ -#line 14367 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14378 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2243: - -/* Line 1455 of yacc.c */ -#line 14368 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14379 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2244: - -/* Line 1455 of yacc.c */ -#line 14369 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14380 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2245: - -/* Line 1455 of yacc.c */ -#line 14370 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14381 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2246: - -/* Line 1455 of yacc.c */ -#line 14371 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14382 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2247: - -/* Line 1455 of yacc.c */ -#line 14372 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14383 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2248: - -/* Line 1455 of yacc.c */ -#line 14373 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14384 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2249: - -/* Line 1455 of yacc.c */ -#line 14374 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14385 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2250: - -/* Line 1455 of yacc.c */ -#line 14375 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14386 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2251: - -/* Line 1455 of yacc.c */ -#line 14376 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14387 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2252: - -/* Line 1455 of yacc.c */ -#line 14377 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14388 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2253: - -/* Line 1455 of yacc.c */ -#line 14378 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14389 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2254: - -/* Line 1455 of yacc.c */ -#line 14379 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14390 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2255: - -/* Line 1455 of yacc.c */ -#line 14380 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14391 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2256: - -/* Line 1455 of yacc.c */ -#line 14381 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14392 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2257: - -/* Line 1455 of yacc.c */ -#line 14382 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14393 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2258: - -/* Line 1455 of yacc.c */ -#line 14383 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14394 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2259: - -/* Line 1455 of yacc.c */ -#line 14384 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14395 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2260: - -/* Line 1455 of yacc.c */ -#line 14385 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14396 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2261: - -/* Line 1455 of yacc.c */ -#line 14386 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2262: - -/* Line 1455 of yacc.c */ -#line 14387 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14398 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2263: - -/* Line 1455 of yacc.c */ -#line 14388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14399 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2264: - -/* Line 1455 of yacc.c */ -#line 14389 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14400 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2265: - -/* Line 1455 of yacc.c */ -#line 14390 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14401 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2266: - -/* Line 1455 of yacc.c */ -#line 14391 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14402 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2267: - -/* Line 1455 of yacc.c */ -#line 14392 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14403 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2268: - -/* Line 1455 of yacc.c */ -#line 14393 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14404 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2269: - -/* Line 1455 of yacc.c */ -#line 14394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14405 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2270: - -/* Line 1455 of yacc.c */ -#line 14395 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14406 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2271: - -/* Line 1455 of yacc.c */ -#line 14396 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2272: - -/* Line 1455 of yacc.c */ -#line 14397 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14408 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2273: - -/* Line 1455 of yacc.c */ -#line 14398 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2274: - -/* Line 1455 of yacc.c */ -#line 14399 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14410 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2275: - -/* Line 1455 of yacc.c */ -#line 14400 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14411 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2276: - -/* Line 1455 of yacc.c */ -#line 14401 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14412 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2277: - -/* Line 1455 of yacc.c */ -#line 14402 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14413 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2278: - -/* Line 1455 of yacc.c */ -#line 14403 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14414 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2279: - -/* Line 1455 of yacc.c */ -#line 14404 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14415 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2280: - -/* Line 1455 of yacc.c */ -#line 14405 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14416 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2281: - -/* Line 1455 of yacc.c */ -#line 14406 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14417 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2282: - -/* Line 1455 of yacc.c */ -#line 14407 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14418 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2283: - -/* Line 1455 of yacc.c */ -#line 14408 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14419 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2284: - -/* Line 1455 of yacc.c */ -#line 14409 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14420 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2285: - -/* Line 1455 of yacc.c */ -#line 14410 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14421 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2286: - -/* Line 1455 of yacc.c */ -#line 14411 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14422 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2287: - -/* Line 1455 of yacc.c */ -#line 14412 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14423 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2288: - -/* Line 1455 of yacc.c */ -#line 14413 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14424 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2289: - -/* Line 1455 of yacc.c */ -#line 14414 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14425 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2290: - -/* Line 1455 of yacc.c */ -#line 14415 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14426 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2291: - -/* Line 1455 of yacc.c */ -#line 14416 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14427 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2292: - -/* Line 1455 of yacc.c */ -#line 14417 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14428 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2293: - -/* Line 1455 of yacc.c */ -#line 14418 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14429 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2294: - -/* Line 1455 of yacc.c */ -#line 14419 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14430 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2295: - -/* Line 1455 of yacc.c */ -#line 14420 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14431 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2296: - -/* Line 1455 of yacc.c */ -#line 14421 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14432 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2297: - -/* Line 1455 of yacc.c */ -#line 14422 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14433 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2298: - -/* Line 1455 of yacc.c */ -#line 14423 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14434 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2299: - -/* Line 1455 of yacc.c */ -#line 14424 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14435 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2300: - -/* Line 1455 of yacc.c */ -#line 14425 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14436 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2301: - -/* Line 1455 of yacc.c */ -#line 14426 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14437 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2302: - -/* Line 1455 of yacc.c */ -#line 14427 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14438 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2303: - -/* Line 1455 of yacc.c */ -#line 14428 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14439 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2304: - -/* Line 1455 of yacc.c */ -#line 14429 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14440 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2305: - -/* Line 1455 of yacc.c */ -#line 14430 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14441 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2306: - -/* Line 1455 of yacc.c */ -#line 14431 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14442 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2307: - -/* Line 1455 of yacc.c */ -#line 14432 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14443 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2308: - -/* Line 1455 of yacc.c */ -#line 14433 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14444 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2309: - -/* Line 1455 of yacc.c */ -#line 14434 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14445 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2310: - -/* Line 1455 of yacc.c */ -#line 14435 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14446 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2311: - -/* Line 1455 of yacc.c */ -#line 14436 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14447 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2312: - -/* Line 1455 of yacc.c */ -#line 14437 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14448 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2313: - -/* Line 1455 of yacc.c */ -#line 14438 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14449 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2314: - -/* Line 1455 of yacc.c */ -#line 14439 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14450 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2315: - -/* Line 1455 of yacc.c */ -#line 14440 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14451 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2316: - -/* Line 1455 of yacc.c */ -#line 14441 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14452 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2317: - -/* Line 1455 of yacc.c */ -#line 14442 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14453 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2318: - -/* Line 1455 of yacc.c */ -#line 14443 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14454 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2319: - -/* Line 1455 of yacc.c */ -#line 14444 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14455 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2320: - -/* Line 1455 of yacc.c */ -#line 14445 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14456 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2321: - -/* Line 1455 of yacc.c */ -#line 14446 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14457 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2322: - -/* Line 1455 of yacc.c */ -#line 14447 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14458 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2323: - -/* Line 1455 of yacc.c */ -#line 14448 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14459 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2324: - -/* Line 1455 of yacc.c */ -#line 14449 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14460 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2325: - -/* Line 1455 of yacc.c */ -#line 14450 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14461 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2326: - -/* Line 1455 of yacc.c */ -#line 14451 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14462 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2327: - -/* Line 1455 of yacc.c */ -#line 14452 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14463 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2328: - -/* Line 1455 of yacc.c */ -#line 14453 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14464 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2329: - -/* Line 1455 of yacc.c */ -#line 14454 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14465 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2330: - -/* Line 1455 of yacc.c */ -#line 14455 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14466 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2331: - -/* Line 1455 of yacc.c */ -#line 14456 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14467 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2332: - -/* Line 1455 of yacc.c */ -#line 14457 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14468 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2333: - -/* Line 1455 of yacc.c */ -#line 14458 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14469 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2334: - -/* Line 1455 of yacc.c */ -#line 14459 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14470 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2335: - -/* Line 1455 of yacc.c */ -#line 14460 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14471 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2336: - -/* Line 1455 of yacc.c */ -#line 14461 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14472 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2337: - -/* Line 1455 of yacc.c */ -#line 14462 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14473 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2338: - -/* Line 1455 of yacc.c */ -#line 14463 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14474 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2339: - -/* Line 1455 of yacc.c */ -#line 14475 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14486 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; mysql_init_select(lex); @@ -38888,16 +36994,14 @@ break; case 2340: - -/* Line 1455 of yacc.c */ -#line 14487 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14498 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2341: - -/* Line 1455 of yacc.c */ -#line 14494 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14505 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38905,18 +37009,16 @@ break; case 2343: - -/* Line 1455 of yacc.c */ -#line 14500 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->option_type= OPT_DEFAULT; } break; case 2344: - -/* Line 1455 of yacc.c */ -#line 14504 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14515 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38924,18 +37026,16 @@ break; case 2345: - -/* Line 1455 of yacc.c */ -#line 14509 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14520 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->option_type= (yyvsp[(1) - (1)].var_type); } break; case 2347: - -/* Line 1455 of yacc.c */ -#line 14519 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14530 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38943,9 +37043,8 @@ break; case 2349: - -/* Line 1455 of yacc.c */ -#line 14525 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14536 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38953,18 +37052,16 @@ break; case 2352: - -/* Line 1455 of yacc.c */ -#line 14539 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14550 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { sp_create_assignment_lex(YYTHD, YY_TOKEN_START); } break; case 2353: - -/* Line 1455 of yacc.c */ -#line 14543 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14554 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38972,18 +37069,16 @@ break; case 2354: - -/* Line 1455 of yacc.c */ -#line 14548 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14559 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { sp_create_assignment_lex(YYTHD, YY_TOKEN_START); } break; case 2355: - -/* Line 1455 of yacc.c */ -#line 14552 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14563 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) MYSQL_YYABORT; @@ -38991,95 +37086,82 @@ break; case 2356: - -/* Line 1455 of yacc.c */ -#line 14561 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14572 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->option_type= (yyvsp[(1) - (1)].var_type); } break; case 2359: - -/* Line 1455 of yacc.c */ -#line 14569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14580 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_GLOBAL; } break; case 2360: - -/* Line 1455 of yacc.c */ -#line 14570 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14581 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2361: - -/* Line 1455 of yacc.c */ -#line 14571 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14582 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2362: - -/* Line 1455 of yacc.c */ -#line 14575 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14586 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2363: - -/* Line 1455 of yacc.c */ -#line 14576 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14587 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_GLOBAL; } break; case 2364: - -/* Line 1455 of yacc.c */ -#line 14577 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14588 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2365: - -/* Line 1455 of yacc.c */ -#line 14578 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14589 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2366: - -/* Line 1455 of yacc.c */ -#line 14582 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14593 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_DEFAULT; } break; case 2367: - -/* Line 1455 of yacc.c */ -#line 14583 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14594 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_GLOBAL; } break; case 2368: - -/* Line 1455 of yacc.c */ -#line 14584 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14595 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2369: - -/* Line 1455 of yacc.c */ -#line 14585 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14596 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.var_type)=OPT_SESSION; } break; case 2370: - -/* Line 1455 of yacc.c */ -#line 14591 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14602 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -39103,9 +37185,8 @@ break; case 2371: - -/* Line 1455 of yacc.c */ -#line 14616 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14627 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { sp_head *sp= Lex->sphead; @@ -39115,9 +37196,8 @@ break; case 2372: - -/* Line 1455 of yacc.c */ -#line 14623 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14634 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -39213,9 +37293,8 @@ break; case 2373: - -/* Line 1455 of yacc.c */ -#line 14716 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14727 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Item_func_set_user_var *item; item= new (YYTHD->mem_root) Item_func_set_user_var((yyvsp[(2) - (4)].lex_str), (yyvsp[(4) - (4)].item), false); @@ -39229,9 +37308,8 @@ break; case 2374: - -/* Line 1455 of yacc.c */ -#line 14727 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14738 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; struct sys_var_with_base tmp= (yyvsp[(4) - (6)].variable); @@ -39247,9 +37325,8 @@ break; case 2375: - -/* Line 1455 of yacc.c */ -#line 14740 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14751 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -39268,9 +37345,8 @@ break; case 2376: - -/* Line 1455 of yacc.c */ -#line 14756 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14767 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); @@ -39286,9 +37362,8 @@ break; case 2377: - -/* Line 1455 of yacc.c */ -#line 14769 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14780 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; const CHARSET_INFO *cs2; @@ -39313,9 +37388,8 @@ break; case 2378: - -/* Line 1455 of yacc.c */ -#line 14791 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14802 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -39353,9 +37427,8 @@ break; case 2379: - -/* Line 1455 of yacc.c */ -#line 14826 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14837 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX_USER *user= (yyvsp[(3) - (5)].lex_user); LEX *lex= Lex; @@ -39397,9 +37470,8 @@ break; case 2380: - -/* Line 1455 of yacc.c */ -#line 14868 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14879 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -39430,9 +37502,8 @@ break; case 2381: - -/* Line 1455 of yacc.c */ -#line 14896 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14907 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -39481,9 +37552,8 @@ break; case 2382: - -/* Line 1455 of yacc.c */ -#line 14942 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14953 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { sys_var *tmp=find_sys_var(YYTHD, (yyvsp[(3) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).length); if (!tmp) @@ -39497,9 +37567,8 @@ break; case 2387: - -/* Line 1455 of yacc.c */ -#line 14963 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14974 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex=Lex; @@ -39517,9 +37586,8 @@ break; case 2388: - -/* Line 1455 of yacc.c */ -#line 14981 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 14992 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex=Lex; @@ -39537,58 +37605,50 @@ break; case 2389: - -/* Line 1455 of yacc.c */ -#line 14998 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15009 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= true; } break; case 2390: - -/* Line 1455 of yacc.c */ -#line 14999 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15010 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= false; } break; case 2391: - -/* Line 1455 of yacc.c */ -#line 15003 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15014 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.tx_isolation)= ISO_READ_UNCOMMITTED; } break; case 2392: - -/* Line 1455 of yacc.c */ -#line 15004 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15015 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.tx_isolation)= ISO_READ_COMMITTED; } break; case 2393: - -/* Line 1455 of yacc.c */ -#line 15005 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15016 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.tx_isolation)= ISO_REPEATABLE_READ; } break; case 2394: - -/* Line 1455 of yacc.c */ -#line 15006 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15017 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.tx_isolation)= ISO_SERIALIZABLE; } break; case 2395: - -/* Line 1455 of yacc.c */ -#line 15010 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15021 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.simple_string)=(yyvsp[(1) - (1)].lex_str).str;} break; case 2396: - -/* Line 1455 of yacc.c */ -#line 15012 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15023 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if ((yyvsp[(3) - (4)].lex_str).length == 0) (yyval.simple_string)= (yyvsp[(3) - (4)].lex_str).str; @@ -39609,9 +37669,8 @@ break; case 2397: - -/* Line 1455 of yacc.c */ -#line 15030 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15041 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { WARN_DEPRECATED(YYTHD, "OLD_PASSWORD", "PASSWORD"); (yyval.simple_string)= (yyvsp[(3) - (4)].lex_str).length ? Item_func_old_password:: @@ -39624,23 +37683,20 @@ break; case 2398: - -/* Line 1455 of yacc.c */ -#line 15043 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15054 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=(yyvsp[(1) - (1)].item); } break; case 2399: - -/* Line 1455 of yacc.c */ -#line 15044 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15055 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=0; } break; case 2400: - -/* Line 1455 of yacc.c */ -#line 15046 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15057 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=new (YYTHD->mem_root) Item_string("ON", 2, system_charset_info); if ((yyval.item) == NULL) @@ -39649,9 +37705,8 @@ break; case 2401: - -/* Line 1455 of yacc.c */ -#line 15052 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15063 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=new (YYTHD->mem_root) Item_string("ALL", 3, system_charset_info); if ((yyval.item) == NULL) @@ -39660,9 +37715,8 @@ break; case 2402: - -/* Line 1455 of yacc.c */ -#line 15058 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15069 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.item)=new (YYTHD->mem_root) Item_string("binary", 6, system_charset_info); if ((yyval.item) == NULL) @@ -39671,9 +37725,8 @@ break; case 2403: - -/* Line 1455 of yacc.c */ -#line 15069 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15080 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -39687,16 +37740,14 @@ break; case 2404: - -/* Line 1455 of yacc.c */ -#line 15080 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15091 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2409: - -/* Line 1455 of yacc.c */ -#line 15095 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15106 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { thr_lock_type lock_type= (thr_lock_type) (yyvsp[(3) - (3)].num); bool lock_for_write= (lock_type >= TL_WRITE_ALLOW_WRITE); @@ -39709,23 +37760,20 @@ break; case 2410: - -/* Line 1455 of yacc.c */ -#line 15107 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15118 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TL_READ_NO_INSERT; } break; case 2411: - -/* Line 1455 of yacc.c */ -#line 15108 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15119 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TL_WRITE_DEFAULT; } break; case 2412: - -/* Line 1455 of yacc.c */ -#line 15110 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15121 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TL_WRITE_LOW_PRIORITY; WARN_DEPRECATED(YYTHD, "LOW_PRIORITY WRITE", "WRITE"); @@ -39733,16 +37781,14 @@ break; case 2413: - -/* Line 1455 of yacc.c */ -#line 15114 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15125 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= TL_READ; } break; case 2414: - -/* Line 1455 of yacc.c */ -#line 15119 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15130 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; @@ -39756,16 +37802,14 @@ break; case 2415: - -/* Line 1455 of yacc.c */ -#line 15130 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15141 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2416: - -/* Line 1455 of yacc.c */ -#line 15139 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -39784,9 +37828,8 @@ break; case 2417: - -/* Line 1455 of yacc.c */ -#line 15155 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15166 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -39805,9 +37848,8 @@ break; case 2418: - -/* Line 1455 of yacc.c */ -#line 15171 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15182 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->sphead) @@ -39828,9 +37870,8 @@ break; case 2419: - -/* Line 1455 of yacc.c */ -#line 15189 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15200 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -39851,65 +37892,56 @@ break; case 2420: - -/* Line 1455 of yacc.c */ -#line 15209 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15220 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ident= null_lex_str; (yyval.ha_read_mode)=(yyvsp[(1) - (1)].ha_read_mode); } break; case 2421: - -/* Line 1455 of yacc.c */ -#line 15210 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15221 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ident= (yyvsp[(1) - (2)].lex_str); (yyval.ha_read_mode)=(yyvsp[(2) - (2)].ha_read_mode); } break; case 2422: - -/* Line 1455 of yacc.c */ -#line 15214 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15225 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RFIRST; } break; case 2423: - -/* Line 1455 of yacc.c */ -#line 15215 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15226 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RNEXT; } break; case 2424: - -/* Line 1455 of yacc.c */ -#line 15219 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15230 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RFIRST; } break; case 2425: - -/* Line 1455 of yacc.c */ -#line 15220 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15231 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RNEXT; } break; case 2426: - -/* Line 1455 of yacc.c */ -#line 15221 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15232 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RPREV; } break; case 2427: - -/* Line 1455 of yacc.c */ -#line 15222 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15233 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RLAST; } break; case 2428: - -/* Line 1455 of yacc.c */ -#line 15224 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15235 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { YYTHD->m_parser_state->m_yacc.m_ha_rkey_mode= (yyvsp[(1) - (1)].ha_rkey_mode); Lex->insert_list= new List_item; @@ -39919,67 +37951,58 @@ break; case 2429: - -/* Line 1455 of yacc.c */ -#line 15231 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15242 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_read_mode)= RKEY; } break; case 2430: - -/* Line 1455 of yacc.c */ -#line 15237 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15248 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_rkey_mode)=HA_READ_KEY_EXACT; } break; case 2431: - -/* Line 1455 of yacc.c */ -#line 15238 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15249 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_rkey_mode)=HA_READ_KEY_OR_NEXT; } break; case 2432: - -/* Line 1455 of yacc.c */ -#line 15239 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15250 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_rkey_mode)=HA_READ_KEY_OR_PREV; } break; case 2433: - -/* Line 1455 of yacc.c */ -#line 15240 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15251 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_rkey_mode)=HA_READ_AFTER_KEY; } break; case 2434: - -/* Line 1455 of yacc.c */ -#line 15241 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15252 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.ha_rkey_mode)=HA_READ_BEFORE_KEY; } break; case 2435: - -/* Line 1455 of yacc.c */ -#line 15247 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15258 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_REVOKE; } break; case 2436: - -/* Line 1455 of yacc.c */ -#line 15248 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15259 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2437: - -/* Line 1455 of yacc.c */ -#line 15253 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15264 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->type= 0; @@ -39987,9 +38010,8 @@ break; case 2438: - -/* Line 1455 of yacc.c */ -#line 15258 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15269 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->columns.elements) @@ -40002,9 +38024,8 @@ break; case 2439: - -/* Line 1455 of yacc.c */ -#line 15268 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15279 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->columns.elements) @@ -40017,18 +38038,16 @@ break; case 2440: - -/* Line 1455 of yacc.c */ -#line 15278 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15289 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_REVOKE_ALL; } break; case 2441: - -/* Line 1455 of yacc.c */ -#line 15282 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15293 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->users_list.push_front ((yyvsp[(3) - (5)].lex_user)); @@ -40037,23 +38056,20 @@ break; case 2442: - -/* Line 1455 of yacc.c */ -#line 15290 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15301 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command= SQLCOM_GRANT; } break; case 2443: - -/* Line 1455 of yacc.c */ -#line 15291 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15302 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2444: - -/* Line 1455 of yacc.c */ -#line 15297 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15308 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->type= 0; @@ -40061,9 +38077,8 @@ break; case 2445: - -/* Line 1455 of yacc.c */ -#line 15303 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15314 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->columns.elements) @@ -40076,9 +38091,8 @@ break; case 2446: - -/* Line 1455 of yacc.c */ -#line 15314 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15325 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->columns.elements) @@ -40091,9 +38105,8 @@ break; case 2447: - -/* Line 1455 of yacc.c */ -#line 15324 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15335 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->users_list.push_front ((yyvsp[(3) - (6)].lex_user)); @@ -40102,9 +38115,8 @@ break; case 2450: - -/* Line 1455 of yacc.c */ -#line 15338 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15349 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; if (lex->grant == GLOBAL_ACLS && @@ -40114,9 +38126,8 @@ break; case 2451: - -/* Line 1455 of yacc.c */ -#line 15345 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15356 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->all_privileges= 1; Lex->grant= GLOBAL_ACLS; @@ -40124,261 +38135,224 @@ break; case 2456: - -/* Line 1455 of yacc.c */ -#line 15363 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15374 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->which_columns = SELECT_ACL;} break; case 2457: - -/* Line 1455 of yacc.c */ -#line 15364 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15375 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2458: - -/* Line 1455 of yacc.c */ -#line 15366 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15377 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->which_columns = INSERT_ACL;} break; case 2459: - -/* Line 1455 of yacc.c */ -#line 15367 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15378 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2460: - -/* Line 1455 of yacc.c */ -#line 15369 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15380 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->which_columns = UPDATE_ACL; } break; case 2461: - -/* Line 1455 of yacc.c */ -#line 15370 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15381 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2462: - -/* Line 1455 of yacc.c */ -#line 15372 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15383 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->which_columns = REFERENCES_ACL;} break; case 2463: - -/* Line 1455 of yacc.c */ -#line 15373 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15384 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2464: - -/* Line 1455 of yacc.c */ -#line 15374 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15385 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= DELETE_ACL;} break; case 2465: - -/* Line 1455 of yacc.c */ -#line 15375 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15386 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2466: - -/* Line 1455 of yacc.c */ -#line 15376 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15387 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= INDEX_ACL;} break; case 2467: - -/* Line 1455 of yacc.c */ -#line 15377 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15388 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= ALTER_ACL;} break; case 2468: - -/* Line 1455 of yacc.c */ -#line 15378 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15389 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_ACL;} break; case 2469: - -/* Line 1455 of yacc.c */ -#line 15379 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15390 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= DROP_ACL;} break; case 2470: - -/* Line 1455 of yacc.c */ -#line 15380 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15391 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= EXECUTE_ACL;} break; case 2471: - -/* Line 1455 of yacc.c */ -#line 15381 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15392 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= RELOAD_ACL;} break; case 2472: - -/* Line 1455 of yacc.c */ -#line 15382 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15393 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= SHUTDOWN_ACL;} break; case 2473: - -/* Line 1455 of yacc.c */ -#line 15383 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15394 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= PROCESS_ACL;} break; case 2474: - -/* Line 1455 of yacc.c */ -#line 15384 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15395 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= FILE_ACL;} break; case 2475: - -/* Line 1455 of yacc.c */ -#line 15385 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15396 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= GRANT_ACL;} break; case 2476: - -/* Line 1455 of yacc.c */ -#line 15386 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15397 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= SHOW_DB_ACL;} break; case 2477: - -/* Line 1455 of yacc.c */ -#line 15387 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15398 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= SUPER_ACL;} break; case 2478: - -/* Line 1455 of yacc.c */ -#line 15388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15399 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_TMP_ACL;} break; case 2479: - -/* Line 1455 of yacc.c */ -#line 15389 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15400 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= LOCK_TABLES_ACL; } break; case 2480: - -/* Line 1455 of yacc.c */ -#line 15390 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15401 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= REPL_SLAVE_ACL; } break; case 2481: - -/* Line 1455 of yacc.c */ -#line 15391 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15402 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= REPL_CLIENT_ACL; } break; case 2482: - -/* Line 1455 of yacc.c */ -#line 15392 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15403 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_VIEW_ACL; } break; case 2483: - -/* Line 1455 of yacc.c */ -#line 15393 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15404 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= SHOW_VIEW_ACL; } break; case 2484: - -/* Line 1455 of yacc.c */ -#line 15394 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15405 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_PROC_ACL; } break; case 2485: - -/* Line 1455 of yacc.c */ -#line 15395 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15406 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= ALTER_PROC_ACL; } break; case 2486: - -/* Line 1455 of yacc.c */ -#line 15396 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_USER_ACL; } break; case 2487: - -/* Line 1455 of yacc.c */ -#line 15397 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15408 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= EVENT_ACL;} break; case 2488: - -/* Line 1455 of yacc.c */ -#line 15398 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15409 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= TRIGGER_ACL; } break; case 2489: - -/* Line 1455 of yacc.c */ -#line 15399 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15410 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= CREATE_TABLESPACE_ACL; } break; case 2490: - -/* Line 1455 of yacc.c */ -#line 15403 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15414 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2491: - -/* Line 1455 of yacc.c */ -#line 15404 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15415 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2494: - -/* Line 1455 of yacc.c */ -#line 15414 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15425 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->x509_subject) @@ -40391,9 +38365,8 @@ break; case 2495: - -/* Line 1455 of yacc.c */ -#line 15424 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15435 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->x509_issuer) @@ -40406,9 +38379,8 @@ break; case 2496: - -/* Line 1455 of yacc.c */ -#line 15434 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15445 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (lex->ssl_cipher) @@ -40421,9 +38393,8 @@ break; case 2497: - -/* Line 1455 of yacc.c */ -#line 15447 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15458 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; size_t dummy; @@ -40441,9 +38412,8 @@ break; case 2498: - -/* Line 1455 of yacc.c */ -#line 15462 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15473 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->current_select->db = (yyvsp[(1) - (3)].lex_str).str; @@ -40459,9 +38429,8 @@ break; case 2499: - -/* Line 1455 of yacc.c */ -#line 15475 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15486 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->current_select->db = NULL; @@ -40477,9 +38446,8 @@ break; case 2500: - -/* Line 1455 of yacc.c */ -#line 15488 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15499 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!lex->current_select->add_table_to_list(lex->thd, (yyvsp[(1) - (1)].table),NULL, @@ -40491,9 +38459,8 @@ break; case 2501: - -/* Line 1455 of yacc.c */ -#line 15500 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15511 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user))) MYSQL_YYABORT; @@ -40501,9 +38468,8 @@ break; case 2502: - -/* Line 1455 of yacc.c */ -#line 15505 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15516 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user))) MYSQL_YYABORT; @@ -40511,9 +38477,8 @@ break; case 2503: - -/* Line 1455 of yacc.c */ -#line 15513 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15524 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user))) MYSQL_YYABORT; @@ -40521,9 +38486,8 @@ break; case 2504: - -/* Line 1455 of yacc.c */ -#line 15518 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15529 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user))) MYSQL_YYABORT; @@ -40531,9 +38495,8 @@ break; case 2505: - -/* Line 1455 of yacc.c */ -#line 15526 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15537 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_user)=(yyvsp[(1) - (4)].lex_user); (yyvsp[(1) - (4)].lex_user)->password=(yyvsp[(4) - (4)].lex_str); if (Lex->sql_command == SQLCOM_REVOKE) @@ -40554,9 +38517,8 @@ break; case 2506: - -/* Line 1455 of yacc.c */ -#line 15544 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15555 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->sql_command == SQLCOM_REVOKE) { @@ -40579,9 +38541,8 @@ break; case 2507: - -/* Line 1455 of yacc.c */ -#line 15564 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15575 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->sql_command == SQLCOM_REVOKE) { @@ -40596,9 +38557,8 @@ break; case 2508: - -/* Line 1455 of yacc.c */ -#line 15576 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15587 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->sql_command == SQLCOM_REVOKE) { @@ -40614,9 +38574,8 @@ break; case 2509: - -/* Line 1455 of yacc.c */ -#line 15589 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15600 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.lex_user)= (yyvsp[(1) - (1)].lex_user); (yyvsp[(1) - (1)].lex_user)->password= null_lex_str; @@ -40624,9 +38583,8 @@ break; case 2510: - -/* Line 1455 of yacc.c */ -#line 15597 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15608 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->grant |= lex->which_columns; @@ -40634,9 +38592,8 @@ break; case 2514: - -/* Line 1455 of yacc.c */ -#line 15611 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15622 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { String *new_str = new (YYTHD->mem_root) String((const char*) (yyvsp[(1) - (1)].lex_str).str,(yyvsp[(1) - (1)].lex_str).length,system_charset_info); if (new_str == NULL) @@ -40664,87 +38621,76 @@ break; case 2516: - -/* Line 1455 of yacc.c */ -#line 15640 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15651 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ssl_type=SSL_TYPE_SPECIFIED; } break; case 2517: - -/* Line 1455 of yacc.c */ -#line 15644 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15655 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ssl_type=SSL_TYPE_ANY; } break; case 2518: - -/* Line 1455 of yacc.c */ -#line 15648 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15659 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ssl_type=SSL_TYPE_X509; } break; case 2519: - -/* Line 1455 of yacc.c */ -#line 15652 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15663 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->ssl_type=SSL_TYPE_NONE; } break; case 2520: - -/* Line 1455 of yacc.c */ -#line 15658 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15669 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2522: - -/* Line 1455 of yacc.c */ -#line 15663 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15674 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2523: - -/* Line 1455 of yacc.c */ -#line 15664 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15675 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= GRANT_ACL;} break; case 2524: - -/* Line 1455 of yacc.c */ -#line 15668 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15679 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2525: - -/* Line 1455 of yacc.c */ -#line 15669 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15680 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2526: - -/* Line 1455 of yacc.c */ -#line 15673 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15684 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->grant |= GRANT_ACL;} break; case 2527: - -/* Line 1455 of yacc.c */ -#line 15675 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15686 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->mqh.questions=(yyvsp[(2) - (2)].ulong_num); @@ -40753,9 +38699,8 @@ break; case 2528: - -/* Line 1455 of yacc.c */ -#line 15681 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15692 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->mqh.updates=(yyvsp[(2) - (2)].ulong_num); @@ -40764,9 +38709,8 @@ break; case 2529: - -/* Line 1455 of yacc.c */ -#line 15687 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15698 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->mqh.conn_per_hour= (yyvsp[(2) - (2)].ulong_num); @@ -40775,9 +38719,8 @@ break; case 2530: - -/* Line 1455 of yacc.c */ -#line 15693 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15704 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->mqh.user_conn= (yyvsp[(2) - (2)].ulong_num); @@ -40786,9 +38729,8 @@ break; case 2531: - -/* Line 1455 of yacc.c */ -#line 15702 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15713 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command = SQLCOM_BEGIN; @@ -40797,86 +38739,74 @@ break; case 2532: - -/* Line 1455 of yacc.c */ -#line 15707 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15718 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2533: - -/* Line 1455 of yacc.c */ -#line 15711 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15722 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2534: - -/* Line 1455 of yacc.c */ -#line 15712 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15723 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2535: - -/* Line 1455 of yacc.c */ -#line 15717 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15728 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_UNKNOWN; } break; case 2536: - -/* Line 1455 of yacc.c */ -#line 15718 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15729 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_NO; } break; case 2537: - -/* Line 1455 of yacc.c */ -#line 15719 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15730 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_YES; } break; case 2538: - -/* Line 1455 of yacc.c */ -#line 15724 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15735 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_UNKNOWN; } break; case 2539: - -/* Line 1455 of yacc.c */ -#line 15725 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15736 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_YES; } break; case 2540: - -/* Line 1455 of yacc.c */ -#line 15726 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15737 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.m_yes_no_unk)= TVL_NO; } break; case 2541: - -/* Line 1455 of yacc.c */ -#line 15730 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15741 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2542: - -/* Line 1455 of yacc.c */ -#line 15731 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15742 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2543: - -/* Line 1455 of yacc.c */ -#line 15736 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15747 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_COMMIT; @@ -40888,9 +38818,8 @@ break; case 2544: - -/* Line 1455 of yacc.c */ -#line 15748 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15759 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_ROLLBACK; @@ -40902,9 +38831,8 @@ break; case 2545: - -/* Line 1455 of yacc.c */ -#line 15758 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15769 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_ROLLBACK_TO_SAVEPOINT; @@ -40913,9 +38841,8 @@ break; case 2546: - -/* Line 1455 of yacc.c */ -#line 15767 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15778 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_SAVEPOINT; @@ -40924,9 +38851,8 @@ break; case 2547: - -/* Line 1455 of yacc.c */ -#line 15776 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15787 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; lex->sql_command= SQLCOM_RELEASE_SAVEPOINT; @@ -40935,16 +38861,14 @@ break; case 2548: - -/* Line 1455 of yacc.c */ -#line 15789 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15800 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2550: - -/* Line 1455 of yacc.c */ -#line 15795 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15806 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_select_to_union_list(Lex, (bool)(yyvsp[(2) - (2)].num), TRUE)) MYSQL_YYABORT; @@ -40952,9 +38876,8 @@ break; case 2551: - -/* Line 1455 of yacc.c */ -#line 15800 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15811 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* Remove from the name resolution context stack the context of the @@ -40965,44 +38888,38 @@ break; case 2552: - -/* Line 1455 of yacc.c */ -#line 15810 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15821 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 0; } break; case 2553: - -/* Line 1455 of yacc.c */ -#line 15811 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15822 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 2554: - -/* Line 1455 of yacc.c */ -#line 15812 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15823 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)= 1; } break; case 2555: - -/* Line 1455 of yacc.c */ -#line 15816 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15827 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.is_not_empty)= false; } break; case 2556: - -/* Line 1455 of yacc.c */ -#line 15817 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15828 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.is_not_empty)= true; } break; case 2557: - -/* Line 1455 of yacc.c */ -#line 15821 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15832 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41021,9 +38938,8 @@ break; case 2558: - -/* Line 1455 of yacc.c */ -#line 15837 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15848 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; thd->lex->current_select->no_table_names_allowed= 0; @@ -41032,48 +38948,42 @@ break; case 2561: - -/* Line 1455 of yacc.c */ -#line 15850 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15861 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=1; } break; case 2562: - -/* Line 1455 of yacc.c */ -#line 15851 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15862 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=1; } break; case 2563: - -/* Line 1455 of yacc.c */ -#line 15852 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15863 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.num)=0; } break; case 2564: - -/* Line 1455 of yacc.c */ -#line 15857 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15868 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.select_lex)= Lex->current_select->master_unit()->first_select(); } break; case 2565: - -/* Line 1455 of yacc.c */ -#line 15861 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15872 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.select_lex)= Lex->current_select->master_unit()->first_select(); } break; case 2567: - -/* Line 1455 of yacc.c */ -#line 15870 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15881 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (add_select_to_union_list(Lex, (bool)(yyvsp[(3) - (3)].num), FALSE)) MYSQL_YYABORT; @@ -41081,9 +38991,8 @@ break; case 2568: - -/* Line 1455 of yacc.c */ -#line 15876 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15887 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->pop_context(); (yyval.select_lex)= (yyvsp[(1) - (6)].select_lex); @@ -41091,18 +39000,16 @@ break; case 2569: - -/* Line 1455 of yacc.c */ -#line 15885 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15896 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { (yyval.select_lex)= (yyvsp[(2) - (3)].select_lex); } break; case 2570: - -/* Line 1455 of yacc.c */ -#line 15891 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15902 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; if (!lex->expr_allows_subselect || @@ -41124,9 +39031,8 @@ break; case 2571: - -/* Line 1455 of yacc.c */ -#line 15912 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15923 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex=Lex; @@ -41152,16 +39058,14 @@ break; case 2576: - -/* Line 1455 of yacc.c */ -#line 15947 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15958 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= SELECT_STRAIGHT_JOIN; } break; case 2577: - -/* Line 1455 of yacc.c */ -#line 15949 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15960 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (check_simple_select()) MYSQL_YYABORT; @@ -41172,30 +39076,26 @@ break; case 2578: - -/* Line 1455 of yacc.c */ -#line 15956 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15967 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= SELECT_DISTINCT; } break; case 2579: - -/* Line 1455 of yacc.c */ -#line 15957 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15968 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= SELECT_SMALL_RESULT; } break; case 2580: - -/* Line 1455 of yacc.c */ -#line 15958 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15969 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= SELECT_BIG_RESULT; } break; case 2581: - -/* Line 1455 of yacc.c */ -#line 15960 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15971 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (check_simple_select()) MYSQL_YYABORT; @@ -41204,9 +39104,8 @@ break; case 2582: - -/* Line 1455 of yacc.c */ -#line 15966 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15977 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (check_simple_select()) MYSQL_YYABORT; @@ -41215,37 +39114,32 @@ break; case 2583: - -/* Line 1455 of yacc.c */ -#line 15971 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15982 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Select->options|= SELECT_ALL; } break; case 2584: - -/* Line 1455 of yacc.c */ -#line 15982 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15993 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2585: - -/* Line 1455 of yacc.c */ -#line 15984 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15995 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2586: - -/* Line 1455 of yacc.c */ -#line 15986 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 15997 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2600: - -/* Line 1455 of yacc.c */ -#line 16019 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16030 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* We have to distinguish missing DEFINER-clause from case when @@ -41259,88 +39153,76 @@ break; case 2601: - -/* Line 1455 of yacc.c */ -#line 16033 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16044 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { YYTHD->lex->definer= get_current_user(YYTHD, (yyvsp[(3) - (3)].lex_user)); } break; case 2602: - -/* Line 1455 of yacc.c */ -#line 16046 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16057 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2603: - -/* Line 1455 of yacc.c */ -#line 16048 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16059 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2604: - -/* Line 1455 of yacc.c */ -#line 16050 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16061 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2605: - -/* Line 1455 of yacc.c */ -#line 16055 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16066 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_mode= VIEW_CREATE_OR_REPLACE; } break; case 2606: - -/* Line 1455 of yacc.c */ -#line 16060 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16071 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; } break; case 2607: - -/* Line 1455 of yacc.c */ -#line 16062 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16073 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; } break; case 2608: - -/* Line 1455 of yacc.c */ -#line 16064 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16075 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; } break; case 2609: - -/* Line 1455 of yacc.c */ -#line 16069 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16080 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_suid= VIEW_SUID_DEFAULT; } break; case 2610: - -/* Line 1455 of yacc.c */ -#line 16071 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16082 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_suid= VIEW_SUID_DEFINER; } break; case 2611: - -/* Line 1455 of yacc.c */ -#line 16073 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16084 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_suid= VIEW_SUID_INVOKER; } break; case 2612: - -/* Line 1455 of yacc.c */ -#line 16078 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16089 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41356,16 +39238,14 @@ break; case 2614: - -/* Line 1455 of yacc.c */ -#line 16095 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16106 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2616: - -/* Line 1455 of yacc.c */ -#line 16101 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16112 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->view_list.push_back((LEX_STRING*) sql_memdup(&(yyvsp[(1) - (1)].lex_str), sizeof(LEX_STRING))); @@ -41373,9 +39253,8 @@ break; case 2617: - -/* Line 1455 of yacc.c */ -#line 16106 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16117 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->view_list.push_back((LEX_STRING*) sql_memdup(&(yyvsp[(3) - (3)].lex_str), sizeof(LEX_STRING))); @@ -41383,9 +39262,8 @@ break; case 2618: - -/* Line 1455 of yacc.c */ -#line 16113 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16124 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->parsing_options.allows_variable= FALSE; @@ -41397,9 +39275,8 @@ break; case 2619: - -/* Line 1455 of yacc.c */ -#line 16122 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16133 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -41416,9 +39293,8 @@ break; case 2620: - -/* Line 1455 of yacc.c */ -#line 16139 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16150 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (Lex->current_select->set_braces(0)) { @@ -41437,9 +39313,8 @@ break; case 2623: - -/* Line 1455 of yacc.c */ -#line 16160 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16171 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { if (setup_select_in_parentheses(Lex)) MYSQL_YYABORT; @@ -41447,73 +39322,64 @@ break; case 2625: - -/* Line 1455 of yacc.c */ -#line 16169 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16180 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->current_select->table_list.save_and_clear(&Lex->save_list); } break; case 2626: - -/* Line 1455 of yacc.c */ -#line 16173 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16184 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->current_select->table_list.push_front(&Lex->save_list); } break; case 2627: - -/* Line 1455 of yacc.c */ -#line 16180 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16191 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_check= VIEW_CHECK_NONE; } break; case 2628: - -/* Line 1455 of yacc.c */ -#line 16182 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16193 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_check= VIEW_CHECK_CASCADED; } break; case 2629: - -/* Line 1455 of yacc.c */ -#line 16184 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16195 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_check= VIEW_CHECK_CASCADED; } break; case 2630: - -/* Line 1455 of yacc.c */ -#line 16186 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16197 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->create_view_check= VIEW_CHECK_LOCAL; } break; case 2631: - -/* Line 1455 of yacc.c */ -#line 16203 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16214 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $8 */ Lex->raw_trg_on_table_name_begin= YYLIP->get_tok_start(); } break; case 2632: - -/* Line 1455 of yacc.c */ -#line 16209 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16220 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $12 */ Lex->raw_trg_on_table_name_end= YYLIP->get_tok_start(); } break; case 2633: - -/* Line 1455 of yacc.c */ -#line 16214 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16225 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $15 */ THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41546,9 +39412,8 @@ break; case 2634: - -/* Line 1455 of yacc.c */ -#line 16244 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16255 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $17 */ THD *thd= YYTHD; LEX *lex= Lex; @@ -41576,9 +39441,8 @@ break; case 2635: - -/* Line 1455 of yacc.c */ -#line 16279 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16290 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41598,9 +39462,8 @@ break; case 2636: - -/* Line 1455 of yacc.c */ -#line 16297 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16308 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41620,9 +39483,8 @@ break; case 2637: - -/* Line 1455 of yacc.c */ -#line 16320 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16331 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $5 */ THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41656,9 +39518,8 @@ break; case 2638: - -/* Line 1455 of yacc.c */ -#line 16352 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16363 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $8 */ Lex->sphead->m_parser_data.set_parameter_end_ptr( YYLIP->get_cpp_tok_start()); @@ -41666,9 +39527,8 @@ break; case 2639: - -/* Line 1455 of yacc.c */ -#line 16357 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16368 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $10 */ LEX *lex= Lex; lex->charset= NULL; @@ -41679,9 +39539,8 @@ break; case 2640: - -/* Line 1455 of yacc.c */ -#line 16365 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16376 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $12 */ LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -41707,9 +39566,8 @@ break; case 2641: - -/* Line 1455 of yacc.c */ -#line 16388 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16399 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* $14 */ THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41720,9 +39578,8 @@ break; case 2642: - -/* Line 1455 of yacc.c */ -#line 16396 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16407 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41780,9 +39637,8 @@ break; case 2643: - -/* Line 1455 of yacc.c */ -#line 16454 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16465 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -41805,9 +39661,8 @@ break; case 2644: - -/* Line 1455 of yacc.c */ -#line 16474 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16485 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { /* NOTE: the start of the parameters in the query string is @@ -41822,9 +39677,8 @@ break; case 2645: - -/* Line 1455 of yacc.c */ -#line 16487 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16498 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41837,9 +39691,8 @@ break; case 2646: - -/* Line 1455 of yacc.c */ -#line 16497 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16508 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= thd->lex; @@ -41850,9 +39703,8 @@ break; case 2647: - -/* Line 1455 of yacc.c */ -#line 16505 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16516 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { THD *thd= YYTHD; LEX *lex= Lex; @@ -41864,63 +39716,56 @@ break; case 2648: - -/* Line 1455 of yacc.c */ -#line 16519 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16530 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_START; } break; case 2649: - -/* Line 1455 of yacc.c */ -#line 16523 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16534 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_END; } break; case 2650: - -/* Line 1455 of yacc.c */ -#line 16527 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16538 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_PREPARE; } break; case 2651: - -/* Line 1455 of yacc.c */ -#line 16531 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16542 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_COMMIT; } break; case 2652: - -/* Line 1455 of yacc.c */ -#line 16535 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16546 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_ROLLBACK; } break; case 2653: - -/* Line 1455 of yacc.c */ -#line 16539 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16550 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->sql_command = SQLCOM_XA_RECOVER; } break; case 2654: - -/* Line 1455 of yacc.c */ -#line 16546 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16557 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (1)].string)->length() <= MAXGTRIDSIZE); if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) @@ -41930,9 +39775,8 @@ break; case 2655: - -/* Line 1455 of yacc.c */ -#line 16553 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16564 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].string)->length() <= MAXGTRIDSIZE && (yyvsp[(3) - (3)].string)->length() <= MAXBQUALSIZE); if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) @@ -41942,9 +39786,8 @@ break; case 2656: - -/* Line 1455 of yacc.c */ -#line 16560 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16571 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].string)->length() <= MAXGTRIDSIZE && (yyvsp[(3) - (5)].string)->length() <= MAXBQUALSIZE); if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) @@ -41954,86 +39797,74 @@ break; case 2657: - -/* Line 1455 of yacc.c */ -#line 16569 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16580 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2658: - -/* Line 1455 of yacc.c */ -#line 16570 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16581 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2659: - -/* Line 1455 of yacc.c */ -#line 16574 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16585 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_NONE; } break; case 2660: - -/* Line 1455 of yacc.c */ -#line 16575 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16586 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_JOIN; } break; case 2661: - -/* Line 1455 of yacc.c */ -#line 16576 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16587 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_RESUME; } break; case 2662: - -/* Line 1455 of yacc.c */ -#line 16580 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16591 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_NONE; } break; case 2663: - -/* Line 1455 of yacc.c */ -#line 16581 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16592 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_ONE_PHASE; } break; case 2664: - -/* Line 1455 of yacc.c */ -#line 16586 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16597 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_NONE; } break; case 2665: - -/* Line 1455 of yacc.c */ -#line 16588 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16599 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_SUSPEND; } break; case 2667: - -/* Line 1455 of yacc.c */ -#line 16593 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16604 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" {} break; case 2668: - -/* Line 1455 of yacc.c */ -#line 16594 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16605 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { Lex->xa_opt=XA_FOR_MIGRATE; } break; case 2669: - -/* Line 1455 of yacc.c */ -#line 16599 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16610 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_INSTALL_PLUGIN; @@ -42043,9 +39874,8 @@ break; case 2670: - -/* Line 1455 of yacc.c */ -#line 16609 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 1792 of yacc.c */ +#line 16620 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" { LEX *lex= Lex; lex->sql_command= SQLCOM_UNINSTALL_PLUGIN; @@ -42054,11 +39884,21 @@ break; - -/* Line 1455 of yacc.c */ -#line 42060 "/export/home/pb2/build/sb_0-16512983-1442585853.06/dist_GPL/sql/sql_yacc.cc" +/* Line 1792 of yacc.c */ +#line 39889 "/export/home/pb2/build/sb_0-20199989-1472210623.26/dist_GPL/sql/sql_yacc.cc" default: break; } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -42086,6 +39926,10 @@ | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -42093,37 +39937,36 @@ #if ! YYERROR_VERBOSE yyerror (YYTHD, YY_("syntax error")); #else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) { - YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); - if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) - { - YYSIZE_T yyalloc = 2 * yysize; - if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) - yyalloc = YYSTACK_ALLOC_MAXIMUM; - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yyalloc); - if (yymsg) - yymsg_alloc = yyalloc; - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - } - } - - if (0 < yysize && yysize <= yymsg_alloc) - { - (void) yysyntax_error (yymsg, yystate, yychar); - yyerror (YYTHD, yymsg); - } - else - { - yyerror (YYTHD, YY_("syntax error")); - if (yysize != 0) - goto yyexhaustedlab; - } + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (YYTHD, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; } +# undef YYSYNTAX_ERROR #endif } @@ -42182,7 +40025,7 @@ for (;;) { yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) + if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) @@ -42205,7 +40048,9 @@ YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -42229,7 +40074,7 @@ yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -42241,8 +40086,13 @@ yyreturn: if (yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, YYTHD); + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, YYTHD); + } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); @@ -42266,4 +40116,3 @@ } - diff -Nru mysql-5.6-5.6.27/sql/sql_yacc.h mysql-5.6-5.6.33/sql/sql_yacc.h --- mysql-5.6-5.6.27/sql/sql_yacc.h 2015-09-18 14:25:04.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_yacc.h 2016-08-26 11:33:03.000000000 +0000 @@ -1,10 +1,8 @@ +/* A Bison parser, made by GNU Bison 2.7. */ -/* A Bison parser, made by GNU Bison 2.4.1. */ - -/* Skeleton interface for Bison's Yacc-like parsers in C +/* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. 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 @@ -32,6 +30,15 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED +# define YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int MYSQLdebug; +#endif /* Tokens. */ #ifndef YYTOKENTYPE @@ -1281,13 +1288,11 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 1676 of yacc.c */ -#line 968 "/export/home/pb2/build/sb_0-16512983-1442585853.06/mysql-5.6.27-release-export-8472418_gpl/sql/sql_yacc.yy" +/* Line 2058 of yacc.c */ +#line 968 "/export/home/pb2/build/sb_0-20199989-1472210623.26/mysql-5.6.33-release-export-9935476_gpl/sql/sql_yacc.yy" int num; ulong ulong_num; @@ -1346,9 +1351,8 @@ bool is_not_empty; - -/* Line 1676 of yacc.c */ -#line 1352 "/export/home/pb2/build/sb_0-16512983-1442585853.06/dist_GPL/sql/sql_yacc.h" +/* Line 2058 of yacc.c */ +#line 1356 "/export/home/pb2/build/sb_0-20199989-1472210623.26/dist_GPL/sql/sql_yacc.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -1356,5 +1360,18 @@ #endif +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int MYSQLparse (void *YYPARSE_PARAM); +#else +int MYSQLparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int MYSQLparse (class THD *YYTHD); +#else +int MYSQLparse (); +#endif +#endif /* ! YYPARSE_PARAM */ - +#endif /* !YY_MYSQL_EXPORT_HOME_PB2_BUILD_SB_0_20199989_1472210623_26_DIST_GPL_SQL_SQL_YACC_H_INCLUDED */ diff -Nru mysql-5.6-5.6.27/sql/sql_yacc.yy mysql-5.6-5.6.33/sql/sql_yacc.yy --- mysql-5.6-5.6.27/sql/sql_yacc.yy 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sql_yacc.yy 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -113,18 +113,18 @@
   yyerrlab1:
   #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
-    __attribute__ ((__unused__))
+    MY_ATTRIBUTE ((__unused__))
   #endif
 
- This usage of __attribute__ is illegal, so we remove it. + This usage of MY_ATTRIBUTE is illegal, so we remove it. See the following references for details: http://lists.gnu.org/archive/html/bug-bison/2004-02/msg00014.html http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14273 */ #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) -#undef __attribute__ -#define __attribute__(X) +#undef MY_ATTRIBUTE +#define MY_ATTRIBUTE(X) #endif @@ -2515,6 +2515,11 @@ ident_or_text OPTIONS_SYM '(' server_options_list ')' { + if ($2.length == 0) + { + my_error(ER_WRONG_VALUE, MYF(0), "server name", ""); + MYSQL_YYABORT; + } Lex->server_options.server_name= $2.str; Lex->server_options.server_name_length= $2.length; Lex->server_options.scheme= $6.str; @@ -7958,7 +7963,7 @@ lex->create_info.default_table_charset= $5; lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET | HA_CREATE_USED_DEFAULT_CHARSET); - lex->alter_info.flags|= Alter_info::ALTER_CONVERT; + lex->alter_info.flags|= Alter_info::ALTER_OPTIONS; } | create_table_options_space_separated { @@ -8775,15 +8780,21 @@ | FOR_SYM UPDATE_SYM { LEX *lex=Lex; - lex->current_select->set_lock_for_tables(TL_WRITE); - lex->safe_to_cache_query=0; + if (!lex->describe) + { + lex->current_select->set_lock_for_tables(TL_WRITE); + lex->safe_to_cache_query=0; + } } | LOCK_SYM IN_SYM SHARE_SYM MODE_SYM { LEX *lex=Lex; - lex->current_select-> - set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); - lex->safe_to_cache_query=0; + if (!lex->describe) + { + lex->current_select-> + set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); + lex->safe_to_cache_query=0; + } } ; diff -Nru mysql-5.6-5.6.27/sql/sys_vars.cc mysql-5.6-5.6.33/sql/sys_vars.cc --- mysql-5.6-5.6.27/sql/sys_vars.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/sys_vars.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -3682,6 +3682,14 @@ if (!var->save_result.string_value.str) return true; + if (!is_valid_log_name(var->save_result.string_value.str, + var->save_result.string_value.length)) + { + my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), + self->name.str, var->save_result.string_value.str); + return true; + } + if (var->save_result.string_value.length > FN_REFLEN) { // path is too long my_error(ER_PATH_LENGTH, MYF(0), self->name.str); @@ -3728,7 +3736,7 @@ return false; } static bool fix_log(char** logname, const char* default_logname, - const char*ext, bool enabled, void (*reopen)(char*)) + const char*ext, bool enabled, bool (*reopen)(char*)) { if (!*logname) // SET ... = DEFAULT { @@ -3740,16 +3748,17 @@ } logger.lock_exclusive(); mysql_mutex_unlock(&LOCK_global_system_variables); + bool error= false; if (enabled) - reopen(*logname); + error= reopen(*logname); logger.unlock(); mysql_mutex_lock(&LOCK_global_system_variables); - return false; + return error; } -static void reopen_general_log(char* name) +static bool reopen_general_log(char* name) { logger.get_log_file_handler()->close(0); - logger.get_log_file_handler()->open_query_log(name); + return logger.get_log_file_handler()->open_query_log(name); } static bool fix_general_log_file(sys_var *self, THD *thd, enum_var_type type) { @@ -3762,10 +3771,10 @@ IN_FS_CHARSET, DEFAULT(0), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_log_path), ON_UPDATE(fix_general_log_file)); -static void reopen_slow_log(char* name) +static bool reopen_slow_log(char* name) { logger.get_slow_log_file_handler()->close(0); - logger.get_slow_log_file_handler()->open_slow_log(name); + return logger.get_slow_log_file_handler()->open_slow_log(name); } static bool fix_slow_log_file(sys_var *self, THD *thd, enum_var_type type) { diff -Nru mysql-5.6-5.6.27/sql/table_cache.cc mysql-5.6-5.6.33/sql/table_cache.cc --- mysql-5.6-5.6.27/sql/table_cache.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/table_cache.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ extern "C" uchar *table_cache_key(const uchar *record, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { TABLE_SHARE *share= ((Table_cache_element*)record)->get_share(); *length= share->table_cache_key.length; diff -Nru mysql-5.6-5.6.27/sql/table.cc mysql-5.6-5.6.33/sql/table.cc --- mysql-5.6-5.6.27/sql/table.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/table.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -210,7 +210,7 @@ /* Get column name from column hash */ static uchar *get_field_name(Field **buff, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= (uint) strlen((*buff)->field_name); return (uchar*) (*buff)->field_name; @@ -2165,18 +2165,6 @@ outparam->record[1]= outparam->record[0]; // Safety } -#ifdef HAVE_purify - /* - We need this because when we read var-length rows, we are not updating - bytes after end of varchar - */ - if (records > 1) - { - memcpy(outparam->record[0], share->default_values, share->rec_buff_length); - memcpy(outparam->record[1], share->default_values, share->null_bytes); - } -#endif - if (!(field_ptr = (Field **) alloc_root(&outparam->mem_root, (uint) ((share->fields+1)* sizeof(Field*))))) @@ -3707,6 +3695,7 @@ fulltext_searched= 0; file->ft_handler= 0; reginfo.impossible_range= 0; + reginfo.join_tab= NULL; /* Catch wrong handling of the auto_increment_field_not_null. */ DBUG_ASSERT(!auto_increment_field_not_null); @@ -5355,12 +5344,14 @@ @brief Mark columns needed for doing an update of a row + @param mark_binlog_columns if true, mark columns as per binlog_row_image + requirements. @details Some engines needs to have all columns in an update (to be able to build a complete row). If this is the case, we mark all not updated columns to be read. - If this is no the case, we do like in the delete case and mark + If this is not the case, we do like in the delete case and mark if neeed, either the primary key column or all columns to be read. (see mark_columns_needed_for_delete() for details) @@ -5368,17 +5359,30 @@ mark all USED key columns as 'to-be-read'. This allows the engine to loop over the given record to find all changed keys and doesn't have to retrieve the row again. - + Unlike other similar methods, it doesn't mark fields used by triggers, that is the responsibility of the caller to do, by using Table_triggers_list::mark_used_fields(TRG_EVENT_UPDATE)! + + Note: Marking additional columns as per binlog_row_image requirements will + influence query execution plan. For example in the case of + binlog_row_image=FULL the entire read_set and write_set needs to be flagged. + This will influence update query to think that 'used key is being modified' + and query will create a temporary table to process the update operation. + Which will result in performance degradation. Hence callers who don't want + their query execution to be influenced as per binlog_row_image requirements + can skip marking binlog specific columns here and they should make an + explicit call to 'mark_columns_per_binlog_row_image()' function to mark + binlog_row_image specific columns. */ -void TABLE::mark_columns_needed_for_update() +void TABLE::mark_columns_needed_for_update(bool mark_binlog_columns) { DBUG_ENTER("mark_columns_needed_for_update"); - mark_columns_per_binlog_row_image(); + + if (mark_binlog_columns) + mark_columns_per_binlog_row_image(); if (file->ha_table_flags() & HA_REQUIRES_KEY_COLUMNS_FOR_DELETE) { /* Mark all used key columns for read */ diff -Nru mysql-5.6-5.6.27/sql/table.h mysql-5.6-5.6.33/sql/table.h --- mysql-5.6-5.6.27/sql/table.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/table.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef TABLE_INCLUDED #define TABLE_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1216,7 +1216,7 @@ void mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *map); void mark_columns_used_by_index(uint index); void mark_auto_increment_column(void); - void mark_columns_needed_for_update(void); + void mark_columns_needed_for_update(bool mark_binlog_columns); void mark_columns_needed_for_delete(void); void mark_columns_needed_for_insert(void); void mark_columns_per_binlog_row_image(void); diff -Nru mysql-5.6-5.6.27/sql/tztime.cc mysql-5.6-5.6.33/sql/tztime.cc --- mysql-5.6-5.6.27/sql/tztime.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/tztime.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1490,7 +1490,7 @@ extern "C" uchar * my_tz_names_get_key(Tz_names_entry *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= entry->name.length(); return (uchar*) entry->name.ptr(); @@ -1499,7 +1499,7 @@ extern "C" uchar * my_offset_tzs_get_key(Time_zone_offset *entry, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= sizeof(long); return (uchar*) &entry->offset; diff -Nru mysql-5.6-5.6.27/sql/udf_example.cc mysql-5.6-5.6.33/sql/udf_example.cc --- mysql-5.6-5.6.27/sql/udf_example.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/sql/udf_example.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -227,7 +227,7 @@ ****************************************************************************/ -void metaphon_deinit(UDF_INIT *initid __attribute__((unused))) +void metaphon_deinit(UDF_INIT *initid MY_ATTRIBUTE((unused))) { } @@ -273,9 +273,9 @@ #define NOGHTOF(x) (codes[(x) - 'A'] & 16) /* BDH */ -char *metaphon(UDF_INIT *initid __attribute__((unused)), +char *metaphon(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *length, - char *is_null, char *error __attribute__((unused))) + char *is_null, char *error MY_ATTRIBUTE((unused))) { const char *word=args->args[0]; const char *w_end; @@ -550,8 +550,8 @@ } -double myfunc_double(UDF_INIT *initid __attribute__((unused)), UDF_ARGS *args, - char *is_null, char *error __attribute__((unused))) +double myfunc_double(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, + char *is_null, char *error MY_ATTRIBUTE((unused))) { unsigned long val = 0; unsigned long v = 0; @@ -589,9 +589,9 @@ /* This function returns the sum of all arguments */ -longlong myfunc_int(UDF_INIT *initid __attribute__((unused)), UDF_ARGS *args, - char *is_null __attribute__((unused)), - char *error __attribute__((unused))) +longlong myfunc_int(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, + char *is_null MY_ATTRIBUTE((unused)), + char *error MY_ATTRIBUTE((unused))) { longlong val = 0; uint i; @@ -621,9 +621,9 @@ At least one of _init/_deinit is needed unless the server is started with --allow_suspicious_udfs. */ -my_bool myfunc_int_init(UDF_INIT *initid __attribute__((unused)), - UDF_ARGS *args __attribute__((unused)), - char *message __attribute__((unused))) +my_bool myfunc_int_init(UDF_INIT *initid MY_ATTRIBUTE((unused)), + UDF_ARGS *args MY_ATTRIBUTE((unused)), + char *message MY_ATTRIBUTE((unused))) { return 0; } @@ -663,9 +663,9 @@ free(initid->ptr); } -longlong sequence(UDF_INIT *initid __attribute__((unused)), UDF_ARGS *args, - char *is_null __attribute__((unused)), - char *error __attribute__((unused))) +longlong sequence(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, + char *is_null MY_ATTRIBUTE((unused)), + char *error MY_ATTRIBUTE((unused))) { ulonglong val=0; if (args->arg_count) @@ -727,16 +727,16 @@ return 0; } -void lookup_deinit(UDF_INIT *initid __attribute__((unused))) +void lookup_deinit(UDF_INIT *initid MY_ATTRIBUTE((unused))) { #if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_SOLARIS_STYLE_GETHOST) (void) pthread_mutex_destroy(&LOCK_hostname); #endif } -char *lookup(UDF_INIT *initid __attribute__((unused)), UDF_ARGS *args, +char *lookup(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *res_length, char *null_value, - char *error __attribute__((unused))) + char *error MY_ATTRIBUTE((unused))) { uint length; char name_buff[256]; @@ -807,16 +807,16 @@ return 0; } -void reverse_lookup_deinit(UDF_INIT *initid __attribute__((unused))) +void reverse_lookup_deinit(UDF_INIT *initid MY_ATTRIBUTE((unused))) { #if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_SOLARIS_STYLE_GETHOST) (void) pthread_mutex_destroy(&LOCK_hostname); #endif } -char *reverse_lookup(UDF_INIT *initid __attribute__((unused)), UDF_ARGS *args, +char *reverse_lookup(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *res_length, - char *null_value, char *error __attribute__((unused))) + char *null_value, char *error MY_ATTRIBUTE((unused))) { #if defined(HAVE_GETHOSTBYADDR_R) && defined(HAVE_SOLARIS_STYLE_GETHOST) char name_buff[256]; @@ -970,8 +970,8 @@ /* This is needed to get things to work in MySQL 4.1.1 and above */ void -avgcost_clear(UDF_INIT* initid, char* is_null __attribute__((unused)), - char* message __attribute__((unused))) +avgcost_clear(UDF_INIT* initid, char* is_null MY_ATTRIBUTE((unused)), + char* message MY_ATTRIBUTE((unused))) { struct avgcost_data* data = (struct avgcost_data*)initid->ptr; data->totalprice= 0.0; @@ -982,8 +982,8 @@ void avgcost_add(UDF_INIT* initid, UDF_ARGS* args, - char* is_null __attribute__((unused)), - char* message __attribute__((unused))) + char* is_null MY_ATTRIBUTE((unused)), + char* message MY_ATTRIBUTE((unused))) { if (args->args[0] && args->args[1]) { @@ -1029,8 +1029,8 @@ double -avgcost( UDF_INIT* initid, UDF_ARGS* args __attribute__((unused)), - char* is_null, char* error __attribute__((unused))) +avgcost( UDF_INIT* initid, UDF_ARGS* args MY_ATTRIBUTE((unused)), + char* is_null, char* error MY_ATTRIBUTE((unused))) { struct avgcost_data* data = (struct avgcost_data*)initid->ptr; if (!data->count || !data->totalquantity) @@ -1063,10 +1063,10 @@ return 0; } -char *myfunc_argument_name(UDF_INIT *initid __attribute__((unused)), +char *myfunc_argument_name(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *length, char *null_value, - char *error __attribute__((unused))) + char *error MY_ATTRIBUTE((unused))) { if (!args->attributes[0]) { @@ -1094,9 +1094,9 @@ return 0; } -char * is_const(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)), +char * is_const(UDF_INIT *initid, UDF_ARGS *args MY_ATTRIBUTE((unused)), char *result, unsigned long *length, - char *is_null, char *error __attribute__((unused))) + char *is_null, char *error MY_ATTRIBUTE((unused))) { if (initid->ptr != 0) { sprintf(result, "const"); @@ -1135,9 +1135,9 @@ } extern "C" -char * check_const_len(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)), +char * check_const_len(UDF_INIT *initid, UDF_ARGS *args MY_ATTRIBUTE((unused)), char *result, unsigned long *length, - char *is_null, char *error __attribute__((unused))) + char *is_null, char *error MY_ATTRIBUTE((unused))) { strmov(result, initid->ptr); *length= (uint) strlen(result); @@ -1183,8 +1183,8 @@ } void my_median_add(UDF_INIT* initid, UDF_ARGS* args, - char* is_null __attribute__((unused)), - char* message __attribute__((unused))) + char* is_null MY_ATTRIBUTE((unused)), + char* message MY_ATTRIBUTE((unused))) { My_median_data *data= static_cast(static_cast(initid->ptr)); @@ -1197,8 +1197,8 @@ } void my_median_clear(UDF_INIT* initid, UDF_ARGS* args, - char* is_null __attribute__((unused)), - char* message __attribute__((unused))) + char* is_null MY_ATTRIBUTE((unused)), + char* message MY_ATTRIBUTE((unused))) { My_median_data *data= static_cast(static_cast(initid->ptr)); @@ -1207,7 +1207,7 @@ longlong my_median(UDF_INIT* initid, UDF_ARGS* args, char* is_null, - char* message __attribute__((unused))) + char* message MY_ATTRIBUTE((unused))) { My_median_data *data= static_cast(static_cast(initid->ptr)); diff -Nru mysql-5.6-5.6.27/sql-common/client.c mysql-5.6-5.6.33/sql-common/client.c --- mysql-5.6-5.6.27/sql-common/client.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/sql-common/client.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1128,6 +1128,22 @@ } while(0) #endif +static char *set_ssl_option_unpack_path(struct st_mysql_options *options, + const char *arg) +{ + char *opt_var= NULL; + if (arg) + { + char *buff= (char *)my_malloc(FN_REFLEN + 1, MYF(MY_WME)); + unpack_filename(buff, (char *)arg); + opt_var= my_strdup(buff, MYF(MY_WME)); + options->use_ssl= 1; + my_free(buff); + } + return opt_var; +} + + void mysql_read_default_options(struct st_mysql_options *options, const char *filename,const char *group) { @@ -1725,12 +1741,12 @@ #define strdup_if_not_null(A) (A) == 0 ? 0 : my_strdup((A),MYF(MY_WME)) my_bool STDCALL -mysql_ssl_set(MYSQL *mysql __attribute__((unused)) , - const char *key __attribute__((unused)), - const char *cert __attribute__((unused)), - const char *ca __attribute__((unused)), - const char *capath __attribute__((unused)), - const char *cipher __attribute__((unused))) +mysql_ssl_set(MYSQL *mysql MY_ATTRIBUTE((unused)) , + const char *key MY_ATTRIBUTE((unused)), + const char *cert MY_ATTRIBUTE((unused)), + const char *ca MY_ATTRIBUTE((unused)), + const char *capath MY_ATTRIBUTE((unused)), + const char *cipher MY_ATTRIBUTE((unused))) { my_bool result= 0; DBUG_ENTER("mysql_ssl_set"); @@ -1755,7 +1771,7 @@ #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) static void -mysql_ssl_free(MYSQL *mysql __attribute__((unused))) +mysql_ssl_free(MYSQL *mysql MY_ATTRIBUTE((unused))) { struct st_VioSSLFd *ssl_fd= (struct st_VioSSLFd*) mysql->connector_fd; DBUG_ENTER("mysql_ssl_free"); @@ -1801,7 +1817,7 @@ */ const char * STDCALL -mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) +mysql_get_ssl_cipher(MYSQL *mysql MY_ATTRIBUTE((unused))) { DBUG_ENTER("mysql_get_ssl_cipher"); #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) @@ -1834,35 +1850,39 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const char **errptr) { SSL *ssl; - X509 *server_cert; - char *cp1, *cp2; - char buf[256]; + X509 *server_cert= NULL; + char *cn= NULL; + int cn_loc= -1; + ASN1_STRING *cn_asn1= NULL; + X509_NAME_ENTRY *cn_entry= NULL; + X509_NAME *subject= NULL; + int ret_validation= 1; + DBUG_ENTER("ssl_verify_server_cert"); DBUG_PRINT("enter", ("server_hostname: %s", server_hostname)); if (!(ssl= (SSL*)vio->ssl_arg)) { *errptr= "No SSL pointer found"; - DBUG_RETURN(1); + goto error; } if (!server_hostname) { *errptr= "No server hostname supplied"; - DBUG_RETURN(1); + goto error; } if (!(server_cert= SSL_get_peer_certificate(ssl))) { *errptr= "Could not get server certificate"; - DBUG_RETURN(1); + goto error; } if (X509_V_OK != SSL_get_verify_result(ssl)) { *errptr= "Failed to verify the server certificate"; - X509_free(server_cert); - DBUG_RETURN(1); + goto error; } /* We already know that the certificate exchanged was valid; the SSL library @@ -1870,27 +1890,61 @@ are what we expect. */ - X509_NAME_oneline(X509_get_subject_name(server_cert), buf, sizeof(buf)); - X509_free (server_cert); + /* + Some notes for future development + We should check host name in alternative name first and then if needed check in common name. + Currently yssl doesn't support alternative name. + openssl 1.0.2 support X509_check_host method for host name validation, we may need to start using + X509_check_host in the future. + */ + + subject= X509_get_subject_name((X509 *) server_cert); + // Find the CN location in the subject + cn_loc= X509_NAME_get_index_by_NID(subject, NID_commonName, -1); + if (cn_loc < 0) + { + *errptr= "Failed to get CN location in the certificate subject"; + goto error; + } - DBUG_PRINT("info", ("hostname in cert: %s", buf)); - cp1= strstr(buf, "/CN="); - if (cp1) - { - cp1+= 4; /* Skip the "/CN=" that we found */ - /* Search for next / which might be the delimiter for email */ - cp2= strchr(cp1, '/'); - if (cp2) - *cp2= '\0'; - DBUG_PRINT("info", ("Server hostname in cert: %s", cp1)); - if (!strcmp(cp1, server_hostname)) - { - /* Success */ - DBUG_RETURN(0); - } + // Get the CN entry for given location + cn_entry= X509_NAME_get_entry(subject, cn_loc); + if (cn_entry == NULL) + { + *errptr= "Failed to get CN entry using CN location"; + goto error; + } + + // Get CN from common name entry + cn_asn1 = X509_NAME_ENTRY_get_data(cn_entry); + if (cn_asn1 == NULL) + { + *errptr= "Failed to get CN from CN entry"; + goto error; } + + cn= (char *) ASN1_STRING_data(cn_asn1); + + // There should not be any NULL embedded in the CN + if ((size_t)ASN1_STRING_length(cn_asn1) != strlen(cn)) + { + *errptr= "NULL embedded in the certificate CN"; + goto error; + } + + DBUG_PRINT("info", ("Server hostname in cert: %s", cn)); + if (!strcmp(cn, server_hostname)) + { + /* Success */ + ret_validation= 0; + } + *errptr= "SSL certificate validation failure"; - DBUG_RETURN(1); + +error: + if (server_cert != NULL) + X509_free (server_cert); + DBUG_RETURN(ret_validation); } #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ @@ -4031,8 +4085,8 @@ should also be reflected there. */ -void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused)), - const char *func_name __attribute__((unused))) +void mysql_detach_stmt_list(LIST **stmt_list MY_ATTRIBUTE((unused)), + const char *func_name MY_ATTRIBUTE((unused))) { #ifdef MYSQL_CLIENT /* Reset connection handle in all prepared statements. */ @@ -4442,17 +4496,43 @@ case MYSQL_DEFAULT_AUTH: EXTENSION_SET_STRING(&mysql->options, default_auth, arg); break; - case MYSQL_OPT_SSL_KEY: SET_SSL_OPTION(ssl_key, arg); break; - case MYSQL_OPT_SSL_CERT: SET_SSL_OPTION(ssl_cert, arg); break; - case MYSQL_OPT_SSL_CA: SET_SSL_OPTION(ssl_ca, arg); break; - case MYSQL_OPT_SSL_CAPATH: SET_SSL_OPTION(ssl_capath, arg); break; + case MYSQL_OPT_SSL_KEY: + if (mysql->options.ssl_key) + my_free(mysql->options.ssl_key); + mysql->options.ssl_key= set_ssl_option_unpack_path(&mysql->options, arg); + break; + case MYSQL_OPT_SSL_CERT: + if (mysql->options.ssl_cert) + my_free(mysql->options.ssl_cert); + mysql->options.ssl_cert= set_ssl_option_unpack_path(&mysql->options, arg); + break; + case MYSQL_OPT_SSL_CA: + if (mysql->options.ssl_ca) + my_free(mysql->options.ssl_ca); + mysql->options.ssl_ca= set_ssl_option_unpack_path(&mysql->options, arg); + break; + case MYSQL_OPT_SSL_CAPATH: + if (mysql->options.ssl_capath) + my_free(mysql->options.ssl_capath); + mysql->options.ssl_capath= set_ssl_option_unpack_path(&mysql->options, arg); + break; case MYSQL_OPT_SSL_CIPHER: SET_SSL_OPTION(ssl_cipher, arg); break; - case MYSQL_OPT_SSL_CRL: EXTENSION_SET_SSL_STRING(&mysql->options, - ssl_crl, arg); - break; - case MYSQL_OPT_SSL_CRLPATH: EXTENSION_SET_SSL_STRING(&mysql->options, - ssl_crlpath, arg); - break; + case MYSQL_OPT_SSL_CRL: + if (mysql->options.extension) + my_free(mysql->options.extension->ssl_crl); + else + ALLOCATE_EXTENSIONS(&mysql->options); + mysql->options.extension->ssl_crl= + set_ssl_option_unpack_path(&mysql->options, arg); + break; + case MYSQL_OPT_SSL_CRLPATH: + if (mysql->options.extension) + my_free(mysql->options.extension->ssl_crlpath); + else + ALLOCATE_EXTENSIONS(&mysql->options); + mysql->options.extension->ssl_crlpath= + set_ssl_option_unpack_path(&mysql->options, arg); + break; case MYSQL_SERVER_PUBLIC_KEY: EXTENSION_SET_STRING(&mysql->options, server_public_key_path, arg); break; @@ -4518,7 +4598,7 @@ */ uchar * get_attr_key(LEX_STRING *part, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= part[0].length; return (uchar *) part[0].str; @@ -4879,3 +4959,138 @@ return res ? CR_ERROR : CR_OK; } + +#if defined(EXPORT_SYMVER16) +#ifndef EMBEDDED_LIBRARY + +// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions + +#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") + +void STDCALL symver16_mysql_close(MYSQL *mysql) +{ + return mysql_close(mysql); +} +SYM_16(mysql_close); + + +uint STDCALL symver16_mysql_errno(MYSQL *mysql) +{ + return mysql_errno(mysql); +} +SYM_16(mysql_errno); + + +const char * STDCALL symver16_mysql_error(MYSQL *mysql) +{ + return mysql_error(mysql); +} +SYM_16(mysql_error); + + +ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res) +{ + return mysql_fetch_lengths(res); +} +SYM_16(mysql_fetch_lengths); + + +MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res) +{ + return mysql_fetch_row(res); +} +SYM_16(mysql_fetch_row); + + +void STDCALL symver16_mysql_free_result(MYSQL_RES *result) +{ + return mysql_free_result(result); +} +SYM_16(mysql_free_result); + + +ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql) +{ + return mysql_get_server_version(mysql); +} +SYM_16(mysql_get_server_version); + + +const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) +{ + return mysql_get_ssl_cipher(mysql); +} +SYM_16(mysql_get_ssl_cipher); + + +MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql) +{ + return mysql_init(mysql); +} +SYM_16(mysql_init); + + +unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res) +{ + return mysql_num_fields(res); +} +SYM_16(mysql_num_fields); + + +my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res) +{ + return mysql_num_rows(res); +} +SYM_16(mysql_num_rows); + + +int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) +{ + return mysql_options(mysql, option, arg); +} +SYM_16(mysql_options); + + +int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length) +{ + return mysql_real_query(mysql, query, length); +} +SYM_16(mysql_real_query); + + +int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db) +{ + return mysql_select_db(mysql, db); +} +SYM_16(mysql_select_db); + + +int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length) +{ + return mysql_send_query(mysql, query, length); +} +SYM_16(mysql_send_query); + + +int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name) +{ + return mysql_set_character_set(mysql, cs_name); +} +SYM_16(mysql_set_character_set); + + +my_bool STDCALL symver16_mysql_ssl_set(MYSQL *mysql __attribute__((unused)), const char *key __attribute__((unused)), const char *cert __attribute__((unused)), const char *ca __attribute__((unused)), const char *capath __attribute__((unused)), const char *cipher __attribute__((unused))) +{ + return mysql_ssl_set(mysql, key, cert, ca, capath, cipher); +} +SYM_16(mysql_ssl_set); + + +MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql) +{ + return mysql_store_result(mysql); +} +SYM_16(mysql_store_result); + +#endif +#endif /* EXPORT_SYMVER16 */ diff -Nru mysql-5.6-5.6.27/storage/archive/archive_reader.c mysql-5.6-5.6.33/storage/archive/archive_reader.c --- mysql-5.6-5.6.27/storage/archive/archive_reader.c 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/archive/archive_reader.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ #include #include #include +#include // ORACLE_WELCOME_COPYRIGHT_NOTICE #define BUFFER_LEN 1024 #define ARCHIVE_ROW_HEADER_SIZE 4 @@ -292,7 +293,7 @@ static my_bool get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch (optid) { @@ -388,8 +389,8 @@ static void usage(void) { print_version(); - puts("Copyright 2007-2008 MySQL AB, 2008 Sun Microsystems, Inc."); - puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n"); + puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2007")); + puts("Read and modify Archive files directly\n"); printf("Usage: %s [OPTIONS] file_to_be_looked_at [file_for_backup]\n", my_progname); print_defaults("my", load_default_groups); diff -Nru mysql-5.6-5.6.27/storage/blackhole/ha_blackhole.cc mysql-5.6-5.6.33/storage/blackhole/ha_blackhole.cc --- mysql-5.6-5.6.27/storage/blackhole/ha_blackhole.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/blackhole/ha_blackhole.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -383,7 +383,7 @@ } static uchar* blackhole_get_key(st_blackhole_share *share, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length= share->table_name_length; return (uchar*) share->table_name; diff -Nru mysql-5.6-5.6.27/storage/csv/ha_tina.cc mysql-5.6-5.6.33/storage/csv/ha_tina.cc --- mysql-5.6-5.6.27/storage/csv/ha_tina.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/csv/ha_tina.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -102,7 +102,7 @@ } static uchar* tina_get_key(TINA_SHARE *share, size_t *length, - my_bool not_used __attribute__((unused))) + my_bool not_used MY_ATTRIBUTE((unused))) { *length=share->table_name_length; return (uchar*) share->table_name; diff -Nru mysql-5.6-5.6.27/storage/example/ha_example.cc mysql-5.6-5.6.33/storage/example/ha_example.cc --- mysql-5.6-5.6.27/storage/example/ha_example.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/example/ha_example.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -436,9 +436,9 @@ */ int ha_example::index_read_map(uchar *buf, const uchar *key, - key_part_map keypart_map __attribute__((unused)), + key_part_map keypart_map MY_ATTRIBUTE((unused)), enum ha_rkey_function find_flag - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { int rc; DBUG_ENTER("ha_example::index_read"); diff -Nru mysql-5.6-5.6.27/storage/federated/ha_federated.cc mysql-5.6-5.6.33/storage/federated/ha_federated.cc --- mysql-5.6-5.6.27/storage/federated/ha_federated.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/federated/ha_federated.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -425,7 +425,7 @@ /* Function we use in the creation of our hash to get key */ static uchar *federated_get_key(FEDERATED_SHARE *share, size_t *length, - my_bool not_used __attribute__ ((unused))) + my_bool not_used MY_ATTRIBUTE ((unused))) { *length= share->share_key_length; return (uchar*) share->share_key; @@ -1671,6 +1671,7 @@ int ha_federated::close(void) { + THD *thd= current_thd; DBUG_ENTER("ha_federated::close"); free_result(); @@ -1682,7 +1683,7 @@ FLUSH TABLES will quit the connection and if connection is broken, it will reconnect again and quit silently. */ - if (mysql && !vio_is_connected(mysql->net.vio)) + if (mysql && (!mysql->net.vio || !vio_is_connected(mysql->net.vio))) mysql->net.error= 2; /* Disconnect from mysql */ @@ -1696,9 +1697,16 @@ if the original query was not issued against the FEDERATED table. So, don't propagate errors from mysql_close(). */ - if (table->in_use) + if (table->in_use && thd != table->in_use) table->in_use->clear_error(); + /* + Errors from mysql_close() are silently ignored for flush tables. + Close the connection silently. + */ + if (thd && thd->lex->sql_command == SQLCOM_FLUSH) + thd->clear_error(); + DBUG_RETURN(free_share(share)); } @@ -2735,7 +2743,7 @@ @param[in] record record data (unused) */ -void ha_federated::position(const uchar *record __attribute__ ((unused))) +void ha_federated::position(const uchar *record MY_ATTRIBUTE ((unused))) { DBUG_ENTER("ha_federated::position"); diff -Nru mysql-5.6-5.6.27/storage/heap/hp_hash.c mysql-5.6-5.6.33/storage/heap/hp_hash.c --- mysql-5.6-5.6.27/storage/heap/hp_hash.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/heap/hp_hash.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -867,7 +867,7 @@ uint hp_rb_key_length(HP_KEYDEF *keydef, - const uchar *key __attribute__((unused))) + const uchar *key MY_ATTRIBUTE((unused))) { return keydef->length; } diff -Nru mysql-5.6-5.6.27/storage/heap/hp_test2.c mysql-5.6-5.6.33/storage/heap/hp_test2.c --- mysql-5.6-5.6.27/storage/heap/hp_test2.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/heap/hp_test2.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. reserved This program is free software; you can redistribute it and/or modify @@ -660,7 +660,7 @@ } /* rnd */ -static sig_handler endprog(int sig_number __attribute__((unused))) +static sig_handler endprog(int sig_number MY_ATTRIBUTE((unused))) { { hp_panic(HA_PANIC_CLOSE); diff -Nru mysql-5.6-5.6.27/storage/innobase/btr/btr0btr.cc mysql-5.6-5.6.33/storage/innobase/btr/btr0btr.cc --- mysql-5.6-5.6.27/storage/innobase/btr/btr0btr.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/btr/btr0btr.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1102,7 +1102,7 @@ @retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded (init_mtr == mtr, or the page was not previously freed in mtr) @retval block (not allocated or initialized) otherwise */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) buf_block_t* btr_page_alloc_low( /*===============*/ @@ -1971,7 +1971,7 @@ @retval true if the operation was successful @retval false if it is a compressed page, and recompression failed */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) bool btr_page_reorganize_block( /*======================*/ @@ -2033,7 +2033,8 @@ { ulint level; - ut_ad(ptr && end_ptr); + ut_ad(ptr != NULL); + ut_ad(end_ptr != NULL); /* If dealing with a compressed page the record has the compression level used during original compression written in @@ -2101,7 +2102,7 @@ NOTE that the operation of this function must always succeed, we cannot reverse it: therefore enough free disk space must be guaranteed to be available before this function is called. -@return inserted record */ +@return inserted record or NULL if run out of space */ UNIV_INTERN rec_t* btr_root_raise_and_insert( @@ -2162,6 +2163,11 @@ level = btr_page_get_level(root, mtr); new_block = btr_page_alloc(index, 0, FSP_NO_DIR, level, mtr, mtr); + + if (new_block == NULL && os_has_said_disk_full) { + return(NULL); + } + new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); ut_a(!new_page_zip == !root_page_zip); @@ -2495,7 +2501,7 @@ Returns TRUE if the insert fits on the appropriate half-page with the chosen split_rec. @return true if fits */ -static __attribute__((nonnull(1,3,4,6), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1,3,4,6), warn_unused_result)) bool btr_page_insert_fits( /*=================*/ @@ -2638,7 +2644,7 @@ /**************************************************************//** Attaches the halves of an index page on the appropriate level in an index tree. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void btr_attach_half_pages( /*==================*/ @@ -2774,7 +2780,7 @@ /*************************************************************//** Determine if a tuple is smaller than any record on the page. @return TRUE if smaller */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool btr_page_tuple_smaller( /*===================*/ @@ -2938,7 +2944,7 @@ free disk space (2 pages) must be guaranteed to be available before this function is called. -@return inserted record */ +@return inserted record or NULL if run out of space */ UNIV_INTERN rec_t* btr_page_split_and_insert( @@ -3052,9 +3058,18 @@ } } + DBUG_EXECUTE_IF("disk_is_full", + os_has_said_disk_full = true; + return(NULL);); + /* 2. Allocate a new page to the index */ new_block = btr_page_alloc(cursor->index, hint_page_no, direction, btr_page_get_level(page, mtr), mtr, mtr); + + if (new_block == NULL && os_has_said_disk_full) { + return(NULL); + } + new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); btr_page_create(new_block, new_page_zip, cursor->index, @@ -3341,7 +3356,7 @@ /*************************************************************//** Removes a page from the level list of pages. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void btr_level_list_remove_func( /*=======================*/ @@ -3357,7 +3372,8 @@ ulint prev_page_no; ulint next_page_no; - ut_ad(page && mtr); + ut_ad(page != NULL); + ut_ad(mtr != NULL); ut_ad(mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_X_FIX)); ut_ad(space == page_get_space_id(page)); /* Get the previous and next page numbers of page */ diff -Nru mysql-5.6-5.6.27/storage/innobase/btr/btr0cur.cc mysql-5.6-5.6.33/storage/innobase/btr/btr0cur.cc --- mysql-5.6-5.6.27/storage/innobase/btr/btr0cur.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/btr/btr0cur.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2012, Facebook Inc. @@ -1084,7 +1084,7 @@ or by invoking ibuf_reset_free_bits() before mtr_commit(). @return pointer to inserted record if succeed, else NULL */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) rec_t* btr_cur_insert_if_possible( /*=======================*/ @@ -1127,7 +1127,7 @@ /*************************************************************//** For an insert, checks the locks and does the undo logging if desired. @return DB_SUCCESS, DB_WAIT_LOCK, DB_FAIL, or error number */ -UNIV_INLINE __attribute__((warn_unused_result, nonnull(2,3,5,6))) +UNIV_INLINE MY_ATTRIBUTE((warn_unused_result, nonnull(2,3,5,6))) dberr_t btr_cur_ins_lock_and_undo( /*======================*/ @@ -1604,6 +1604,10 @@ flags, cursor, offsets, heap, entry, n_ext, mtr); } + if (*rec == NULL && os_has_said_disk_full) { + return(DB_OUT_OF_FILE_SPACE); + } + ut_ad(page_rec_get_next(btr_cur_get_rec(cursor)) == *rec); if (!(flags & BTR_NO_LOCKING_FLAG)) { @@ -1649,7 +1653,7 @@ /*************************************************************//** For an update, checks the locks and does the undo logging. @return DB_SUCCESS, DB_WAIT_LOCK, or error number */ -UNIV_INLINE __attribute__((warn_unused_result, nonnull(2,3,6,7))) +UNIV_INLINE MY_ATTRIBUTE((warn_unused_result, nonnull(2,3,6,7))) dberr_t btr_cur_upd_lock_and_undo( /*======================*/ @@ -1668,7 +1672,7 @@ const rec_t* rec; dberr_t err; - ut_ad(thr || (flags & BTR_NO_LOCKING_FLAG)); + ut_ad((thr != NULL) || (flags & BTR_NO_LOCKING_FLAG)); rec = btr_cur_get_rec(cursor); index = cursor->index; @@ -2957,7 +2961,7 @@ ut_ad(page_is_leaf(page_align(rec))); #ifdef UNIV_DEBUG - if (btr_cur_print_record_ops && thr) { + if (btr_cur_print_record_ops && (thr != NULL)) { btr_cur_trx_report(thr_get_trx(thr)->id, index, "del mark "); rec_print_new(stderr, rec, offsets); } @@ -3105,7 +3109,7 @@ rec = btr_cur_get_rec(cursor); #ifdef UNIV_DEBUG - if (btr_cur_print_record_ops && thr) { + if (btr_cur_print_record_ops && (thr != NULL)) { btr_cur_trx_report(thr_get_trx(thr)->id, cursor->index, "del mark "); rec_print(stderr, rec, cursor->index); @@ -4988,7 +4992,7 @@ ulint i, /*!< in: field number of field_ref; ignored if rec == NULL */ enum trx_rb_ctx rb_ctx, /*!< in: rollback context */ - mtr_t* local_mtr __attribute__((unused))) /*!< in: mtr + mtr_t* local_mtr MY_ATTRIBUTE((unused))) /*!< in: mtr containing the latch to data an an X-latch to the index tree */ { diff -Nru mysql-5.6-5.6.27/storage/innobase/btr/btr0sea.cc mysql-5.6-5.6.33/storage/innobase/btr/btr0sea.cc --- mysql-5.6-5.6.27/storage/innobase/btr/btr0sea.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/btr/btr0sea.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -473,7 +473,7 @@ /*==============================*/ btr_search_t* info, /*!< in: search info */ buf_block_t* block, /*!< in: buffer block */ - btr_cur_t* cursor __attribute__((unused))) + btr_cur_t* cursor MY_ATTRIBUTE((unused))) /*!< in: cursor */ { #ifdef UNIV_SYNC_DEBUG diff -Nru mysql-5.6-5.6.27/storage/innobase/buf/buf0buddy.cc mysql-5.6-5.6.33/storage/innobase/buf/buf0buddy.cc --- mysql-5.6-5.6.27/storage/innobase/buf/buf0buddy.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/buf/buf0buddy.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -112,7 +112,7 @@ /**********************************************************************//** Check if a buddy is stamped free. @return whether the buddy is free */ -UNIV_INLINE __attribute__((warn_unused_result)) +UNIV_INLINE MY_ATTRIBUTE((warn_unused_result)) bool buf_buddy_stamp_is_free( /*====================*/ @@ -225,7 +225,7 @@ @retval BUF_BUDDY_STATE_FREE if fully free @retval BUF_BUDDY_STATE_USED if currently in use @retval BUF_BUDDY_STATE_PARTIALLY_USED if partially in use. */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) buf_buddy_state_t buf_buddy_is_free( /*==============*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/buf/buf0buf.cc mysql-5.6-5.6.33/storage/innobase/buf/buf0buf.cc --- mysql-5.6-5.6.27/storage/innobase/buf/buf0buf.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/buf/buf0buf.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -3470,7 +3470,7 @@ /********************************************************************//** Inits a page to the buffer buf_pool. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void buf_page_init( /*==========*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/buf/buf0dump.cc mysql-5.6-5.6.33/storage/innobase/buf/buf0dump.cc --- mysql-5.6-5.6.27/storage/innobase/buf/buf0dump.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/buf/buf0dump.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -105,7 +105,7 @@ variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'; or by: SHOW STATUS LIKE 'innodb_buffer_pool_dump_status'; */ -static __attribute__((nonnull, format(printf, 2, 3))) +static MY_ATTRIBUTE((nonnull, format(printf, 2, 3))) void buf_dump_status( /*============*/ @@ -141,7 +141,7 @@ variable_name = 'INNODB_BUFFER_POOL_LOAD_STATUS'; or by: SHOW STATUS LIKE 'innodb_buffer_pool_load_status'; */ -static __attribute__((nonnull, format(printf, 2, 3))) +static MY_ATTRIBUTE((nonnull, format(printf, 2, 3))) void buf_load_status( /*============*/ @@ -167,6 +167,25 @@ va_end(ap); } +/** Returns the directory path where the buffer pool dump file will be created. +@return directory path */ +static +const char* +get_buf_dump_dir() +{ + const char* dump_dir; + + /* The dump file should be created in the default data directory if + innodb_data_home_dir is set as an empty string. */ + if (strcmp(srv_data_home, "") == 0) { + dump_dir = fil_path_to_mysql_datadir; + } else { + dump_dir = srv_data_home; + } + + return(dump_dir); +} + /*****************************************************************//** Perform a buffer pool dump into the file specified by innodb_buffer_pool_filename. If any errors occur then the value of @@ -190,7 +209,7 @@ int ret; ut_snprintf(full_filename, sizeof(full_filename), - "%s%c%s", srv_data_home, SRV_PATH_SEPARATOR, + "%s%c%s", get_buf_dump_dir(), SRV_PATH_SEPARATOR, srv_buf_dump_filename); ut_snprintf(tmp_filename, sizeof(tmp_filename), @@ -387,7 +406,7 @@ buf_load_abort_flag = FALSE; ut_snprintf(full_filename, sizeof(full_filename), - "%s%c%s", srv_data_home, SRV_PATH_SEPARATOR, + "%s%c%s", get_buf_dump_dir(), SRV_PATH_SEPARATOR, srv_buf_dump_filename); buf_load_status(STATUS_NOTICE, @@ -575,7 +594,7 @@ os_thread_ret_t DECLARE_THREAD(buf_dump_thread)( /*============================*/ - void* arg __attribute__((unused))) /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { ut_ad(!srv_read_only_mode); diff -Nru mysql-5.6-5.6.27/storage/innobase/buf/buf0flu.cc mysql-5.6-5.6.33/storage/innobase/buf/buf0flu.cc --- mysql-5.6-5.6.27/storage/innobase/buf/buf0flu.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/buf/buf0flu.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -2384,7 +2384,7 @@ os_thread_ret_t DECLARE_THREAD(buf_flush_page_cleaner_thread)( /*==========================================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { diff -Nru mysql-5.6-5.6.27/storage/innobase/buf/buf0lru.cc mysql-5.6-5.6.33/storage/innobase/buf/buf0lru.cc --- mysql-5.6-5.6.27/storage/innobase/buf/buf0lru.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/buf/buf0lru.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -142,7 +142,7 @@ caller needs to free the page to the free list @retval false if BUF_BLOCK_ZIP_PAGE was removed from page_hash. In this case the block is already returned to the buddy allocator. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool buf_LRU_block_remove_hashed( /*========================*/ @@ -366,7 +366,7 @@ mutex and try to force a context switch. Then reacquire the same mutexes. The current page is "fixed" before the release of the mutexes and then "unfixed" again once we have reacquired the mutexes. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void buf_flush_yield( /*============*/ @@ -407,7 +407,7 @@ pool and flush list mutex and do a thread yield. Set the current page to "sticky" so that it is not relocated during the yield. @return true if yielded */ -static __attribute__((nonnull(1), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1), warn_unused_result)) bool buf_flush_try_yield( /*================*/ @@ -450,7 +450,7 @@ Removes a single page from a given tablespace inside a specific buffer pool instance. @return true if page was removed. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool buf_flush_or_remove_page( /*=====================*/ @@ -531,7 +531,7 @@ @retval DB_SUCCESS if all freed @retval DB_FAIL if not all freed @retval DB_INTERRUPTED if the transaction was interrupted */ -static __attribute__((nonnull(1), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1), warn_unused_result)) dberr_t buf_flush_or_remove_pages( /*======================*/ @@ -637,7 +637,7 @@ inside a specific buffer pool instance. The pages will remain in the LRU list and will be evicted from the LRU list as they age and move towards the tail of the LRU list. */ -static __attribute__((nonnull(1))) +static MY_ATTRIBUTE((nonnull(1))) void buf_flush_dirty_pages( /*==================*/ @@ -677,7 +677,7 @@ /******************************************************************//** Remove all pages that belong to a given tablespace inside a specific buffer pool instance when we are DISCARDing the tablespace. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void buf_LRU_remove_all_pages( /*=====================*/ @@ -825,7 +825,7 @@ tablespace. The pages still remain a part of LRU and are evicted from the list as they age towards the tail of the LRU only if buf_remove is BUF_REMOVE_FLUSH_NO_WRITE. */ -static __attribute__((nonnull(1))) +static MY_ATTRIBUTE((nonnull(1))) void buf_LRU_remove_pages( /*=================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/data/data0data.cc mysql-5.6-5.6.33/storage/innobase/data/data0data.cc --- mysql-5.6-5.6.27/storage/innobase/data/data0data.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/data/data0data.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -67,7 +67,8 @@ ulint n_fields; ulint i; - ut_ad(tuple1 && tuple2); + ut_ad(tuple1 != NULL); + ut_ad(tuple2 != NULL); ut_ad(tuple1->magic_n == DATA_TUPLE_MAGIC_N); ut_ad(tuple2->magic_n == DATA_TUPLE_MAGIC_N); ut_ad(dtuple_check_typed(tuple1)); @@ -715,7 +716,7 @@ void dtuple_convert_back_big_rec( /*========================*/ - dict_index_t* index __attribute__((unused)), /*!< in: index */ + dict_index_t* index MY_ATTRIBUTE((unused)), /*!< in: index */ dtuple_t* entry, /*!< in: entry whose data was put to vector */ big_rec_t* vector) /*!< in, own: big rec vector; it is freed in this function */ diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0crea.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0crea.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0crea.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0crea.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -246,7 +246,7 @@ /***************************************************************//** Builds a table definition to insert. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t dict_build_table_def_step( /*======================*/ @@ -573,7 +573,7 @@ /***************************************************************//** Builds an index definition row to insert. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t dict_build_index_def_step( /*======================*/ @@ -648,7 +648,7 @@ /***************************************************************//** Creates an index tree for the index if it is not a member of a cluster. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t dict_create_index_tree_step( /*========================*/ @@ -1464,7 +1464,7 @@ /****************************************************************//** Evaluate the given foreign key SQL statement. @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t dict_foreign_eval_sql( /*==================*/ @@ -1530,7 +1530,7 @@ Add a single foreign key field definition to the data dictionary tables in the database. @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t dict_create_add_foreign_field_to_dictionary( /*========================================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0dict.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0dict.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0dict.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0dict.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1066,7 +1066,7 @@ &dict_operation_lock, SYNC_DICT_OPERATION); if (!srv_read_only_mode) { - dict_foreign_err_file = os_file_create_tmpfile(); + dict_foreign_err_file = os_file_create_tmpfile(NULL); ut_a(dict_foreign_err_file); mutex_create(dict_foreign_err_mutex_key, @@ -1590,10 +1590,13 @@ to preserve the original table name in constraints which reference it */ { + dberr_t err; dict_foreign_t* foreign; dict_index_t* index; ulint fold; char old_name[MAX_FULL_NAME_LEN + 1]; + os_file_type_t ftype; + ibool exists; ut_ad(mutex_own(&(dict_sys->mutex))); @@ -1631,8 +1634,6 @@ .ibd file and rebuild the .isl file if needed. */ if (dict_table_is_discarded(table)) { - os_file_type_t type; - ibool exists; char* filepath; ut_ad(table->space != TRX_SYS_SPACE); @@ -1651,7 +1652,7 @@ fil_delete_tablespace(table->space, BUF_REMOVE_ALL_NO_WRITE); /* Delete any temp file hanging around. */ - if (os_file_status(filepath, &exists, &type) + if (os_file_status(filepath, &exists, &ftype) && exists && !os_file_delete_if_exists(innodb_file_temp_key, filepath)) { @@ -1663,8 +1664,6 @@ mem_free(filepath); } else if (table->space != TRX_SYS_SPACE) { - char* new_path = NULL; - if (DICT_TF2_FLAG_IS_SET(table, DICT_TF2_TEMPORARY)) { ut_print_timestamp(stderr); fputs(" InnoDB: Error: trying to rename a" @@ -1678,34 +1677,43 @@ } return(DB_ERROR); + } - } else if (DICT_TF_HAS_DATA_DIR(table->flags)) { - char* old_path; - - old_path = fil_space_get_first_path(table->space); + char* new_path = NULL; + char* old_path = fil_space_get_first_path(table->space); + if (DICT_TF_HAS_DATA_DIR(table->flags)) { new_path = os_file_make_new_pathname( old_path, new_name); - mem_free(old_path); - - dberr_t err = fil_create_link_file( - new_name, new_path); - + err = fil_create_link_file(new_name, new_path); if (err != DB_SUCCESS) { mem_free(new_path); + mem_free(old_path); return(DB_TABLESPACE_EXISTS); } + } else { + new_path = fil_make_ibd_name(new_name, false); + } + + /* New filepath must not exist. */ + err = fil_rename_tablespace_check( + table->space, old_path, new_path, false); + if (err != DB_SUCCESS) { + mem_free(old_path); + mem_free(new_path); + return(err); } ibool success = fil_rename_tablespace( old_name, table->space, new_name, new_path); + mem_free(old_path); + mem_free(new_path); + /* If the tablespace is remote, a new .isl file was created If success, delete the old one. If not, delete the new one. */ - if (new_path) { - - mem_free(new_path); + if (DICT_TF_HAS_DATA_DIR(table->flags)) { fil_delete_link_file(success ? old_name : new_name); } @@ -5775,7 +5783,7 @@ dict_index_t* index, /*!< in/out: index */ dict_table_t* table) /*!< in/out: table */ { - ut_ad(index); + ut_ad(index != NULL); ut_ad(mutex_own(&dict_sys->mutex)); ut_ad(!dict_table_is_comp(dict_sys->sys_tables)); ut_ad(!dict_table_is_comp(dict_sys->sys_indexes)); @@ -5785,8 +5793,9 @@ if (dict_index_is_clust(index)) { dict_table_t* corrupt_table; - corrupt_table = table ? table : index->table; - ut_ad(!index->table || !table || index->table == table); + corrupt_table = (table != NULL) ? table : index->table; + ut_ad((index->table != NULL) || (table != NULL) + || index->table == table); if (corrupt_table) { corrupt_table->corrupted = TRUE; @@ -5866,11 +5875,6 @@ { dict_index_t* index; - /* If name is NULL, just return */ - if (!name) { - return(NULL); - } - index = dict_table_get_first_index(table); while (index != NULL) { diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0load.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0load.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0load.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0load.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1744,7 +1744,7 @@ goto err_len; } type = mach_read_from_4(field); - if (type & (~0 << DICT_IT_BITS)) { + if (type & (~0U << DICT_IT_BITS)) { return("unknown SYS_INDEXES.TYPE bits"); } @@ -1783,7 +1783,7 @@ cache. @return DB_SUCCESS if ok, DB_CORRUPTION if corruption of dictionary table or DB_UNSUPPORTED if table has unknown index type */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t dict_load_indexes( /*==============*/ @@ -2531,6 +2531,7 @@ /* the table->fts could be created in dict_load_column when a user defined FTS_DOC_ID is present, but no FTS */ + fts_optimize_remove_table(table); fts_free(table); } else { fts_optimize_add_table(table); @@ -2596,14 +2597,13 @@ btr_pcur_open_on_user_rec(sys_table_ids, tuple, PAGE_CUR_GE, BTR_SEARCH_LEAF, &pcur, &mtr); -check_rec: rec = btr_pcur_get_rec(&pcur); if (page_rec_is_user_rec(rec)) { /*---------------------------------------------------*/ /* Now we have the record in the secondary index containing the table ID and NAME */ - +check_rec: field = rec_get_nth_field_old( rec, DICT_FLD__SYS_TABLE_IDS__ID, &len); ut_ad(len == 8); @@ -2613,12 +2613,14 @@ if (rec_get_deleted_flag(rec, 0)) { /* Until purge has completed, there may be delete-marked duplicate records - for the same SYS_TABLES.ID. - Due to Bug #60049, some delete-marked - records may survive the purge forever. */ - if (btr_pcur_move_to_next(&pcur, &mtr)) { - - goto check_rec; + for the same SYS_TABLES.ID, but different + SYS_TABLES.NAME. */ + while (btr_pcur_move_to_next(&pcur, &mtr)) { + rec = btr_pcur_get_rec(&pcur); + + if (page_rec_is_user_rec(rec)) { + goto check_rec; + } } } else { /* Now we get the table name from the record */ @@ -2787,7 +2789,7 @@ /***********************************************************************//** Loads a foreign key constraint to the dictionary cache. @return DB_SUCCESS or error code */ -static __attribute__((nonnull(1), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1), warn_unused_result)) dberr_t dict_load_foreign( /*==============*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0mem.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0mem.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0mem.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0mem.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -264,7 +264,7 @@ /**********************************************************************//** Renames a column of a table in the data dictionary cache. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void dict_mem_table_col_rename_low( /*==========================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0stats_bg.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0stats_bg.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0stats_bg.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0stats_bg.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -331,7 +331,7 @@ os_thread_ret_t DECLARE_THREAD(dict_stats_thread)( /*==============================*/ - void* arg __attribute__((unused))) /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { ut_a(!srv_read_only_mode); diff -Nru mysql-5.6-5.6.27/storage/innobase/dict/dict0stats.cc mysql-5.6-5.6.33/storage/innobase/dict/dict0stats.cc --- mysql-5.6-5.6.27/storage/innobase/dict/dict0stats.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/dict/dict0stats.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2015, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1434,7 +1434,6 @@ when comparing records @param[out] n_diff number of distinct records @param[out] n_external_pages number of external pages -@param[in,out] mtr mini-transaction @return number of distinct records on the leaf page */ static void @@ -1442,8 +1441,7 @@ const btr_cur_t* cur, ulint n_prefix, ib_uint64_t* n_diff, - ib_uint64_t* n_external_pages, - mtr_t* mtr) + ib_uint64_t* n_external_pages) { dict_index_t* index; ulint space; @@ -1457,6 +1455,7 @@ ulint* offsets2; ulint* offsets_rec; ulint size; + mtr_t mtr; index = btr_cur_get_index(cur); @@ -1495,12 +1494,14 @@ function without analyzing any leaf pages */ *n_external_pages = 0; + mtr_start(&mtr); + /* descend to the leaf level on the B-tree */ for (;;) { block = buf_page_get_gen(space, zip_size, page_no, RW_S_LATCH, NULL /* no guessed block */, - BUF_GET, __FILE__, __LINE__, mtr); + BUF_GET, __FILE__, __LINE__, &mtr); page = buf_block_get_frame(block); @@ -1522,6 +1523,8 @@ ut_a(*n_diff > 0); if (*n_diff == 1) { + mtr_commit(&mtr); + /* page has all keys equal and the end of the page was reached by dict_stats_scan_page(), no need to descend to the leaf level */ @@ -1546,7 +1549,7 @@ } /* make sure we got a leaf page as a result from the above loop */ - ut_ad(btr_page_get_level(page, mtr) == 0); + ut_ad(btr_page_get_level(page, &mtr) == 0); /* scan the leaf page and find the number of distinct keys, when looking only at the first n_prefix columns; also estimate @@ -1563,6 +1566,7 @@ __func__, page_no, n_diff); #endif + mtr_commit(&mtr); mem_heap_free(heap); } @@ -1772,8 +1776,7 @@ dict_stats_analyze_index_below_cur(btr_pcur_get_btr_cur(&pcur), n_prefix, &n_diff_on_leaf_page, - &n_external_pages, - mtr); + &n_external_pages); /* We adjust n_diff_on_leaf_page here to avoid counting one record twice - once as the last on some page and once diff -Nru mysql-5.6-5.6.27/storage/innobase/fil/fil0fil.cc mysql-5.6-5.6.33/storage/innobase/fil/fil0fil.cc --- mysql-5.6-5.6.27/storage/innobase/fil/fil0fil.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fil/fil0fil.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1875,7 +1875,7 @@ Writes the flushed lsn and the latest archived log number to the page header of the first page of a data file of the system tablespace (space 0), which is uncompressed. */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) dberr_t fil_write_lsn_and_arch_no_to_file( /*==============================*/ @@ -1883,7 +1883,7 @@ ulint sum_of_sizes, /*!< in: combined size of previous files in space, in database pages */ lsn_t lsn, /*!< in: lsn to write */ - ulint arch_log_no __attribute__((unused))) + ulint arch_log_no MY_ATTRIBUTE((unused))) /*!< in: archived log number to write */ { byte* buf1; @@ -1970,7 +1970,7 @@ at database startup. @retval NULL on success, or if innodb_force_recovery is set @return pointer to an error message string */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) const char* fil_check_first_page( /*=================*/ @@ -2990,6 +2990,48 @@ return(filename); } +/** Test if a tablespace file can be renamed to a new filepath by checking +if that the old filepath exists and the new filepath does not exist. +@param[in] space_id tablespace id +@param[in] old_path old filepath +@param[in] new_path new filepath +@param[in] is_discarded whether the tablespace is discarded +@return innodb error code */ +dberr_t +fil_rename_tablespace_check( + ulint space_id, + const char* old_path, + const char* new_path, + bool is_discarded) +{ + ulint exists = false; + os_file_type_t ftype; + + if (!is_discarded + && os_file_status(old_path, &exists, &ftype) + && !exists) { + ib_logf(IB_LOG_LEVEL_ERROR, + "Cannot rename '%s' to '%s' for space ID %lu" + " because the source file does not exist.", + old_path, new_path, space_id); + + return(DB_TABLESPACE_NOT_FOUND); + } + + exists = false; + if (!os_file_status(new_path, &exists, &ftype) || exists) { + ib_logf(IB_LOG_LEVEL_ERROR, + "Cannot rename '%s' to '%s' for space ID %lu" + " because the target file exists." + " Remove the target file and try again.", + old_path, new_path, space_id); + + return(DB_TABLESPACE_EXISTS); + } + + return(DB_SUCCESS); +} + /*******************************************************************//** Renames a single-table tablespace. The tablespace must be cached in the tablespace memory cache. @@ -3174,8 +3216,6 @@ const char* tablename, /*!< in: tablename */ const char* filepath) /*!< in: pathname of tablespace */ { - os_file_t file; - ibool success; dberr_t err = DB_SUCCESS; char* link_filepath; char* prev_filepath = fil_read_link_file(tablename); @@ -3194,13 +3234,24 @@ link_filepath = fil_make_isl_name(tablename); - file = os_file_create_simple_no_error_handling( - innodb_file_data_key, link_filepath, - OS_FILE_CREATE, OS_FILE_READ_WRITE, &success); - - if (!success) { - /* The following call will print an error message */ - ulint error = os_file_get_last_error(true); + /** Check if the file already exists. */ + FILE* file = NULL; + ibool exists; + os_file_type_t ftype; + + bool success = os_file_status(link_filepath, &exists, &ftype); + + ulint error = 0; + if (success && !exists) { + file = fopen(link_filepath, "w"); + if (file == NULL) { + /* This call will print its own error message */ + error = os_file_get_last_error(true); + } + } else { + error = OS_FILE_ALREADY_EXISTS; + } + if (error != 0) { ut_print_timestamp(stderr); fputs(" InnoDB: Cannot create file ", stderr); @@ -3225,13 +3276,17 @@ return(err); } - if (!os_file_write(link_filepath, file, filepath, 0, - strlen(filepath))) { + ulint rbytes = fwrite(filepath, 1, strlen(filepath), file); + if (rbytes != strlen(filepath)) { + os_file_get_last_error(true); + ib_logf(IB_LOG_LEVEL_ERROR, + "cannot write link file " + "%s",filepath); err = DB_ERROR; } /* Close the file, we only need it at startup */ - os_file_close(file); + fclose(file); mem_free(link_filepath); @@ -6520,29 +6575,108 @@ return(err); } -/****************************************************************//** -Generate redo logs for swapping two .ibd files */ +/** Generate redo log for swapping two .ibd files +@param[in] old_table old table +@param[in] new_table new table +@param[in] tmp_name temporary table name +@param[in,out] mtr mini-transaction +@return innodb error code */ UNIV_INTERN -void +dberr_t fil_mtr_rename_log( -/*===============*/ - ulint old_space_id, /*!< in: tablespace id of the old - table. */ - const char* old_name, /*!< in: old table name */ - ulint new_space_id, /*!< in: tablespace id of the new - table */ - const char* new_name, /*!< in: new table name */ - const char* tmp_name, /*!< in: temp table name used while - swapping */ - mtr_t* mtr) /*!< in/out: mini-transaction */ -{ - if (old_space_id != TRX_SYS_SPACE) { - fil_op_write_log(MLOG_FILE_RENAME, old_space_id, - 0, 0, old_name, tmp_name, mtr); - } - - if (new_space_id != TRX_SYS_SPACE) { - fil_op_write_log(MLOG_FILE_RENAME, new_space_id, - 0, 0, new_name, old_name, mtr); + const dict_table_t* old_table, + const dict_table_t* new_table, + const char* tmp_name, + mtr_t* mtr) +{ + dberr_t err = DB_SUCCESS; + char* old_path; + + /* If neither table is file-per-table, + there will be no renaming of files. */ + if (old_table->space == TRX_SYS_SPACE + && new_table->space == TRX_SYS_SPACE) { + return(DB_SUCCESS); + } + + if (DICT_TF_HAS_DATA_DIR(old_table->flags)) { + old_path = os_file_make_remote_pathname( + old_table->data_dir_path, old_table->name, "ibd"); + } else { + old_path = fil_make_ibd_name(old_table->name, false); + } + if (old_path == NULL) { + return(DB_OUT_OF_MEMORY); } + + if (old_table->space != TRX_SYS_SPACE) { + char* tmp_path; + + if (DICT_TF_HAS_DATA_DIR(old_table->flags)) { + tmp_path = os_file_make_remote_pathname( + old_table->data_dir_path, tmp_name, "ibd"); + } + else { + tmp_path = fil_make_ibd_name(tmp_name, false); + } + + if (tmp_path == NULL) { + mem_free(old_path); + return(DB_OUT_OF_MEMORY); + } + + /* Temp filepath must not exist. */ + err = fil_rename_tablespace_check( + old_table->space, old_path, tmp_path, + dict_table_is_discarded(old_table)); + mem_free(tmp_path); + if (err != DB_SUCCESS) { + mem_free(old_path); + return(err); + } + + fil_op_write_log(MLOG_FILE_RENAME, old_table->space, + 0, 0, old_table->name, tmp_name, mtr); + } + + if (new_table->space != TRX_SYS_SPACE) { + + /* Destination filepath must not exist unless this ALTER + TABLE starts and ends with a file_per-table tablespace. */ + if (old_table->space == TRX_SYS_SPACE) { + char* new_path = NULL; + + if (DICT_TF_HAS_DATA_DIR(new_table->flags)) { + new_path = os_file_make_remote_pathname( + new_table->data_dir_path, + new_table->name, "ibd"); + } + else { + new_path = fil_make_ibd_name( + new_table->name, false); + } + + if (new_path == NULL) { + mem_free(old_path); + return(DB_OUT_OF_MEMORY); + } + + err = fil_rename_tablespace_check( + new_table->space, new_path, old_path, + dict_table_is_discarded(new_table)); + mem_free(new_path); + if (err != DB_SUCCESS) { + mem_free(old_path); + return(err); + } + } + + fil_op_write_log(MLOG_FILE_RENAME, new_table->space, + 0, 0, new_table->name, old_table->name, mtr); + + } + + mem_free(old_path); + + return(err); } diff -Nru mysql-5.6-5.6.27/storage/innobase/fsp/fsp0fsp.cc mysql-5.6-5.6.33/storage/innobase/fsp/fsp0fsp.cc --- mysql-5.6-5.6.27/storage/innobase/fsp/fsp0fsp.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fsp/fsp0fsp.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -93,7 +93,7 @@ /********************************************************************//** Marks a page used. The page must reside within the extents of the given segment. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void fseg_mark_page_used( /*================*/ @@ -132,7 +132,7 @@ ulint space, /*!< in: space */ fsp_header_t* header, /*!< in/out: space header */ mtr_t* mtr) /*!< in/out: mini-transaction */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space @@ -161,7 +161,7 @@ in which the page should be initialized. If init_mtr!=mtr, but the page is already latched in mtr, do not initialize the page. */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** @@ -425,7 +425,7 @@ file. @return pointer to the extent descriptor, NULL if the page does not exist in the space or if the offset is >= the free limit */ -UNIV_INLINE __attribute__((nonnull, warn_unused_result)) +UNIV_INLINE MY_ATTRIBUTE((nonnull, warn_unused_result)) xdes_t* xdes_get_descriptor_with_space_hdr( /*===============================*/ @@ -487,7 +487,7 @@ above the free limit. @return pointer to the extent descriptor, NULL if the page does not exist in the space or if the offset exceeds the free limit */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) xdes_t* xdes_get_descriptor( /*================*/ @@ -614,7 +614,7 @@ fsp_parse_init_file_page( /*=====================*/ byte* ptr, /*!< in: buffer */ - byte* end_ptr __attribute__((unused)), /*!< in: buffer end */ + byte* end_ptr MY_ATTRIBUTE((unused)), /*!< in: buffer end */ buf_block_t* block) /*!< in: block or NULL */ { ut_ad(ptr && end_ptr); @@ -850,7 +850,7 @@ Tries to extend a single-table tablespace so that a page would fit in the data file. @return TRUE if success */ -static UNIV_COLD __attribute__((nonnull, warn_unused_result)) +static UNIV_COLD MY_ATTRIBUTE((nonnull, warn_unused_result)) ibool fsp_try_extend_data_file_with_pages( /*================================*/ @@ -882,7 +882,7 @@ /***********************************************************************//** Tries to extend the last data file of a tablespace if it is auto-extending. @return FALSE if not auto-extending */ -static UNIV_COLD __attribute__((nonnull)) +static UNIV_COLD MY_ATTRIBUTE((nonnull)) ibool fsp_try_extend_data_file( /*=====================*/ @@ -952,10 +952,20 @@ } } else { /* We extend single-table tablespaces first one extent - at a time, but for bigger tablespaces more. It is not - enough to extend always by one extent, because some - extents are frag page extents. */ + at a time, but 4 at a time for bigger tablespaces. It is + not enough to extend always by one extent, because we need + to add at least one extent to FSP_FREE. + A single extent descriptor page will track many extents. + And the extent that uses its extent descriptor page is + put onto the FSP_FREE_FRAG list. Extents that do not + use their extent descriptor page are added to FSP_FREE. + The physical page size is used to determine how many + extents are tracked on one extent descriptor page. */ ulint extent_size; /*!< one megabyte, in pages */ + ulint threshold; /*!< The size of the tablespace + (in number of pages) where we + start allocating more than one + extent at a time. */ if (!zip_size) { extent_size = FSP_EXTENT_SIZE; @@ -964,6 +974,14 @@ * UNIV_PAGE_SIZE / zip_size; } + /* Threshold is set at 32mb except when the page + size is small enough that it must be done sooner. + For page size less than 4k, we may reach the + extent contains extent descriptor page before + 32 mb. */ + threshold = ut_min((32 * extent_size), + (zip_size ? zip_size : UNIV_PAGE_SIZE)); + if (size < extent_size) { /* Let us first extend the file to extent_size */ success = fsp_try_extend_data_file_with_pages( @@ -980,7 +998,7 @@ size = extent_size; } - if (size < 32 * extent_size) { + if (size < threshold) { size_increase = extent_size; } else { /* Below in fsp_fill_free_list() we assume @@ -1046,7 +1064,8 @@ ulint i; mtr_t ibuf_mtr; - ut_ad(header && mtr); + ut_ad(header != NULL); + ut_ad(mtr != NULL); ut_ad(page_offset(header) == FSP_HEADER_OFFSET); /* Check if we can fill free list from above the free list limit */ @@ -1218,7 +1237,7 @@ /**********************************************************************//** Allocates a single free page from a space. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void fsp_alloc_from_free_frag( /*=====================*/ @@ -1309,7 +1328,7 @@ @retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded (init_mtr == mtr, or the page was not previously freed in mtr) @retval block (not allocated or initialized) otherwise */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) buf_block_t* fsp_alloc_free_page( /*================*/ @@ -1558,9 +1577,9 @@ /*=============================*/ page_t* page, /*!< in: segment inode page */ ulint i, /*!< in: inode index on page */ - ulint zip_size __attribute__((unused)), + ulint zip_size MY_ATTRIBUTE((unused)), /*!< in: compressed page size, or 0 */ - mtr_t* mtr __attribute__((unused))) + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in/out: mini-transaction */ { ut_ad(i < FSP_SEG_INODES_PER_PAGE(zip_size)); @@ -1859,7 +1878,7 @@ /*======================*/ fseg_inode_t* inode, /*!< in: segment inode */ ulint n, /*!< in: slot index */ - mtr_t* mtr __attribute__((unused))) + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in/out: mini-transaction */ { ut_ad(inode && mtr); @@ -2940,7 +2959,7 @@ /********************************************************************//** Marks a page used. The page must reside within the extents of the given segment. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void fseg_mark_page_used( /*================*/ @@ -3012,7 +3031,8 @@ ib_id_t seg_id; ulint i; - ut_ad(seg_inode && mtr); + ut_ad(seg_inode != NULL); + ut_ad(mtr != NULL); ut_ad(mach_read_from_4(seg_inode + FSEG_MAGIC_N) == FSEG_MAGIC_N_VALUE); ut_ad(!((page_offset(seg_inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE)); @@ -3221,7 +3241,8 @@ ulint descr_n_used; ulint i; - ut_ad(seg_inode && mtr); + ut_ad(seg_inode != NULL); + ut_ad(mtr != NULL); descr = xdes_get_descriptor(space, zip_size, page, mtr); diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/fts0blex.cc mysql-5.6-5.6.33/storage/innobase/fts/fts0blex.cc --- mysql-5.6-5.6.27/storage/innobase/fts/fts0blex.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/fts0blex.cc 2016-08-26 11:22:35.000000000 +0000 @@ -305,9 +305,9 @@ YY_BUFFER_STATE fts0b_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE fts0b_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); -void *fts0balloc (yy_size_t , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); -void *fts0brealloc (void *,yy_size_t , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); -void fts0bfree (void * , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); +void *fts0balloc (yy_size_t , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); +void *fts0brealloc (void *,yy_size_t , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); +void fts0bfree (void * , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); #define yy_new_buffer fts0b_create_buffer @@ -347,7 +347,7 @@ static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); -static void yy_fatal_error (yyconst char msg[] , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); +static void yy_fatal_error (yyconst char msg[] , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -451,7 +451,7 @@ #line 1 "fts0blex.l" /***************************************************************************** -Copyright (c) 2007, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -579,11 +579,11 @@ #endif #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))); +static void yy_flex_strncpy (char *,yyconst char *,int , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))); +static int yy_flex_strlen (yyconst char * , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))); #endif #ifndef YY_NO_INPUT @@ -1609,7 +1609,7 @@ #define YY_EXIT_FAILURE 2 #endif -static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); @@ -1910,7 +1910,7 @@ */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { register int i; for ( i = 0; i < n; ++i ) @@ -1919,7 +1919,7 @@ #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { register int n; for ( n = 0; s[n]; ++n ) @@ -1929,12 +1929,12 @@ } #endif -void *fts0balloc (yy_size_t size , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void *fts0balloc (yy_size_t size , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { return (void *) malloc( size ); } -void *fts0brealloc (void * ptr, yy_size_t size , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void *fts0brealloc (void * ptr, yy_size_t size , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those @@ -1946,7 +1946,7 @@ return (void *) realloc( (char *) ptr, size ); } -void fts0bfree (void * ptr , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void fts0bfree (void * ptr , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { free( (char *) ptr ); /* see fts0brealloc() for (char *) cast */ } diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/fts0fts.cc mysql-5.6-5.6.33/storage/innobase/fts/fts0fts.cc --- mysql-5.6-5.6.27/storage/innobase/fts/fts0fts.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/fts0fts.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -108,6 +108,7 @@ /** variable to record innodb_fts_internal_tbl_name for information schema table INNODB_FTS_INSERTED etc. */ UNIV_INTERN char* fts_internal_tbl_name = NULL; +UNIV_INTERN char* fts_internal_tbl_name2 = NULL; /** InnoDB default stopword list: There are different versions of stopwords, the stop words listed @@ -260,16 +261,20 @@ "INSERT INTO \"%s\" VALUES ('" FTS_TABLE_STATE "', '0');\n"; -/****************************************************************//** -Run SYNC on the table, i.e., write out data from the cache to the +/** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. -@return DB_SUCCESS if all OK */ +@param[in,out] sync sync state +@param[in] unlock_cache whether unlock cache lock when write node +@param[in] wait whether wait when a sync is in progress +@param[in] has_dict whether has dict operation lock +@return DB_SUCCESS if all OK */ static dberr_t fts_sync( -/*=====*/ - fts_sync_t* sync) /*!< in: sync state */ - __attribute__((nonnull)); + fts_sync_t* sync, + bool unlock_cache, + bool wait, + bool has_dict); /****************************************************************//** Release all resources help by the words rb tree e.g., the node ilist. */ @@ -278,7 +283,7 @@ fts_words_free( /*===========*/ ib_rbt_t* words) /*!< in: rb tree of words */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef FTS_CACHE_SIZE_DEBUG /****************************************************************//** Read the max cache size parameter from the config table. */ @@ -300,7 +305,7 @@ /*==============*/ fts_trx_table_t*ftt, /*!< in: FTS trx table */ doc_id_t doc_id, /*!< in: doc id */ - ib_vector_t* fts_indexes __attribute__((unused))); + ib_vector_t* fts_indexes MY_ATTRIBUTE((unused))); /*!< in: affected fts indexes */ #ifdef FTS_DOC_STATS_DEBUG /****************************************************************//** @@ -315,7 +320,7 @@ fts_table_t* fts_table, /*!< in: table instance */ const fts_string_t* word, /*!< in: the word to check */ ibool* found) /*!< out: TRUE if exists */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* FTS_DOC_STATS_DEBUG */ /******************************************************************//** @@ -330,7 +335,7 @@ const char* table_name, /*!< in: table name, or NULL */ doc_id_t doc_id, /*!< in: last document id */ trx_t* trx) /*!< in: update trx, or NULL */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /****************************************************************//** This function loads the default InnoDB stopword list */ @@ -653,6 +658,7 @@ mem_heap_zalloc(heap, sizeof(fts_sync_t))); cache->sync->table = table; + cache->sync->event = os_event_create(); /* Create the index cache vector that will hold the inverted indexes. */ cache->indexes = ib_vector_create( @@ -1072,13 +1078,12 @@ } } -/*********************************************************************//** -Clear cache. */ +/** Clear cache. +@param[in,out] cache fts cache */ UNIV_INTERN void fts_cache_clear( -/*============*/ - fts_cache_t* cache) /*!< in: cache */ + fts_cache_t* cache) { ulint i; @@ -1207,6 +1212,7 @@ mutex_free(&cache->optimize_lock); mutex_free(&cache->deleted_lock); mutex_free(&cache->doc_id_lock); + os_event_free(cache->sync->event); if (cache->stopword_info.cached_stopword) { rbt_free(cache->stopword_info.cached_stopword); @@ -1435,7 +1441,7 @@ ib_vector_last(word->nodes)); } - if (fts_node == NULL + if (fts_node == NULL || fts_node->synced || fts_node->ilist_size > FTS_ILIST_MAX_SIZE || doc_id < fts_node->last_doc_id) { @@ -1473,7 +1479,7 @@ /****************************************************************//** Drops a table. If the table can't be found we return a SUCCESS code. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_drop_table( /*===========*/ @@ -1515,7 +1521,7 @@ /****************************************************************//** Rename a single auxiliary table due to database name change. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_rename_one_aux_table( /*=====================*/ @@ -1624,7 +1630,7 @@ on the given table. row_mysql_lock_data_dictionary must have been called before this. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_drop_common_tables( /*===================*/ @@ -1751,7 +1757,7 @@ on the given table. row_mysql_lock_data_dictionary must have been called before this. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_drop_all_index_tables( /*======================*/ @@ -2659,7 +2665,7 @@ This function fetch the Doc ID from CONFIG table, and compare with the Doc ID supplied. And store the larger one to the CONFIG table. @return DB_SUCCESS if OK */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t fts_cmp_set_sync_doc_id( /*====================*/ @@ -2886,41 +2892,34 @@ } /*********************************************************************//** -Do commit-phase steps necessary for the insertion of a new row. -@return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) -dberr_t +Do commit-phase steps necessary for the insertion of a new row. */ +void fts_add( /*====*/ fts_trx_table_t*ftt, /*!< in: FTS trx table */ fts_trx_row_t* row) /*!< in: row */ { dict_table_t* table = ftt->table; - dberr_t error = DB_SUCCESS; doc_id_t doc_id = row->doc_id; ut_a(row->state == FTS_INSERT || row->state == FTS_MODIFY); fts_add_doc_by_id(ftt, doc_id, row->fts_indexes); - if (error == DB_SUCCESS) { - mutex_enter(&table->fts->cache->deleted_lock); - ++table->fts->cache->added; - mutex_exit(&table->fts->cache->deleted_lock); - - if (!DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID) - && doc_id >= table->fts->cache->next_doc_id) { - table->fts->cache->next_doc_id = doc_id + 1; - } + mutex_enter(&table->fts->cache->deleted_lock); + ++table->fts->cache->added; + mutex_exit(&table->fts->cache->deleted_lock); + + if (!DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID) + && doc_id >= table->fts->cache->next_doc_id) { + table->fts->cache->next_doc_id = doc_id + 1; } - - return(error); } /*********************************************************************//** Do commit-phase steps necessary for the deletion of a row. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_delete( /*=======*/ @@ -3011,7 +3010,7 @@ /*********************************************************************//** Do commit-phase steps necessary for the modification of a row. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_modify( /*=======*/ @@ -3025,7 +3024,7 @@ error = fts_delete(ftt, row); if (error == DB_SUCCESS) { - error = fts_add(ftt, row); + fts_add(ftt, row); } return(error); @@ -3082,7 +3081,7 @@ The given transaction is about to be committed; do whatever is necessary from the FTS system's POV. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_commit_table( /*=============*/ @@ -3114,7 +3113,7 @@ switch (row->state) { case FTS_INSERT: - error = fts_add(ftt, row); + fts_add(ftt, row); break; case FTS_MODIFY: @@ -3415,7 +3414,7 @@ /*==============*/ fts_trx_table_t*ftt, /*!< in: FTS trx table */ doc_id_t doc_id, /*!< in: doc id */ - ib_vector_t* fts_indexes __attribute__((unused))) + ib_vector_t* fts_indexes MY_ATTRIBUTE((unused))) /*!< in: affected fts indexes */ { mtr_t mtr; @@ -3535,7 +3534,7 @@ get_doc, clust_index, doc_pcur, offsets, &doc); if (doc.found) { - ibool success __attribute__((unused)); + ibool success MY_ATTRIBUTE((unused)); btr_pcur_store_position(doc_pcur, &mtr); mtr_commit(&mtr); @@ -3553,16 +3552,34 @@ get_doc->index_cache, doc_id, doc.tokens); + bool need_sync = false; + if ((cache->total_size > fts_max_cache_size / 10 + || fts_need_sync) + && !cache->sync->in_progress) { + need_sync = true; + } + rw_lock_x_unlock(&table->fts->cache->lock); DBUG_EXECUTE_IF( "fts_instrument_sync", - fts_sync(cache->sync); + fts_optimize_request_sync_table(table); + os_event_wait(cache->sync->event); + ); + + DBUG_EXECUTE_IF( + "fts_instrument_sync_debug", + fts_sync(cache->sync, true, true, false); ); - if (cache->total_size > fts_max_cache_size - || fts_need_sync) { - fts_sync(cache->sync); + DEBUG_SYNC_C("fts_instrument_sync_request"); + DBUG_EXECUTE_IF( + "fts_instrument_sync_request", + fts_optimize_request_sync_table(table); + ); + + if (need_sync) { + fts_optimize_request_sync_table(table); } mtr_start(&mtr); @@ -3626,7 +3643,7 @@ dict_table_t* table) /*!< in: user table */ { dict_index_t* index; - dict_field_t* dfield __attribute__((unused)) = NULL; + dict_field_t* dfield MY_ATTRIBUTE((unused)) = NULL; doc_id_t doc_id = 0; mtr_t mtr; btr_pcur_t pcur; @@ -3884,7 +3901,7 @@ /*********************************************************************//** Add rows to the DELETED_CACHE table. @return DB_SUCCESS if all went well else error code*/ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_add_deleted_cache( /*=======================*/ @@ -3933,16 +3950,17 @@ return(error); } -/*********************************************************************//** -Write the words and ilist to disk. +/** Write the words and ilist to disk. +@param[in,out] trx transaction +@param[in] index_cache index cache +@param[in] unlock_cache whether unlock cache when write node @return DB_SUCCESS if all went well else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_write_words( -/*=================*/ - trx_t* trx, /*!< in: transaction */ - fts_index_cache_t* - index_cache) /*!< in: index cache */ + trx_t* trx, + fts_index_cache_t* index_cache, + bool unlock_cache) { fts_table_t fts_table; ulint n_nodes = 0; @@ -3950,8 +3968,8 @@ const ib_rbt_node_t* rbt_node; dberr_t error = DB_SUCCESS; ibool print_error = FALSE; -#ifdef FTS_DOC_STATS_DEBUG dict_table_t* table = index_cache->index->table; +#ifdef FTS_DOC_STATS_DEBUG ulint n_new_words = 0; #endif /* FTS_DOC_STATS_DEBUG */ @@ -3964,7 +3982,7 @@ since we want to free the memory used during caching. */ for (rbt_node = rbt_first(index_cache->words); rbt_node; - rbt_node = rbt_first(index_cache->words)) { + rbt_node = rbt_next(index_cache->words, rbt_node)) { ulint i; ulint selected; @@ -3997,27 +4015,47 @@ } #endif /* FTS_DOC_STATS_DEBUG */ - n_nodes += ib_vector_size(word->nodes); - - /* We iterate over all the nodes even if there was an error, - this is to free the memory of the fts_node_t elements. */ + /* We iterate over all the nodes even if there was an error */ for (i = 0; i < ib_vector_size(word->nodes); ++i) { fts_node_t* fts_node = static_cast( ib_vector_get(word->nodes, i)); + if (fts_node->synced) { + continue; + } else { + fts_node->synced = true; + } + + /*FIXME: we need to handle the error properly. */ if (error == DB_SUCCESS) { + if (unlock_cache) { + rw_lock_x_unlock( + &table->fts->cache->lock); + } error = fts_write_node( trx, &index_cache->ins_graph[selected], &fts_table, &word->text, fts_node); - } - ut_free(fts_node->ilist); - fts_node->ilist = NULL; + DEBUG_SYNC_C("fts_write_node"); + DBUG_EXECUTE_IF("fts_write_node_crash", + DBUG_SUICIDE();); + + DBUG_EXECUTE_IF("fts_instrument_sync_sleep", + os_thread_sleep(1000000); + ); + + if (unlock_cache) { + rw_lock_x_lock( + &table->fts->cache->lock); + } + } } + n_nodes += ib_vector_size(word->nodes); + if (error != DB_SUCCESS && !print_error) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Error (%s) writing " @@ -4026,9 +4064,6 @@ print_error = TRUE; } - - /* NOTE: We are responsible for free'ing the node */ - ut_free(rbt_remove_node(index_cache->words, rbt_node)); } #ifdef FTS_DOC_STATS_DEBUG @@ -4056,7 +4091,7 @@ /*********************************************************************//** Write a single documents statistics to disk. @return DB_SUCCESS if all went well else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_write_doc_stat( /*====================*/ @@ -4310,7 +4345,7 @@ Run SYNC on the table, i.e., write out data from the index specific cache to the FTS aux INDEX table and FTS aux doc id stats table. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_index( /*===========*/ @@ -4329,7 +4364,7 @@ ut_ad(rbt_validate(index_cache->words)); - error = fts_sync_write_words(trx, index_cache); + error = fts_sync_write_words(sync->trx, index_cache, sync->unlock_cache); #ifdef FTS_DOC_STATS_DEBUG /* FTS_RESOLVE: the word counter info in auxiliary table "DOC_ID" @@ -4345,14 +4380,64 @@ return(error); } -/*********************************************************************//** -Commit the SYNC, change state of processed doc ids etc. +/** Check if index cache has been synced completely +@param[in,out] index_cache index cache +@return true if index is synced, otherwise false. */ +static +bool +fts_sync_index_check( + fts_index_cache_t* index_cache) +{ + const ib_rbt_node_t* rbt_node; + + for (rbt_node = rbt_first(index_cache->words); + rbt_node != NULL; + rbt_node = rbt_next(index_cache->words, rbt_node)) { + + fts_tokenizer_word_t* word; + word = rbt_value(fts_tokenizer_word_t, rbt_node); + + fts_node_t* fts_node; + fts_node = static_cast(ib_vector_last(word->nodes)); + + if (!fts_node->synced) { + return(false); + } + } + + return(true); +} + +/** Reset synced flag in index cache when rollback +@param[in,out] index_cache index cache */ +static +void +fts_sync_index_reset( + fts_index_cache_t* index_cache) +{ + const ib_rbt_node_t* rbt_node; + + for (rbt_node = rbt_first(index_cache->words); + rbt_node != NULL; + rbt_node = rbt_next(index_cache->words, rbt_node)) { + + fts_tokenizer_word_t* word; + word = rbt_value(fts_tokenizer_word_t, rbt_node); + + fts_node_t* fts_node; + fts_node = static_cast(ib_vector_last(word->nodes)); + + fts_node->synced = false; + } +} + +/** Commit the SYNC, change state of processed doc ids etc. +@param[in,out] sync sync state @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_commit( -/*============*/ - fts_sync_t* sync) /*!< in: sync state */ + fts_sync_t* sync) { dberr_t error; trx_t* trx = sync->trx; @@ -4405,37 +4490,79 @@ (double) n_nodes/ (double) elapsed_time); } + /* Avoid assertion in trx_free(). */ + trx->dict_operation_lock_mode = 0; trx_free_for_background(trx); return(error); } -/*********************************************************************//** -Rollback a sync operation */ +/** Rollback a sync operation +@param[in,out] sync sync state */ static void fts_sync_rollback( -/*==============*/ - fts_sync_t* sync) /*!< in: sync state */ + fts_sync_t* sync) { trx_t* trx = sync->trx; fts_cache_t* cache = sync->table->fts->cache; + for (ulint i = 0; i < ib_vector_size(cache->indexes); ++i) { + ulint j; + fts_index_cache_t* index_cache; + + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + + /* Reset synced flag so nodes will not be skipped + in the next sync, see fts_sync_write_words(). */ + fts_sync_index_reset(index_cache); + + for (j = 0; fts_index_selector[j].value; ++j) { + + if (index_cache->ins_graph[j] != NULL) { + + fts_que_graph_free_check_lock( + NULL, index_cache, + index_cache->ins_graph[j]); + + index_cache->ins_graph[j] = NULL; + } + + if (index_cache->sel_graph[j] != NULL) { + + fts_que_graph_free_check_lock( + NULL, index_cache, + index_cache->sel_graph[j]); + + index_cache->sel_graph[j] = NULL; + } + } + } + rw_lock_x_unlock(&cache->lock); fts_sql_rollback(trx); + + /* Avoid assertion in trx_free(). */ + trx->dict_operation_lock_mode = 0; trx_free_for_background(trx); } -/****************************************************************//** -Run SYNC on the table, i.e., write out data from the cache to the +/** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. +@param[in,out] sync sync state +@param[in] unlock_cache whether unlock cache lock when write node +@param[in] wait whether wait when a sync is in progress +@param[in] has_dict whether has dict operation lock @return DB_SUCCESS if all OK */ static dberr_t fts_sync( -/*=====*/ - fts_sync_t* sync) /*!< in: sync state */ + fts_sync_t* sync, + bool unlock_cache, + bool wait, + bool has_dict) { ulint i; dberr_t error = DB_SUCCESS; @@ -4443,8 +4570,41 @@ rw_lock_x_lock(&cache->lock); + /* Check if cache is being synced. + Note: we release cache lock in fts_sync_write_words() to + avoid long wait for the lock by other threads. */ + while (sync->in_progress) { + rw_lock_x_unlock(&cache->lock); + + if (wait) { + os_event_wait(sync->event); + } else { + return(DB_SUCCESS); + } + + rw_lock_x_lock(&cache->lock); + } + + sync->unlock_cache = unlock_cache; + sync->in_progress = true; + + DEBUG_SYNC_C("fts_sync_begin"); fts_sync_begin(sync); + /* When sync in background, we hold dict operation lock + to prevent DDL like DROP INDEX, etc. */ + if (has_dict) { + sync->trx->dict_operation_lock_mode = RW_S_LATCH; + } + +begin_sync: + if (cache->total_size > fts_max_cache_size) { + /* Avoid the case: sync never finish when + insert/update keeps comming. */ + ut_ad(sync->unlock_cache); + sync->unlock_cache = false; + } + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { fts_index_cache_t* index_cache; @@ -4459,21 +4619,44 @@ if (error != DB_SUCCESS && !sync->interrupted) { - break; + goto end_sync; } } DBUG_EXECUTE_IF("fts_instrument_sync_interrupted", sync->interrupted = true; error = DB_INTERRUPTED; + goto end_sync; ); + /* Make sure all the caches are synced. */ + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + + if (index_cache->index->to_be_dropped + || fts_sync_index_check(index_cache)) { + continue; + } + + goto begin_sync; + } + +end_sync: if (error == DB_SUCCESS && !sync->interrupted) { error = fts_sync_commit(sync); } else { fts_sync_rollback(sync); } + rw_lock_x_lock(&cache->lock); + sync->interrupted = false; + sync->in_progress = false; + os_event_set(sync->event); + rw_lock_x_unlock(&cache->lock); + /* We need to check whether an optimize is required, for that we make copies of the two variables that control the trigger. These variables can change behind our back and we don't want to hold the @@ -4488,21 +4671,28 @@ return(error); } -/****************************************************************//** -Run SYNC on the table, i.e., write out data from the cache to the -FTS auxiliary INDEX table and clear the cache at the end. */ +/** Run SYNC on the table, i.e., write out data from the cache to the +FTS auxiliary INDEX table and clear the cache at the end. +@param[in,out] table fts table +@param[in] unlock_cache whether unlock cache when write node +@param[in] wait whether wait for existing sync to finish +@param[in] has_dict whether has dict operation lock +@return DB_SUCCESS on success, error code on failure. */ UNIV_INTERN dberr_t fts_sync_table( -/*===========*/ - dict_table_t* table) /*!< in: table */ + dict_table_t* table, + bool unlock_cache, + bool wait, + bool has_dict) { dberr_t err = DB_SUCCESS; ut_ad(table->fts); if (!dict_table_is_discarded(table) && table->fts->cache) { - err = fts_sync(table->fts->cache->sync); + err = fts_sync(table->fts->cache->sync, + unlock_cache, wait, has_dict); } return(err); @@ -6021,7 +6211,7 @@ /*********************************************************************//** Rename an aux table to HEX format. It's called when "%016llu" is used to format an object id in table name, which only happens in Windows. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_rename_one_aux_table_to_hex_format( /*===================================*/ @@ -6112,7 +6302,7 @@ This function should make sure that either all the parent table and aux tables are set DICT_TF2_FTS_AUX_HEX_NAME with flags2 or none of them are set */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_rename_aux_tables_to_hex_format_low( /*====================================*/ @@ -6266,14 +6456,14 @@ { ib_id_t dec_id = 0; char tmp_id[FTS_AUX_MIN_TABLE_ID_LENGTH]; - int ret __attribute__((unused)); + int ret MY_ATTRIBUTE((unused)); ret = sprintf(tmp_id, UINT64PFx, id); ut_ad(ret == 16); #ifdef _WIN32 ret = sscanf(tmp_id, "%016llu", &dec_id); #else - ret = sscanf(tmp_id, "%016"PRIu64, &dec_id); + ret = sscanf(tmp_id, "%016" PRIu64, &dec_id); #endif /* _WIN32 */ ut_ad(ret == 1); @@ -6380,6 +6570,36 @@ return(0); } +/* Get parent table name if it's a fts aux table +@param[in] aux_table_name aux table name +@param[in] aux_table_len aux table length +@return parent table name, or NULL */ +char* +fts_get_parent_table_name( + const char* aux_table_name, + ulint aux_table_len) +{ + fts_aux_table_t aux_table; + char* parent_table_name = NULL; + + if (fts_is_aux_table_name(&aux_table, aux_table_name, aux_table_len)) { + dict_table_t* parent_table; + + parent_table = dict_table_open_on_id( + aux_table.parent_id, TRUE, DICT_TABLE_OP_NORMAL); + + if (parent_table != NULL) { + parent_table_name = mem_strdupl( + parent_table->name, + strlen(parent_table->name)); + + dict_table_close(parent_table, TRUE, FALSE); + } + } + + return(parent_table_name); +} + /** Check the validity of the parent table. @param[in] aux_table auxiliary table @return true if it is a valid table or false if it is not */ @@ -6588,7 +6808,7 @@ Check and drop all orphaned FTS auxiliary tables, those that don't have a parent table or FTS index defined on them. @return DB_SUCCESS or error code */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void fts_check_and_drop_orphaned_tables( /*===============================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/fts0opt.cc mysql-5.6-5.6.33/storage/innobase/fts/fts0opt.cc --- mysql-5.6-5.6.27/storage/innobase/fts/fts0opt.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/fts0opt.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -87,6 +87,7 @@ FTS_MSG_DEL_TABLE, /*!< Remove a table from the optimize threads work queue */ + FTS_MSG_SYNC_TABLE /*!< Sync fts cache of a table */ }; /** Compressed list of words that have been read from FTS INDEX @@ -580,7 +581,7 @@ #ifdef UNIV_DEBUG ulint i; #endif - byte len = 0; + short len = 0; void* null = NULL; byte* ptr = word->f_str; int flush = Z_NO_FLUSH; @@ -590,7 +591,7 @@ return(NULL); } - zip->zp->next_out = &len; + zip->zp->next_out = reinterpret_cast(&len); zip->zp->avail_out = sizeof(len); while (zip->status == Z_OK && zip->zp->avail_out > 0) { @@ -688,11 +689,12 @@ fts_zip_t* zip = static_cast(user_arg); que_node_t* exp = sel_node->select_list; dfield_t* dfield = que_node_get_val(exp); - byte len = (byte) dfield_get_len(dfield); + short len = static_cast(dfield_get_len(dfield)); void* data = dfield_get_data(dfield); /* Skip the duplicate words. */ - if (zip->word.f_len == len && !memcmp(zip->word.f_str, data, len)) { + if (zip->word.f_len == static_cast(len) + && !memcmp(zip->word.f_str, data, len)) { return(TRUE); } @@ -706,7 +708,7 @@ ut_a(zip->zp->next_in == NULL); /* The string is prefixed by len. */ - zip->zp->next_in = &len; + zip->zp->next_in = reinterpret_cast(&len); zip->zp->avail_in = sizeof(len); /* Compress the word, create output blocks as necessary. */ @@ -795,7 +797,7 @@ Read the words from the FTS INDEX. @return DB_SUCCESS if all OK, DB_TABLE_NOT_FOUND if no more indexes to search else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_index_fetch_words( /*==================*/ @@ -1129,7 +1131,7 @@ /**********************************************************************//** Encode the word pos list into the node @return DB_SUCCESS or error code*/ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t fts_optimize_encode_node( /*=====================*/ @@ -1218,7 +1220,7 @@ /**********************************************************************//** Optimize the data contained in a node. @return DB_SUCCESS or error code*/ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t fts_optimize_node( /*==============*/ @@ -1316,7 +1318,7 @@ /**********************************************************************//** Determine the starting pos within the deleted doc id vector for a word. @return delete position */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) int fts_optimize_deleted_pos( /*=====================*/ @@ -1445,7 +1447,7 @@ /**********************************************************************//** Update the FTS index table. This is a delete followed by an insert. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_write_word( /*====================*/ @@ -1548,7 +1550,7 @@ /**********************************************************************//** Optimize the word ilist and rewrite data to the FTS index. @return status one of RESTART, EXIT, ERROR */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_compact( /*=================*/ @@ -1643,7 +1645,7 @@ /**********************************************************************//** Get optimize start time of an FTS index. @return DB_SUCCESS if all OK else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_get_index_start_time( /*==============================*/ @@ -1659,7 +1661,7 @@ /**********************************************************************//** Set the optimize start time of an FTS index. @return DB_SUCCESS if all OK else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_set_index_start_time( /*==============================*/ @@ -1675,7 +1677,7 @@ /**********************************************************************//** Get optimize end time of an FTS index. @return DB_SUCCESS if all OK else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_get_index_end_time( /*============================*/ @@ -1690,7 +1692,7 @@ /**********************************************************************//** Set the optimize end time of an FTS index. @return DB_SUCCESS if all OK else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_set_index_end_time( /*============================*/ @@ -1910,7 +1912,7 @@ Optimize is complete. Set the completion time, and reset the optimize start string for this FTS index to "". @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_index_completed( /*=========================*/ @@ -1950,7 +1952,7 @@ Read the list of words from the FTS auxiliary index that will be optimized in this pass. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_index_read_words( /*==========================*/ @@ -2007,7 +2009,7 @@ Run OPTIMIZE on the given FTS index. Note: this can take a very long time (hours). @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_index( /*===============*/ @@ -2078,7 +2080,7 @@ /**********************************************************************//** Delete the document ids in the delete, and delete cache tables. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_purge_deleted_doc_ids( /*===============================*/ @@ -2147,7 +2149,7 @@ /**********************************************************************//** Delete the document ids in the pending delete, and delete tables. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_purge_deleted_doc_id_snapshot( /*=======================================*/ @@ -2197,7 +2199,7 @@ to the being deleted FTS auxiliary tables. The transaction is committed upon successfull copy and rolled back on DB_DUPLICATE_KEY error. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_create_deleted_doc_id_snapshot( /*========================================*/ @@ -2235,7 +2237,7 @@ Read in the document ids that are to be purged during optimize. The transaction is committed upon successfully read. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_read_deleted_doc_id_snapshot( /*======================================*/ @@ -2272,7 +2274,7 @@ optimized, since the FTS auxiliary indexes are not guaranteed to be of the same cardinality. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_indexes( /*=================*/ @@ -2342,7 +2344,7 @@ /*********************************************************************//** Cleanup the snapshot tables and the master deleted table. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_purge_snapshot( /*========================*/ @@ -2371,7 +2373,7 @@ /*********************************************************************//** Reset the start time to 0 so that a new optimize can be started. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_optimize_reset_start_time( /*==========================*/ @@ -2410,7 +2412,7 @@ /*********************************************************************//** Run OPTIMIZE on the given table by a background thread. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t fts_optimize_table_bk( /*==================*/ @@ -2651,6 +2653,39 @@ os_event_free(event); } +/** Send sync fts cache for the table. +@param[in] table table to sync */ +UNIV_INTERN +void +fts_optimize_request_sync_table( + dict_table_t* table) +{ + fts_msg_t* msg; + table_id_t* table_id; + + /* if the optimize system not yet initialized, return */ + if (!fts_optimize_wq) { + return; + } + + /* FTS optimizer thread is already exited */ + if (fts_opt_start_shutdown) { + ib_logf(IB_LOG_LEVEL_INFO, + "Try to sync table %s after FTS optimize" + " thread exiting.", table->name); + return; + } + + msg = fts_optimize_create_msg(FTS_MSG_SYNC_TABLE, NULL); + + table_id = static_cast( + mem_heap_alloc(msg->heap, sizeof(table_id_t))); + *table_id = table->id; + msg->ptr = table_id; + + ib_wqueue_add(fts_optimize_wq, msg, msg->heap); +} + /**********************************************************************//** Find the slot for a particular table. @return slot if found else NULL. */ @@ -2722,6 +2757,7 @@ empty_slot = i; } else if (slot->table->id == table->id) { /* Already exists in our optimize queue. */ + ut_ad(slot->table_id = table->id); return(FALSE); } } @@ -2931,6 +2967,34 @@ } #endif +/** Sync fts cache of a table +@param[in] table_id table id */ +void +fts_optimize_sync_table( + table_id_t table_id) +{ + dict_table_t* table = NULL; + + /* Prevent DROP INDEX etc. from running when we are syncing + cache in background. */ + if (!rw_lock_s_lock_nowait(&dict_operation_lock, __FILE__, __LINE__)) { + /* Exit when fail to get dict operation lock. */ + return; + } + + table = dict_table_open_on_id(table_id, FALSE, DICT_TABLE_OP_NORMAL); + + if (table) { + if (dict_table_has_fts_index(table) && table->fts->cache) { + fts_sync_table(table, true, false, true); + } + + dict_table_close(table, FALSE, FALSE); + } + + rw_lock_s_unlock(&dict_operation_lock); +} + /**********************************************************************//** Optimize all FTS tables. @return Dummy return */ @@ -3052,6 +3116,11 @@ ((fts_msg_del_t*) msg->ptr)->event); break; + case FTS_MSG_SYNC_TABLE: + fts_optimize_sync_table( + *static_cast(msg->ptr)); + break; + default: ut_error; } @@ -3078,26 +3147,7 @@ ib_vector_get(tables, i)); if (slot->state != FTS_STATE_EMPTY) { - dict_table_t* table = NULL; - - /*slot->table may be freed, so we try to open - table by slot->table_id.*/ - table = dict_table_open_on_id( - slot->table_id, FALSE, - DICT_TABLE_OP_NORMAL); - - if (table) { - - if (dict_table_has_fts_index(table)) { - fts_sync_table(table); - } - - if (table->fts) { - fts_free(table); - } - - dict_table_close(table, FALSE, FALSE); - } + fts_optimize_sync_table(slot->table_id); } } } diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/fts0que.cc mysql-5.6-5.6.33/storage/innobase/fts/fts0que.cc --- mysql-5.6-5.6.27/storage/innobase/fts/fts0que.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/fts0que.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -287,7 +287,7 @@ dict_index_t* index, /*!< in: FTS index to search */ fts_query_t* query) /*!< in: query result, to be freed by the client */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** This function finds documents that contain all words in a phrase or proximity search. And if proximity search, verify @@ -1128,7 +1128,7 @@ /*****************************************************************//** Set difference. @return DB_SUCCESS if all go well */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_difference( /*=================*/ @@ -1220,7 +1220,7 @@ /*****************************************************************//** Intersect the token doc ids with the current set. @return DB_SUCCESS if all go well */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_intersect( /*================*/ @@ -1398,7 +1398,7 @@ /*****************************************************************//** Set union. @return DB_SUCCESS if all go well */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_union( /*============*/ @@ -2014,7 +2014,7 @@ Read the rows from the FTS index, that match word and where the doc id is between first and last doc id. @return DB_SUCCESS if all go well else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_find_term( /*================*/ @@ -2154,7 +2154,7 @@ /******************************************************************** Calculate the total documents that contain a particular word (term). @return DB_SUCCESS if all go well else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_total_docs_containing_term( /*=================================*/ @@ -2233,7 +2233,7 @@ /******************************************************************** Get the total number of words in a documents. @return DB_SUCCESS if all go well else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_terms_in_document( /*========================*/ @@ -2314,7 +2314,7 @@ /*****************************************************************//** Retrieve the document and match the phrase tokens. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_match_document( /*=====================*/ @@ -2360,7 +2360,7 @@ This function fetches the original documents and count the words in between matching words to see that is in specified distance @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool fts_query_is_in_proximity_range( /*============================*/ @@ -2415,7 +2415,7 @@ Iterate over the matched document ids and search the for the actual phrase in the text. @return DB_SUCCESS if all OK */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_search_phrase( /*====================*/ @@ -2503,7 +2503,7 @@ /*****************************************************************//** Text/Phrase search. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_phrase_search( /*====================*/ @@ -2754,7 +2754,7 @@ /*****************************************************************//** Find the word and evaluate. @return DB_SUCCESS if all go well */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_query_execute( /*==============*/ @@ -4123,7 +4123,7 @@ search arguments to search the document again, thus "expand" the search result set. @return DB_SUCCESS if success, otherwise the error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_expand_query( /*=============*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/fts0tlex.cc mysql-5.6-5.6.33/storage/innobase/fts/fts0tlex.cc --- mysql-5.6-5.6.27/storage/innobase/fts/fts0tlex.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/fts0tlex.cc 2016-08-26 11:22:35.000000000 +0000 @@ -305,9 +305,9 @@ YY_BUFFER_STATE fts0t_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE fts0t_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); -void *fts0talloc (yy_size_t , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); -void *fts0trealloc (void *,yy_size_t , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); -void fts0tfree (void * , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); +void *fts0talloc (yy_size_t , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); +void *fts0trealloc (void *,yy_size_t , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); +void fts0tfree (void * , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); #define yy_new_buffer fts0t_create_buffer @@ -347,7 +347,7 @@ static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); -static void yy_fatal_error (yyconst char msg[] , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) ); +static void yy_fatal_error (yyconst char msg[] , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -447,7 +447,7 @@ #line 1 "fts0tlex.l" /***************************************************************************** -Copyright (c) 2007, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -575,11 +575,11 @@ #endif #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))); +static void yy_flex_strncpy (char *,yyconst char *,int , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))); +static int yy_flex_strlen (yyconst char * , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))); #endif #ifndef YY_NO_INPUT @@ -1602,7 +1602,7 @@ #define YY_EXIT_FAILURE 2 #endif -static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); @@ -1903,7 +1903,7 @@ */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { register int i; for ( i = 0; i < n; ++i ) @@ -1912,7 +1912,7 @@ #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { register int n; for ( n = 0; s[n]; ++n ) @@ -1922,12 +1922,12 @@ } #endif -void *fts0talloc (yy_size_t size , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void *fts0talloc (yy_size_t size , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { return (void *) malloc( size ); } -void *fts0trealloc (void * ptr, yy_size_t size , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void *fts0trealloc (void * ptr, yy_size_t size , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those @@ -1939,7 +1939,7 @@ return (void *) realloc( (char *) ptr, size ); } -void fts0tfree (void * ptr , yyscan_t yyscanner __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused))) +void fts0tfree (void * ptr , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { free( (char *) ptr ); /* see fts0trealloc() for (char *) cast */ } diff -Nru mysql-5.6-5.6.27/storage/innobase/fts/make_parser.sh mysql-5.6-5.6.33/storage/innobase/fts/make_parser.sh --- mysql-5.6-5.6.27/storage/innobase/fts/make_parser.sh 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/fts/make_parser.sh 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All Rights Reserved. +# Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software @@ -22,15 +22,15 @@ echo '#include "univ.i"' > $TMPF # This is to avoid compiler warning about unused parameters. -# FIXME: gcc extension "__attribute__" causing compilation errors on windows +# FIXME: gcc extension "MY_ATTRIBUTE" causing compilation errors on windows # platform. Quote them out for now. sed -e ' -s/^\(static.*void.*yy_fatal_error.*msg.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(static.*void.*yy_flex_strncpy.*n.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(static.*int.*yy_flex_strlen.*s.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]alloc.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]realloc.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]free.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; +s/^\(static.*void.*yy_fatal_error.*msg.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(static.*void.*yy_flex_strncpy.*n.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(static.*int.*yy_flex_strlen.*s.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]alloc.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]realloc.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]free.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; ' < fts0blex.cc >> $TMPF mv $TMPF fts0blex.cc @@ -38,12 +38,12 @@ echo '#include "univ.i"' > $TMPF sed -e ' -s/^\(static.*void.*yy_fatal_error.*msg.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(static.*void.*yy_flex_strncpy.*n.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(static.*int.*yy_flex_strlen.*s.*,\)\(.*yyscanner\)/\1 \2 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]alloc.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]realloc.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; -s/^\(\(static\|void\).*fts0[bt]free.*,\)\(.*yyscanner\)/\1 \3 __attribute__((unused))/; +s/^\(static.*void.*yy_fatal_error.*msg.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(static.*void.*yy_flex_strncpy.*n.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(static.*int.*yy_flex_strlen.*s.*,\)\(.*yyscanner\)/\1 \2 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]alloc.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]realloc.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; +s/^\(\(static\|void\).*fts0[bt]free.*,\)\(.*yyscanner\)/\1 \3 MY_ATTRIBUTE((unused))/; ' < fts0tlex.cc >> $TMPF mv $TMPF fts0tlex.cc diff -Nru mysql-5.6-5.6.27/storage/innobase/handler/ha_innodb.cc mysql-5.6-5.6.33/storage/innobase/handler/ha_innodb.cc --- mysql-5.6-5.6.27/storage/innobase/handler/ha_innodb.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/handler/ha_innodb.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. Copyright (c) 2012, Facebook Inc. @@ -501,6 +501,108 @@ for update function */ struct st_mysql_value* value); /*!< in: incoming string */ +/** Validate passed-in "value" is a valid directory name. +This function is registered as a callback with MySQL. +@param[in,out] thd thread handle +@param[in] var pointer to system variable +@param[out] save immediate result for update +@param[in] value incoming string +@return 0 for valid name */ +static +int +innodb_tmpdir_validate( + THD* thd, + struct st_mysql_sys_var* var, + void* save, + struct st_mysql_value* value) +{ + + char* alter_tmp_dir; + char* innodb_tmp_dir; + char buff[OS_FILE_MAX_PATH]; + int len = sizeof(buff); + char tmp_abs_path[FN_REFLEN + 2]; + + ut_ad(save != NULL); + ut_ad(value != NULL); + + if (check_global_access(thd, FILE_ACL)) { + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "InnoDB: FILE Permissions required"); + *static_cast(save) = NULL; + return(1); + } + + alter_tmp_dir = (char*) value->val_str(value, buff, &len); + + if (!alter_tmp_dir) { + *static_cast(save) = alter_tmp_dir; + return(0); + } + + if (strlen(alter_tmp_dir) > FN_REFLEN) { + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "Path length should not exceed %d bytes", FN_REFLEN); + *static_cast(save) = NULL; + return(1); + } + + my_realpath(tmp_abs_path, alter_tmp_dir, 0); + size_t tmp_abs_len = strlen(tmp_abs_path); + + if (my_access(tmp_abs_path, F_OK)) { + + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "InnoDB: Path doesn't exist."); + *static_cast(save) = NULL; + return(1); + } else if (my_access(tmp_abs_path, R_OK | W_OK)) { + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "InnoDB: Server doesn't have permission in " + "the given location."); + *static_cast(save) = NULL; + return(1); + } + + MY_STAT stat_info_dir; + + if (my_stat(tmp_abs_path, &stat_info_dir, MYF(0))) { + if ((stat_info_dir.st_mode & S_IFDIR) != S_IFDIR) { + + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "Given path is not a directory. "); + *static_cast(save) = NULL; + return(1); + } + } + + if (!is_mysql_datadir_path(tmp_abs_path)) { + + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + ER_WRONG_ARGUMENTS, + "InnoDB: Path Location should not be same as " + "mysql data directory location."); + *static_cast(save) = NULL; + return(1); + } + + innodb_tmp_dir = static_cast( + thd_memdup(thd, tmp_abs_path, tmp_abs_len + 1)); + *static_cast(save) = innodb_tmp_dir; + return(0); +} + /** "GEN_CLUST_INDEX" is the name reserved for InnoDB default system clustered index when there is no primary key. */ const char innobase_index_reserve_name[] = "GEN_CLUST_INDEX"; @@ -544,6 +646,11 @@ "User supplied stopword table name, effective in the session level.", innodb_stopword_table_validate, NULL, NULL); +static MYSQL_THDVAR_STR(tmpdir, + PLUGIN_VAR_OPCMDARG|PLUGIN_VAR_MEMALLOC, + "Directory for temporary non-tablespace files.", + innodb_tmpdir_validate, NULL, NULL); + static SHOW_VAR innodb_status_variables[]= { {"buffer_pool_dump_status", (char*) &export_vars.innodb_buffer_pool_dump_status, SHOW_CHAR}, @@ -1266,6 +1373,26 @@ return(THDVAR(thd, support_xa)); } +/** Get the value of innodb_tmpdir. +@param[in] thd thread handle, or NULL to query + the global innodb_tmpdir. +@retval NULL if innodb_tmpdir="" */ +UNIV_INTERN +const char* +thd_innodb_tmpdir( + THD* thd) +{ +#ifdef UNIV_SYNC_DEBUG + ut_ad(!sync_thread_levels_nonempty_trx(false)); +#endif /* UNIV_SYNC_DEBUG */ + + const char* tmp_dir = THDVAR(thd, tmpdir); + if (tmp_dir != NULL && *tmp_dir == '\0') { + tmp_dir = NULL; + } + + return(tmp_dir); +} /******************************************************************//** Returns the lock wait timeout for the current connection. @return the lock wait timeout, in seconds */ @@ -1298,7 +1425,7 @@ /********************************************************************//** Obtain the InnoDB transaction of a MySQL thread. @return reference to transaction pointer */ -__attribute__((warn_unused_result, nonnull)) +MY_ATTRIBUTE((warn_unused_result, nonnull)) static inline trx_t*& thd_to_trx( @@ -1793,13 +1920,14 @@ return(lower_case_table_names); } -/*********************************************************************//** -Creates a temporary file. +/** Create a temporary file in the location specified by the parameter +path. If the path is null, then it will be created in tmpdir. +@param[in] path location for creating temporary file @return temporary file descriptor, or < 0 on error */ UNIV_INTERN int -innobase_mysql_tmpfile(void) -/*========================*/ +innobase_mysql_tmpfile( + const char* path) { int fd2 = -1; File fd; @@ -1809,7 +1937,11 @@ return(-1); ); - fd = mysql_tmpfile("ib"); + if (path == NULL) { + fd = mysql_tmpfile("ib"); + } else { + fd = mysql_tmpfile_path(path, "ib"); + } if (fd >= 0) { /* Copy the file descriptor, so that the additional resources @@ -2708,6 +2840,13 @@ ut_ad(prebuilt->magic_n == ROW_PREBUILT_ALLOCATED); ut_ad(prebuilt->magic_n2 == prebuilt->magic_n); + /* Force table to be freed in close_thread_table(). */ + DBUG_EXECUTE_IF("free_table_in_fts_query", + if (prebuilt->in_fts_query) { + table->m_needs_reopen = true; + } + ); + prebuilt->keep_other_fields_on_keyread = 0; prebuilt->read_just_key = 0; prebuilt->in_fts_query = 0; @@ -3205,6 +3344,16 @@ innobase_open_files = table_cache_size; } } + + if (innobase_open_files > (long) open_files_limit) { + fprintf(stderr, + "innodb_open_files should not be greater" + " than the open_files_limit.\n"); + if (innobase_open_files > (long) table_cache_size) { + innobase_open_files = table_cache_size; + } + } + srv_max_n_open_files = (ulint) innobase_open_files; srv_innodb_status = (ibool) innobase_create_status_file; @@ -3337,7 +3486,7 @@ innobase_end( /*=========*/ handlerton* hton, /*!< in/out: InnoDB handlerton */ - ha_panic_function type __attribute__((unused))) + ha_panic_function type MY_ATTRIBUTE((unused))) /*!< in: ha_panic() parameter */ { int err= 0; @@ -6380,6 +6529,7 @@ ha_innobase::innobase_lock_autoinc(void) /*====================================*/ { + DBUG_ENTER("ha_innobase::innobase_lock_autoinc"); dberr_t error = DB_SUCCESS; ut_ad(!srv_read_only_mode); @@ -6414,6 +6564,8 @@ /* Fall through to old style locking. */ case AUTOINC_OLD_STYLE_LOCKING: + DBUG_EXECUTE_IF("die_if_autoinc_old_lock_style_used", + ut_ad(0);); error = row_lock_table_autoinc_for_mysql(prebuilt); if (error == DB_SUCCESS) { @@ -6427,7 +6579,7 @@ ut_error; } - return(error); + DBUG_RETURN(error); } /********************************************************************//** @@ -8463,7 +8615,7 @@ /*****************************************************************//** Creates a table definition to an InnoDB database. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) int create_table_def( /*=============*/ @@ -9907,6 +10059,25 @@ /* Commit the transaction in order to release the table lock. */ trx_commit_for_mysql(prebuilt->trx); + if (err == DB_SUCCESS && !discard + && dict_stats_is_persistent_enabled(dict_table)) { + dberr_t ret; + + /* Adjust the persistent statistics. */ + ret = dict_stats_update(dict_table, + DICT_STATS_RECALC_PERSISTENT); + + if (ret != DB_SUCCESS) { + push_warning_printf( + ha_thd(), + Sql_condition::WARN_LEVEL_WARN, + ER_ALTER_INFO, + "Error updating stats for table '%s'" + " after table rebuild: %s", + dict_table->name, ut_strerr(ret)); + } + } + DBUG_RETURN(convert_error_code_to_mysql(err, dict_table->flags, NULL)); } @@ -10157,7 +10328,7 @@ /*********************************************************************//** Renames an InnoDB table. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t innobase_rename_table( /*==================*/ @@ -11224,7 +11395,7 @@ if (innodb_optimize_fulltext_only) { if (prebuilt->table->fts && prebuilt->table->fts->cache && !dict_table_is_discarded(prebuilt->table)) { - fts_sync_table(prebuilt->table); + fts_sync_table(prebuilt->table, false, true, false); fts_optimize_table(prebuilt->table); } return(HA_ADMIN_OK); @@ -14334,7 +14505,12 @@ my_free(old); } - fts_internal_tbl_name = *(char**) var_ptr; + fts_internal_tbl_name2 = *(char**) var_ptr; + if (fts_internal_tbl_name2 == NULL) { + fts_internal_tbl_name = const_cast("default"); + } else { + fts_internal_tbl_name = fts_internal_tbl_name2; + } } /****************************************************************//** @@ -15067,7 +15243,7 @@ Evict all uncompressed pages of compressed tables from the buffer pool. Keep the compressed pages in the buffer pool. @return whether all uncompressed pages were evicted */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) bool innodb_buffer_pool_evict_uncompressed(void) /*=======================================*/ @@ -15349,15 +15525,12 @@ { fts_result_t* result; - ((NEW_FT_INFO*) fts_hdl)->ft_prebuilt->in_fts_query = false; - result = ((NEW_FT_INFO*) fts_hdl)->ft_result; fts_query_free_result(result); my_free((uchar*) fts_hdl); - return; } @@ -15398,13 +15571,13 @@ purge_run_now_set( /*==============*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15421,13 +15594,13 @@ purge_stop_now_set( /*===============*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15443,13 +15616,13 @@ checkpoint_now_set( /*===============*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15470,13 +15643,13 @@ buf_flush_list_now_set( /*===================*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15573,13 +15746,13 @@ buffer_pool_dump_now( /*=================*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15596,13 +15769,13 @@ buffer_pool_load_now( /*=================*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15619,13 +15792,13 @@ buffer_pool_load_abort( /*===================*/ THD* thd /*!< in: thread handle */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), struct st_mysql_sys_var* var /*!< in: pointer to system variable */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), void* var_ptr /*!< out: where the formal string goes */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const void* save) /*!< in: immediate result from check function */ { @@ -15643,10 +15816,10 @@ static void innodb_status_output_update( - THD* thd __attribute__((unused)), - struct st_mysql_sys_var* var __attribute__((unused)), - void* var_ptr __attribute__((unused)), - const void* save __attribute__((unused))) + THD* thd MY_ATTRIBUTE((unused)), + struct st_mysql_sys_var* var MY_ATTRIBUTE((unused)), + void* var_ptr MY_ATTRIBUTE((unused)), + const void* save MY_ATTRIBUTE((unused))) { *static_cast(var_ptr) = *static_cast(save); /* The lock timeout monitor thread also takes care of this @@ -16085,7 +16258,7 @@ "Whether to disable OS system file cache for sort I/O", NULL, NULL, FALSE); -static MYSQL_SYSVAR_STR(ft_aux_table, fts_internal_tbl_name, +static MYSQL_SYSVAR_STR(ft_aux_table, fts_internal_tbl_name2, PLUGIN_VAR_NOCMDARG, "FTS internal auxiliary table to be checked", innodb_internal_table_validate, @@ -16640,6 +16813,7 @@ MYSQL_SYSVAR(fil_make_page_dirty_debug), MYSQL_SYSVAR(saved_page_number_debug), #endif /* UNIV_DEBUG */ + MYSQL_SYSVAR(tmpdir), NULL }; diff -Nru mysql-5.6-5.6.27/storage/innobase/handler/ha_innodb.h mysql-5.6-5.6.33/storage/innobase/handler/ha_innodb.h --- mysql-5.6-5.6.27/storage/innobase/handler/ha_innodb.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/handler/ha_innodb.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -430,14 +430,14 @@ @param off auto_increment_offset @param inc auto_increment_increment */ void thd_get_autoinc(const MYSQL_THD thd, ulong* off, ulong* inc) -__attribute__((nonnull)); +MY_ATTRIBUTE((nonnull)); /** Is strict sql_mode set. @param thd Thread object @return True if sql_mode has strict mode (all or trans), false otherwise. */ bool thd_is_strict_mode(const MYSQL_THD thd) -__attribute__((nonnull)); +MY_ATTRIBUTE((nonnull)); } /* extern "C" */ struct trx_t; @@ -475,7 +475,7 @@ const KEY* key_info, /*!< in: Indexes to be created */ ulint num_of_keys) /*!< in: Number of indexes to be created. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Determines InnoDB table flags. @@ -492,7 +492,7 @@ outside system tablespace */ ulint* flags, /*!< out: DICT_TF flags */ ulint* flags2) /*!< out: DICT_TF2 flags */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Validates the create options. We may build on this function @@ -509,7 +509,7 @@ columns and indexes */ HA_CREATE_INFO* create_info, /*!< in: create info. */ bool use_tablespace) /*!< in: srv_file_per_table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Retrieve the FTS Relevance Ranking result for doc with doc_id @@ -539,7 +539,7 @@ innobase_fts_close_ranking( /*=======================*/ FT_INFO* fts_hdl) /*!< in: FTS handler */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*****************************************************************//** Initialize the table FTS stopword list @return TRUE if success */ @@ -550,7 +550,7 @@ dict_table_t* table, /*!< in: Table has the FTS */ trx_t* trx, /*!< in: transaction */ THD* thd) /*!< in: current thread */ - __attribute__((nonnull(1,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,3), warn_unused_result)); /** Some defines for innobase_fts_check_doc_id_index() return value */ enum fts_doc_id_index_enum { @@ -572,7 +572,7 @@ that is being altered */ ulint* fts_doc_col_no) /*!< out: The column number for Doc ID */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*******************************************************************//** Check whether the table has a unique index with FTS_DOC_ID_INDEX_NAME @@ -585,7 +585,7 @@ /*===================================*/ ulint n_key, /*!< in: Number of keys */ const KEY* key_info) /*!< in: Key definitions */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************** @return version of the extended FTS API */ diff -Nru mysql-5.6-5.6.27/storage/innobase/handler/handler0alter.cc mysql-5.6-5.6.33/storage/innobase/handler/handler0alter.cc --- mysql-5.6-5.6.27/storage/innobase/handler/handler0alter.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/handler/handler0alter.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -98,7 +98,7 @@ | Alter_inplace_info::ALTER_COLUMN_NAME; /* Report an InnoDB error to the client by invoking my_error(). */ -static UNIV_COLD __attribute__((nonnull)) +static UNIV_COLD MY_ATTRIBUTE((nonnull)) void my_error_innodb( /*============*/ @@ -156,10 +156,13 @@ /* TODO: report the row, as we do for DB_DUPLICATE_KEY */ my_error(ER_INVALID_USE_OF_NULL, MYF(0)); break; + case DB_TABLESPACE_EXISTS: + my_error(ER_TABLESPACE_EXISTS, MYF(0), table); + break; + #ifdef UNIV_DEBUG case DB_SUCCESS: case DB_DUPLICATE_KEY: - case DB_TABLESPACE_EXISTS: case DB_ONLINE_LOG_TOO_BIG: /* These codes should not be passed here. */ ut_error; @@ -192,13 +195,16 @@ Determine if ALTER TABLE needs to rebuild the table. @param ha_alter_info the DDL operation @return whether it is necessary to rebuild the table */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_need_rebuild( /*==================*/ const Alter_inplace_info* ha_alter_info) { - if (ha_alter_info->handler_flags + Alter_inplace_info::HA_ALTER_FLAGS alter_inplace_flags = + ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE); + + if (alter_inplace_flags == Alter_inplace_info::CHANGE_CREATE_OPTION && !(ha_alter_info->create_info->used_fields & (HA_CREATE_USED_ROW_FORMAT @@ -512,7 +518,7 @@ /*************************************************************//** Initialize the dict_foreign_t structure with supplied info @return true if added, false if duplicate foreign->id */ -static __attribute__((nonnull(1,3,5,7))) +static MY_ATTRIBUTE((nonnull(1,3,5,7))) bool innobase_init_foreign( /*==================*/ @@ -601,7 +607,7 @@ /*************************************************************//** Check whether the foreign key options is legit @return true if it is */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_check_fk_option( /*=====================*/ @@ -633,7 +639,7 @@ /*************************************************************//** Set foreign key options @return true if successfully set */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_set_foreign_key_option( /*============================*/ @@ -678,7 +684,7 @@ Check if a foreign key constraint can make use of an index that is being created. @return useable index, or NULL if none found */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const KEY* innobase_find_equiv_index( /*======================*/ @@ -734,7 +740,7 @@ Find an index whose first fields are the columns in the array in the same order and is not marked for deletion @return matching index, NULL if not found */ -static __attribute__((nonnull(1,2,6), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1,2,6), warn_unused_result)) dict_index_t* innobase_find_fk_index( /*===================*/ @@ -781,7 +787,7 @@ Create InnoDB foreign key structure from MySQL alter_info @retval true if successful @retval false on error (will call my_error()) */ -static __attribute__((nonnull(1,2,3,7,8), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1,2,3,7,8), warn_unused_result)) bool innobase_get_foreign_key_info( /*==========================*/ @@ -1266,7 +1272,7 @@ /*******************************************************************//** This function checks that index keys are sensible. @return 0 or error number */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) int innobase_check_index_keys( /*======================*/ @@ -1387,7 +1393,7 @@ /*******************************************************************//** Create index field definition for key part */ -static __attribute__((nonnull(2,3))) +static MY_ATTRIBUTE((nonnull(2,3))) void innobase_create_index_field_def( /*============================*/ @@ -1434,7 +1440,7 @@ /*******************************************************************//** Create index definition for key */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void innobase_create_index_def( /*======================*/ @@ -1718,7 +1724,7 @@ ENDIF @return key definitions */ -static __attribute__((nonnull, warn_unused_result, malloc)) +static MY_ATTRIBUTE((nonnull, warn_unused_result, malloc)) index_def_t* innobase_create_key_defs( /*=====================*/ @@ -1937,7 +1943,7 @@ /*******************************************************************//** Check each index column size, make sure they do not exceed the max limit @return true if index column size exceeds limit */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_check_column_length( /*=========================*/ @@ -2087,7 +2093,7 @@ /********************************************************************//** Drop any indexes that we were not able to free previously due to open table handles. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void online_retry_drop_indexes( /*======================*/ @@ -2117,7 +2123,7 @@ /********************************************************************//** Commit a dictionary transaction and drop any indexes that we were not able to free previously due to open table handles. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void online_retry_drop_indexes_with_trx( /*===============================*/ @@ -2146,7 +2152,7 @@ @param drop_fk constraints being dropped @param n_drop_fk number of constraints that are being dropped @return whether the constraint is being dropped */ -inline __attribute__((pure, nonnull, warn_unused_result)) +inline MY_ATTRIBUTE((pure, nonnull, warn_unused_result)) bool innobase_dropping_foreign( /*======================*/ @@ -2173,7 +2179,7 @@ @retval true Not allowed (will call my_error()) @retval false Allowed */ -static __attribute__((pure, nonnull, warn_unused_result)) +static MY_ATTRIBUTE((pure, nonnull, warn_unused_result)) bool innobase_check_foreigns_low( /*========================*/ @@ -2273,7 +2279,7 @@ @retval true Not allowed (will call my_error()) @retval false Allowed */ -static __attribute__((pure, nonnull, warn_unused_result)) +static MY_ATTRIBUTE((pure, nonnull, warn_unused_result)) bool innobase_check_foreigns( /*====================*/ @@ -2318,7 +2324,7 @@ @param dfield InnoDB data field to copy to @param field MySQL value for the column @param comp nonzero if in compact format */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void innobase_build_col_map_add( /*=======================*/ @@ -2352,7 +2358,7 @@ @param heap Memory heap where allocated @return array of integers, mapping column numbers in the table to column numbers in altered_table */ -static __attribute__((nonnull(1,2,3,4,5,7), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1,2,3,4,5,7), warn_unused_result)) const ulint* innobase_build_col_map( /*===================*/ @@ -2489,7 +2495,7 @@ @param user_table InnoDB table as it is before the ALTER operation @param heap Memory heap for the allocation @return array of new column names in rebuilt_table, or NULL if not renamed */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const char** innobase_get_col_names( Alter_inplace_info* ha_alter_info, @@ -2552,7 +2558,7 @@ @retval true Failure @retval false Success */ -static __attribute__((warn_unused_result, nonnull(1,2,3,4))) +static MY_ATTRIBUTE((warn_unused_result, nonnull(1,2,3,4))) bool prepare_inplace_alter_table_dict( /*=============================*/ @@ -2609,6 +2615,10 @@ ctx->num_to_add_index = ha_alter_info->index_add_count; + ut_ad(ctx->prebuilt->trx->mysql_thd != NULL); + const char* path = thd_innodb_tmpdir( + ctx->prebuilt->trx->mysql_thd); + index_defs = innobase_create_key_defs( ctx->heap, ha_alter_info, altered_table, ctx->num_to_add_index, num_fts_index, @@ -2947,8 +2957,10 @@ error = DB_OUT_OF_MEMORY; goto error_handling;); rw_lock_x_lock(&ctx->add_index[a]->lock); + bool ok = row_log_allocate(ctx->add_index[a], - NULL, true, NULL, NULL); + NULL, true, NULL, + NULL, path); rw_lock_x_unlock(&ctx->add_index[a]->lock); if (!ok) { @@ -2974,7 +2986,7 @@ clust_index, ctx->new_table, !(ha_alter_info->handler_flags & Alter_inplace_info::ADD_PK_INDEX), - ctx->add_cols, ctx->col_map); + ctx->add_cols, ctx->col_map, path); rw_lock_x_unlock(&clust_index->lock); if (!ok) { @@ -3184,7 +3196,7 @@ /* Check whether an index is needed for the foreign key constraint. If so, if it is dropped, is there an equivalent index can play its role. @return true if the index is needed and can't be dropped */ -static __attribute__((nonnull(1,2,3,5), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1,2,3,5), warn_unused_result)) bool innobase_check_foreign_key_index( /*=============================*/ @@ -3751,7 +3763,7 @@ } if (!(ha_alter_info->handler_flags & INNOBASE_ALTER_DATA) - || (ha_alter_info->handler_flags + || ((ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) == Alter_inplace_info::CHANGE_CREATE_OPTION && !innobase_need_rebuild(ha_alter_info))) { @@ -3917,7 +3929,7 @@ DBUG_RETURN(false); } - if (ha_alter_info->handler_flags + if ((ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) == Alter_inplace_info::CHANGE_CREATE_OPTION && !innobase_need_rebuild(ha_alter_info)) { goto ok_exit; @@ -3941,6 +3953,7 @@ files and merge sort. */ DBUG_EXECUTE_IF("innodb_OOM_inplace_alter", error = DB_OUT_OF_MEMORY; goto oom;); + error = row_merge_build_indexes( prebuilt->trx, prebuilt->table, ctx->new_table, @@ -4059,7 +4072,7 @@ @param locked TRUE=table locked, FALSE=may need to do a lazy drop @param trx the transaction */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void innobase_rollback_sec_index( /*========================*/ @@ -4093,7 +4106,7 @@ @retval true Failure @retval false Success */ -inline __attribute__((nonnull, warn_unused_result)) +inline MY_ATTRIBUTE((nonnull, warn_unused_result)) bool rollback_inplace_alter_table( /*=========================*/ @@ -4225,7 +4238,7 @@ @param foreign_id Foreign key constraint identifier @retval true Failure @retval false Success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_drop_foreign_try( /*======================*/ @@ -4282,7 +4295,7 @@ @param new_clustered whether the table has been rebuilt @retval true Failure @retval false Success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_rename_column_try( /*=======================*/ @@ -4491,7 +4504,7 @@ @param table_name Table name in MySQL @retval true Failure @retval false Success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_rename_columns_try( /*========================*/ @@ -4541,7 +4554,7 @@ @param ha_alter_info Data used during in-place alter. @param table the TABLE @param user_table InnoDB table that was being altered */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void innobase_rename_columns_cache( /*==========================*/ @@ -4585,7 +4598,7 @@ @param altered_table MySQL table that is being altered @param old_table MySQL table as it is before the ALTER operation @return the next auto-increment value (0 if not present) */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ulonglong commit_get_autoinc( /*===============*/ @@ -4667,7 +4680,7 @@ @retval true Failure @retval false Success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_update_foreign_try( /*========================*/ @@ -4750,7 +4763,7 @@ @param ctx In-place ALTER TABLE context @param user_thd MySQL connection @return InnoDB error code (should always be DB_SUCCESS) */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t innobase_update_foreign_cache( /*==========================*/ @@ -4835,7 +4848,7 @@ @retval true Failure @retval false Success */ -inline __attribute__((nonnull, warn_unused_result)) +inline MY_ATTRIBUTE((nonnull, warn_unused_result)) bool commit_try_rebuild( /*===============*/ @@ -4997,7 +5010,7 @@ /** Apply the changes made during commit_try_rebuild(), to the data dictionary cache and the file system. @param ctx In-place ALTER TABLE context */ -inline __attribute__((nonnull)) +inline MY_ATTRIBUTE((nonnull)) void commit_cache_rebuild( /*=================*/ @@ -5026,6 +5039,61 @@ DBUG_VOID_RETURN; } +/** Store the column number of the columns in a list belonging +to indexes which are not being dropped. +@param[in] ctx In-place ALTER TABLE context +@param[out] drop_col_list list which will be set, containing columns + which is part of index being dropped */ +static +void +get_col_list_to_be_dropped( + ha_innobase_inplace_ctx* ctx, + std::set& drop_col_list) +{ + for (ulint index_count = 0; index_count < ctx->num_to_drop_index; + index_count++) { + dict_index_t* index = ctx->drop_index[index_count]; + + for (ulint col = 0; col < index->n_user_defined_cols; col++) { + ulint col_no = dict_index_get_nth_col_no(index, col); + drop_col_list.insert(col_no); + } + } +} + +/** For each column, which is part of an index which is not going to be +dropped, it checks if the column number of the column is same as col_no +argument passed. +@param[in] table table object +@param[in] col_no column number of the column which is to be checked +@retval true column exists +@retval false column does not exist. */ +static +bool +check_col_exists_in_indexes( + const dict_table_t* table, + ulint col_no) +{ + for (dict_index_t* index = dict_table_get_first_index(table); index; + index = dict_table_get_next_index(index)) { + + if (index->to_be_dropped) { + continue; + } + + for (ulint col = 0; col < index->n_user_defined_cols; col++) { + + ulint index_col_no = dict_index_get_nth_col_no( + index, col); + if (col_no == index_col_no) { + return(true); + } + } + } + + return(false); +} + /** Commit the changes made during prepare_inplace_alter_table() and inplace_alter_table() inside the data dictionary tables, when not rebuilding the table. @@ -5037,7 +5105,7 @@ @retval true Failure @retval false Success */ -inline __attribute__((nonnull, warn_unused_result)) +inline MY_ATTRIBUTE((nonnull, warn_unused_result)) bool commit_try_norebuild( /*=================*/ @@ -5147,7 +5215,7 @@ @param trx Data dictionary transaction object (will be started and committed) @return whether all replacements were found for dropped indexes */ -inline __attribute__((nonnull, warn_unused_result)) +inline MY_ATTRIBUTE((nonnull, warn_unused_result)) bool commit_cache_norebuild( /*===================*/ @@ -5161,6 +5229,20 @@ DBUG_ASSERT(!ctx->need_rebuild()); + std::set drop_list; + std::set::const_iterator col_it; + + /* Check if the column, part of an index to be dropped is part of any + other index which is not being dropped. If it so, then set the ord_part + of the column to 0. */ + get_col_list_to_be_dropped(ctx, drop_list); + + for(col_it = drop_list.begin(); col_it != drop_list.end(); ++col_it) { + if (!check_col_exists_in_indexes(ctx->new_table, *col_it)) { + ctx->new_table->cols[*col_it].ord_part = 0; + } + } + for (ulint i = 0; i < ctx->num_to_add_index; i++) { dict_index_t* index = ctx->add_index[i]; DBUG_ASSERT(dict_index_get_online_status(index) @@ -5361,6 +5443,7 @@ Alter_inplace_info* ha_alter_info, bool commit) { + dberr_t error; ha_innobase_inplace_ctx* ctx0 = static_cast (ha_alter_info->handler_ctx); @@ -5442,7 +5525,7 @@ transactions collected during crash recovery could be holding InnoDB locks only, not MySQL locks. */ - dberr_t error = row_merge_lock_table( + error = row_merge_lock_table( prebuilt->trx, ctx->old_table, LOCK_X); if (error != DB_SUCCESS) { @@ -5577,14 +5660,20 @@ = static_cast(*pctx); DBUG_ASSERT(ctx->need_rebuild()); - /* Generate the redo log for the file - operations that will be performed in - commit_cache_rebuild(). */ - fil_mtr_rename_log(ctx->old_table->space, - ctx->old_table->name, - ctx->new_table->space, - ctx->new_table->name, - ctx->tmp_name, &mtr); + /* Check for any possible problems for any + file operations that will be performed in + commit_cache_rebuild(), and if none, generate + the redo log for these operations. */ + error = fil_mtr_rename_log(ctx->old_table, + ctx->new_table, + ctx->tmp_name, &mtr); + if (error != DB_SUCCESS) { + /* Out of memory or a problem will occur + when renaming files. */ + fail = true; + my_error_innodb(error, ctx->old_table->name, + ctx->old_table->flags); + } DBUG_INJECT_CRASH("ib_commit_inplace_crash", crash_inject_count++); } @@ -5597,18 +5686,25 @@ DBUG_EXECUTE_IF("innodb_alter_commit_crash_before_commit", log_buffer_flush_to_disk(); DBUG_SUICIDE();); - ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE)); ut_ad(!trx->fts_trx); - ut_ad(trx->insert_undo || trx->update_undo); - /* The following call commits the - mini-transaction, making the data dictionary - transaction committed at mtr.end_lsn. The - transaction becomes 'durable' by the time when - log_buffer_flush_to_disk() returns. In the - logical sense the commit in the file-based - data structures happens here. */ - trx_commit_low(trx, &mtr); + if (fail) { + mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO); + mtr_commit(&mtr); + trx_rollback_for_mysql(trx); + } else { + /* The following call commits the + mini-transaction, making the data dictionary + transaction committed at mtr.end_lsn. The + transaction becomes 'durable' by the time when + log_buffer_flush_to_disk() returns. In the + logical sense the commit in the file-based + data structures happens here. */ + ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE)); + ut_ad(trx->insert_undo || trx->update_undo); + + trx_commit_low(trx, &mtr); + } /* If server crashes here, the dictionary in InnoDB and MySQL will differ. The .ibd files @@ -5630,7 +5726,6 @@ update the in-memory structures, close some handles, release temporary files, and (unless we rolled back) update persistent statistics. */ - dberr_t error = DB_SUCCESS; for (inplace_alter_handler_ctx** pctx = ctx_array; *pctx; pctx++) { diff -Nru mysql-5.6-5.6.27/storage/innobase/handler/i_s.cc mysql-5.6-5.6.33/storage/innobase/handler/i_s.cc --- mysql-5.6-5.6.27/storage/innobase/handler/i_s.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/handler/i_s.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -3004,15 +3004,26 @@ DBUG_RETURN(0); } - deleted = fts_doc_ids_create(); + /* Prevent DDL to drop fts aux tables. */ + rw_lock_s_lock(&dict_operation_lock); user_table = dict_table_open_on_name( fts_internal_tbl_name, FALSE, FALSE, DICT_ERR_IGNORE_NONE); if (!user_table) { + rw_lock_s_unlock(&dict_operation_lock); + + DBUG_RETURN(0); + } else if (!dict_table_has_fts_index(user_table)) { + dict_table_close(user_table, FALSE, FALSE); + + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } + deleted = fts_doc_ids_create(); + trx = trx_allocate_for_background(); trx->op_info = "Select for FTS DELETE TABLE"; @@ -3040,6 +3051,8 @@ dict_table_close(user_table, FALSE, FALSE); + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } @@ -3421,6 +3434,12 @@ DBUG_RETURN(0); } + if (user_table->fts == NULL || user_table->fts->cache == NULL) { + dict_table_close(user_table, FALSE, FALSE); + + DBUG_RETURN(0); + } + cache = user_table->fts->cache; ut_a(cache); @@ -3859,10 +3878,15 @@ DBUG_RETURN(0); } + /* Prevent DDL to drop fts aux tables. */ + rw_lock_s_lock(&dict_operation_lock); + user_table = dict_table_open_on_name( fts_internal_tbl_name, FALSE, FALSE, DICT_ERR_IGNORE_NONE); if (!user_table) { + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } @@ -3875,6 +3899,8 @@ dict_table_close(user_table, FALSE, FALSE); + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } @@ -4012,16 +4038,25 @@ DBUG_RETURN(0); } + DEBUG_SYNC_C("i_s_fts_config_fille_check"); + fields = table->field; + /* Prevent DDL to drop fts aux tables. */ + rw_lock_s_lock(&dict_operation_lock); + user_table = dict_table_open_on_name( fts_internal_tbl_name, FALSE, FALSE, DICT_ERR_IGNORE_NONE); if (!user_table) { + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } else if (!dict_table_has_fts_index(user_table)) { dict_table_close(user_table, FALSE, FALSE); + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } @@ -4077,6 +4112,8 @@ dict_table_close(user_table, FALSE, FALSE); + rw_lock_s_unlock(&dict_operation_lock); + DBUG_RETURN(0); } diff -Nru mysql-5.6-5.6.27/storage/innobase/ibuf/ibuf0ibuf.cc mysql-5.6-5.6.33/storage/innobase/ibuf/ibuf0ibuf.cc --- mysql-5.6-5.6.27/storage/innobase/ibuf/ibuf0ibuf.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/ibuf/ibuf0ibuf.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -657,7 +657,7 @@ ibuf_parse_bitmap_init( /*===================*/ byte* ptr, /*!< in: buffer */ - byte* end_ptr __attribute__((unused)), /*!< in: buffer end */ + byte* end_ptr MY_ATTRIBUTE((unused)), /*!< in: buffer end */ buf_block_t* block, /*!< in: block or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ { @@ -2494,7 +2494,7 @@ /*******************************************************************//** Get the matching records for space id. @return current rec or NULL */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const rec_t* ibuf_get_user_rec( /*===============*/ @@ -2516,7 +2516,7 @@ Reads page numbers for a space id from an ibuf tree. @return a lower limit for the combined volume of records which will be merged */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ulint ibuf_get_merge_pages( /*=================*/ @@ -2624,40 +2624,22 @@ } /*********************************************************************//** -Get the table instance from the table id. -@return table instance */ -static __attribute__((warn_unused_result)) -dict_table_t* -ibuf_get_table( -/*===========*/ - table_id_t table_id) /*!< in: valid table id */ -{ - rw_lock_s_lock_func(&dict_operation_lock, 0, __FILE__, __LINE__); - - dict_table_t* table = dict_table_open_on_id( - table_id, FALSE, DICT_TABLE_OP_NORMAL); - - rw_lock_s_unlock_gen(&dict_operation_lock, 0); - - return(table); -} - -/*********************************************************************//** -Contracts insert buffer trees by reading pages to the buffer pool. -@return a lower limit for the combined size in bytes of entries which -will be merged from ibuf trees to the pages read, 0 if ibuf is -empty */ -static +Contracts insert buffer trees by reading pages referring to space_id +to the buffer pool. +@returns number of pages merged.*/ +UNIV_INTERN ulint ibuf_merge_space( /*=============*/ - ulint space, /*!< in: tablespace id to merge */ - ulint* n_pages)/*!< out: number of pages to which merged */ + ulint space) /*!< in: tablespace id to merge */ { mtr_t mtr; btr_pcur_t pcur; mem_heap_t* heap = mem_heap_create(512); dtuple_t* tuple = ibuf_search_tuple_build(space, 0, heap); + ulint n_pages = 0; + + ut_ad(space < SRV_LOG_SPACE_FIRST_ID); ibuf_mtr_start(&mtr); @@ -2689,50 +2671,47 @@ } else { sum_sizes = ibuf_get_merge_pages( - &pcur, space, IBUF_MAX_N_PAGES_MERGED, - &pages[0], &spaces[0], &versions[0], n_pages, - &mtr); + &pcur, space, IBUF_MAX_N_PAGES_MERGED, + &pages[0], &spaces[0], &versions[0], &n_pages, + &mtr); + ib_logf(IB_LOG_LEVEL_INFO,"\n Size of pages merged %lu" + ,sum_sizes); - ++sum_sizes; } ibuf_mtr_commit(&mtr); btr_pcur_close(&pcur); - if (sum_sizes > 0) { - - ut_a(*n_pages > 0 || sum_sizes == 1); + if (n_pages > 0) { #ifdef UNIV_DEBUG - ut_ad(*n_pages <= UT_ARR_SIZE(pages)); + ut_ad(n_pages <= UT_ARR_SIZE(pages)); - for (ulint i = 0; i < *n_pages; ++i) { + for (ulint i = 0; i < n_pages; ++i) { ut_ad(spaces[i] == space); ut_ad(i == 0 || versions[i] == versions[i - 1]); } #endif /* UNIV_DEBUG */ buf_read_ibuf_merge_pages( - true, spaces, versions, pages, *n_pages); + true, spaces, versions, pages, n_pages); } - return(sum_sizes); + return(n_pages); } -/*********************************************************************//** -Contracts insert buffer trees by reading pages to the buffer pool. +/** Contract the change buffer by reading pages to the buffer pool. +@param[out] n_pages number of pages merged +@param[in] sync whether the caller waits for +the issued reads to complete @return a lower limit for the combined size in bytes of entries which will be merged from ibuf trees to the pages read, 0 if ibuf is empty */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ulint ibuf_merge( /*=======*/ - table_id_t table_id, /*!< in: if merge should be - done only for a specific - table, for all tables this - should be 0 */ ulint* n_pages, /*!< out: number of pages to which merged */ bool sync) /*!< in: TRUE if the caller @@ -2740,8 +2719,6 @@ read with the highest tablespace address to complete */ { - dict_table_t* table; - *n_pages = 0; /* We perform a dirty read of ibuf->empty, without latching @@ -2755,55 +2732,45 @@ } else if (ibuf_debug) { return(0); #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ - } else if (table_id == 0) { + } else { return(ibuf_merge_pages(n_pages, sync)); - } else if ((table = ibuf_get_table(table_id)) == 0) { - /* Table has been dropped. */ - return(0); } - - ulint volume = ibuf_merge_space(table->space, n_pages); - - dict_table_close(table, FALSE, FALSE); - - return(volume); } -/*********************************************************************//** -Contracts insert buffer trees by reading pages to the buffer pool. +/** Contract the change buffer by reading pages to the buffer pool. +@param[in] sync whether the caller waits for +the issued reads to complete @return a lower limit for the combined size in bytes of entries which -will be merged from ibuf trees to the pages read, 0 if ibuf is -empty */ +will be merged from ibuf trees to the pages read, 0 if ibuf is empty */ static ulint ibuf_contract( /*==========*/ - ibool sync) /*!< in: TRUE if the caller wants to wait for the + bool sync) /*!< in: TRUE if the caller wants to wait for the issued read with the highest tablespace address to complete */ { ulint n_pages; - return(ibuf_merge(0, &n_pages, sync)); + return(ibuf_merge_pages(&n_pages, sync)); } -/*********************************************************************//** -Contracts insert buffer trees by reading pages to the buffer pool. +/** Contract the change buffer by reading pages to the buffer pool. +@param[in] full If true, do a full contraction based +on PCT_IO(100). If false, the size of contract batch is determined +based on the current size of the change buffer. @return a lower limit for the combined size in bytes of entries which will be merged from ibuf trees to the pages read, 0 if ibuf is empty */ UNIV_INTERN ulint -ibuf_contract_in_background( -/*========================*/ - table_id_t table_id, /*!< in: if merge should be done only - for a specific table, for all tables - this should be 0 */ - ibool full) /*!< in: TRUE if the caller wants to - do a full contract based on PCT_IO(100). - If FALSE then the size of contract - batch is determined based on the - current size of the ibuf tree. */ +ibuf_merge_in_background( +/*=====================*/ + bool full) /*!< in: TRUE if the caller wants to + do a full contract based on PCT_IO(100). + If FALSE then the size of contract + batch is determined based on the + current size of the ibuf tree. */ { ulint sum_bytes = 0; ulint sum_pages = 0; @@ -2811,7 +2778,7 @@ ulint n_pages; #if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG - if (srv_ibuf_disable_background_merge && table_id == 0) { + if (srv_ibuf_disable_background_merge) { return(0); } #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ @@ -2840,7 +2807,7 @@ while (sum_pages < n_pages) { ulint n_bytes; - n_bytes = ibuf_merge(table_id, &n_pag2, FALSE); + n_bytes = ibuf_merge(&n_pag2, false); if (n_bytes == 0) { return(sum_bytes); @@ -3444,7 +3411,7 @@ Buffer an operation in the insert/delete buffer, instead of doing it directly to the disk page, if this is possible. @return DB_SUCCESS, DB_STRONG_FAIL or other error */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t ibuf_insert_low( /*============*/ @@ -3511,8 +3478,7 @@ #ifdef UNIV_IBUF_DEBUG fputs("Ibuf too big\n", stderr); #endif - /* Use synchronous contract (== TRUE) */ - ibuf_contract(TRUE); + ibuf_contract(true); return(DB_STRONG_FAIL); } @@ -3935,7 +3901,7 @@ During merge, inserts to an index page a secondary index entry extracted from the insert buffer. @return newly inserted record */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) rec_t* ibuf_insert_to_index_page_low( /*==========================*/ @@ -4366,7 +4332,7 @@ /*********************************************************************//** Restores insert buffer tree cursor position @return TRUE if the position was restored; FALSE if not */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) ibool ibuf_restore_pos( /*=============*/ @@ -4421,7 +4387,7 @@ resort to a pessimistic delete, this function commits mtr and closes the cursor. @return TRUE if mtr was committed and pcur closed in this operation */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) ibool ibuf_delete_rec( /*============*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/api0api.h mysql-5.6-5.6.33/storage/innobase/include/api0api.h --- mysql-5.6-5.6.27/storage/innobase/include/api0api.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/api0api.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -36,7 +36,7 @@ #endif #if defined(__GNUC__) && (__GNUC__ > 2) && ! defined(__INTEL_COMPILER) -#define UNIV_NO_IGNORE __attribute__ ((warn_unused_result)) +#define UNIV_NO_IGNORE MY_ATTRIBUTE ((warn_unused_result)) #else #define UNIV_NO_IGNORE #endif /* __GNUC__ && __GNUC__ > 2 && !__INTEL_COMPILER */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0btr.h mysql-5.6-5.6.33/storage/innobase/include/btr0btr.h --- mysql-5.6-5.6.27/storage/innobase/include/btr0btr.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0btr.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -114,7 +114,7 @@ /*==================*/ const buf_block_t* block, /*!< in: corrupted block */ const dict_index_t* index) /*!< in: index tree */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /** Assert that a B-tree page is not corrupted. @param block buffer block containing a B-tree page @@ -156,7 +156,7 @@ ulint page_no, /*!< in: start page of the column */ dict_index_t* index, /*!< in/out: index tree */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Display the references to off-page columns. This function is to be called from a debugger, @@ -166,7 +166,7 @@ btr_blob_dbg_print( /*===============*/ const dict_index_t* index) /*!< in: index tree */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Check that there are no references to off-page columns from or to the given page. Invoked when freeing or clearing a page. @@ -177,7 +177,7 @@ /*==================*/ dict_index_t* index, /*!< in: index */ ulint page_no) /*!< in: page number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Modify the 'deleted' flag of a record. */ @@ -189,7 +189,7 @@ dict_index_t* index, /*!< in/out: index */ const ulint* offsets,/*!< in: rec_get_offs(rec, index) */ ibool del) /*!< in: TRUE=deleted, FALSE=exists */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Change the ownership of an off-page column. */ UNIV_INTERN @@ -201,7 +201,7 @@ const ulint* offsets,/*!< in: rec_get_offs(rec, index) */ ulint i, /*!< in: ith field in rec */ ibool own) /*!< in: TRUE=owned, FALSE=disowned */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Assert that there are no BLOB references to or from the given page. */ # define btr_blob_dbg_assert_empty(index, page_no) \ ut_a(btr_blob_dbg_is_empty(index, page_no)) @@ -221,7 +221,7 @@ /*=========*/ const dict_index_t* index, /*!< in: index tree */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Checks and adjusts the root node of a tree during IMPORT TABLESPACE. @@ -231,7 +231,7 @@ btr_root_adjust_on_import( /*======================*/ const dict_index_t* index) /*!< in: index tree */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Gets the height of the B-tree (the level of the root, when the leaf @@ -244,7 +244,7 @@ /*===========*/ dict_index_t* index, /*!< in: index tree */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Gets a buffer page and declares its latching order level. */ UNIV_INLINE @@ -306,7 +306,7 @@ btr_page_get_index_id( /*==================*/ const page_t* page) /*!< in: index page */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #ifndef UNIV_HOTBACKUP /********************************************************//** Gets the node level field in an index page. @@ -316,7 +316,7 @@ btr_page_get_level_low( /*===================*/ const page_t* page) /*!< in: index page */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #define btr_page_get_level(page, mtr) btr_page_get_level_low(page) /********************************************************//** Gets the next index page number. @@ -327,7 +327,7 @@ /*==============*/ const page_t* page, /*!< in: index page */ mtr_t* mtr) /*!< in: mini-transaction handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************//** Gets the previous index page number. @return prev page number */ @@ -337,7 +337,7 @@ /*==============*/ const page_t* page, /*!< in: index page */ mtr_t* mtr) /*!< in: mini-transaction handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Gets pointer to the previous user record in the tree. It is assumed that the caller has appropriate latches on the page and its neighbor. @@ -349,7 +349,7 @@ rec_t* rec, /*!< in: record on leaf level */ mtr_t* mtr) /*!< in: mtr holding a latch on the page, and if needed, also to the previous page */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Gets pointer to the next user record in the tree. It is assumed that the caller has appropriate latches on the page and its neighbor. @@ -361,7 +361,7 @@ rec_t* rec, /*!< in: record on leaf level */ mtr_t* mtr) /*!< in: mtr holding a latch on the page, and if needed, also to the next page */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Releases the latch on a leaf page and bufferunfixes it. */ UNIV_INLINE @@ -372,7 +372,7 @@ ulint latch_mode, /*!< in: BTR_SEARCH_LEAF or BTR_MODIFY_LEAF */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Gets the child node file address in a node pointer. NOTE: the offsets array must contain all offsets for the record since @@ -386,7 +386,7 @@ /*===========================*/ const rec_t* rec, /*!< in: node pointer record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /************************************************************//** Creates the root node for a new index tree. @return page number of the created root, FIL_NULL if did not succeed */ @@ -401,7 +401,7 @@ index_id_t index_id,/*!< in: index id */ dict_index_t* index, /*!< in: index */ mtr_t* mtr) /*!< in: mini-transaction handle */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /************************************************************//** Frees a B-tree except the root page, which MUST be freed after this by calling btr_free_root. */ @@ -424,7 +424,7 @@ or 0 for uncompressed pages */ ulint root_page_no, /*!< in: root page number */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Makes tree one level higher by splitting the root, and inserts the tuple. It is assumed that mtr contains an x-latch on the tree. @@ -447,7 +447,7 @@ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Reorganizes an index page. @@ -473,7 +473,7 @@ page_cur_t* cursor, /*!< in/out: page cursor */ dict_index_t* index, /*!< in: the index tree of the page */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Reorganizes an index page. @@ -492,7 +492,7 @@ page_cur_t* cursor, /*!< in/out: page cursor */ dict_index_t* index, /*!< in: the index tree of the page */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Decides if the page should be split at the convergence point of inserts converging to left. @@ -505,7 +505,7 @@ rec_t** split_rec)/*!< out: if split recommended, the first record on upper half page, or NULL if tuple should be first */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Decides if the page should be split at the convergence point of inserts converging to right. @@ -518,7 +518,7 @@ rec_t** split_rec)/*!< out: if split recommended, the first record on upper half page, or NULL if tuple should be first */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Splits an index page to halves and inserts the tuple. It is assumed that mtr holds an x-latch to the index tree. NOTE: the tree x-latch is @@ -542,7 +542,7 @@ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************//** Inserts a data tuple to a tree on a non-leaf level. It is assumed that mtr holds an x-latch on the tree. */ @@ -557,7 +557,7 @@ const char* file, /*!< in: file name */ ulint line, /*!< in: line where called */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); # define btr_insert_on_non_leaf_level(f,i,l,t,m) \ btr_insert_on_non_leaf_level_func(f,i,l,t,__FILE__,__LINE__,m) #endif /* !UNIV_HOTBACKUP */ @@ -569,7 +569,7 @@ /*=================*/ rec_t* rec, /*!< in/out: record */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /*************************************************************//** Deletes on the upper level the node pointer to a page. */ @@ -580,7 +580,7 @@ dict_index_t* index, /*!< in: index tree */ buf_block_t* block, /*!< in: page whose node pointer is deleted */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG /************************************************************//** Checks that the node pointer to a page is appropriate. @@ -592,7 +592,7 @@ dict_index_t* index, /*!< in: index tree */ buf_block_t* block, /*!< in: index page */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ /*************************************************************//** Tries to merge the page first to the left immediate brother if such a @@ -615,7 +615,7 @@ ibool adjust, /*!< in: TRUE if should adjust the cursor position even if compression occurs */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Discards a page from a B-tree. This is used to remove the last record from a B-tree page: the whole page must be removed at the same time. This cannot @@ -627,7 +627,7 @@ btr_cur_t* cursor, /*!< in: cursor on the page to discard: not on the root page */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /****************************************************************//** Parses the redo log record for setting an index record as the predefined @@ -642,7 +642,7 @@ ulint comp, /*!< in: nonzero=compact page format */ page_t* page, /*!< in: page or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ - __attribute__((nonnull(1,2), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2), warn_unused_result)); /***********************************************************//** Parses a redo log record of reorganizing a page. @return end of log record or NULL */ @@ -656,7 +656,7 @@ bool compressed,/*!< in: true if compressed page */ buf_block_t* block, /*!< in: page to be reorganized, or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ - __attribute__((nonnull(1,2,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3), warn_unused_result)); #ifndef UNIV_HOTBACKUP /**************************************************************//** Gets the number of pages in a B-tree. @@ -669,7 +669,7 @@ ulint flag, /*!< in: BTR_N_LEAF_PAGES or BTR_TOTAL_SIZE */ mtr_t* mtr) /*!< in/out: mini-transaction where index is s-latched */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Allocates a new file page to be used in an index tree. NOTE: we assume that the caller has made the reservation for free extents! @@ -692,7 +692,7 @@ mtr_t* init_mtr) /*!< in/out: mini-transaction for x-latching and initializing the page */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Frees a file page used in an index tree. NOTE: cannot free field external storage pages because the page must contain info on its level. */ @@ -703,7 +703,7 @@ dict_index_t* index, /*!< in: index tree */ buf_block_t* block, /*!< in: block to be freed, x-latched */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Frees a file page used in an index tree. Can be used also to BLOB external storage pages, because the page level 0 can be given as an @@ -716,7 +716,7 @@ buf_block_t* block, /*!< in: block to be freed, x-latched */ ulint level, /*!< in: page level */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_BTR_PRINT /*************************************************************//** Prints size info of a B-tree. */ @@ -725,7 +725,7 @@ btr_print_size( /*===========*/ dict_index_t* index) /*!< in: index tree */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Prints directories and other info of all nodes in the index. */ UNIV_INTERN @@ -735,7 +735,7 @@ dict_index_t* index, /*!< in: index */ ulint width) /*!< in: print this many entries from start and end */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* UNIV_BTR_PRINT */ /************************************************************//** Checks the size and number of fields in a record based on the definition of @@ -750,7 +750,7 @@ ibool dump_on_error) /*!< in: TRUE if the function should print hex dump of record and page on error */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Checks the consistency of an index tree. @return TRUE if ok */ @@ -760,7 +760,7 @@ /*===============*/ dict_index_t* index, /*!< in: index */ const trx_t* trx) /*!< in: transaction or 0 */ - __attribute__((nonnull(1), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); #define BTR_N_LEAF_PAGES 1 #define BTR_TOTAL_SIZE 2 diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0btr.ic mysql-5.6-5.6.33/storage/innobase/include/btr0btr.ic --- mysql-5.6-5.6.27/storage/innobase/include/btr0btr.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0btr.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -159,10 +159,11 @@ btr_page_get_next( /*==============*/ const page_t* page, /*!< in: index page */ - mtr_t* mtr __attribute__((unused))) + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in: mini-transaction handle */ { - ut_ad(page && mtr); + ut_ad(page != NULL); + ut_ad(mtr != NULL); ut_ad(mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_X_FIX) || mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_S_FIX)); @@ -181,7 +182,8 @@ ulint next, /*!< in: next page number */ mtr_t* mtr) /*!< in: mini-transaction handle */ { - ut_ad(page && mtr); + ut_ad(page != NULL); + ut_ad(mtr != NULL); if (page_zip) { mach_write_to_4(page + FIL_PAGE_NEXT, next); @@ -199,9 +201,10 @@ btr_page_get_prev( /*==============*/ const page_t* page, /*!< in: index page */ - mtr_t* mtr __attribute__((unused))) /*!< in: mini-transaction handle */ + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in: mini-transaction handle */ { - ut_ad(page && mtr); + ut_ad(page != NULL); + ut_ad(mtr != NULL); return(mach_read_from_4(page + FIL_PAGE_PREV)); } @@ -218,7 +221,8 @@ ulint prev, /*!< in: previous page number */ mtr_t* mtr) /*!< in: mini-transaction handle */ { - ut_ad(page && mtr); + ut_ad(page != NULL); + ut_ad(mtr != NULL); if (page_zip) { mach_write_to_4(page + FIL_PAGE_PREV, prev); diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0cur.h mysql-5.6-5.6.33/storage/innobase/include/btr0cur.h --- mysql-5.6-5.6.27/storage/innobase/include/btr0cur.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0cur.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -186,7 +186,7 @@ const char* file, /*!< in: file name */ ulint line, /*!< in: line where called */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #define btr_cur_open_at_index_side(f,i,l,c,lv,m) \ btr_cur_open_at_index_side_func(f,i,l,c,lv,__FILE__,__LINE__,m) /**********************************************************************//** @@ -235,7 +235,7 @@ compressed tablespace, the caller must mtr_commit(mtr) before latching any further pages */ - __attribute__((nonnull(2,3,4,5,6,7,10), warn_unused_result)); + MY_ATTRIBUTE((nonnull(2,3,4,5,6,7,10), warn_unused_result)); /*************************************************************//** Performs an insert on a page of an index tree. It is assumed that mtr holds an x-latch on the tree and on the cursor page. If the insert is @@ -266,7 +266,7 @@ ulint n_ext, /*!< in: number of externally stored columns */ que_thr_t* thr, /*!< in: query thread or NULL */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull(2,3,4,5,6,7,10), warn_unused_result)); + MY_ATTRIBUTE((nonnull(2,3,4,5,6,7,10), warn_unused_result)); /*************************************************************//** See if there is enough place in the page modification log to log an update-in-place. @@ -293,7 +293,7 @@ bool create, /*!< in: true=delete-and-insert, false=update-in-place */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifdef UNIV_DEBUG # define btr_cur_update_alloc_zip(page_zip,cursor,index,offsets,len,cr,mtr) \ btr_cur_update_alloc_zip_func(page_zip,cursor,index,offsets,len,cr,mtr) @@ -325,7 +325,7 @@ is a secondary index, the caller must mtr_commit(mtr) before latching any further pages */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /***********************************************************//** Writes a redo log record of updating a record in-place. */ UNIV_INTERN @@ -339,7 +339,7 @@ trx_id_t trx_id, /*!< in: transaction id */ roll_ptr_t roll_ptr, /*!< in: roll ptr */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Tries to update a record on a page in an index tree. It is assumed that mtr holds an x-latch on the page. The operation does not succeed if there is too @@ -371,7 +371,7 @@ is a secondary index, the caller must mtr_commit(mtr) before latching any further pages */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /*************************************************************//** Performs an update of a record on a page of a tree. It is assumed that mtr holds an x-latch on the tree and on the cursor page. If the @@ -405,7 +405,7 @@ trx_id_t trx_id, /*!< in: transaction id */ mtr_t* mtr) /*!< in/out: mini-transaction; must be committed before latching any further pages */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /***********************************************************//** Marks a clustered index record deleted. Writes an undo log record to undo log on this delete marking. Writes in the trx id field the id @@ -422,7 +422,7 @@ const ulint* offsets,/*!< in: rec_get_offsets(rec) */ que_thr_t* thr, /*!< in: query thread */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************//** Sets a secondary index record delete mark to TRUE or FALSE. @return DB_SUCCESS, DB_LOCK_WAIT, or error number */ @@ -435,7 +435,7 @@ ibool val, /*!< in: value to set */ que_thr_t* thr, /*!< in: query thread */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Tries to compress a page of the tree if it seems useful. It is assumed that mtr holds an x-latch on the tree and on the cursor page. To avoid @@ -453,7 +453,7 @@ ibool adjust, /*!< in: TRUE if should adjust the cursor position even if compression occurs */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************//** Removes the record on which the tree cursor is positioned. It is assumed that the mtr has an x-latch on the page where the cursor is positioned, @@ -474,7 +474,7 @@ TRUE on a leaf page of a secondary index, the mtr must be committed before latching any further pages */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); # ifdef UNIV_DEBUG # define btr_cur_optimistic_delete(cursor, flags, mtr) \ btr_cur_optimistic_delete_func(cursor, flags, mtr) @@ -510,7 +510,7 @@ ulint flags, /*!< in: BTR_CREATE_FLAG or 0 */ enum trx_rb_ctx rb_ctx, /*!< in: rollback context */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /***********************************************************//** Parses a redo log record of updating a record in-place. @@ -603,7 +603,7 @@ const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ const upd_t* update, /*!< in: update vector */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull(2,3,4,5,6))); + MY_ATTRIBUTE((nonnull(2,3,4,5,6))); /** Operation code for btr_store_big_rec_extern_fields(). */ enum blob_op { @@ -623,7 +623,7 @@ btr_blob_op_is_update( /*==================*/ enum blob_op op) /*!< in: operation */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*******************************************************************//** Stores the fields in big_rec_vec to the tablespace and puts pointers to @@ -648,7 +648,7 @@ mtr_t* btr_mtr, /*!< in: mtr containing the latches to the clustered index */ enum blob_op op) /*! in: operation code */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Frees the space in an externally stored field to the file space @@ -742,7 +742,7 @@ dtuple_t* tuple, /*!< in/out: data tuple */ const upd_t* update, /*!< in: update vector */ mem_heap_t* heap) /*!< in: memory heap */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***********************************************************//** Sets a secondary index record's delete mark to the given value. This function is only used by the insert buffer merge mechanism. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0pcur.h mysql-5.6-5.6.33/storage/innobase/include/btr0pcur.h --- mysql-5.6-5.6.27/storage/innobase/include/btr0pcur.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0pcur.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -155,7 +155,7 @@ ulint level, /*!< in: level to search for (0=leaf) */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Gets the up_match value for a pcur after a search. @return number of matched fields at the cursor or to the right if diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0sea.h mysql-5.6-5.6.33/storage/innobase/include/btr0sea.h --- mysql-5.6-5.6.27/storage/innobase/include/btr0sea.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0sea.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -69,7 +69,7 @@ btr_search_get_info( /*================*/ dict_index_t* index) /*!< in: index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*****************************************************************//** Creates and initializes a search info struct. @return own: search info struct */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/btr0types.h mysql-5.6-5.6.33/storage/innobase/include/btr0types.h --- mysql-5.6-5.6.27/storage/innobase/include/btr0types.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/btr0types.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -81,7 +81,7 @@ dict_index_t* index, /*!< in/out: index tree */ const btr_blob_dbg_t* b, /*!< in: the reference */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Remove from index->blobs a reference to an off-page column. @param index the index tree @@ -94,7 +94,7 @@ dict_index_t* index, /*!< in/out: index tree */ const btr_blob_dbg_t* b, /*!< in: the reference */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Add to index->blobs any references to off-page columns from a record. @@ -107,7 +107,7 @@ dict_index_t* index, /*!< in/out: index */ const ulint* offsets,/*!< in: offsets */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Remove from index->blobs any references to off-page columns from a record. @return number of references removed */ @@ -119,7 +119,7 @@ dict_index_t* index, /*!< in/out: index */ const ulint* offsets,/*!< in: offsets */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Count and add to index->blobs any references to off-page columns from records on a page. @@ -131,7 +131,7 @@ const page_t* page, /*!< in: rewritten page */ dict_index_t* index, /*!< in/out: index */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Count and remove from index->blobs any references to off-page columns from records on a page. @@ -144,7 +144,7 @@ const page_t* page, /*!< in: b-tree page */ dict_index_t* index, /*!< in/out: index */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Restore in index->blobs any references to off-page columns Used when page reorganize fails due to compressed page overflow. */ @@ -156,7 +156,7 @@ const page_t* page, /*!< in: copy of original page */ dict_index_t* index, /*!< in/out: index */ const char* ctx) /*!< in: context (for logging) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Operation that processes the BLOB references of an index record @param[in] rec record on index page @@ -180,7 +180,7 @@ dict_index_t* index, /*!< in/out: index */ const char* ctx, /*!< in: context (for logging) */ const btr_blob_dbg_op_f op) /*!< in: operation on records */ - __attribute__((nonnull(1,3,4,5))); + MY_ATTRIBUTE((nonnull(1,3,4,5))); #else /* UNIV_BLOB_DEBUG */ # define btr_blob_dbg_add_rec(rec, index, offsets, ctx) ((void) 0) # define btr_blob_dbg_add(page, index, ctx) ((void) 0) diff -Nru mysql-5.6-5.6.27/storage/innobase/include/buf0buddy.h mysql-5.6-5.6.33/storage/innobase/include/buf0buddy.h --- mysql-5.6-5.6.27/storage/innobase/include/buf0buddy.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/buf0buddy.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -54,7 +54,7 @@ storage was allocated from the LRU list and buf_pool->mutex was temporarily released */ - __attribute__((malloc, nonnull)); + MY_ATTRIBUTE((malloc, nonnull)); /**********************************************************************//** Deallocate a block. */ @@ -68,7 +68,7 @@ be pointed to by the buffer pool */ ulint size) /*!< in: block size, up to UNIV_PAGE_SIZE */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_NONINL # include "buf0buddy.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/buf0buddy.ic mysql-5.6-5.6.33/storage/innobase/include/buf0buddy.ic --- mysql-5.6-5.6.27/storage/innobase/include/buf0buddy.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/buf0buddy.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -50,7 +50,7 @@ allocated from the LRU list and buf_pool->mutex was temporarily released */ - __attribute__((malloc, nonnull)); + MY_ATTRIBUTE((malloc, nonnull)); /**********************************************************************//** Deallocate a block. */ @@ -63,7 +63,7 @@ pointed to by the buffer pool */ ulint i) /*!< in: index of buf_pool->zip_free[], or BUF_BUDDY_SIZES */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Get the index of buf_pool->zip_free[] for a given block size. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/buf0buf.h mysql-5.6-5.6.33/storage/innobase/include/buf0buf.h --- mysql-5.6-5.6.27/storage/innobase/include/buf0buf.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/buf0buf.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -258,7 +258,7 @@ buf_page_get_state(bpage) must be BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_ZIP_PAGE */ buf_page_t* dpage) /*!< in/out: destination control block */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets the current size of buffer buf_pool in bytes. @return size in bytes */ @@ -289,7 +289,7 @@ buf_page_t* buf_page_alloc_descriptor(void) /*===========================*/ - __attribute__((malloc)); + MY_ATTRIBUTE((malloc)); /********************************************************************//** Free a buf_page_t descriptor. */ UNIV_INLINE @@ -297,7 +297,7 @@ buf_page_free_descriptor( /*=====================*/ buf_page_t* bpage) /*!< in: bpage descriptor to free. */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Allocates a buffer block. @@ -534,7 +534,7 @@ buf_page_get_freed_page_clock( /*==========================*/ const buf_page_t* bpage) /*!< in: block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /********************************************************************//** Reads the freed_page_clock of a buffer block. @return freed_page_clock */ @@ -543,7 +543,7 @@ buf_block_get_freed_page_clock( /*===========================*/ const buf_block_t* block) /*!< in: block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /********************************************************************//** Tells if a block is still close enough to the MRU end of the LRU list @@ -606,7 +606,7 @@ ulint line, /*!< in: line */ # endif /* UNIV_SYNC_DEBUG */ buf_block_t* block) /*!< in/out: block to bufferfix */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Increments the bufferfix count. */ @@ -652,7 +652,7 @@ const byte* read_buf, /*!< in: a database page */ ulint zip_size) /*!< in: size of compressed page; 0 for uncompressed pages */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Checks if a page is all zeroes. @return TRUE if the page is all zeroes */ @@ -682,7 +682,7 @@ buf_block_get_lock_hash_val( /*========================*/ const buf_block_t* block) /*!< in: block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); #ifdef UNIV_DEBUG /*********************************************************************//** Finds a block in the buffer pool that points to a @@ -743,7 +743,7 @@ ulint flags) /*!< in: 0 or BUF_PAGE_PRINT_NO_CRASH or BUF_PAGE_PRINT_NO_FULL */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /********************************************************************//** Decompress a block. @return TRUE if successful */ @@ -870,7 +870,7 @@ buf_block_get_state( /*================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Sets the state of a block. */ UNIV_INLINE @@ -895,7 +895,7 @@ buf_page_in_file( /*=============*/ const buf_page_t* bpage) /*!< in: pointer to control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); #ifndef UNIV_HOTBACKUP /*********************************************************************//** Determines if a block should be on unzip_LRU list. @@ -905,7 +905,7 @@ buf_page_belongs_to_unzip_LRU( /*==========================*/ const buf_page_t* bpage) /*!< in: pointer to control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the mutex of a block. @@ -915,7 +915,7 @@ buf_page_get_mutex( /*===============*/ const buf_page_t* bpage) /*!< in: pointer to control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Get the flush type of a page. @@ -925,7 +925,7 @@ buf_page_get_flush_type( /*====================*/ const buf_page_t* bpage) /*!< in: buffer page */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Set the flush type of a page. */ UNIV_INLINE @@ -951,7 +951,7 @@ buf_page_get_io_fix( /*================*/ const buf_page_t* bpage) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the io_fix state of a block. @return io_fix state */ @@ -960,7 +960,7 @@ buf_block_get_io_fix( /*================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Sets the io_fix state of a block. */ UNIV_INLINE @@ -1006,7 +1006,7 @@ buf_page_can_relocate( /*==================*/ const buf_page_t* bpage) /*!< control block being relocated */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Determine if a block has been flagged old. @@ -1016,7 +1016,7 @@ buf_page_is_old( /*============*/ const buf_page_t* bpage) /*!< in: control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Flag a block old. */ UNIV_INLINE @@ -1033,7 +1033,7 @@ buf_page_is_accessed( /*=================*/ const buf_page_t* bpage) /*!< in: control block */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************************//** Flag a block accessed. */ UNIV_INLINE @@ -1041,7 +1041,7 @@ buf_page_set_accessed( /*==================*/ buf_page_t* bpage) /*!< in/out: control block */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets the buf_block_t handle of a buffered file block if an uncompressed page frame exists, or NULL. Note: even though bpage is not declared a @@ -1052,7 +1052,7 @@ buf_page_get_block( /*===============*/ buf_page_t* bpage) /*!< in: control block, or NULL */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); #endif /* !UNIV_HOTBACKUP */ #ifdef UNIV_DEBUG /*********************************************************************//** @@ -1063,7 +1063,7 @@ buf_block_get_frame( /*================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); #else /* UNIV_DEBUG */ # define buf_block_get_frame(block) (block)->frame #endif /* UNIV_DEBUG */ @@ -1075,7 +1075,7 @@ buf_page_get_space( /*===============*/ const buf_page_t* bpage) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the space id of a block. @return space id */ @@ -1084,7 +1084,7 @@ buf_block_get_space( /*================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the page number of a block. @return page number */ @@ -1093,7 +1093,7 @@ buf_page_get_page_no( /*=================*/ const buf_page_t* bpage) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the page number of a block. @return page number */ @@ -1102,7 +1102,7 @@ buf_block_get_page_no( /*==================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the compressed page size of a block. @return compressed page size, or 0 */ @@ -1111,7 +1111,7 @@ buf_page_get_zip_size( /*==================*/ const buf_page_t* bpage) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the compressed page size of a block. @return compressed page size, or 0 */ @@ -1120,7 +1120,7 @@ buf_block_get_zip_size( /*===================*/ const buf_block_t* block) /*!< in: pointer to the control block */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /*********************************************************************//** Gets the compressed page descriptor corresponding to an uncompressed page if applicable. */ @@ -1209,7 +1209,7 @@ /*==================*/ ulint space, /*!< in: space id */ ulint offset) /*!< in: offset of the page within space */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /********************************************************************//** Calculates the index of a buffer pool to the buf_pool[] array. @return the position of the buffer pool in buf_pool[] */ @@ -1218,7 +1218,7 @@ buf_pool_index( /*===========*/ const buf_pool_t* buf_pool) /*!< in: buffer pool */ - __attribute__((nonnull, const)); + MY_ATTRIBUTE((nonnull, const)); /******************************************************************//** Returns the buffer pool instance given a page instance @return buf_pool */ @@ -1358,7 +1358,7 @@ /*=======================*/ buf_pool_t* buf_pool, /*!< buffer pool instance */ const buf_page_t* bpage) /*!< in: block */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** Add watch for the given page to be read in. Caller must have the buffer pool @return NULL if watch set, block if the page is in the buffer pool */ @@ -1369,7 +1369,7 @@ ulint space, /*!< in: space id */ ulint offset, /*!< in: page number */ ulint fold) /*!< in: buf_page_address_fold(space, offset) */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /****************************************************************//** Stop watching if the page has been read in. buf_pool_watch_set(space,offset) must have returned NULL before. */ @@ -1390,7 +1390,7 @@ /*====================*/ ulint space, /*!< in: space id */ ulint offset) /*!< in: page number */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Get total buffer pool statistics. */ UNIV_INTERN diff -Nru mysql-5.6-5.6.27/storage/innobase/include/buf0flu.h mysql-5.6-5.6.33/storage/innobase/include/buf0flu.h --- mysql-5.6-5.6.27/storage/innobase/include/buf0flu.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/buf0flu.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -85,7 +85,7 @@ /*===============*/ buf_pool_t* buf_pool, /*!< in/out: buffer pool instance */ buf_block_t* block) /*!< in/out: buffer control block */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); # endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ /*******************************************************************//** This utility flushes dirty blocks from the end of the flush list of @@ -254,7 +254,7 @@ buf_page_t* bpage, /*!< in: buffer control block, must be buf_page_in_file(bpage) */ buf_flush_t flush_type)/*!< in: type of flush */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #ifdef UNIV_DEBUG /******************************************************************//** diff -Nru mysql-5.6-5.6.27/storage/innobase/include/buf0lru.h mysql-5.6-5.6.33/storage/innobase/include/buf0lru.h --- mysql-5.6-5.6.27/storage/innobase/include/buf0lru.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/buf0lru.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -93,7 +93,7 @@ buf_page_t* bpage, /*!< in: block to be freed */ bool zip) /*!< in: true if should remove also the compressed page of an uncompressed page */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Try to free a replaceable block. @return TRUE if found and freed */ @@ -105,7 +105,7 @@ ibool scan_all) /*!< in: scan whole LRU list if TRUE, otherwise scan only 'old' blocks. */ - __attribute__((nonnull,warn_unused_result)); + MY_ATTRIBUTE((nonnull,warn_unused_result)); /******************************************************************//** Returns a free block from the buf_pool. The block is taken off the free list. If it is empty, returns NULL. @@ -146,7 +146,7 @@ buf_LRU_get_free_block( /*===================*/ buf_pool_t* buf_pool) /*!< in/out: buffer pool instance */ - __attribute__((nonnull,warn_unused_result)); + MY_ATTRIBUTE((nonnull,warn_unused_result)); /******************************************************************//** Determines if the unzip_LRU list should be used for evicting a victim instead of the general LRU list. @@ -229,7 +229,7 @@ buf_page_t* bpage) /*!< in/out: block, must contain a file page and be in a state where it can be freed; there may or may not be a hash index to the page */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG /**********************************************************************//** diff -Nru mysql-5.6-5.6.27/storage/innobase/include/data0data.h mysql-5.6-5.6.33/storage/innobase/include/data0data.h --- mysql-5.6-5.6.27/storage/innobase/include/data0data.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/data0data.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -46,7 +46,7 @@ dfield_get_type( /*============*/ const dfield_t* field) /*!< in: SQL data field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets pointer to the data in a field. @return pointer to data */ @@ -55,7 +55,7 @@ dfield_get_data( /*============*/ const dfield_t* field) /*!< in: field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #else /* UNIV_DEBUG */ # define dfield_get_type(field) (&(field)->type) # define dfield_get_data(field) ((field)->data) @@ -68,7 +68,7 @@ /*============*/ dfield_t* field, /*!< in: SQL data field */ const dtype_t* type) /*!< in: pointer to data type struct */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets length of field data. @return length of data; UNIV_SQL_NULL if SQL null data */ @@ -77,7 +77,7 @@ dfield_get_len( /*===========*/ const dfield_t* field) /*!< in: field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets length in a field. */ UNIV_INLINE @@ -86,7 +86,7 @@ /*===========*/ dfield_t* field, /*!< in: field */ ulint len) /*!< in: length or UNIV_SQL_NULL */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Determines if a field is SQL NULL @return nonzero if SQL null data */ @@ -95,7 +95,7 @@ dfield_is_null( /*===========*/ const dfield_t* field) /*!< in: field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Determines if a field is externally stored @return nonzero if externally stored */ @@ -104,7 +104,7 @@ dfield_is_ext( /*==========*/ const dfield_t* field) /*!< in: field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets the "external storage" flag */ UNIV_INLINE @@ -112,7 +112,7 @@ dfield_set_ext( /*===========*/ dfield_t* field) /*!< in/out: field */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Sets pointer to the data and length in a field. */ UNIV_INLINE @@ -122,7 +122,7 @@ dfield_t* field, /*!< in: field */ const void* data, /*!< in: data */ ulint len) /*!< in: length or UNIV_SQL_NULL */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*********************************************************************//** Sets a data field to SQL NULL. */ UNIV_INLINE @@ -130,7 +130,7 @@ dfield_set_null( /*============*/ dfield_t* field) /*!< in/out: field */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Writes an SQL null field full of zeros. */ UNIV_INLINE @@ -139,7 +139,7 @@ /*================*/ byte* data, /*!< in: pointer to a buffer of size len */ ulint len) /*!< in: SQL null size in bytes */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Copies the data and len fields. */ UNIV_INLINE @@ -148,7 +148,7 @@ /*=============*/ dfield_t* field1, /*!< out: field to copy to */ const dfield_t* field2) /*!< in: field to copy from */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Copies a data field to another. */ UNIV_INLINE @@ -157,7 +157,7 @@ /*========*/ dfield_t* field1, /*!< out: field to copy to */ const dfield_t* field2) /*!< in: field to copy from */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Copies the data pointed to by a data field. */ UNIV_INLINE @@ -166,7 +166,7 @@ /*=======*/ dfield_t* field, /*!< in/out: data field */ mem_heap_t* heap) /*!< in: memory heap where allocated */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /*********************************************************************//** Tests if two data fields are equal. @@ -181,7 +181,7 @@ const dfield_t* field2, /*!< in: field */ ulint len) /*!< in: maximum prefix to compare, or 0 to compare the whole field length */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Tests if dfield data length and content is equal to the given. @return TRUE if equal */ @@ -192,7 +192,7 @@ const dfield_t* field, /*!< in: field */ ulint len, /*!< in: data length or UNIV_SQL_NULL */ const byte* data) /*!< in: data */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /*********************************************************************//** Gets number of fields in a data tuple. @@ -202,7 +202,7 @@ dtuple_get_n_fields( /*================*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifdef UNIV_DEBUG /*********************************************************************//** Gets nth field of a tuple. @@ -224,7 +224,7 @@ dtuple_get_info_bits( /*=================*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets info bits in a data tuple. */ UNIV_INLINE @@ -233,7 +233,7 @@ /*=================*/ dtuple_t* tuple, /*!< in: tuple */ ulint info_bits) /*!< in: info bits */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets number of fields used in record comparisons. @return number of fields used in comparisons in rem0cmp.* */ @@ -242,7 +242,7 @@ dtuple_get_n_fields_cmp( /*====================*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets number of fields used in record comparisons. */ UNIV_INLINE @@ -252,7 +252,7 @@ dtuple_t* tuple, /*!< in: tuple */ ulint n_fields_cmp) /*!< in: number of fields used in comparisons in rem0cmp.* */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /* Estimate the number of bytes that are going to be allocated when creating a new dtuple_t object */ @@ -272,7 +272,7 @@ void* buf, /*!< in, out: buffer to use */ ulint buf_size, /*!< in: buffer size */ ulint n_fields) /*!< in: number of fields */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************//** Creates a data tuple to a memory heap. The default value for number @@ -286,7 +286,7 @@ is created, DTUPLE_EST_ALLOC(n_fields) bytes will be allocated from this heap */ ulint n_fields)/*!< in: number of fields */ - __attribute__((nonnull, malloc)); + MY_ATTRIBUTE((nonnull, malloc)); /*********************************************************************//** Sets number of fields used in a tuple. Normally this is set in @@ -297,7 +297,7 @@ /*================*/ dtuple_t* tuple, /*!< in: tuple */ ulint n_fields) /*!< in: number of fields */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Copies a data tuple to another. This is a shallow copy; if a deep copy is desired, dfield_dup() will have to be invoked on each field. @@ -309,7 +309,7 @@ const dtuple_t* tuple, /*!< in: tuple to copy from */ mem_heap_t* heap) /*!< in: memory heap where the tuple is created */ - __attribute__((nonnull, malloc)); + MY_ATTRIBUTE((nonnull, malloc)); /**********************************************************//** The following function returns the sum of data lengths of a tuple. The space occupied by the field structs or the tuple struct is not counted. @@ -320,7 +320,7 @@ /*=================*/ const dtuple_t* tuple, /*!< in: typed data tuple */ ulint comp) /*!< in: nonzero=ROW_FORMAT=COMPACT */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Computes the number of externally stored fields in a data tuple. @return number of fields */ @@ -329,7 +329,7 @@ dtuple_get_n_ext( /*=============*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /************************************************************//** Compare two data tuples, respecting the collation of character fields. @return 1, 0 , -1 if tuple1 is greater, equal, less, respectively, @@ -340,7 +340,7 @@ /*============*/ const dtuple_t* tuple1, /*!< in: tuple 1 */ const dtuple_t* tuple2) /*!< in: tuple 2 */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /************************************************************//** Folds a prefix given as the number of fields of a tuple. @return the folded value */ @@ -353,7 +353,7 @@ ulint n_bytes,/*!< in: number of bytes to fold in an incomplete last field */ index_id_t tree_id)/*!< in: index tree id */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /*******************************************************************//** Sets types of fields binary in a tuple. */ UNIV_INLINE @@ -362,7 +362,7 @@ /*====================*/ dtuple_t* tuple, /*!< in: data tuple */ ulint n) /*!< in: number of fields to set */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Checks if a dtuple contains an SQL null value. @return TRUE if some field is SQL null */ @@ -371,7 +371,7 @@ dtuple_contains_null( /*=================*/ const dtuple_t* tuple) /*!< in: dtuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************//** Checks that a data field is typed. Asserts an error if not. @return TRUE if ok */ @@ -380,7 +380,7 @@ dfield_check_typed( /*===============*/ const dfield_t* field) /*!< in: data field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************//** Checks that a data tuple is typed. Asserts an error if not. @return TRUE if ok */ @@ -389,7 +389,7 @@ dtuple_check_typed( /*===============*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************//** Checks that a data tuple is typed. @return TRUE if ok */ @@ -398,7 +398,7 @@ dtuple_check_typed_no_assert( /*=========================*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifdef UNIV_DEBUG /**********************************************************//** Validates the consistency of a tuple which must be complete, i.e, @@ -409,7 +409,7 @@ dtuple_validate( /*============*/ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ /*************************************************************//** Pretty prints a dfield value according to its data type. */ @@ -418,7 +418,7 @@ dfield_print( /*=========*/ const dfield_t* dfield) /*!< in: dfield */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Pretty prints a dfield value according to its data type. Also the hex string is printed if a string contains non-printable characters. */ @@ -427,7 +427,7 @@ dfield_print_also_hex( /*==================*/ const dfield_t* dfield) /*!< in: dfield */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************//** The following function prints the contents of a tuple. */ UNIV_INTERN @@ -436,7 +436,7 @@ /*=========*/ FILE* f, /*!< in: output stream */ const dtuple_t* tuple) /*!< in: tuple */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Moves parts of long fields in entry to the big record vector so that the size of tuple drops below the maximum record size allowed in the @@ -453,7 +453,7 @@ dtuple_t* entry, /*!< in/out: index entry */ ulint* n_ext) /*!< in/out: number of externally stored columns */ - __attribute__((nonnull, malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull, malloc, warn_unused_result)); /**************************************************************//** Puts back to entry the data stored in vector. Note that to ensure the fields in entry can accommodate the data, vector must have been created @@ -466,7 +466,7 @@ dtuple_t* entry, /*!< in: entry whose data was put to vector */ big_rec_t* vector) /*!< in, own: big rec vector; it is freed in this function */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Frees the memory in a big rec vector. */ UNIV_INLINE @@ -475,7 +475,7 @@ /*================*/ big_rec_t* vector) /*!< in, own: big rec vector; it is freed in this function */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*######################################################################*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/data0data.ic mysql-5.6-5.6.33/storage/innobase/include/data0data.ic --- mysql-5.6-5.6.27/storage/innobase/include/data0data.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/data0data.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -56,7 +56,8 @@ dfield_t* field, /*!< in: SQL data field */ const dtype_t* type) /*!< in: pointer to data type struct */ { - ut_ad(field && type); + ut_ad(field != NULL); + ut_ad(type != NULL); field->type = *type; } @@ -194,7 +195,8 @@ dfield_t* field1, /*!< out: field to copy to */ const dfield_t* field2) /*!< in: field to copy from */ { - ut_ad(field1 && field2); + ut_ad(field1 != NULL); + ut_ad(field2 != NULL); field1->data = field2->data; field1->len = field2->len; diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0boot.h mysql-5.6-5.6.33/storage/innobase/include/dict0boot.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0boot.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0boot.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -95,7 +95,7 @@ dberr_t dict_boot(void) /*===========*/ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*****************************************************************//** Creates and initializes the data dictionary at the server bootstrap. @@ -104,7 +104,7 @@ dberr_t dict_create(void) /*=============*/ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** Check if a table id belongs to system table. @@ -114,7 +114,7 @@ dict_is_sys_table( /*==============*/ table_id_t id) /*!< in: table id to check */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /* Space id and page no where the dictionary header resides */ #define DICT_HDR_SPACE 0 /* the SYSTEM tablespace */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0crea.h mysql-5.6-5.6.33/storage/innobase/include/dict0crea.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0crea.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0crea.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -123,7 +123,7 @@ incremented if used */ const char* name, /*!< in: table name */ dict_foreign_t* foreign)/*!< in/out: foreign key */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Adds the given set of foreign key objects to the dictionary tables in the database. This function does not modify the dictionary cache. The @@ -142,7 +142,7 @@ const dict_foreign_set& local_fk_set, const dict_table_t* table, trx_t* trx) - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** Creates the tablespaces and datafiles system tables inside InnoDB at server bootstrap or server start if they are not found or are @@ -177,7 +177,7 @@ const char* name, /*!< in: table name */ const dict_foreign_t* foreign,/*!< in: foreign key */ trx_t* trx) /*!< in/out: dictionary transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /* Table create node structure */ struct tab_node_t{ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0crea.ic mysql-5.6-5.6.33/storage/innobase/include/dict0crea.ic --- mysql-5.6-5.6.27/storage/innobase/include/dict0crea.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0crea.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -33,7 +33,7 @@ bool row_is_mysql_tmp_table_name( /*========================*/ - const char* name) __attribute__((warn_unused_result)); + const char* name) MY_ATTRIBUTE((warn_unused_result)); /*!< in: table name in the form 'database/tablename' */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0dict.h mysql-5.6-5.6.33/storage/innobase/include/dict0dict.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0dict.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0dict.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -53,7 +53,7 @@ dict_casedn_str( /*============*/ char* a) /*!< in/out: string to put in lower case */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Get the database name length in a table name. @return database name length */ @@ -63,7 +63,7 @@ /*=================*/ const char* name) /*!< in: table name in the form dbname '/' tablename */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Open a table from its database and table name, this is currently used by foreign constraint parser to get the referenced table. @@ -107,7 +107,7 @@ /*================*/ const char* name) /*!< in: table name in the form dbname '/' tablename */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** Operation to perform when opening a table */ enum dict_table_op_t { @@ -130,7 +130,7 @@ table_id_t table_id, /*!< in: table id */ ibool dict_locked, /*!< in: TRUE=data dictionary locked */ dict_table_op_t table_op) /*!< in: operation to perform */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Decrements the count of open handles to a table. */ UNIV_INTERN @@ -142,7 +142,7 @@ ibool try_drop) /*!< in: TRUE=try to drop any orphan indexes after an aborted online index creation */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Inits the data dictionary module. */ UNIV_INTERN @@ -167,7 +167,7 @@ dict_col_get_mbminlen( /*==================*/ const dict_col_t* col) /*!< in: column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets the maximum number of bytes per character. @return maximum multi-byte char size, in bytes */ @@ -176,7 +176,7 @@ dict_col_get_mbmaxlen( /*==================*/ const dict_col_t* col) /*!< in: column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets the minimum and maximum number of bytes per character. */ UNIV_INLINE @@ -188,7 +188,7 @@ character size, in bytes */ ulint mbmaxlen) /*!< in: minimum multi-byte character size, in bytes */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets the column data type. */ UNIV_INLINE @@ -197,7 +197,7 @@ /*===============*/ const dict_col_t* col, /*!< in: column */ dtype_t* type) /*!< out: data type */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Determine bytes of column prefix to be stored in the undo log. Please note if the table format is UNIV_FORMAT_A (< UNIV_FORMAT_B), no prefix @@ -210,7 +210,7 @@ dict_table_t* table, /*!< in: table */ const dict_col_t* col) /*!< in: column which index prefix is based on */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ #ifdef UNIV_DEBUG /*********************************************************************//** @@ -222,7 +222,7 @@ /*=======================*/ const dict_col_t* col, /*!< in: column */ const dtype_t* type) /*!< in: data type */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ #ifndef UNIV_HOTBACKUP /***********************************************************************//** @@ -233,7 +233,7 @@ dict_col_get_min_size( /*==================*/ const dict_col_t* col) /*!< in: column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Returns the maximum size of the column. @return maximum size */ @@ -242,7 +242,7 @@ dict_col_get_max_size( /*==================*/ const dict_col_t* col) /*!< in: column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Returns the size of a fixed size column, 0 if not a fixed size column. @return fixed size, or 0 */ @@ -252,7 +252,7 @@ /*====================*/ const dict_col_t* col, /*!< in: column */ ulint comp) /*!< in: nonzero=ROW_FORMAT=COMPACT */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column. For fixed length types it is the fixed length of the type, otherwise 0. @@ -263,7 +263,7 @@ /*=======================*/ const dict_col_t* col, /*!< in: column */ ulint comp) /*!< in: nonzero=ROW_FORMAT=COMPACT */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets the column number. @return col->ind, table column position (starting from 0) */ @@ -272,7 +272,7 @@ dict_col_get_no( /*============*/ const dict_col_t* col) /*!< in: column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets the column position in the clustered index. */ UNIV_INLINE @@ -281,7 +281,7 @@ /*===================*/ const dict_col_t* col, /*!< in: table column */ const dict_index_t* clust_index) /*!< in: clustered index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** If the given column name is reserved for InnoDB system columns, return TRUE. @@ -291,7 +291,7 @@ dict_col_name_is_reserved( /*======================*/ const char* name) /*!< in: column name */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Acquire the autoinc lock. */ UNIV_INTERN @@ -299,7 +299,7 @@ dict_table_autoinc_lock( /*====================*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Unconditionally set the autoinc counter. */ UNIV_INTERN @@ -308,7 +308,7 @@ /*==========================*/ dict_table_t* table, /*!< in/out: table */ ib_uint64_t value) /*!< in: next value to assign to a row */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Store autoinc value when the table is evicted. @param[in] table table evicted */ @@ -333,7 +333,7 @@ dict_table_autoinc_read( /*====================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Updates the autoinc counter if the value supplied is greater than the current value. */ @@ -344,7 +344,7 @@ dict_table_t* table, /*!< in/out: table */ ib_uint64_t value) /*!< in: value which was assigned to a row */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Release the autoinc lock. */ UNIV_INTERN @@ -352,7 +352,7 @@ dict_table_autoinc_unlock( /*======================*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** Adds system columns to a table object. */ @@ -362,7 +362,7 @@ /*==========================*/ dict_table_t* table, /*!< in/out: table */ mem_heap_t* heap) /*!< in: temporary heap */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /**********************************************************************//** Adds a table object to the dictionary cache. */ @@ -373,7 +373,7 @@ dict_table_t* table, /*!< in: table */ ibool can_be_evicted, /*!< in: TRUE if can be evicted*/ mem_heap_t* heap) /*!< in: temporary heap */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Removes a table object from the dictionary cache. */ UNIV_INTERN @@ -381,7 +381,7 @@ dict_table_remove_from_cache( /*=========================*/ dict_table_t* table) /*!< in, own: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Removes a table object from the dictionary cache. */ UNIV_INTERN @@ -404,7 +404,7 @@ /*!< in: in ALTER TABLE we want to preserve the original table name in constraints which reference it */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Removes an index from the dictionary cache. */ UNIV_INTERN @@ -413,7 +413,7 @@ /*=========================*/ dict_table_t* table, /*!< in/out: table */ dict_index_t* index) /*!< in, own: index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Change the id of a table object in the dictionary cache. This is used in DISCARD TABLESPACE. */ @@ -423,7 +423,7 @@ /*==========================*/ dict_table_t* table, /*!< in/out: table object already in cache */ table_id_t new_id) /*!< in: new id to set */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Removes a foreign constraint struct from the dictionary cache. */ UNIV_INTERN @@ -431,7 +431,7 @@ dict_foreign_remove_from_cache( /*===========================*/ dict_foreign_t* foreign) /*!< in, own: foreign constraint */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Adds a foreign key constraint object to the dictionary cache. May free the object if there already is an object with the same identifier in. @@ -452,7 +452,7 @@ compatibility */ dict_err_ignore_t ignore_err) /*!< in: error to be ignored */ - __attribute__((nonnull(1), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); /*********************************************************************//** Checks if a table is referenced by foreign keys. @return TRUE if table is referenced by a foreign key */ @@ -461,7 +461,7 @@ dict_table_is_referenced_by_foreign_key( /*====================================*/ const dict_table_t* table) /*!< in: InnoDB table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Replace the index passed in with another equivalent index in the foreign key lists of the table. @@ -475,7 +475,7 @@ /*!< in: column names, or NULL to use table->col_names */ const dict_index_t* index) /*!< in: index to be replaced */ - __attribute__((nonnull(1,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,3), warn_unused_result)); /**********************************************************************//** Determines whether a string starts with the specified keyword. @return TRUE if str starts with keyword */ @@ -486,7 +486,7 @@ THD* thd, /*!< in: MySQL thread handle */ const char* str, /*!< in: string to scan for keyword */ const char* keyword) /*!< in: keyword to look for */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Scans a table create SQL string and adds to the data dictionary the foreign key constraints declared in the string. This function @@ -515,7 +515,7 @@ ibool reject_fks) /*!< in: if TRUE, fail with error code DB_CANNOT_ADD_CONSTRAINT if any foreign keys are found. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Parses the CONSTRAINT id's to be dropped in an ALTER TABLE statement. @return DB_SUCCESS or DB_CANNOT_DROP_CONSTRAINT if syntax error or the @@ -532,7 +532,7 @@ to drop */ const char*** constraints_to_drop) /*!< out: id's of the constraints to drop */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Returns a table object and increments its open handle count. NOTE! This is a high-level function to be used mainly from outside the @@ -551,7 +551,7 @@ dict_err_ignore_t ignore_err) /*!< in: error to be ignored when loading the table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Tries to find an index whose first fields are the columns in the array, @@ -580,7 +580,7 @@ /*!< in: nonzero if none of the columns must be declared NOT NULL */ - __attribute__((nonnull(1,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,3), warn_unused_result)); /**********************************************************************//** Returns a column's name. @return column name. NOTE: not guaranteed to stay valid if table is @@ -591,7 +591,7 @@ /*====================*/ const dict_table_t* table, /*!< in: table */ ulint col_nr) /*!< in: column number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Prints a table data. */ UNIV_INTERN @@ -599,7 +599,7 @@ dict_table_print( /*=============*/ dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Outputs info on foreign keys of a table. */ UNIV_INTERN @@ -613,7 +613,7 @@ FILE* file, /*!< in: file where to print */ trx_t* trx, /*!< in: transaction */ dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Outputs info on a foreign key of a table in a format suitable for CREATE TABLE. */ @@ -625,7 +625,7 @@ trx_t* trx, /*!< in: transaction */ dict_foreign_t* foreign, /*!< in: foreign key constraint */ ibool add_newline) /*!< in: whether to add a newline */ - __attribute__((nonnull(1,3))); + MY_ATTRIBUTE((nonnull(1,3))); /********************************************************************//** Displays the names of the index and the table. */ UNIV_INTERN @@ -635,7 +635,7 @@ FILE* file, /*!< in: output stream */ const trx_t* trx, /*!< in: transaction */ const dict_index_t* index) /*!< in: index to print */ - __attribute__((nonnull(1,3))); + MY_ATTRIBUTE((nonnull(1,3))); /*********************************************************************//** Tries to find an index whose first fields are the columns in the array, in the same order and is not marked for deletion and is not the same @@ -664,7 +664,7 @@ /*!< in: nonzero if none of the columns must be declared NOT NULL */ - __attribute__((nonnull(1,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,3), warn_unused_result)); #ifdef UNIV_DEBUG /********************************************************************//** Gets the first index on the table (the clustered index). @@ -674,7 +674,7 @@ dict_table_get_first_index( /*=======================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the last index on the table. @return index, NULL if none exists */ @@ -683,7 +683,7 @@ dict_table_get_last_index( /*=======================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the next index on the table. @return index, NULL if none left */ @@ -692,7 +692,7 @@ dict_table_get_next_index( /*======================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #else /* UNIV_DEBUG */ # define dict_table_get_first_index(table) UT_LIST_GET_FIRST((table)->indexes) # define dict_table_get_last_index(table) UT_LIST_GET_LAST((table)->indexes) @@ -721,7 +721,7 @@ dict_index_is_clust( /*================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Check whether the index is unique. @return nonzero for unique index, zero for other indexes */ @@ -730,7 +730,7 @@ dict_index_is_unique( /*=================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Check whether the index is the insert buffer tree. @return nonzero for insert buffer, zero for other indexes */ @@ -739,7 +739,7 @@ dict_index_is_ibuf( /*===============*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Check whether the index is a secondary index or the insert buffer tree. @return nonzero for insert buffer, zero for other indexes */ @@ -748,7 +748,7 @@ dict_index_is_sec_or_ibuf( /*======================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /************************************************************************ Gets the all the FTS indexes for the table. NOTE: must not be called for @@ -760,7 +760,7 @@ /* out: number of indexes collected */ dict_table_t* table, /* in: table */ ib_vector_t* indexes)/* out: vector for collecting FTS indexes */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Gets the number of user-defined columns in a table in the dictionary cache. @@ -770,7 +770,7 @@ dict_table_get_n_user_cols( /*=======================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Gets the number of system columns in a table in the dictionary cache. @return number of system (e.g., ROW_ID) columns of a table */ @@ -779,7 +779,7 @@ dict_table_get_n_sys_cols( /*======================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Gets the number of all columns (also system) in a table in the dictionary cache. @@ -789,7 +789,7 @@ dict_table_get_n_cols( /*==================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Gets the approximately estimated number of rows in the table. @return estimated number of rows */ @@ -798,7 +798,7 @@ dict_table_get_n_rows( /*==================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Increment the number of rows in the table by one. Notice that this operation is not protected by any latch, the number is @@ -808,7 +808,7 @@ dict_table_n_rows_inc( /*==================*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Decrement the number of rows in the table by one. Notice that this operation is not protected by any latch, the number is @@ -818,7 +818,7 @@ dict_table_n_rows_dec( /*==================*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG /********************************************************************//** Gets the nth column of a table. @@ -829,7 +829,7 @@ /*===================*/ const dict_table_t* table, /*!< in: table */ ulint pos) /*!< in: position of column */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the given system column of a table. @return pointer to column object */ @@ -839,7 +839,7 @@ /*===================*/ const dict_table_t* table, /*!< in: table */ ulint sys) /*!< in: DATA_ROW_ID, ... */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #else /* UNIV_DEBUG */ #define dict_table_get_nth_col(table, pos) \ ((table)->cols + (pos)) @@ -855,7 +855,7 @@ /*======================*/ const dict_table_t* table, /*!< in: table */ ulint sys) /*!< in: DATA_ROW_ID, ... */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_HOTBACKUP /********************************************************************//** Returns the minimum data size of an index record. @@ -865,7 +865,7 @@ dict_index_get_min_size( /*====================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /********************************************************************//** Check whether the table uses the compact page format. @@ -875,7 +875,7 @@ dict_table_is_comp( /*===============*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Determine the file format of a table. @return file format version */ @@ -884,7 +884,7 @@ dict_table_get_format( /*==================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Determine the file format from a dict_table_t::flags. @return file format version */ @@ -893,7 +893,7 @@ dict_tf_get_format( /*===============*/ ulint flags) /*!< in: dict_table_t::flags */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Set the various values in a dict_table_t::flags pointer. */ UNIV_INLINE @@ -904,7 +904,7 @@ rec_format_t format, /*!< in: file format */ ulint zip_ssize, /*!< in: zip shift size */ bool remote_path) /*!< in: table uses DATA DIRECTORY */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Convert a 32 bit integer table flags to the 32 bit integer that is written into the tablespace header at the offset FSP_SPACE_FLAGS and is @@ -921,7 +921,7 @@ dict_tf_to_fsp_flags( /*=================*/ ulint flags) /*!< in: dict_table_t::flags */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /********************************************************************//** Extract the compressed page size from table flags. @return compressed page size, or 0 if not compressed */ @@ -930,7 +930,7 @@ dict_tf_get_zip_size( /*=================*/ ulint flags) /*!< in: flags */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /********************************************************************//** Check whether the table uses the compressed compact page format. @return compressed page size, or 0 if not compressed */ @@ -939,7 +939,7 @@ dict_table_zip_size( /*================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_HOTBACKUP /*********************************************************************//** Obtain exclusive locks on all index trees of the table. This is to prevent @@ -950,7 +950,7 @@ dict_table_x_lock_indexes( /*======================*/ dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Release the exclusive locks on all index tree. */ UNIV_INLINE @@ -958,7 +958,7 @@ dict_table_x_unlock_indexes( /*========================*/ dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Checks if a column is in the ordering columns of the clustered index of a table. Column prefixes are treated like whole columns. @@ -969,7 +969,7 @@ /*============================*/ const dict_table_t* table, /*!< in: table */ ulint n) /*!< in: column number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Check if the table has an FTS index. @return TRUE if table has an FTS index */ @@ -978,7 +978,7 @@ dict_table_has_fts_index( /*=====================*/ dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Copies types of columns contained in table to tuple and sets all fields of the tuple to the SQL NULL value. This function should @@ -989,7 +989,7 @@ /*==================*/ dtuple_t* tuple, /*!< in/out: data tuple */ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************** Wait until all the background threads of the given table have exited, i.e., bg_threads == 0. Note: bg_threads_mutex must be reserved when @@ -1001,7 +1001,7 @@ dict_table_t* table, /* in: table */ ulint delay) /* in: time in microseconds to wait between checks of bg_threads. */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Looks for an index with the given id. NOTE that we do not reserve the dictionary mutex: this function is for emergency purposes like @@ -1012,7 +1012,7 @@ dict_index_find_on_id_low( /*======================*/ index_id_t id) /*!< in: index id */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /**********************************************************************//** Make room in the table cache by evicting an unused table. The unused table should not be part of FK relationship and currently not used in any user @@ -1038,7 +1038,7 @@ ibool strict) /*!< in: TRUE=refuse to create the index if records could be too big to fit in an B-tree page */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Removes an index from the dictionary cache. */ UNIV_INTERN @@ -1047,7 +1047,7 @@ /*=========================*/ dict_table_t* table, /*!< in/out: table */ dict_index_t* index) /*!< in, own: index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /********************************************************************//** Gets the number of fields in the internal representation of an index, @@ -1060,7 +1060,7 @@ const dict_index_t* index) /*!< in: an internal representation of index (in the dictionary cache) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the number of fields in the internal representation of an index that uniquely determine the position of an index entry in the index, if @@ -1073,7 +1073,7 @@ /*====================*/ const dict_index_t* index) /*!< in: an internal representation of index (in the dictionary cache) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the number of fields in the internal representation of an index which uniquely determine the position of an index entry in the index, if @@ -1085,7 +1085,7 @@ /*============================*/ const dict_index_t* index) /*!< in: an internal representation of index (in the dictionary cache) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the number of user-defined ordering fields in the index. In the internal representation we add the row id to the ordering fields to make all indexes @@ -1098,7 +1098,7 @@ /*======================================*/ const dict_index_t* index) /*!< in: an internal representation of index (in the dictionary cache) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifdef UNIV_DEBUG /********************************************************************//** Gets the nth field of an index. @@ -1109,7 +1109,7 @@ /*=====================*/ const dict_index_t* index, /*!< in: index */ ulint pos) /*!< in: position of field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #else /* UNIV_DEBUG */ # define dict_index_get_nth_field(index, pos) ((index)->fields + (pos)) #endif /* UNIV_DEBUG */ @@ -1122,7 +1122,7 @@ /*===================*/ const dict_index_t* index, /*!< in: index */ ulint pos) /*!< in: position of the field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the column number of the nth field in an index. @return column number */ @@ -1132,7 +1132,7 @@ /*======================*/ const dict_index_t* index, /*!< in: index */ ulint pos) /*!< in: position of the field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Looks for column n in an index. @return position in internal representation of the index; @@ -1143,7 +1143,7 @@ /*=======================*/ const dict_index_t* index, /*!< in: index */ ulint n) /*!< in: column number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Looks for column n in an index. @return position in internal representation of the index; @@ -1156,7 +1156,7 @@ ulint n, /*!< in: column number */ ibool inc_prefix) /*!< in: TRUE=consider column prefixes too */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Returns TRUE if the index contains a column or a prefix of that column. @return TRUE if contains the column or its prefix */ @@ -1166,7 +1166,7 @@ /*==============================*/ const dict_index_t* index, /*!< in: index */ ulint n) /*!< in: column number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Looks for a matching field in an index. The column has to be the same. The column in index must be complete, or must contain a prefix longer than the @@ -1181,7 +1181,7 @@ const dict_index_t* index, /*!< in: index from which to search */ const dict_index_t* index2, /*!< in: index */ ulint n) /*!< in: field number in index2 */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Looks for column n position in the clustered index. @return position in internal representation of the clustered index */ @@ -1191,7 +1191,7 @@ /*=======================*/ const dict_table_t* table, /*!< in: table */ ulint n) /*!< in: column number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Returns the position of a system column in an index. @return position, ULINT_UNDEFINED if not contained */ @@ -1201,7 +1201,7 @@ /*=======================*/ const dict_index_t* index, /*!< in: index */ ulint type) /*!< in: DATA_ROW_ID, ... */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Adds a column to index. */ UNIV_INTERN @@ -1212,7 +1212,7 @@ const dict_table_t* table, /*!< in: table */ dict_col_t* col, /*!< in: column */ ulint prefix_len) /*!< in: column prefix length */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /*******************************************************************//** Copies types of fields contained in index to tuple. */ @@ -1224,7 +1224,7 @@ const dict_index_t* index, /*!< in: index */ ulint n_fields) /*!< in: number of field types to copy */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /*********************************************************************//** Gets the field column. @@ -1234,7 +1234,7 @@ dict_field_get_col( /*===============*/ const dict_field_t* field) /*!< in: index field */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_HOTBACKUP /**********************************************************************//** Returns an index object if it is found in the dictionary cache. @@ -1245,7 +1245,7 @@ dict_index_get_if_in_cache_low( /*===========================*/ index_id_t index_id) /*!< in: index id */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG /**********************************************************************//** Returns an index object if it is found in the dictionary cache. @@ -1255,7 +1255,7 @@ dict_index_get_if_in_cache( /*=======================*/ index_id_t index_id) /*!< in: index id */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #ifdef UNIV_DEBUG /**********************************************************************//** @@ -1268,7 +1268,7 @@ /*==========================*/ const dict_index_t* index, /*!< in: index tree */ const dtuple_t* tuple) /*!< in: tuple used in a search */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** Whether and when to allow temporary index names */ enum check_name { /** Require all indexes to be complete. */ @@ -1288,7 +1288,7 @@ in this table */ enum check_name check) /*!< in: whether and when to allow temporary index names */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* UNIV_DEBUG */ /**********************************************************************//** Builds a node pointer out of a physical record and a page number. @@ -1306,7 +1306,7 @@ created */ ulint level) /*!< in: level of rec in tree: 0 means leaf level */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Copies an initial segment of a physical record, long enough to specify an index entry uniquely. @@ -1322,7 +1322,7 @@ byte** buf, /*!< in/out: memory buffer for the copied prefix, or NULL */ ulint* buf_size)/*!< in/out: buffer size */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Builds a typed data tuple out of a physical record. @return own: data tuple */ @@ -1334,7 +1334,7 @@ rec_t* rec, /*!< in: record for which to build data tuple */ ulint n_fields,/*!< in: number of data fields */ mem_heap_t* heap) /*!< in: memory heap where tuple created */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets the space id of the root of the index tree. @return space id */ @@ -1343,7 +1343,7 @@ dict_index_get_space( /*=================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets the space id of the root of the index tree. */ UNIV_INLINE @@ -1352,7 +1352,7 @@ /*=================*/ dict_index_t* index, /*!< in/out: index */ ulint space) /*!< in: space id */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Gets the page number of the root of the index tree. @return page number */ @@ -1361,7 +1361,7 @@ dict_index_get_page( /*================*/ const dict_index_t* tree) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Gets the read-write lock of the index tree. @return read-write lock */ @@ -1370,7 +1370,7 @@ dict_index_get_lock( /*================*/ dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Returns free space reserved for future updates of records. This is relevant only in the case of many consecutive inserts, as updates @@ -1390,7 +1390,7 @@ dict_index_get_online_status( /*=========================*/ const dict_index_t* index) /*!< in: secondary index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Sets the status of online index creation. */ UNIV_INLINE @@ -1399,7 +1399,7 @@ /*=========================*/ dict_index_t* index, /*!< in/out: index */ enum online_index_status status) /*!< in: status */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Determines if a secondary index is being or has been created online, or if the table is being rebuilt online, allowing concurrent modifications @@ -1413,7 +1413,7 @@ dict_index_is_online_ddl( /*=====================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Calculates the minimum record length in an index. */ UNIV_INTERN @@ -1421,7 +1421,7 @@ dict_index_calc_min_rec_len( /*========================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Reserves the dictionary system mutex for MySQL. */ UNIV_INTERN @@ -1485,7 +1485,7 @@ dbname '/' tablename */ const char* name2) /*!< in: table name in the form dbname '/' tablename */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Removes an index from the cache */ UNIV_INTERN @@ -1494,7 +1494,7 @@ /*=========================*/ dict_table_t* table, /*!< in/out: table */ dict_index_t* index) /*!< in, own: index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Get index by name @return index, NULL if does not exist */ @@ -1504,7 +1504,7 @@ /*=========================*/ dict_table_t* table, /*!< in: table */ const char* name) /*!< in: name of the index to find */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** In case there is more than one index with the same name return the index with the min(id). @@ -1515,7 +1515,7 @@ /*====================================*/ dict_table_t* table, /*!< in: table */ const char* name) /*!< in: name of the index to find */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************** Check whether a column exists in an FTS index. */ UNIV_INLINE @@ -1526,7 +1526,7 @@ the offset within the vector */ ib_vector_t* indexes,/* in: vector containing only FTS indexes */ ulint col_no) /* in: col number to search for */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Move a table to the non LRU end of the LRU list. */ UNIV_INTERN @@ -1534,7 +1534,7 @@ dict_table_move_from_lru_to_non_lru( /*================================*/ dict_table_t* table) /*!< in: table to move from LRU to non-LRU */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Move a table to the LRU list from the non-LRU list. */ UNIV_INTERN @@ -1542,7 +1542,7 @@ dict_table_move_from_non_lru_to_lru( /*================================*/ dict_table_t* table) /*!< in: table to move from non-LRU to LRU */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Move to the most recently used segment of the LRU list. */ UNIV_INTERN @@ -1550,7 +1550,7 @@ dict_move_to_mru( /*=============*/ dict_table_t* table) /*!< in: table to move to MRU */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Maximum number of columns in a foreign key constraint. Please Note MySQL has a much lower limit on the number of columns allowed in a foreign key @@ -1674,7 +1674,7 @@ != DB_TABLE_NOT_FOUND is returned */ size_t errstr_sz) /*!< in: errstr size */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /* @} */ /*********************************************************************//** @@ -1692,7 +1692,7 @@ size_t db_utf8_size, /*!< in: dbname_utf8 size */ char* table_utf8, /*!< out: table name, e.g. aÑŽbØc */ size_t table_utf8_size)/*!< in: table_utf8 size */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Closes the data dictionary module. */ @@ -1709,7 +1709,7 @@ dict_table_is_corrupted( /*====================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Check whether the index is corrupted. @@ -1719,7 +1719,7 @@ dict_index_is_corrupted( /*====================*/ const dict_index_t* index) /*!< in: index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** @@ -1732,7 +1732,7 @@ dict_index_t* index, /*!< in/out: index */ trx_t* trx, /*!< in/out: transaction */ const char* ctx) /*!< in: context */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Flags an index corrupted in the data dictionary cache only. This @@ -1744,7 +1744,7 @@ /*================================*/ dict_index_t* index, /*!< in/out: index */ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Flags a table with specified space_id corrupted in the table dictionary @@ -1764,7 +1764,7 @@ dict_tf_is_valid( /*=============*/ ulint flags) /*!< in: table flags */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Check if the tablespace for the table has been discarded. @@ -1774,7 +1774,7 @@ dict_table_is_discarded( /*====================*/ const dict_table_t* table) /*!< in: table to check */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************//** Check if it is a temporary table. @@ -1784,7 +1784,7 @@ dict_table_is_temporary( /*====================*/ const dict_table_t* table) /*!< in: table to check */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #ifndef UNIV_HOTBACKUP /*********************************************************************//** @@ -1795,7 +1795,7 @@ dict_index_zip_success( /*===================*/ dict_index_t* index) /*!< in/out: index to be updated. */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** This function should be called whenever a page compression attempt fails. Updates the compression padding information. */ @@ -1804,7 +1804,7 @@ dict_index_zip_failure( /*===================*/ dict_index_t* index) /*!< in/out: index to be updated. */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Return the optimal page size, for which page will likely compress. @return page size beyond which page may not compress*/ @@ -1814,7 +1814,7 @@ /*=================================*/ dict_index_t* index) /*!< in: index for which page size is requested */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Convert table flag to row format string. @return row format name */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0dict.ic mysql-5.6-5.6.33/storage/innobase/include/dict0dict.ic --- mysql-5.6-5.6.27/storage/innobase/include/dict0dict.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0dict.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -80,7 +80,8 @@ const dict_col_t* col, /*!< in: column */ dtype_t* type) /*!< out: data type */ { - ut_ad(col && type); + ut_ad(col != NULL); + ut_ad(type != NULL); type->mtype = col->mtype; type->prtype = col->prtype; @@ -357,7 +358,7 @@ ulint dict_table_get_n_sys_cols( /*======================*/ - const dict_table_t* table __attribute__((unused))) /*!< in: table */ + const dict_table_t* table MY_ATTRIBUTE((unused))) /*!< in: table */ { ut_ad(table); ut_ad(table->magic_n == DICT_TABLE_MAGIC_N); diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0load.h mysql-5.6-5.6.33/storage/innobase/include/dict0load.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0load.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0load.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -243,7 +243,7 @@ bool check_charsets, /*!< in: whether to check charset compatibility */ dict_err_ignore_t ignore_err) /*!< in: error to be ignored */ - __attribute__((nonnull(1), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); /********************************************************************//** Prints to the standard output information on all tables found in the data dictionary system table. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0mem.h mysql-5.6-5.6.33/storage/innobase/include/dict0mem.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0mem.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0mem.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -150,19 +150,19 @@ /** Bit mask of the COMPACT field */ #define DICT_TF_MASK_COMPACT \ - ((~(~0 << DICT_TF_WIDTH_COMPACT)) \ + ((~(~0U << DICT_TF_WIDTH_COMPACT)) \ << DICT_TF_POS_COMPACT) /** Bit mask of the ZIP_SSIZE field */ #define DICT_TF_MASK_ZIP_SSIZE \ - ((~(~0 << DICT_TF_WIDTH_ZIP_SSIZE)) \ + ((~(~0U << DICT_TF_WIDTH_ZIP_SSIZE)) \ << DICT_TF_POS_ZIP_SSIZE) /** Bit mask of the ATOMIC_BLOBS field */ #define DICT_TF_MASK_ATOMIC_BLOBS \ - ((~(~0 << DICT_TF_WIDTH_ATOMIC_BLOBS)) \ + ((~(~0U << DICT_TF_WIDTH_ATOMIC_BLOBS)) \ << DICT_TF_POS_ATOMIC_BLOBS) /** Bit mask of the DATA_DIR field */ #define DICT_TF_MASK_DATA_DIR \ - ((~(~0 << DICT_TF_WIDTH_DATA_DIR)) \ + ((~(~0U << DICT_TF_WIDTH_DATA_DIR)) \ << DICT_TF_POS_DATA_DIR) /** Return the value of the COMPACT field */ @@ -196,7 +196,7 @@ /* @{ */ /** Total number of bits in table->flags2. */ #define DICT_TF2_BITS 7 -#define DICT_TF2_BIT_MASK ~(~0 << DICT_TF2_BITS) +#define DICT_TF2_BIT_MASK ~(~0U << DICT_TF2_BITS) /** TEMPORARY; TRUE for tables from CREATE TEMPORARY TABLE. */ #define DICT_TF2_TEMPORARY 1 @@ -276,7 +276,7 @@ ulint mtype, /*!< in: main datatype */ ulint prtype, /*!< in: precise type */ ulint len) /*!< in: precision */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /**********************************************************************//** Renames a column of a table in the data dictionary cache. */ UNIV_INTERN @@ -287,7 +287,7 @@ unsigned nth_col,/*!< in: column index */ const char* from, /*!< in: old column name */ const char* to) /*!< in: new column name */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** This function populates a dict_col_t memory structure with supplied information. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0stats_bg.h mysql-5.6-5.6.33/storage/innobase/include/dict0stats_bg.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0stats_bg.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0stats_bg.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -74,7 +74,7 @@ dict_stats_stop_bg( /*===============*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*****************************************************************//** Wait until background stats thread has stopped using the specified table. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dict0stats.h mysql-5.6-5.6.33/storage/innobase/include/dict0stats.h --- mysql-5.6-5.6.27/storage/innobase/include/dict0stats.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dict0stats.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -77,7 +77,7 @@ dict_table_t* table, /*!< in/out: table */ ibool ps_on, /*!< in: persistent stats explicitly enabled */ ibool ps_off) /*!< in: persistent stats explicitly disabled */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Check whether persistent statistics is enabled for a given table. @@ -87,7 +87,7 @@ dict_stats_is_persistent_enabled( /*=============================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Set the auto recalc flag for a given table (only honored for a persistent @@ -127,7 +127,7 @@ dict_stats_deinit( /*==============*/ dict_table_t* table) /*!< in/out: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Calculates new estimates for table and index statistics. The statistics @@ -179,7 +179,7 @@ dict_stats_update_for_index( /*========================*/ dict_index_t* index) /*!< in/out: index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Renames a table in InnoDB persistent stats storage. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dyn0dyn.h mysql-5.6-5.6.33/storage/innobase/include/dyn0dyn.h --- mysql-5.6-5.6.27/storage/innobase/include/dyn0dyn.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dyn0dyn.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -48,7 +48,7 @@ /*=============*/ dyn_array_t* arr) /*!< in/out memory buffer of size sizeof(dyn_array_t) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /************************************************************//** Frees a dynamic array. */ UNIV_INLINE @@ -56,7 +56,7 @@ dyn_array_free( /*===========*/ dyn_array_t* arr) /*!< in,own: dyn array */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Makes room on top of a dyn array and returns a pointer to a buffer in it. After copying the elements, the caller must close the buffer using @@ -69,7 +69,7 @@ dyn_array_t* arr, /*!< in: dynamic array */ ulint size) /*!< in: size in bytes of the buffer; MUST be smaller than DYN_ARRAY_DATA_SIZE! */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Closes the buffer returned by dyn_array_open. */ UNIV_INLINE @@ -78,7 +78,7 @@ /*============*/ dyn_array_t* arr, /*!< in: dynamic array */ const byte* ptr) /*!< in: end of used space */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Makes room on top of a dyn array and returns a pointer to the added element. The caller must copy the element to @@ -90,7 +90,7 @@ /*===========*/ dyn_array_t* arr, /*!< in/out: dynamic array */ ulint size) /*!< in: size in bytes of the element */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /************************************************************//** Returns pointer to an element in dyn array. @return pointer to element */ @@ -101,7 +101,7 @@ const dyn_array_t* arr, /*!< in: dyn array */ ulint pos) /*!< in: position of element in bytes from array start */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /************************************************************//** Returns the size of stored data in a dyn array. @return data size in bytes */ @@ -110,7 +110,7 @@ dyn_array_get_data_size( /*====================*/ const dyn_array_t* arr) /*!< in: dyn array */ - __attribute__((nonnull, warn_unused_result, pure)); + MY_ATTRIBUTE((nonnull, warn_unused_result, pure)); /************************************************************//** Gets the first block in a dyn array. @param arr dyn array @@ -144,7 +144,7 @@ dyn_block_get_used( /*===============*/ const dyn_block_t* block) /*!< in: dyn array block */ - __attribute__((nonnull, warn_unused_result, pure)); + MY_ATTRIBUTE((nonnull, warn_unused_result, pure)); /********************************************************************//** Gets pointer to the start of data in a dyn array block. @return pointer to data */ @@ -153,7 +153,7 @@ dyn_block_get_data( /*===============*/ const dyn_block_t* block) /*!< in: dyn array block */ - __attribute__((nonnull, warn_unused_result, pure)); + MY_ATTRIBUTE((nonnull, warn_unused_result, pure)); /********************************************************//** Pushes n bytes to a dyn array. */ UNIV_INLINE @@ -163,7 +163,7 @@ dyn_array_t* arr, /*!< in/out: dyn array */ const byte* str, /*!< in: string to write */ ulint len) /*!< in: string length */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*#################################################################*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/dyn0dyn.ic mysql-5.6-5.6.33/storage/innobase/include/dyn0dyn.ic --- mysql-5.6-5.6.27/storage/innobase/include/dyn0dyn.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/dyn0dyn.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -36,7 +36,7 @@ dyn_array_add_block( /*================*/ dyn_array_t* arr) /*!< in/out: dyn array */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Gets the number of used bytes in a dyn array block. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fil0fil.h mysql-5.6-5.6.33/storage/innobase/include/fil0fil.h --- mysql-5.6-5.6.27/storage/innobase/include/fil0fil.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fil0fil.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -233,7 +233,7 @@ ulint id, /*!< in: space id where to append */ ibool is_raw) /*!< in: TRUE if a raw device or a raw disk partition */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifdef UNIV_LOG_ARCHIVE /****************************************************************//** Drops files from the start of a file space, so that its size is cut by @@ -400,7 +400,7 @@ lsn values in data files */ lsn_t* max_flushed_lsn) /*!< out: max of flushed lsn values in data files */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*******************************************************************//** Increments the count of pending operation, if space is not being deleted. @return TRUE if being deleted, and operation should be skipped */ @@ -488,8 +488,23 @@ fil_discard_tablespace( /*===================*/ ulint id) /*!< in: space id */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ + +/** Test if a tablespace file can be renamed to a new filepath by checking +if that the old filepath exists and the new filepath does not exist. +@param[in] space_id tablespace id +@param[in] old_path old filepath +@param[in] new_path new filepath +@param[in] is_discarded whether the tablespace is discarded +@return innodb error code */ +dberr_t +fil_rename_tablespace_check( + ulint space_id, + const char* old_path, + const char* new_path, + bool is_discarded); + /*******************************************************************//** Renames a single-table tablespace. The tablespace must be cached in the tablespace memory cache. @@ -582,7 +597,7 @@ ulint size) /*!< in: the initial size of the tablespace file in pages, must be >= FIL_IBD_FILE_INITIAL_SIZE */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_HOTBACKUP /********************************************************************//** Tries to open a single-table tablespace and optionally checks the space id is @@ -616,7 +631,7 @@ const char* tablename, /*!< in: table name in the databasename/tablename format */ const char* filepath) /*!< in: tablespace filepath */ - __attribute__((nonnull(5), warn_unused_result)); + MY_ATTRIBUTE((nonnull(5), warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /********************************************************************//** @@ -765,7 +780,7 @@ appropriately aligned */ void* message) /*!< in: message for aio handler if non-sync aio used, else ignored */ - __attribute__((nonnull(8))); + MY_ATTRIBUTE((nonnull(8))); /**********************************************************************//** Waits for an aio operation to complete. This function is used to write the handler for completed requests. The aio array of pending requests is divided @@ -960,7 +975,7 @@ dict_table_t* table, ulint n_io_buffers, PageCallback& callback) - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Checks if a single-table tablespace for a given table name exists in the @@ -984,24 +999,22 @@ /*================*/ space_name_list_t& space_name_list) /*!< in/out: Vector for collecting the names. */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); -/****************************************************************//** -Generate redo logs for swapping two .ibd files */ +/** Generate redo log for swapping two .ibd files +@param[in] old_table old table +@param[in] new_table new table +@param[in] tmp_name temporary table name +@param[in,out] mtr mini-transaction +@return innodb error code */ UNIV_INTERN -void +dberr_t fil_mtr_rename_log( -/*===============*/ - ulint old_space_id, /*!< in: tablespace id of the old - table. */ - const char* old_name, /*!< in: old table name */ - ulint new_space_id, /*!< in: tablespace id of the new - table */ - const char* new_name, /*!< in: new table name */ - const char* tmp_name, /*!< in: temp table name used while - swapping */ - mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + const dict_table_t* old_table, + const dict_table_t* new_table, + const char* tmp_name, + mtr_t* mtr) + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Finds the given page_no of the given space id from the double write buffer, diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fsp0fsp.h mysql-5.6-5.6.33/storage/innobase/include/fsp0fsp.h --- mysql-5.6-5.6.27/storage/innobase/include/fsp0fsp.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fsp0fsp.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -83,23 +83,23 @@ /** Bit mask of the POST_ANTELOPE field */ #define FSP_FLAGS_MASK_POST_ANTELOPE \ - ((~(~0 << FSP_FLAGS_WIDTH_POST_ANTELOPE)) \ + ((~(~0U << FSP_FLAGS_WIDTH_POST_ANTELOPE)) \ << FSP_FLAGS_POS_POST_ANTELOPE) /** Bit mask of the ZIP_SSIZE field */ #define FSP_FLAGS_MASK_ZIP_SSIZE \ - ((~(~0 << FSP_FLAGS_WIDTH_ZIP_SSIZE)) \ + ((~(~0U << FSP_FLAGS_WIDTH_ZIP_SSIZE)) \ << FSP_FLAGS_POS_ZIP_SSIZE) /** Bit mask of the ATOMIC_BLOBS field */ #define FSP_FLAGS_MASK_ATOMIC_BLOBS \ - ((~(~0 << FSP_FLAGS_WIDTH_ATOMIC_BLOBS)) \ + ((~(~0U << FSP_FLAGS_WIDTH_ATOMIC_BLOBS)) \ << FSP_FLAGS_POS_ATOMIC_BLOBS) /** Bit mask of the PAGE_SSIZE field */ #define FSP_FLAGS_MASK_PAGE_SSIZE \ - ((~(~0 << FSP_FLAGS_WIDTH_PAGE_SSIZE)) \ + ((~(~0U << FSP_FLAGS_WIDTH_PAGE_SSIZE)) \ << FSP_FLAGS_POS_PAGE_SSIZE) /** Bit mask of the DATA_DIR field */ #define FSP_FLAGS_MASK_DATA_DIR \ - ((~(~0 << FSP_FLAGS_WIDTH_DATA_DIR)) \ + ((~(~0U << FSP_FLAGS_WIDTH_DATA_DIR)) \ << FSP_FLAGS_POS_DATA_DIR) /** Return the value of the POST_ANTELOPE field */ @@ -510,7 +510,7 @@ in which the page should be initialized. If init_mtr!=mtr, but the page is already latched in mtr, do not initialize the page. */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /**********************************************************************//** Reserves free pages from a tablespace. All mini-transactions which may use several pages from the tablespace should call this function beforehand @@ -579,7 +579,7 @@ fseg_header_t* seg_header, /*!< in: segment header */ ulint space, /*!< in: space id */ ulint page) /*!< in: page offset */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** Frees part of a segment. This function can be used to free a segment by repeatedly calling this function in different mini-transactions. @@ -675,7 +675,7 @@ fsp_flags_is_valid( /*===============*/ ulint flags) /*!< in: tablespace flags */ - __attribute__((warn_unused_result, const)); + MY_ATTRIBUTE((warn_unused_result, const)); /********************************************************************//** Determine if the tablespace is compressed from dict_table_t::flags. @return TRUE if compressed, FALSE if not compressed */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fts0ast.h mysql-5.6-5.6.33/storage/innobase/include/fts0ast.h --- mysql-5.6-5.6.27/storage/innobase/include/fts0ast.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fts0ast.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -200,7 +200,7 @@ and ignored processing an operator, currently we only ignore FTS_IGNORE operator */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Process (nested) sub-expression, create a new result set to store the sub-expression result by processing nodes under current sub-expression @@ -213,7 +213,7 @@ fts_ast_node_t* node, /*!< in: instance to traverse*/ fts_ast_callback visitor, /*!< in: callback */ void* arg) /*!< in: callback arg */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************** Create a lex instance.*/ UNIV_INTERN @@ -223,7 +223,7 @@ ibool boolean_mode, /*!< in: query type */ const byte* query, /*!< in: query string */ ulint query_len) /*!< in: query string len */ - __attribute__((nonnull, malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull, malloc, warn_unused_result)); /******************************************************************** Free an fts_lexer_t instance.*/ UNIV_INTERN @@ -232,7 +232,7 @@ /*===========*/ fts_lexer_t* fts_lexer) /*!< in: lexer instance to free */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Create an ast string object, with NUL-terminator, so the string diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fts0fts.h mysql-5.6-5.6.33/storage/innobase/include/fts0fts.h --- mysql-5.6-5.6.27/storage/innobase/include/fts0fts.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fts0fts.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -94,7 +94,10 @@ /** Threshold where our optimize thread automatically kicks in */ #define FTS_OPTIMIZE_THRESHOLD 10000000 -#define FTS_DOC_ID_MAX_STEP 10000 +/** Threshold to avoid exhausting of doc ids. Consecutive doc id difference +should not exceed FTS_DOC_ID_MAX_STEP */ +#define FTS_DOC_ID_MAX_STEP 65535 + /** Variable specifying the FTS parallel sort degree */ extern ulong fts_sort_pll_degree; @@ -372,6 +375,7 @@ /** Variable specifying the table that has Fulltext index to display its content through information schema table */ extern char* fts_internal_tbl_name; +extern char* fts_internal_tbl_name2; #define fts_que_graph_free(graph) \ do { \ @@ -408,7 +412,7 @@ /*================*/ const dict_table_t* table, /*!< in: table */ doc_id_t* doc_id) /*!< out: new document id */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Update the next and last Doc ID in the CONFIG table to be the input "doc_id" value (+ 1). We would do so after each FTS index build or @@ -421,7 +425,7 @@ const dict_table_t* table, /*!< in: table */ const char* table_name, /*!< in: table name, or NULL */ doc_id_t doc_id) /*!< in: DOC ID to set */ - __attribute__((nonnull(2))); + MY_ATTRIBUTE((nonnull(2))); /******************************************************************//** Create a new document id . @@ -437,7 +441,7 @@ current row that is being inserted. */ mem_heap_t* heap) /*!< in: heap */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Create a new fts_doc_ids_t. @return new fts_doc_ids_t. */ @@ -466,7 +470,7 @@ fts_row_state state, /*!< in: state of the row */ ib_vector_t* fts_indexes) /*!< in: FTS indexes affected (NULL=all) */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /******************************************************************//** Free an FTS trx. */ @@ -491,7 +495,7 @@ index */ const char* name, /*!< in: table name */ bool skip_doc_id_index) /*!< in: Skip index on doc id */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Wrapper function of fts_create_index_tables_low(), create auxiliary tables for an FTS index @@ -503,7 +507,7 @@ trx_t* trx, /*!< in: transaction handle */ const dict_index_t* index) /*!< in: the FTS index instance */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Creates the column specific ancillary tables needed for supporting an FTS index on the given table. row_mysql_lock_data_dictionary must have @@ -519,7 +523,7 @@ instance */ const char* table_name, /*!< in: the table name */ table_id_t table_id) /*!< in: the table id */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Add the FTS document id hidden column. */ UNIV_INTERN @@ -528,7 +532,7 @@ /*==================*/ dict_table_t* table, /*!< in/out: Table with FTS index */ mem_heap_t* heap) /*!< in: temporary memory heap, or NULL */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*********************************************************************//** Drops the ancillary tables needed for supporting an FTS index on the @@ -542,7 +546,7 @@ trx_t* trx, /*!< in: transaction */ dict_table_t* table) /*!< in: table has the FTS index */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** The given transaction is about to be committed; do whatever is necessary from the FTS system's POV. @@ -552,7 +556,7 @@ fts_commit( /*=======*/ trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** FTS Query entry point. @@ -569,7 +573,7 @@ in bytes */ fts_result_t** result) /*!< out: query result, to be freed by the caller.*/ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Retrieve the FTS Relevance Ranking result for doc with doc_id @@ -687,7 +691,7 @@ fts_optimize_table( /*===============*/ dict_table_t* table) /*!< in: table to optimiza */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Startup the optimize thread and create the work queue. */ @@ -713,7 +717,7 @@ /*==================*/ trx_t* trx, /*!< in: transaction */ dict_index_t* index) /*!< in: Index to drop */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Remove the table from the OPTIMIZER's list. We do wait for @@ -724,6 +728,13 @@ /*======================*/ dict_table_t* table); /*!< in: table to remove */ +/** Send sync fts cache for the table. +@param[in] table table to sync */ +UNIV_INTERN +void +fts_optimize_request_sync_table( + dict_table_t* table); + /**********************************************************************//** Signal the optimize thread to prepare for shutdown. */ UNIV_INTERN @@ -747,7 +758,7 @@ trx_t* trx, /*!< in: transaction */ fts_trx_t* fts_trx, /*!< in: fts transaction */ const char* name) /*!< in: savepoint name */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Refresh last statement savepoint. */ UNIV_INTERN @@ -755,7 +766,7 @@ fts_savepoint_laststmt_refresh( /*===========================*/ trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Release the savepoint data identified by name. */ UNIV_INTERN @@ -773,13 +784,12 @@ /*==============*/ fts_cache_t* cache); /*!< in: cache*/ -/*********************************************************************//** -Clear cache. */ +/** Clear cache. +@param[in,out] cache fts cache */ UNIV_INTERN void fts_cache_clear( -/*============*/ - fts_cache_t* cache); /*!< in: cache */ + fts_cache_t* cache); /*********************************************************************//** Initialize things in cache. */ @@ -814,6 +824,15 @@ fts_drop_orphaned_tables(void); /*==========================*/ +/* Get parent table name if it's a fts aux table +@param[in] aux_table_name aux table name +@param[in] aux_table_len aux table length +@return parent table name, or NULL */ +char* +fts_get_parent_table_name( + const char* aux_table_name, + ulint aux_table_len); + /******************************************************************//** Since we do a horizontal split on the index table, we need to drop all the split tables. @@ -824,17 +843,22 @@ /*========================*/ trx_t* trx, /*!< in: transaction */ dict_index_t* index) /*!< in: fts instance */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); -/****************************************************************//** -Run SYNC on the table, i.e., write out data from the cache to the -FTS auxiliary INDEX table and clear the cache at the end. */ +/** Run SYNC on the table, i.e., write out data from the cache to the +FTS auxiliary INDEX table and clear the cache at the end. +@param[in,out] table fts table +@param[in] unlock_cache whether unlock cache when write node +@param[in] wait whether wait for existing sync to finish +@param[in] has_dict whether has dict operation lock +@return DB_SUCCESS on success, error code on failure. */ UNIV_INTERN dberr_t fts_sync_table( -/*===========*/ - dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + dict_table_t* table, + bool unlock_cache, + bool wait, + bool has_dict); /****************************************************************//** Free the query graph but check whether dict_sys->mutex is already @@ -1013,7 +1037,7 @@ dict_table_t* table, /*!< in: Table where indexes are dropped */ dict_index_t* index, /*!< in: Index to be dropped */ trx_t* trx) /*!< in: Transaction for the drop */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /****************************************************************//** Rename auxiliary tables for all fts index for a table diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fts0priv.h mysql-5.6-5.6.33/storage/innobase/include/fts0priv.h --- mysql-5.6-5.6.27/storage/innobase/include/fts0priv.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fts0priv.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -121,7 +121,7 @@ fts_table_t* fts_table, /*!< in: FTS aux table */ pars_info_t* info, /*!< in: info struct, or NULL */ const char* sql) /*!< in: SQL string to evaluate */ - __attribute__((nonnull(3), malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull(3), malloc, warn_unused_result)); /******************************************************************//** Evaluate a parsed SQL statement @return DB_SUCCESS or error code */ @@ -131,7 +131,7 @@ /*=========*/ trx_t* trx, /*!< in: transaction */ que_t* graph) /*!< in: Parsed statement */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Construct the name of an ancillary FTS table for the given table. @return own: table name, must be freed with mem_free() */ @@ -141,7 +141,7 @@ /*===============*/ const fts_table_t* fts_table) /*!< in: FTS aux table info */ - __attribute__((nonnull, malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull, malloc, warn_unused_result)); /******************************************************************//** Construct the column specification part of the SQL string for selecting the indexed FTS columns for the given table. Adds the necessary bound @@ -164,7 +164,7 @@ dict_index_t* index, /*!< in: FTS index */ pars_info_t* info, /*!< in/out: parser info */ mem_heap_t* heap) /*!< in: memory heap */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** define for fts_doc_fetch_by_doc_id() "option" value, defines whether we want to get Doc whose ID is equal to or greater or smaller than supplied @@ -191,7 +191,7 @@ callback, /*!< in: callback to read records */ void* arg) /*!< in: callback arg */ - __attribute__((nonnull(6))); + MY_ATTRIBUTE((nonnull(6))); /*******************************************************************//** Callback function for fetch that stores the text of an FTS document, @@ -203,7 +203,7 @@ /*==========================*/ void* row, /*!< in: sel_node_t* */ void* user_arg) /*!< in: fts_doc_t* */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************** Write out a single word's data as new entry/entries in the INDEX table. @return DB_SUCCESS if all OK. */ @@ -216,7 +216,7 @@ fts_table_t* fts_table, /*!< in: the FTS aux index */ fts_string_t* word, /*!< in: word in UTF-8 */ fts_node_t* node) /*!< in: node columns */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Tokenize a document. */ UNIV_INTERN @@ -227,7 +227,7 @@ tokenize */ fts_doc_t* result) /*!< out: if provided, save result tokens here */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*******************************************************************//** Continue to tokenize a document. */ @@ -241,7 +241,7 @@ tokens from this tokenization */ fts_doc_t* result) /*!< out: if provided, save result tokens here */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /******************************************************************//** Initialize a document. */ UNIV_INTERN @@ -249,7 +249,7 @@ fts_doc_init( /*=========*/ fts_doc_t* doc) /*!< in: doc to initialize */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Do a binary search for a doc id in the array @@ -263,7 +263,7 @@ int lower, /*!< in: lower bound of array*/ int upper, /*!< in: upper bound of array*/ doc_id_t doc_id) /*!< in: doc id to lookup */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Free document. */ UNIV_INTERN @@ -271,7 +271,7 @@ fts_doc_free( /*=========*/ fts_doc_t* doc) /*!< in: document */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Free fts_optimizer_word_t instanace.*/ UNIV_INTERN @@ -279,7 +279,7 @@ fts_word_free( /*==========*/ fts_word_t* word) /*!< in: instance to free.*/ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Read the rows from the FTS inde @return DB_SUCCESS or error code */ @@ -293,7 +293,7 @@ const fts_string_t* word, /*!< in: the word to fetch */ fts_fetch_t* fetch) /*!< in: fetch callback.*/ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Create a fts_optimizer_word_t instance. @return new instance */ @@ -304,7 +304,7 @@ fts_word_t* word, /*!< in: word to initialize */ byte* utf8, /*!< in: UTF-8 string */ ulint len) /*!< in: length of string in bytes */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Compare two fts_trx_table_t instances, we actually compare the table id's here. @@ -315,7 +315,7 @@ /*==============*/ const void* v1, /*!< in: id1 */ const void* v2) /*!< in: id2 */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Compare a table id with a trx_table_t table id. @return < 0 if n1 < n2, 0 if n1 == n2, > 0 if n1 > n2 */ @@ -325,7 +325,7 @@ /*=================*/ const void* p1, /*!< in: id1 */ const void* p2) /*!< in: id2 */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Commit a transaction. @return DB_SUCCESS if all OK */ @@ -334,7 +334,7 @@ fts_sql_commit( /*===========*/ trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Rollback a transaction. @return DB_SUCCESS if all OK */ @@ -343,7 +343,7 @@ fts_sql_rollback( /*=============*/ trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Parse an SQL string. %s is replaced with the table's id. Don't acquire the dict mutex @@ -355,7 +355,7 @@ fts_table_t* fts_table, /*!< in: table with FTS index */ pars_info_t* info, /*!< in: parser info */ const char* sql) /*!< in: SQL string to evaluate */ - __attribute__((nonnull(3), malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull(3), malloc, warn_unused_result)); /******************************************************************//** Get value from config table. The caller must ensure that enough space is allocated for value to hold the column contents @@ -370,7 +370,7 @@ this parameter name */ fts_string_t* value) /*!< out: value read from config table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Get value specific to an FTS index from the config table. The caller must ensure that enough space is allocated for value to hold the @@ -386,7 +386,7 @@ this parameter name */ fts_string_t* value) /*!< out: value read from config table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Set the value in the config table for name. @return DB_SUCCESS or error code */ @@ -400,7 +400,7 @@ this parameter name */ const fts_string_t* value) /*!< in: value to update */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /****************************************************************//** Set an ulint value in the config table. @return DB_SUCCESS if all OK else error code */ @@ -412,7 +412,7 @@ fts_table_t* fts_table, /*!< in: the indexed FTS table */ const char* name, /*!< in: param name */ ulint int_value) /*!< in: value */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Set the value specific to an FTS index in the config table. @return DB_SUCCESS or error code */ @@ -426,7 +426,7 @@ this parameter name */ fts_string_t* value) /*!< out: value read from config table */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Increment the value in the config table for column name. @return DB_SUCCESS or error code */ @@ -439,7 +439,7 @@ const char* name, /*!< in: increment config value for this parameter name */ ulint delta) /*!< in: increment by this much */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Increment the per index value in the config table for column name. @return DB_SUCCESS or error code */ @@ -452,7 +452,7 @@ const char* name, /*!< in: increment config value for this parameter name */ ulint delta) /*!< in: increment by this much */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Get an ulint value from the config table. @return DB_SUCCESS or error code */ @@ -464,7 +464,7 @@ dict_index_t* index, /*!< in: FTS index */ const char* name, /*!< in: param name */ ulint* int_value) /*!< out: value */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Set an ulint value int the config table. @return DB_SUCCESS or error code */ @@ -476,7 +476,7 @@ dict_index_t* index, /*!< in: FTS index */ const char* name, /*!< in: param name */ ulint int_value) /*!< in: value */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Get an ulint value from the config table. @return DB_SUCCESS or error code */ @@ -488,7 +488,7 @@ fts_table_t* fts_table, /*!< in: the indexed FTS table */ const char* name, /*!< in: param name */ ulint* int_value) /*!< out: value */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Search cache for word. @return the word node vector if found else NULL */ @@ -500,7 +500,7 @@ index_cache, /*!< in: cache to search */ const fts_string_t* text) /*!< in: word to search for */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Check cache for deleted doc id. @return TRUE if deleted */ @@ -511,7 +511,7 @@ const fts_cache_t* cache, /*!< in: cache ito search */ doc_id_t doc_id) /*!< in: doc id to search for */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Append deleted doc ids to vector and sort the vector. */ UNIV_INTERN @@ -546,7 +546,7 @@ trx_t* trx, /*!< in: transaction */ dict_index_t* index, /*!< in: for this index */ ulint* total) /*!< out: total words */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /******************************************************************//** Search the index specific cache for a particular FTS index. @@ -559,7 +559,7 @@ cache, /*!< in: cache to search */ const dict_index_t* index) /*!< in: index to search for */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Write the table id to the given buffer (including final NUL). Buffer must be at least FTS_AUX_MIN_TABLE_ID_LENGTH bytes long. @@ -570,10 +570,10 @@ /*================*/ ib_id_t id, /*!< in: a table/index id */ char* str, /*!< in: buffer to write the id to */ - bool hex_format __attribute__((unused))) + bool hex_format MY_ATTRIBUTE((unused))) /*!< in: true for fixed hex format, false for old ambiguous format */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Read the table id from the string generated by fts_write_object_id(). @return TRUE if parse successful */ @@ -583,7 +583,7 @@ /*===============*/ ib_id_t* id, /*!< out: a table id */ const char* str) /*!< in: buffer to read from */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Get the table id. @return number of bytes written */ @@ -596,7 +596,7 @@ char* table_id) /*!< out: table id, must be at least FTS_AUX_MIN_TABLE_ID_LENGTH bytes long */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Add the table to add to the OPTIMIZER's list. */ UNIV_INTERN @@ -604,7 +604,7 @@ fts_optimize_add_table( /*===================*/ dict_table_t* table) /*!< in: table to add */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Optimize a table. */ UNIV_INTERN @@ -612,7 +612,7 @@ fts_optimize_do_table( /*==================*/ dict_table_t* table) /*!< in: table to optimize */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Construct the prefix name of an FTS table. @return own: table name, must be freed with mem_free() */ @@ -622,7 +622,7 @@ /*======================*/ const fts_table_t* fts_table) /*!< in: Auxiliary table type */ - __attribute__((nonnull, malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull, malloc, warn_unused_result)); /******************************************************************//** Add node positions. */ UNIV_INTERN @@ -633,7 +633,7 @@ fts_node_t* node, /*!< in: word node */ doc_id_t doc_id, /*!< in: doc id */ ib_vector_t* positions) /*!< in: fts_token_t::positions */ - __attribute__((nonnull(2,4))); + MY_ATTRIBUTE((nonnull(2,4))); /******************************************************************//** Create the config table name for retrieving index specific value. @@ -644,7 +644,7 @@ /*===============================*/ const char* param, /*!< in: base name of param */ const dict_index_t* index) /*!< in: index for config */ - __attribute__((nonnull, malloc, warn_unused_result)); + MY_ATTRIBUTE((nonnull, malloc, warn_unused_result)); #ifndef UNIV_NONINL #include "fts0priv.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fts0priv.ic mysql-5.6-5.6.33/storage/innobase/include/fts0priv.ic --- mysql-5.6-5.6.27/storage/innobase/include/fts0priv.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fts0priv.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -33,7 +33,7 @@ /*================*/ ib_id_t id, /* in: a table/index id */ char* str, /* in: buffer to write the id to */ - bool hex_format __attribute__((unused))) + bool hex_format MY_ATTRIBUTE((unused))) /* in: true for fixed hex format, false for old ambiguous format */ { @@ -53,7 +53,7 @@ /* Use this to construct old(5.6.14 and 5.7.3) windows ambiguous aux table names */ DBUG_EXECUTE_IF("innodb_test_wrong_windows_fts_aux_table_name", - return(sprintf(str, "%016"PRIu64, id));); + return(sprintf(str, "%016" PRIu64, id));); DBUG_EXECUTE_IF("innodb_test_wrong_fts_aux_table_name", return(sprintf(str, UINT64PFx, id));); @@ -66,7 +66,7 @@ // FIXME: Use ut_snprintf(), so does following one. return(sprintf(str, "%016llu", id)); #else /* _WIN32 */ - return(sprintf(str, "%016"PRIu64, id)); + return(sprintf(str, "%016" PRIu64, id)); #endif /* _WIN32 */ } diff -Nru mysql-5.6-5.6.27/storage/innobase/include/fts0types.h mysql-5.6-5.6.33/storage/innobase/include/fts0types.h --- mysql-5.6-5.6.27/storage/innobase/include/fts0types.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/fts0types.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -122,7 +122,11 @@ doc_id_t max_doc_id; /*!< The doc id at which the cache was noted as being full, we use this to set the upper_limit field */ - ib_time_t start_time; /*!< SYNC start time */ + ib_time_t start_time; /*!< SYNC start time */ + bool in_progress; /*!< flag whether sync is in progress.*/ + bool unlock_cache; /*!< flag whether unlock cache when + write fts node */ + os_event_t event; /*!< sync finish event */ }; /** The cache for the FTS system. It is a memory-based inverted index @@ -165,7 +169,6 @@ objects, they are recreated after a SYNC is completed */ - ib_alloc_t* self_heap; /*!< This heap is the heap out of which an instance of the cache itself was created. Objects created using @@ -212,6 +215,7 @@ ulint ilist_size_alloc; /*!< Allocated size of ilist in bytes */ + bool synced; /*!< flag whether the node is synced */ }; /** A tokenizer word. Contains information about one word. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/handler0alter.h mysql-5.6-5.6.33/storage/innobase/include/handler0alter.h --- mysql-5.6-5.6.27/storage/innobase/include/handler0alter.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/handler0alter.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -32,7 +32,7 @@ const dict_index_t* index, /*!< in: index */ const ulint* offsets)/*!< in: rec_get_offsets( rec, index, ...) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Copies an InnoDB index entry to table->record[0]. */ @@ -43,7 +43,7 @@ struct TABLE* table, /*!< in/out: MySQL table */ const dict_index_t* index, /*!< in: InnoDB index */ const dfield_t* fields) /*!< in: InnoDB index fields */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Copies an InnoDB row to table->record[0]. */ @@ -54,7 +54,7 @@ struct TABLE* table, /*!< in/out: MySQL table */ const dict_table_t* itab, /*!< in: InnoDB table */ const dtuple_t* row) /*!< in: InnoDB row */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Resets table->record[0]. */ @@ -63,7 +63,7 @@ innobase_rec_reset( /*===============*/ struct TABLE* table) /*!< in/out: MySQL table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Generate the next autoinc based on a snapshot of the session auto_increment_increment and auto_increment_offset variables. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ha_prototypes.h mysql-5.6-5.6.33/storage/innobase/include/ha_prototypes.h --- mysql-5.6-5.6.27/storage/innobase/include/ha_prototypes.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ha_prototypes.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -135,7 +135,7 @@ thd_requested_durability( /*=====================*/ const THD* thd) /*!< in: thread handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Returns true if the transaction this thread is processing has edited @@ -176,7 +176,7 @@ const unsigned char* b, /*!< in: data field */ unsigned int b_length) /*!< in: data field length, not UNIV_SQL_NULL */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**************************************************************//** Converts a MySQL type to an InnoDB type. Note that this function returns the 'mtype' of InnoDB. InnoDB differentiates between MySQL's old <= 4.1 @@ -192,7 +192,7 @@ and unsigned integer types are 'unsigned types' */ const void* field) /*!< in: MySQL Field */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Get the variable length bounds of the given character set. */ @@ -290,7 +290,7 @@ /*==============*/ THD* thd, /*!< in: MySQL thread handle */ size_t* length) /*!< out: length of the SQL statement */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** This function is used to find the storage length in bytes of the first n characters for prefix indexes using a multibyte character set. The function @@ -316,7 +316,7 @@ innobase_index_cond( /*================*/ void* file) /*!< in/out: pointer to ha_innobase */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Returns true if the thread supports XA, global value of innodb_supports_xa if thd is NULL. @@ -328,6 +328,15 @@ THD* thd); /*!< in: thread handle, or NULL to query the global innodb_supports_xa */ +/** Get status of innodb_tmpdir. +@param[in] thd thread handle, or NULL to query + the global innodb_tmpdir. +@retval NULL if innodb_tmpdir="" */ +UNIV_INTERN +const char* +thd_innodb_tmpdir( + THD* thd); + /******************************************************************//** Returns the lock wait timeout for the current connection. @return the lock wait timeout, in seconds */ @@ -443,7 +452,7 @@ const char* name, /*!< in: index or table name to format */ ibool is_index_name) /*!< in: index name */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Corresponds to Sql_condition:enum_warning_level. */ enum ib_log_level_t { @@ -473,7 +482,7 @@ ib_uint32_t code, /*!< MySQL error code */ const char* format, /*!< printf format */ ...) /*!< Args */ - __attribute__((format(printf, 4, 5))); + MY_ATTRIBUTE((format(printf, 4, 5))); /******************************************************************//** Use this when the args are passed to the format string from @@ -504,7 +513,7 @@ ib_log_level_t level, /*!< in: warning level */ const char* format, /*!< printf format */ ...) /*!< Args */ - __attribute__((format(printf, 2, 3))); + MY_ATTRIBUTE((format(printf, 2, 3))); /******************************************************************//** Returns the NUL terminated value of glob_hostname. @@ -550,7 +559,7 @@ ulonglong step, /*!< in: AUTOINC increment step */ ulonglong offset, /*!< in: AUTOINC offset */ ulonglong max_value) /*!< in: max value for type */ - __attribute__((pure, warn_unused_result)); + MY_ATTRIBUTE((pure, warn_unused_result)); /********************************************************************//** Get the upper limit of the MySQL integral and floating-point type. @@ -560,7 +569,7 @@ innobase_get_int_col_max_value( /*===========================*/ const Field* field) /*!< in: MySQL field */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /********************************************************************** Check if the length of the identifier exceeds the maximum allowed. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ibuf0ibuf.h mysql-5.6-5.6.33/storage/innobase/include/ibuf0ibuf.h --- mysql-5.6-5.6.27/storage/innobase/include/ibuf0ibuf.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ibuf0ibuf.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -118,7 +118,7 @@ ibuf_mtr_start( /*===========*/ mtr_t* mtr) /*!< out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***************************************************************//** Commits an insert buffer mini-transaction. */ UNIV_INLINE @@ -126,7 +126,7 @@ ibuf_mtr_commit( /*============*/ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Initializes an ibuf bitmap page. */ UNIV_INTERN @@ -252,7 +252,7 @@ ibuf_inside( /*========*/ const mtr_t* mtr) /*!< in: mini-transaction */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /***********************************************************************//** Checks if a page address is an ibuf bitmap page (level 3 page) address. @return TRUE if a bitmap page */ @@ -285,7 +285,7 @@ is not one of the fixed address ibuf pages, or NULL, in which case a new transaction is created. */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #ifdef UNIV_DEBUG /** Checks if a page is a level 2 or 3 page in the ibuf hierarchy of pages. Must not be called when recv_no_ibuf_operations==TRUE. @@ -364,23 +364,31 @@ ibuf_delete_for_discarded_space( /*============================*/ ulint space); /*!< in: space id */ -/*********************************************************************//** -Contracts insert buffer trees by reading pages to the buffer pool. +/** Contract the change buffer by reading pages to the buffer pool. +@param[in] full If true, do a full contraction based +on PCT_IO(100). If false, the size of contract batch is determined +based on the current size of the change buffer. @return a lower limit for the combined size in bytes of entries which will be merged from ibuf trees to the pages read, 0 if ibuf is empty */ UNIV_INTERN ulint -ibuf_contract_in_background( -/*========================*/ - table_id_t table_id, /*!< in: if merge should be done only - for a specific table, for all tables - this should be 0 */ - ibool full); /*!< in: TRUE if the caller wants to - do a full contract based on PCT_IO(100). - If FALSE then the size of contract - batch is determined based on the - current size of the ibuf tree. */ +ibuf_merge_in_background( + bool full); /*!< in: TRUE if the caller wants to + do a full contract based on PCT_IO(100). + If FALSE then the size of contract + batch is determined based on the + current size of the ibuf tree. */ + +/** Contracts insert buffer trees by reading pages referring to space_id +to the buffer pool. +@returns number of pages merged.*/ +UNIV_INTERN +ulint +ibuf_merge_space( +/*=============*/ + ulint space); /*!< in: space id */ + #endif /* !UNIV_HOTBACKUP */ /*********************************************************************//** Parses a redo log record of an ibuf bitmap page init. @@ -445,7 +453,7 @@ /*========================*/ const trx_t* trx, /*!< in: transaction */ ulint space_id) /*!< in: tablespace identifier */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #define IBUF_HEADER_PAGE_NO FSP_IBUF_HEADER_PAGE_NO #define IBUF_TREE_ROOT_PAGE_NO FSP_IBUF_TREE_ROOT_PAGE_NO diff -Nru mysql-5.6-5.6.27/storage/innobase/include/lock0lock.h mysql-5.6-5.6.33/storage/innobase/include/lock0lock.h --- mysql-5.6-5.6.27/storage/innobase/include/lock0lock.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/lock0lock.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -266,7 +266,7 @@ /*========================*/ ulint space, /*!< in: space id */ ulint page_no)/*!< in: page number */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** Checks if locks of other transactions prevent an immediate insert of a record. If they do, first tests if the query thread should anyway @@ -289,7 +289,7 @@ inserted record maybe should inherit LOCK_GAP type locks from the successor record */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Checks if locks of other transactions prevent an immediate modify (update, delete mark, or delete unmark) of a clustered index record. If they do, @@ -310,7 +310,7 @@ dict_index_t* index, /*!< in: clustered index */ const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /*********************************************************************//** Checks if locks of other transactions prevent an immediate modify (delete mark or delete unmark) of a secondary index record. @@ -331,7 +331,7 @@ que_thr_t* thr, /*!< in: query thread (can be NULL if BTR_NO_LOCKING_FLAG) */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((warn_unused_result, nonnull(2,3,4,6))); + MY_ATTRIBUTE((warn_unused_result, nonnull(2,3,4,6))); /*********************************************************************//** Like lock_clust_rec_read_check_and_lock(), but reads a secondary index record. @@ -418,7 +418,7 @@ ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or LOCK_REC_NOT_GAP */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Checks that a record is seen in a consistent read. @return true if sees, or false if an earlier version of the record @@ -450,7 +450,7 @@ should be read or passed over by a read cursor */ const read_view_t* view) /*!< in: consistent read view */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Locks the specified database table in the mode given. If the lock cannot be granted immediately, the query thread is put to wait. @@ -465,7 +465,7 @@ in dictionary cache */ enum lock_mode mode, /*!< in: lock mode */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Creates a table IX lock object for a resurrected transaction. */ UNIV_INTERN @@ -520,7 +520,7 @@ /*==========*/ ulint space, /*!< in: space */ ulint page_no)/*!< in: page number */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*********************************************************************//** Calculates the hash value of a page file address: used in inserting or searching for a lock in the hash table. @@ -570,7 +570,7 @@ /*====================*/ const dict_table_t* table, /*!< in: table */ const trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Checks if a lock request lock1 has to wait for request lock2. @return TRUE if lock1 has to wait for lock2 to be removed */ @@ -594,7 +594,7 @@ dict_index_t* index, /*!< in: index */ const ulint* offsets, /*!< in: rec_get_offsets(rec, index) */ trx_id_t max_trx_id) /*!< in: trx_sys_get_max_trx_id() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Prints info of a table lock. */ UNIV_INTERN @@ -621,7 +621,7 @@ /*====================*/ FILE* file, /*!< in: file where to print */ ibool nowait) /*!< in: whether to wait for the lock mutex */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Prints info of locks for each transaction. This function assumes that the caller holds the lock mutex and more importantly it will release the lock @@ -641,7 +641,7 @@ lock_number_of_rows_locked( /*=======================*/ const trx_lock_t* trx_lock) /*!< in: transaction locks */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Gets the type of a lock. Non-inline version for using outside of the @@ -799,7 +799,7 @@ lock_trx_handle_wait( /*=================*/ trx_t* trx) /*!< in/out: trx lock state */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Get the number of locks on a table. @return number of locks */ @@ -808,7 +808,7 @@ lock_table_get_n_locks( /*===================*/ const dict_table_t* table) /*!< in: table */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG /*********************************************************************//** Checks that a transaction id is sensible, i.e., not in the future. @@ -821,7 +821,7 @@ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: index */ const ulint* offsets) /*!< in: rec_get_offsets(rec, index) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Check if the transaction holds any locks on the sys tables or its records. @@ -831,7 +831,7 @@ lock_trx_has_sys_table_locks( /*=========================*/ const trx_t* trx) /*!< in: transaction to check */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /*******************************************************************//** Check if the transaction holds an exclusive lock on a record. @@ -844,7 +844,7 @@ const dict_table_t* table, /*!< in: table to check */ const buf_block_t* block, /*!< in: buffer block of the record */ ulint heap_no)/*!< in: record heap number */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ /** Lock modes and types */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/lock0priv.h mysql-5.6-5.6.33/storage/innobase/include/lock0priv.h --- mysql-5.6-5.6.27/storage/innobase/include/lock0priv.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/lock0priv.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -117,7 +117,7 @@ const rec_t* rec, /*!< in: user record */ const dict_index_t* index, /*!< in: clustered index */ const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "lock0priv.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/log0recv.h mysql-5.6-5.6.33/storage/innobase/include/log0recv.h --- mysql-5.6-5.6.27/storage/innobase/include/log0recv.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/log0recv.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -51,7 +51,7 @@ lsn_t* first_header_lsn) /*!< out: lsn of of the start of the first log file */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Scans the log segment and n_bytes_scanned is set to the length of valid log scanned. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/mach0data.h mysql-5.6-5.6.33/storage/innobase/include/mach0data.h --- mysql-5.6-5.6.27/storage/innobase/include/mach0data.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/mach0data.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2009, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -53,7 +53,7 @@ mach_read_from_1( /*=============*/ const byte* b) /*!< in: pointer to byte */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*******************************************************//** The following function is used to store data in two consecutive bytes. We store the most significant byte to the lower address. */ @@ -72,7 +72,7 @@ mach_read_from_2( /*=============*/ const byte* b) /*!< in: pointer to two bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /********************************************************//** The following function is used to convert a 16-bit data item @@ -84,7 +84,7 @@ mach_encode_2( /*==========*/ ulint n) /*!< in: integer in machine-dependent format */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /********************************************************//** The following function is used to convert a 16-bit data item from the canonical format, for fast bytewise equality test @@ -95,7 +95,7 @@ mach_decode_2( /*==========*/ uint16 n) /*!< in: 16-bit integer in canonical format */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*******************************************************//** The following function is used to store data in 3 consecutive bytes. We store the most significant byte to the lowest address. */ @@ -114,7 +114,7 @@ mach_read_from_3( /*=============*/ const byte* b) /*!< in: pointer to 3 bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*******************************************************//** The following function is used to store data in four consecutive bytes. We store the most significant byte to the lowest address. */ @@ -133,7 +133,7 @@ mach_read_from_4( /*=============*/ const byte* b) /*!< in: pointer to four bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a ulint in a compressed form (1..5 bytes). @return stored size in bytes */ @@ -151,7 +151,7 @@ mach_get_compressed_size( /*=====================*/ ulint n) /*!< in: ulint integer to be stored */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*********************************************************//** Reads a ulint in a compressed form. @return read integer */ @@ -160,7 +160,7 @@ mach_read_compressed( /*=================*/ const byte* b) /*!< in: pointer to memory from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*******************************************************//** The following function is used to store data in 6 consecutive bytes. We store the most significant byte to the lowest address. */ @@ -179,7 +179,7 @@ mach_read_from_6( /*=============*/ const byte* b) /*!< in: pointer to 6 bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*******************************************************//** The following function is used to store data in 7 consecutive bytes. We store the most significant byte to the lowest address. */ @@ -198,7 +198,7 @@ mach_read_from_7( /*=============*/ const byte* b) /*!< in: pointer to 7 bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*******************************************************//** The following function is used to store data in 8 consecutive bytes. We store the most significant byte to the lowest address. */ @@ -217,7 +217,7 @@ mach_read_from_8( /*=============*/ const byte* b) /*!< in: pointer to 8 bytes */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a 64-bit integer in a compressed form (5..9 bytes). @return size in bytes */ @@ -243,7 +243,7 @@ mach_ull_read_compressed( /*=====================*/ const byte* b) /*!< in: pointer to memory from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a 64-bit integer in a compressed form (1..11 bytes). @return size in bytes */ @@ -261,7 +261,7 @@ mach_ull_get_much_compressed_size( /*==============================*/ ib_uint64_t n) /*!< in: 64-bit integer to be stored */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*********************************************************//** Reads a 64-bit integer in a compressed form. @return the value read */ @@ -270,7 +270,7 @@ mach_ull_read_much_compressed( /*==========================*/ const byte* b) /*!< in: pointer to memory from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Reads a ulint in a compressed form if the log record fully contains it. @return pointer to end of the stored field, NULL if not complete */ @@ -301,7 +301,7 @@ mach_double_read( /*=============*/ const byte* b) /*!< in: pointer to memory from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a double. It is stored in a little-endian format. */ UNIV_INLINE @@ -318,7 +318,7 @@ mach_float_read( /*============*/ const byte* b) /*!< in: pointer to memory from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a float. It is stored in a little-endian format. */ UNIV_INLINE @@ -336,7 +336,7 @@ /*===========================*/ const byte* buf, /*!< in: from where to read */ ulint buf_size) /*!< in: from how many bytes to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a ulint in the little-endian format. */ UNIV_INLINE @@ -354,7 +354,7 @@ mach_read_from_2_little_endian( /*===========================*/ const byte* buf) /*!< in: from where to read */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************//** Writes a ulint in the little-endian format. */ UNIV_INLINE diff -Nru mysql-5.6-5.6.27/storage/innobase/include/mem0mem.h mysql-5.6-5.6.33/storage/innobase/include/mem0mem.h --- mysql-5.6-5.6.27/storage/innobase/include/mem0mem.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/mem0mem.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2010, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -353,7 +353,7 @@ /*============*/ mem_heap_t* heap, /*!< in: memory heap */ const char* format, /*!< in: format string */ - ...) __attribute__ ((format (printf, 2, 3))); + ...) MY_ATTRIBUTE ((format (printf, 2, 3))); #ifdef MEM_PERIODIC_CHECK /******************************************************************//** diff -Nru mysql-5.6-5.6.27/storage/innobase/include/mem0mem.ic mysql-5.6-5.6.33/storage/innobase/include/mem0mem.ic --- mysql-5.6-5.6.27/storage/innobase/include/mem0mem.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/mem0mem.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2010, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -476,9 +476,9 @@ mem_heap_free_func( /*===============*/ mem_heap_t* heap, /*!< in, own: heap to be freed */ - const char* file_name __attribute__((unused)), + const char* file_name MY_ATTRIBUTE((unused)), /*!< in: file name where freed */ - ulint line __attribute__((unused))) + ulint line MY_ATTRIBUTE((unused))) { mem_block_t* block; mem_block_t* prev_block; diff -Nru mysql-5.6-5.6.27/storage/innobase/include/mtr0mtr.h mysql-5.6-5.6.33/storage/innobase/include/mtr0mtr.h --- mysql-5.6-5.6.27/storage/innobase/include/mtr0mtr.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/mtr0mtr.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -207,7 +207,7 @@ mtr_start( /*======*/ mtr_t* mtr) /*!< out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***************************************************************//** Commits a mini-transaction. */ UNIV_INTERN @@ -215,7 +215,7 @@ mtr_commit( /*=======*/ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************//** Sets and returns a savepoint in mtr. @return savepoint */ @@ -308,7 +308,7 @@ mtr_t* mtr, /*!< in/out: mini-transaction */ void* object, /*!< in: object */ ulint type) /*!< in: object type: MTR_MEMO_S_LOCK, ... */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG # ifndef UNIV_HOTBACKUP /**********************************************************//** @@ -321,7 +321,7 @@ mtr_t* mtr, /*!< in: mtr */ const void* object, /*!< in: object to search */ ulint type) /*!< in: type of object */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /**********************************************************//** Checks if memo contains the given page. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/mtr0mtr.ic mysql-5.6-5.6.33/storage/innobase/include/mtr0mtr.ic --- mysql-5.6-5.6.27/storage/innobase/include/mtr0mtr.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/mtr0mtr.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -37,7 +37,7 @@ mtr_block_dirtied( /*==============*/ const buf_block_t* block) /*!< in: block being x-fixed */ - __attribute__((nonnull,warn_unused_result)); + MY_ATTRIBUTE((nonnull,warn_unused_result)); /***************************************************************//** Starts a mini-transaction. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/os0file.h mysql-5.6-5.6.33/storage/innobase/include/os0file.h --- mysql-5.6-5.6.27/storage/innobase/include/os0file.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/os0file.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /*********************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Percona Inc. Portions of this file contain modifications contributed and copyrighted @@ -431,14 +431,19 @@ void os_io_init_simple(void); /*===================*/ -/***********************************************************************//** -Creates a temporary file. This function is like tmpfile(3), but -the temporary file is created in the MySQL temporary directory. -@return temporary file handle, or NULL on error */ + +/** Create a temporary file. This function is like tmpfile(3), but +the temporary file is created in the given parameter path. If the path +is null then it will create the file in the mysql server configuration +parameter (--tmpdir). +@param[in] path location for creating temporary file +@return temporary file handle, or NULL on error */ +UNIV_INTERN FILE* -os_file_create_tmpfile(void); -/*========================*/ +os_file_create_tmpfile( + const char* path); + #endif /* !UNIV_HOTBACKUP */ /***********************************************************************//** The os_file_opendir() function opens a directory stream corresponding to the @@ -524,7 +529,7 @@ OS_FILE_READ_ALLOW_DELETE; the last option is used by a backup program reading the file */ ibool* success)/*!< out: TRUE if succeed, FALSE if error */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** Tries to disable OS caching on an opened file descriptor. */ UNIV_INTERN @@ -558,7 +563,7 @@ function source code for the exact rules */ ulint type, /*!< in: OS_DATA_FILE or OS_LOG_FILE */ ibool* success)/*!< out: TRUE if succeed, FALSE if error */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Deletes a file. The file has to be closed before calling this. @return TRUE if success */ @@ -624,7 +629,7 @@ ibool* success,/*!< out: TRUE if succeed, FALSE if error */ const char* src_file,/*!< in: file name where func invoked */ ulint src_line)/*!< in: line where the func invoked */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** NOTE! Please use the corresponding macro @@ -649,7 +654,7 @@ ibool* success,/*!< out: TRUE if succeed, FALSE if error */ const char* src_file,/*!< in: file name where func invoked */ ulint src_line)/*!< in: line where the func invoked */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /****************************************************************//** NOTE! Please use the corresponding macro os_file_create(), not directly @@ -677,7 +682,7 @@ ibool* success,/*!< out: TRUE if succeed, FALSE if error */ const char* src_file,/*!< in: file name where func invoked */ ulint src_line)/*!< in: line where the func invoked */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** NOTE! Please use the corresponding macro os_file_close(), not directly @@ -856,7 +861,7 @@ os_file_get_size( /*=============*/ os_file_t file) /*!< in: handle to a file */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /***********************************************************************//** Write the specified number of zeros to a newly created file. @return TRUE if success */ @@ -868,7 +873,7 @@ null-terminated string */ os_file_t file, /*!< in: handle to a file */ os_offset_t size) /*!< in: file size */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Truncates a file at its current position. @return TRUE if success */ @@ -1244,14 +1249,14 @@ file can be opened in RW mode */ #if !defined(UNIV_HOTBACKUP) -/*********************************************************************//** -Creates a temporary file that will be deleted on close. -This function is defined in ha_innodb.cc. -@return temporary file descriptor, or < 0 on error */ +/** Create a temporary file in the location specified by the parameter +path. If the path is null, then it will be created in tmpdir. +@param[in] path location for creating temporary file +@return temporary file descriptor, or < 0 on error */ UNIV_INTERN int -innobase_mysql_tmpfile(void); -/*========================*/ +innobase_mysql_tmpfile( + const char* path); #endif /* !UNIV_HOTBACKUP */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/os0sync.h mysql-5.6-5.6.33/storage/innobase/include/os0sync.h --- mysql-5.6-5.6.27/storage/innobase/include/os0sync.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/os0sync.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -449,28 +449,7 @@ # define os_atomic_decrement_uint64(ptr, amount) \ os_atomic_decrement(ptr, amount) -# if defined(HAVE_IB_GCC_ATOMIC_TEST_AND_SET) - -/** Do an atomic test-and-set. -@param[in,out] ptr Memory location to set to non-zero -@return the previous value */ -inline -lock_word_t -os_atomic_test_and_set(volatile lock_word_t* ptr) -{ - return(__atomic_test_and_set(ptr, __ATOMIC_ACQUIRE)); -} - -/** Do an atomic clear. -@param[in,out] ptr Memory location to set to zero */ -inline -void -os_atomic_clear(volatile lock_word_t* ptr) -{ - __atomic_clear(ptr, __ATOMIC_RELEASE); -} - -# elif defined(IB_STRONG_MEMORY_MODEL) +# if defined(IB_STRONG_MEMORY_MODEL) /** Do an atomic test and set. @param[in,out] ptr Memory location to set to non-zero @@ -499,6 +478,27 @@ return(__sync_lock_test_and_set(ptr, 0)); } +# elif defined(HAVE_IB_GCC_ATOMIC_TEST_AND_SET) + +/** Do an atomic test-and-set. +@param[in,out] ptr Memory location to set to non-zero +@return the previous value */ +inline +lock_word_t +os_atomic_test_and_set(volatile lock_word_t* ptr) +{ + return(__atomic_test_and_set(ptr, __ATOMIC_ACQUIRE)); +} + +/** Do an atomic clear. +@param[in,out] ptr Memory location to set to zero */ +inline +void +os_atomic_clear(volatile lock_word_t* ptr) +{ + __atomic_clear(ptr, __ATOMIC_RELEASE); +} + # else # error "Unsupported platform" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/os0thread.h mysql-5.6-5.6.33/storage/innobase/include/os0thread.h --- mysql-5.6-5.6.27/storage/innobase/include/os0thread.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/os0thread.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -125,7 +125,7 @@ /*===========*/ void* exit_value) /*!< in: exit value; in Windows this void* is cast as a DWORD */ - UNIV_COLD __attribute__((noreturn)); + UNIV_COLD MY_ATTRIBUTE((noreturn)); /*****************************************************************//** Returns the thread identifier of current thread. @return current thread identifier */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/page0cur.h mysql-5.6-5.6.33/storage/innobase/include/page0cur.h --- mysql-5.6-5.6.27/storage/innobase/include/page0cur.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/page0cur.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -180,7 +180,7 @@ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ - __attribute__((nonnull(1,2,3,4,5), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,4,5), warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /***********************************************************//** Inserts a record next to page cursor. Returns pointer to inserted record if @@ -218,7 +218,7 @@ const rec_t* rec, /*!< in: pointer to a physical record */ ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ - __attribute__((nonnull(1,2,3,4), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,4), warn_unused_result)); /***********************************************************//** Inserts a record next to page cursor on a compressed and uncompressed page. Returns pointer to inserted record if succeed, i.e., @@ -240,7 +240,7 @@ const rec_t* rec, /*!< in: pointer to a physical record */ ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ - __attribute__((nonnull(1,2,3,4), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,4), warn_unused_result)); /*************************************************************//** Copies records from page to a newly created page, from a given record onward, including that record. Infimum and supremum records are not copied. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/page0page.h mysql-5.6-5.6.33/storage/innobase/include/page0page.h --- mysql-5.6-5.6.27/storage/innobase/include/page0page.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/page0page.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -165,7 +165,7 @@ page_align( /*=======*/ const void* ptr) /*!< in: pointer to page frame */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** Gets the offset within a page. @return offset from the start of the page */ @@ -174,7 +174,7 @@ page_offset( /*========*/ const void* ptr) /*!< in: pointer to page frame */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*************************************************************//** Returns the max trx id field value. */ UNIV_INLINE @@ -232,7 +232,7 @@ /*=================*/ const page_t* page, /*!< in: page */ ulint field) /*!< in: PAGE_FREE, ... */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*************************************************************//** Returns the pointer stored in the given header field, or NULL. */ @@ -292,7 +292,7 @@ /*===================*/ const page_t* page, /*!< in: page */ ulint nth) /*!< in: nth record */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /************************************************************//** Returns the nth record of the record list. This is the inverse function of page_rec_get_n_recs_before(). @@ -303,7 +303,7 @@ /*=============*/ page_t* page, /*< in: page */ ulint nth) /*!< in: nth record */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_HOTBACKUP /************************************************************//** @@ -316,7 +316,7 @@ page_get_middle_rec( /*================*/ page_t* page) /*!< in: page */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************//** Compares a data tuple to a physical record. Differs from the function cmp_dtuple_rec_with_match in the way that the record must reside on an @@ -524,7 +524,7 @@ page_is_leaf( /*=========*/ const page_t* page) /*!< in: page */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /************************************************************//** Determine whether the page is empty. @return true if the page is empty (PAGE_N_RECS = 0) */ @@ -533,7 +533,7 @@ page_is_empty( /*==========*/ const page_t* page) /*!< in: page */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /************************************************************//** Determine whether the page contains garbage. @return true if the page contains garbage (PAGE_GARBAGE is not 0) */ @@ -542,7 +542,7 @@ page_has_garbage( /*=============*/ const page_t* page) /*!< in: page */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /************************************************************//** Gets the pointer to the next record on the page. @return pointer to next record */ @@ -614,7 +614,7 @@ page_rec_is_user_rec_low( /*=====================*/ ulint offset) /*!< in: record offset on page */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** TRUE if the record is the supremum record on a page. @return TRUE if the supremum record */ @@ -623,7 +623,7 @@ page_rec_is_supremum_low( /*=====================*/ ulint offset) /*!< in: record offset on page */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** TRUE if the record is the infimum record on a page. @return TRUE if the infimum record */ @@ -632,7 +632,7 @@ page_rec_is_infimum_low( /*====================*/ ulint offset) /*!< in: record offset on page */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** TRUE if the record is a user record on the page. @@ -642,7 +642,7 @@ page_rec_is_user_rec( /*=================*/ const rec_t* rec) /*!< in: record */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** TRUE if the record is the supremum record on a page. @return TRUE if the supremum record */ @@ -651,7 +651,7 @@ page_rec_is_supremum( /*=================*/ const rec_t* rec) /*!< in: record */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /************************************************************//** TRUE if the record is the infimum record on a page. @@ -661,7 +661,7 @@ page_rec_is_infimum( /*================*/ const rec_t* rec) /*!< in: record */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /***************************************************************//** Looks for the record which owns the given record. @return the owner record */ @@ -681,7 +681,7 @@ ulint i, /*!< in: index of the field to update */ ulint val, /*!< in: value to write */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /************************************************************//** Returns the maximum combined size of records which can be inserted on top @@ -711,7 +711,7 @@ page_get_free_space_of_empty( /*=========================*/ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /**********************************************************//** Returns the base extra size of a physical record. This is the size of the fixed header, independent of the record size. @@ -797,7 +797,7 @@ ulint level, /*!< in: the B-tree level of the page */ trx_id_t max_trx_id, /*!< in: PAGE_MAX_TRX_ID */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************//** Empty a previously created B-tree index page. */ UNIV_INTERN @@ -807,7 +807,7 @@ buf_block_t* block, /*!< in/out: B-tree block */ dict_index_t* index, /*!< in: the index of the page */ mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /*************************************************************//** Differs from page_copy_rec_list_end, because this function does not touch the lock table and max trx id on page or compress the page. @@ -846,7 +846,7 @@ rec_t* rec, /*!< in: record on page */ dict_index_t* index, /*!< in: record descriptor */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Copies records from page to new_page, up to the given record, NOT including that record. Infimum and supremum records are not copied. @@ -868,7 +868,7 @@ rec_t* rec, /*!< in: record on page */ dict_index_t* index, /*!< in: record descriptor */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Deletes records from a page from a given record onward, including that record. The infimum and supremum records are not deleted. */ @@ -885,7 +885,7 @@ records in the end of the chain to delete, or ULINT_UNDEFINED if not known */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Deletes records from page, up to the given record, NOT including that record. Infimum and supremum records are not deleted. */ @@ -897,7 +897,7 @@ buf_block_t* block, /*!< in: buffer block of the page */ dict_index_t* index, /*!< in: record descriptor */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*************************************************************//** Moves record list end to another page. Moved records include split_rec. @@ -918,7 +918,7 @@ rec_t* split_rec, /*!< in: first record to move */ dict_index_t* index, /*!< in: record descriptor */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull(1, 2, 4, 5))); + MY_ATTRIBUTE((nonnull(1, 2, 4, 5))); /*************************************************************//** Moves record list start to another page. Moved records do not include split_rec. @@ -938,7 +938,7 @@ rec_t* split_rec, /*!< in: first record not to move */ dict_index_t* index, /*!< in: record descriptor */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull(1, 2, 4, 5))); + MY_ATTRIBUTE((nonnull(1, 2, 4, 5))); /****************************************************************//** Splits a directory slot which owns too many records. */ UNIV_INTERN @@ -949,7 +949,7 @@ page_zip_des_t* page_zip,/*!< in/out: compressed page whose uncompressed part will be written, or NULL */ ulint slot_no)/*!< in: the directory slot */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*************************************************************//** Tries to balance the given directory slot with too few records with the upper neighbor, so that there are at least the minimum number @@ -962,7 +962,7 @@ page_t* page, /*!< in/out: index page */ page_zip_des_t* page_zip,/*!< in/out: compressed page, or NULL */ ulint slot_no)/*!< in: the directory slot */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /**********************************************************//** Parses a log record of a record list end or start deletion. @return end of log record or NULL */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/page0types.h mysql-5.6-5.6.33/storage/innobase/include/page0types.h --- mysql-5.6-5.6.27/storage/innobase/include/page0types.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/page0types.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -129,7 +129,7 @@ page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record on the uncompressed page */ ulint flag) /*!< in: the deleted flag (nonzero=TRUE) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Write the "owned" flag of a record on a compressed page. The n_owned field @@ -141,7 +141,7 @@ page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record on the uncompressed page */ ulint flag) /*!< in: the owned flag (nonzero=TRUE) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Shift the dense page directory when a record is deleted. */ @@ -154,7 +154,7 @@ dict_index_t* index, /*!< in: index of rec */ const ulint* offsets,/*!< in: rec_get_offsets(rec) */ const byte* free) /*!< in: previous start of the free list */ - __attribute__((nonnull(1,2,3,4))); + MY_ATTRIBUTE((nonnull(1,2,3,4))); /**********************************************************************//** Add a slot to the dense page directory. */ @@ -165,5 +165,5 @@ page_zip_des_t* page_zip, /*!< in/out: compressed page */ ulint is_clustered) /*!< in: nonzero for clustered index, zero for others */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif diff -Nru mysql-5.6-5.6.27/storage/innobase/include/page0zip.h mysql-5.6-5.6.33/storage/innobase/include/page0zip.h --- mysql-5.6-5.6.27/storage/innobase/include/page0zip.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/page0zip.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -58,7 +58,7 @@ page_zip_get_size( /*==============*/ const page_zip_des_t* page_zip) /*!< in: compressed page */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /**********************************************************************//** Set the size of a compressed page in bytes. */ UNIV_INLINE @@ -81,7 +81,7 @@ ulint n_fields, /*!< in: number of fields in the record; ignored if zip_size == 0 */ ulint zip_size) /*!< in: compressed page size in bytes, or 0 */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /**********************************************************************//** Determine the guaranteed free space on an empty page. @@ -92,7 +92,7 @@ /*================*/ ulint n_fields, /*!< in: number of columns in the index */ ulint zip_size) /*!< in: compressed page size in bytes */ - __attribute__((const)); + MY_ATTRIBUTE((const)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** @@ -127,7 +127,7 @@ dict_index_t* index, /*!< in: index of the B-tree node */ ulint level, /*!< in: compression level */ mtr_t* mtr) /*!< in: mini-transaction, or NULL */ - __attribute__((nonnull(1,2,3))); + MY_ATTRIBUTE((nonnull(1,2,3))); /**********************************************************************//** Decompress a page. This function should tolerate errors on the compressed @@ -145,7 +145,7 @@ FALSE=verify but do not copy some page header fields that should not change after page creation */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); #ifdef UNIV_DEBUG /**********************************************************************//** @@ -172,7 +172,7 @@ const dict_index_t* index, /*!< in: index of the page, if known */ ibool sloppy) /*!< in: FALSE=strict, TRUE=ignore the MIN_REC_FLAG */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Check that the compressed and decompressed pages match. */ UNIV_INTERN @@ -182,7 +182,7 @@ const page_zip_des_t* page_zip,/*!< in: compressed page */ const page_t* page, /*!< in: uncompressed page */ const dict_index_t* index) /*!< in: index of the page, if known */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); #endif /* UNIV_ZIP_DEBUG */ /**********************************************************************//** @@ -195,7 +195,7 @@ /*==================*/ const page_zip_des_t* page_zip,/*!< in: compressed page */ ibool is_clust)/*!< in: TRUE if clustered index */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /**********************************************************************//** Determine if enough space is available in the modification log. @@ -209,7 +209,7 @@ ulint length, /*!< in: combined size of the record */ ulint create) /*!< in: nonzero=add the record to the heap */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /**********************************************************************//** Write data to the uncompressed header portion of a page. The data must @@ -222,7 +222,7 @@ const byte* str, /*!< in: address on the uncompressed page */ ulint length, /*!< in: length of the data */ mtr_t* mtr) /*!< in: mini-transaction, or NULL */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Write an entire record on the compressed page. The data must already @@ -236,7 +236,7 @@ dict_index_t* index, /*!< in: the index the record belongs to */ const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint create) /*!< in: nonzero=insert, zero=update */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***********************************************************//** Parses a log record of writing a BLOB pointer of a record. @@ -265,7 +265,7 @@ ulint n, /*!< in: column index */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL if no logging is needed */ - __attribute__((nonnull(1,2,3,4))); + MY_ATTRIBUTE((nonnull(1,2,3,4))); /***********************************************************//** Parses a log record of writing the node pointer of a record. @@ -290,7 +290,7 @@ ulint size, /*!< in: data size of rec */ ulint ptr, /*!< in: node pointer */ mtr_t* mtr) /*!< in: mini-transaction, or NULL */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Write the trx_id and roll_ptr of a record on a B-tree leaf node page. */ @@ -304,7 +304,7 @@ ulint trx_id_col,/*!< in: column number of TRX_ID in rec */ trx_id_t trx_id, /*!< in: transaction identifier */ roll_ptr_t roll_ptr)/*!< in: roll_ptr */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Write the "deleted" flag of a record on a compressed page. The flag must @@ -316,7 +316,7 @@ page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record on the uncompressed page */ ulint flag) /*!< in: the deleted flag (nonzero=TRUE) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Write the "owned" flag of a record on a compressed page. The n_owned field @@ -328,7 +328,7 @@ page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record on the uncompressed page */ ulint flag) /*!< in: the owned flag (nonzero=TRUE) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Insert a record to the dense page directory. */ @@ -355,7 +355,7 @@ const ulint* offsets, /*!< in: rec_get_offsets(rec) */ const byte* free) /*!< in: previous start of the free list */ - __attribute__((nonnull(1,2,3,4))); + MY_ATTRIBUTE((nonnull(1,2,3,4))); /**********************************************************************//** Add a slot to the dense page directory. */ @@ -366,7 +366,7 @@ page_zip_des_t* page_zip, /*!< in/out: compressed page */ ulint is_clustered) /*!< in: nonzero for clustered index, zero for others */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***********************************************************//** Parses a log record of writing to the header of a page. @@ -394,7 +394,7 @@ const byte* str, /*!< in: address on the uncompressed page */ ulint length, /*!< in: length of the data */ mtr_t* mtr) /*!< in: mini-transaction, or NULL */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Reorganize and compress a page. This is a low-level operation for @@ -417,7 +417,7 @@ m_start, m_end, m_nonempty */ dict_index_t* index, /*!< in: index of the B-tree node */ mtr_t* mtr) /*!< in: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /**********************************************************************//** Copy the records of a page byte for byte. Do not copy the page header @@ -436,7 +436,7 @@ const page_t* src, /*!< in: page */ dict_index_t* index, /*!< in: index of the B-tree */ mtr_t* mtr) /*!< in: mini-transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** @@ -450,7 +450,7 @@ byte* end_ptr,/*!< in: buffer end */ page_t* page, /*!< out: uncompressed page */ page_zip_des_t* page_zip)/*!< out: compressed page */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Calculate the compressed page checksum. @@ -462,7 +462,7 @@ const void* data, /*!< in: compressed page */ ulint size, /*!< in: size of compressed page */ srv_checksum_algorithm_t algo) /*!< in: algorithm to use */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Verify a compressed page's checksum. @@ -496,7 +496,7 @@ page_t* page, /*!< in: uncompressed page */ page_zip_des_t* page_zip, /*!< out: compressed page */ dict_index_t* index) /*!< in: index */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************************//** Reset the counters used for filling diff -Nru mysql-5.6-5.6.27/storage/innobase/include/pars0pars.h mysql-5.6-5.6.33/storage/innobase/include/pars0pars.h --- mysql-5.6-5.6.27/storage/innobase/include/pars0pars.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/pars0pars.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -472,7 +472,7 @@ query graph, or NULL for dummy graph */ trx_t* trx, /*!< in: transaction handle */ mem_heap_t* heap) /*!< in: memory heap from which allocated */ - __attribute__((nonnull(2,3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(2,3), warn_unused_result)); /****************************************************************//** Create parser info struct. @@ -628,7 +628,7 @@ pars_info_t* info, /*!< in: info struct */ const char* name, /*!< in: name */ const ib_uint64_t* val) /*!< in: value */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /****************************************************************//** Add bound id. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/read0read.h mysql-5.6-5.6.33/storage/innobase/include/read0read.h --- mysql-5.6-5.6.27/storage/innobase/include/read0read.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/read0read.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -82,7 +82,7 @@ /*==================*/ const read_view_t* view, /*!< in: read view */ trx_id_t trx_id) /*!< in: trx id */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Prints a read view to stderr. */ UNIV_INTERN diff -Nru mysql-5.6-5.6.27/storage/innobase/include/rem0cmp.h mysql-5.6-5.6.33/storage/innobase/include/rem0cmp.h --- mysql-5.6-5.6.27/storage/innobase/include/rem0cmp.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/rem0cmp.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -174,7 +174,7 @@ bytes within the first field not completely matched; when function returns, contains the value for current comparison */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #define cmp_dtuple_rec_with_match(tuple,rec,offsets,fields,bytes) \ cmp_dtuple_rec_with_match_low( \ tuple,rec,offsets,dtuple_get_n_fields_cmp(tuple),fields,bytes) @@ -218,7 +218,7 @@ struct TABLE* table) /*!< in: MySQL table, for reporting duplicate key value if applicable, or NULL */ - __attribute__((nonnull(1,2,3,4), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,4), warn_unused_result)); /*************************************************************//** This function is used to compare two physical records. Only the common first fields are compared, and if an externally stored field is diff -Nru mysql-5.6-5.6.27/storage/innobase/include/rem0rec.h mysql-5.6-5.6.33/storage/innobase/include/rem0rec.h --- mysql-5.6-5.6.27/storage/innobase/include/rem0rec.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/rem0rec.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -98,7 +98,7 @@ /*===================*/ const rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to get the pointer of the next chained record on the same page. @@ -109,7 +109,7 @@ /*=============*/ rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to get the offset of the next chained record on the same page. @@ -120,7 +120,7 @@ /*==============*/ const rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the next record offset field of an old-style record. */ @@ -130,7 +130,7 @@ /*==================*/ rec_t* rec, /*!< in: old-style physical record */ ulint next) /*!< in: offset of the next record */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to set the next record offset field of a new-style record. */ @@ -140,7 +140,7 @@ /*==================*/ rec_t* rec, /*!< in/out: new-style physical record */ ulint next) /*!< in: offset of the next record */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to get the number of fields in an old-style record. @@ -150,7 +150,7 @@ rec_get_n_fields_old( /*=================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to get the number of fields in a record. @@ -161,7 +161,7 @@ /*=============*/ const rec_t* rec, /*!< in: physical record */ const dict_index_t* index) /*!< in: record descriptor */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to get the number of records owned by the previous directory record. @@ -171,7 +171,7 @@ rec_get_n_owned_old( /*================*/ const rec_t* rec) /*!< in: old-style physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the number of owned records. */ UNIV_INLINE @@ -180,7 +180,7 @@ /*================*/ rec_t* rec, /*!< in: old-style physical record */ ulint n_owned) /*!< in: the number of owned */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to get the number of records owned by the previous directory record. @@ -190,7 +190,7 @@ rec_get_n_owned_new( /*================*/ const rec_t* rec) /*!< in: new-style physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the number of owned records. */ UNIV_INLINE @@ -200,7 +200,7 @@ rec_t* rec, /*!< in/out: new-style physical record */ page_zip_des_t* page_zip,/*!< in/out: compressed page, or NULL */ ulint n_owned)/*!< in: the number of owned */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /******************************************************//** The following function is used to retrieve the info bits of a record. @@ -211,7 +211,7 @@ /*==============*/ const rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the info bits of a record. */ UNIV_INLINE @@ -220,7 +220,7 @@ /*==================*/ rec_t* rec, /*!< in: old-style physical record */ ulint bits) /*!< in: info bits */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to set the info bits of a record. */ UNIV_INLINE @@ -229,7 +229,7 @@ /*==================*/ rec_t* rec, /*!< in/out: new-style physical record */ ulint bits) /*!< in: info bits */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function retrieves the status bits of a new-style record. @return status bits */ @@ -238,7 +238,7 @@ rec_get_status( /*===========*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the status bits of a new-style record. */ @@ -248,7 +248,7 @@ /*===========*/ rec_t* rec, /*!< in/out: physical record */ ulint bits) /*!< in: info bits */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to retrieve the info and status @@ -260,7 +260,7 @@ /*=========================*/ const rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the info and status bits of a record. (Only compact records have status bits.) */ @@ -270,7 +270,7 @@ /*=========================*/ rec_t* rec, /*!< in/out: compact physical record */ ulint bits) /*!< in: info bits */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function tells if record is delete marked. @@ -281,7 +281,7 @@ /*=================*/ const rec_t* rec, /*!< in: physical record */ ulint comp) /*!< in: nonzero=compact page format */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the deleted bit. */ UNIV_INLINE @@ -290,7 +290,7 @@ /*=====================*/ rec_t* rec, /*!< in: old-style physical record */ ulint flag) /*!< in: nonzero if delete marked */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to set the deleted bit. */ UNIV_INLINE @@ -300,7 +300,7 @@ rec_t* rec, /*!< in/out: new-style physical record */ page_zip_des_t* page_zip,/*!< in/out: compressed page, or NULL */ ulint flag) /*!< in: nonzero if delete marked */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /******************************************************//** The following function tells if a new-style record is a node pointer. @return TRUE if node pointer */ @@ -309,7 +309,7 @@ rec_get_node_ptr_flag( /*==================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to get the order number of an old-style record in the heap of the index page. @@ -319,7 +319,7 @@ rec_get_heap_no_old( /*================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the heap number field in an old-style record. */ @@ -329,7 +329,7 @@ /*================*/ rec_t* rec, /*!< in: physical record */ ulint heap_no)/*!< in: the heap number */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to get the order number of a new-style record in the heap of the index page. @@ -339,7 +339,7 @@ rec_get_heap_no_new( /*================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the heap number field in a new-style record. */ @@ -349,7 +349,7 @@ /*================*/ rec_t* rec, /*!< in/out: physical record */ ulint heap_no)/*!< in: the heap number */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** The following function is used to test whether the data offsets in the record are stored in one-byte or two-byte format. @@ -359,7 +359,7 @@ rec_get_1byte_offs_flag( /*====================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** The following function is used to set the 1-byte offsets flag. */ @@ -369,7 +369,7 @@ /*====================*/ rec_t* rec, /*!< in: physical record */ ibool flag) /*!< in: TRUE if 1byte form */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** Returns the offset of nth field end if the record is stored in the 1-byte @@ -382,7 +382,7 @@ /*=====================*/ const rec_t* rec, /*!< in: record */ ulint n) /*!< in: field index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Returns the offset of nth field end if the record is stored in the 2-byte @@ -396,7 +396,7 @@ /*=====================*/ const rec_t* rec, /*!< in: record */ ulint n) /*!< in: field index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Returns nonzero if the field is stored off-page. @@ -408,7 +408,7 @@ /*==================*/ const rec_t* rec, /*!< in: record */ ulint n) /*!< in: field index */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Determine how many of the first n columns in a compact @@ -421,7 +421,7 @@ const rec_t* rec, /*!< in: compact physical record */ const dict_index_t* index, /*!< in: record descriptor */ ulint n) /*!< in: number of columns to scan */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************//** The following function determines the offsets to each field @@ -446,9 +446,9 @@ #endif /* UNIV_DEBUG */ mem_heap_t** heap) /*!< in/out: memory heap */ #ifdef UNIV_DEBUG - __attribute__((nonnull(1,2,5,7),warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,5,7),warn_unused_result)); #else /* UNIV_DEBUG */ - __attribute__((nonnull(1,2,5),warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,5),warn_unused_result)); #endif /* UNIV_DEBUG */ #ifdef UNIV_DEBUG @@ -475,7 +475,7 @@ 0=leaf node */ ulint* offsets)/*!< in/out: array consisting of offsets[0] allocated elements */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG /************************************************************//** Validates offsets returned by rec_get_offsets(). @@ -488,7 +488,7 @@ const dict_index_t* index, /*!< in: record descriptor or NULL */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull(3), warn_unused_result)); + MY_ATTRIBUTE((nonnull(3), warn_unused_result)); /************************************************************//** Updates debug data in offsets, in order to avoid bogus rec_offs_validate() failures. */ @@ -500,7 +500,7 @@ const dict_index_t* index, /*!< in: record descriptor */ ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #else # define rec_offs_make_valid(rec, index, offsets) ((void) 0) #endif /* UNIV_DEBUG */ @@ -517,7 +517,7 @@ ulint n, /*!< in: index of the field */ ulint* len) /*!< out: length of the field; UNIV_SQL_NULL if SQL null */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #define rec_get_nth_field_old(rec, n, len) \ ((rec) + rec_get_nth_field_offs_old(rec, n, len)) /************************************************************//** @@ -531,7 +531,7 @@ /*===================*/ const rec_t* rec, /*!< in: record */ ulint n) /*!< in: index of the field */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /************************************************************//** The following function is used to get an offset to the nth data field in a record. @@ -544,7 +544,7 @@ ulint n, /*!< in: index of the field */ ulint* len) /*!< out: length of the field; UNIV_SQL_NULL if SQL null */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #define rec_get_nth_field(rec, offsets, n, len) \ ((rec) + rec_get_nth_field_offs(offsets, n, len)) /******************************************************//** @@ -556,7 +556,7 @@ rec_offs_comp( /*==========*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Determine if the offsets are for a record containing externally stored columns. @@ -566,7 +566,7 @@ rec_offs_any_extern( /*================*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Determine if the offsets are for a record containing null BLOB pointers. @return first field containing a null BLOB pointer, or NULL if none found */ @@ -576,7 +576,7 @@ /*=====================*/ const rec_t* rec, /*!< in: record */ const ulint* offsets) /*!< in: rec_get_offsets(rec) */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Returns nonzero if the extern bit is set in nth field of rec. @return nonzero if externally stored */ @@ -586,7 +586,7 @@ /*================*/ const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: nth field */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Returns nonzero if the SQL NULL bit is set in nth field of rec. @return nonzero if SQL NULL */ @@ -596,7 +596,7 @@ /*==================*/ const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: nth field */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Gets the physical size of a field. @return length of field */ @@ -606,7 +606,7 @@ /*==============*/ const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: nth field */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /******************************************************//** Returns the number of extern bits set in a record. @@ -616,7 +616,7 @@ rec_offs_n_extern( /*==============*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /***********************************************************//** This is used to modify the value of an already existing field in a record. The previous value must have exactly the same size as the new value. If len @@ -636,7 +636,7 @@ length as the previous value. If SQL null, previous value must be SQL null. */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /**********************************************************//** The following function returns the data size of an old-style physical record, that is the sum of field lengths. SQL null fields @@ -648,7 +648,7 @@ rec_get_data_size_old( /*==================*/ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** The following function returns the number of allocated elements for an array of offsets. @@ -658,7 +658,7 @@ rec_offs_get_n_alloc( /*=================*/ const ulint* offsets)/*!< in: array for rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** The following function sets the number of allocated elements for an array of offsets. */ @@ -669,7 +669,7 @@ ulint* offsets, /*!< out: array for rec_get_offsets(), must be allocated */ ulint n_alloc) /*!< in: number of elements */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #define rec_offs_init(offsets) \ rec_offs_set_n_alloc(offsets, (sizeof offsets) / sizeof *offsets) /**********************************************************//** @@ -680,7 +680,7 @@ rec_offs_n_fields( /*==============*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** The following function returns the data size of a physical record, that is the sum of field lengths. SQL null fields @@ -692,7 +692,7 @@ rec_offs_data_size( /*===============*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** Returns the total size of record minus data size of record. The value returned by the function is the distance from record @@ -703,7 +703,7 @@ rec_offs_extra_size( /*================*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** Returns the total size of a physical record. @return size */ @@ -712,7 +712,7 @@ rec_offs_size( /*==========*/ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #ifdef UNIV_DEBUG /**********************************************************//** Returns a pointer to the start of the record. @@ -723,7 +723,7 @@ /*==========*/ const rec_t* rec, /*!< in: pointer to record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); /**********************************************************//** Returns a pointer to the end of the record. @return pointer to end */ @@ -733,7 +733,7 @@ /*========*/ const rec_t* rec, /*!< in: pointer to record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #else /* UNIV_DEBUG */ # define rec_get_start(rec, offsets) ((rec) - rec_offs_extra_size(offsets)) # define rec_get_end(rec, offsets) ((rec) + rec_offs_data_size(offsets)) @@ -748,7 +748,7 @@ void* buf, /*!< in: buffer */ const rec_t* rec, /*!< in: physical record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /**********************************************************//** Determines the size of a data tuple prefix in a temporary file. @@ -761,7 +761,7 @@ const dfield_t* fields, /*!< in: array of data fields */ ulint n_fields,/*!< in: number of data fields */ ulint* extra) /*!< out: extra size */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /******************************************************//** Determine the offset to each field in temporary file. @@ -774,7 +774,7 @@ const dict_index_t* index, /*!< in: record descriptor */ ulint* offsets)/*!< in/out: array of offsets; in: n=rec_offs_n_fields(offsets) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************//** Builds a temporary file record out of a data tuple. @@ -787,7 +787,7 @@ const dict_index_t* index, /*!< in: record descriptor */ const dfield_t* fields, /*!< in: array of data fields */ ulint n_fields) /*!< in: number of fields */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**************************************************************//** Copies the first n fields of a physical record to a new physical record in @@ -805,7 +805,7 @@ for the copied prefix, or NULL */ ulint* buf_size) /*!< in/out: buffer size */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /************************************************************//** Folds a prefix of a physical record to a ulint. @return the folded value */ @@ -821,7 +821,7 @@ ulint n_bytes, /*!< in: number of bytes to fold in an incomplete last field */ index_id_t tree_id) /*!< in: index tree id */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /*********************************************************//** Builds a physical record out of a data tuple and @@ -837,7 +837,7 @@ const dtuple_t* dtuple, /*!< in: data tuple */ ulint n_ext) /*!< in: number of externally stored columns */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************//** Returns the extra size of an old-style physical record if we know its data size and number of fields. @@ -849,7 +849,7 @@ ulint data_size, /*!< in: data size */ ulint n_fields, /*!< in: number of fields */ ulint n_ext) /*!< in: number of externally stored columns */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /**********************************************************//** Determines the size of a data tuple prefix in ROW_FORMAT=COMPACT. @return total size */ @@ -861,7 +861,7 @@ const dfield_t* fields, /*!< in: array of data fields */ ulint n_fields,/*!< in: number of data fields */ ulint* extra) /*!< out: extra size */ - __attribute__((warn_unused_result, nonnull(1,2))); + MY_ATTRIBUTE((warn_unused_result, nonnull(1,2))); /**********************************************************//** Determines the size of a data tuple in ROW_FORMAT=COMPACT. @return total size */ @@ -877,7 +877,7 @@ const dfield_t* fields, /*!< in: array of data fields */ ulint n_fields,/*!< in: number of data fields */ ulint* extra) /*!< out: extra size */ - __attribute__((nonnull(1,3))); + MY_ATTRIBUTE((nonnull(1,3))); /**********************************************************//** The following function returns the size of a data tuple when converted to a physical record. @@ -889,7 +889,7 @@ dict_index_t* index, /*!< in: record descriptor */ const dtuple_t* dtuple, /*!< in: data tuple */ ulint n_ext) /*!< in: number of externally stored columns */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); #ifndef UNIV_HOTBACKUP /**************************************************************//** Copies the first n fields of a physical record to a data tuple. @@ -904,7 +904,7 @@ ulint n_fields, /*!< in: number of fields to copy */ mem_heap_t* heap) /*!< in: memory heap */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /***************************************************************//** Validates the consistency of a physical record. @@ -915,7 +915,7 @@ /*=========*/ const rec_t* rec, /*!< in: physical record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints an old-style physical record. */ UNIV_INTERN @@ -924,7 +924,7 @@ /*==========*/ FILE* file, /*!< in: file where to print */ const rec_t* rec) /*!< in: physical record */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_HOTBACKUP /***************************************************************//** Prints a physical record in ROW_FORMAT=COMPACT. Ignores the @@ -936,7 +936,7 @@ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints a physical record. */ UNIV_INTERN @@ -946,7 +946,7 @@ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints a physical record. */ UNIV_INTERN @@ -956,7 +956,7 @@ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ const dict_index_t* index) /*!< in: record descriptor */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); # ifdef UNIV_DEBUG /************************************************************//** @@ -968,7 +968,7 @@ /*===========*/ const rec_t* rec, /*!< in: record */ const dict_index_t* index) /*!< in: clustered index */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); # endif /* UNIV_DEBUG */ #endif /* UNIV_HOTBACKUP */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/rem0rec.ic mysql-5.6-5.6.33/storage/innobase/include/rem0rec.ic --- mysql-5.6-5.6.27/storage/innobase/include/rem0rec.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/rem0rec.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1540,7 +1540,8 @@ ulint extra_len; ulint data_len; - ut_ad(rec && buf); + ut_ad(rec != NULL); + ut_ad(buf != NULL); ut_ad(rec_offs_validate(rec, NULL, offsets)); ut_ad(rec_validate(rec, offsets)); diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0ftsort.h mysql-5.6-5.6.33/storage/innobase/include/row0ftsort.h --- mysql-5.6-5.6.27/storage/innobase/include/row0ftsort.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0ftsort.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2010, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -187,7 +187,7 @@ instantiated */ fts_psort_t** merge) /*!< out: parallel merge info to be instantiated */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Clean up and deallocate FTS parallel sort structures, and close temparary merge sort files */ @@ -275,5 +275,5 @@ fts_psort_t* psort_info, /*!< parallel sort info */ ulint id) /* !< in: which auxiliary table's data to insert to */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* row0ftsort_h */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0import.h mysql-5.6-5.6.33/storage/innobase/include/row0import.h --- mysql-5.6-5.6.27/storage/innobase/include/row0import.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0import.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -46,7 +46,7 @@ dict_table_t* table, /*!< in/out: table */ row_prebuilt_t* prebuilt) /*!< in: prebuilt struct in MySQL */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Update the DICT_TF2_DISCARDED flag in SYS_TABLES. @@ -64,7 +64,7 @@ bool dict_locked) /*!< in: Set to true if the caller already owns the dict_sys_t:: mutex. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Update the (space, root page) of a table's indexes from the values @@ -83,7 +83,7 @@ bool dict_locked) /*!< in: Set to true if the caller already owns the dict_sys_t:: mutex. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0import.ic" #endif diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0ins.h mysql-5.6-5.6.33/storage/innobase/include/row0ins.h --- mysql-5.6-5.6.27/storage/innobase/include/row0ins.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0ins.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -53,7 +53,7 @@ table, else the referenced table */ dtuple_t* entry, /*!< in: index entry for index */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Creates an insert node struct. @return own: insert node struct */ @@ -98,7 +98,7 @@ dtuple_t* entry, /*!< in/out: index entry to insert */ ulint n_ext, /*!< in: number of externally stored columns */ que_thr_t* thr) /*!< in: query thread or NULL */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***************************************************************//** Tries to insert an entry into a secondary index. If a record with exactly the same fields is found, the other record is necessarily marked deleted. @@ -123,7 +123,7 @@ trx_id_t trx_id, /*!< in: PAGE_MAX_TRX_ID during row_log_table_apply(), or 0 */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***************************************************************//** Tries to insert the externally stored fields (off-page columns) of a clustered index entry. @@ -142,7 +142,7 @@ const void* thd, /*!< in: connection, or NULL */ #endif /* DBUG_OFF */ ulint line) /*!< in: line number of caller */ - __attribute__((nonnull(1,2,3,4,5,6), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,4,5,6), warn_unused_result)); #ifdef DBUG_OFF # define row_ins_index_entry_big_rec(e,big,ofs,heap,index,thd,file,line) \ row_ins_index_entry_big_rec_func(e,big,ofs,heap,index,file,line) @@ -164,7 +164,7 @@ dtuple_t* entry, /*!< in/out: index entry to insert */ que_thr_t* thr, /*!< in: query thread */ ulint n_ext) /*!< in: number of externally stored columns */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***************************************************************//** Inserts an entry into a secondary index. Tries first optimistic, then pessimistic descent down the tree. If the entry matches enough @@ -178,7 +178,7 @@ dict_index_t* index, /*!< in: secondary index */ dtuple_t* entry, /*!< in/out: index entry to insert */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************//** Inserts a row to a table. This is a high-level function used in SQL execution graphs. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0log.h mysql-5.6-5.6.33/storage/innobase/include/row0log.h --- mysql-5.6-5.6.27/storage/innobase/include/row0log.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0log.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -51,9 +51,10 @@ const dtuple_t* add_cols, /*!< in: default values of added columns, or NULL */ - const ulint* col_map)/*!< in: mapping of old column + const ulint* col_map,/*!< in: mapping of old column numbers to new ones, or NULL if !table */ - __attribute__((nonnull(1), warn_unused_result)); + const char* path) /*!< in: where to create temporary file */ + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); /******************************************************//** Free the row log for an index that was being created online. */ @@ -62,7 +63,7 @@ row_log_free( /*=========*/ row_log_t*& log) /*!< in,own: row log */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** Free the row log for an index on which online creation was aborted. */ @@ -71,7 +72,7 @@ row_log_abort_sec( /*==============*/ dict_index_t* index) /*!< in/out: index (x-latched) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************//** Try to log an operation to a secondary index that is @@ -86,7 +87,7 @@ const dtuple_t* tuple, /*!< in: index tuple */ trx_id_t trx_id) /*!< in: transaction ID for insert, or 0 for delete */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************//** Logs an operation to a secondary index that is (or was) being created. */ UNIV_INTERN @@ -97,7 +98,7 @@ const dtuple_t* tuple, /*!< in: index tuple */ trx_id_t trx_id) /*!< in: transaction ID for insert, or 0 for delete */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /******************************************************//** Gets the error status of the online index rebuild log. @@ -108,7 +109,7 @@ /*====================*/ const dict_index_t* index) /*!< in: clustered index of a table that is being rebuilt online */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************//** Logs a delete operation to a table that is being rebuilt. @@ -124,7 +125,7 @@ const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ const byte* sys) /*!< in: DB_TRX_ID,DB_ROLL_PTR that should be logged, or NULL to use those in rec */ - UNIV_COLD __attribute__((nonnull(1,2,3))); + UNIV_COLD MY_ATTRIBUTE((nonnull(1,2,3))); /******************************************************//** Logs an update operation to a table that is being rebuilt. @@ -140,7 +141,7 @@ const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ const dtuple_t* old_pk) /*!< in: row_log_table_get_pk() before the update */ - UNIV_COLD __attribute__((nonnull(1,2,3))); + UNIV_COLD MY_ATTRIBUTE((nonnull(1,2,3))); /******************************************************//** Constructs the old PRIMARY KEY and DB_TRX_ID,DB_ROLL_PTR @@ -160,7 +161,7 @@ byte* sys, /*!< out: DB_TRX_ID,DB_ROLL_PTR for row_log_table_delete(), or NULL */ mem_heap_t** heap) /*!< in/out: memory heap where allocated */ - UNIV_COLD __attribute__((nonnull(1,2,5), warn_unused_result)); + UNIV_COLD MY_ATTRIBUTE((nonnull(1,2,5), warn_unused_result)); /******************************************************//** Logs an insert to a table that is being rebuilt. @@ -174,7 +175,7 @@ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ const ulint* offsets)/*!< in: rec_get_offsets(rec,index) */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /******************************************************//** Notes that a BLOB is being freed during online ALTER TABLE. */ UNIV_INTERN @@ -183,7 +184,7 @@ /*====================*/ dict_index_t* index, /*!< in/out: clustered index, X-latched */ ulint page_no)/*!< in: starting page number of the BLOB */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /******************************************************//** Notes that a BLOB is being allocated during online ALTER TABLE. */ UNIV_INTERN @@ -192,7 +193,7 @@ /*=====================*/ dict_index_t* index, /*!< in/out: clustered index, X-latched */ ulint page_no)/*!< in: starting page number of the BLOB */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /******************************************************//** Apply the row_log_table log to a table upon completing rebuild. @return DB_SUCCESS, or error code on failure */ @@ -205,7 +206,7 @@ /*!< in: old table */ struct TABLE* table) /*!< in/out: MySQL table (for reporting duplicates) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************//** Get the latest transaction ID that has invoked row_log_online_op() @@ -216,7 +217,7 @@ row_log_get_max_trx( /*================*/ dict_index_t* index) /*!< in: index, must be locked */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************//** Merge the row log to the index upon completing index creation. @@ -230,7 +231,7 @@ dict_index_t* index, /*!< in/out: secondary index */ struct TABLE* table) /*!< in/out: MySQL table (for reporting duplicates) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0log.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0merge.h mysql-5.6-5.6.33/storage/innobase/include/row0merge.h --- mysql-5.6-5.6.27/storage/innobase/include/row0merge.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0merge.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -127,7 +127,7 @@ /*=================*/ row_merge_dup_t* dup, /*!< in/out: for reporting duplicates */ const dfield_t* entry) /*!< in: duplicate index entry */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Sets an exclusive lock on a table, for the duration of creating indexes. @return error code or DB_SUCCESS */ @@ -138,7 +138,7 @@ trx_t* trx, /*!< in/out: transaction */ dict_table_t* table, /*!< in: table to lock */ enum lock_mode mode) /*!< in: LOCK_X or LOCK_S */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Drop indexes that were created before an error occurred. The data dictionary must have been locked exclusively by the caller, @@ -149,7 +149,7 @@ /*========================*/ trx_t* trx, /*!< in/out: dictionary transaction */ table_id_t table_id)/*!< in: table identifier */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Drop those indexes which were created before an error occurred. The data dictionary must have been locked exclusively by the caller, @@ -162,7 +162,7 @@ dict_table_t* table, /*!< in/out: table containing the indexes */ ibool locked) /*!< in: TRUE=table locked, FALSE=may need to do a lazy drop */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Drop all partially created indexes during crash recovery. */ UNIV_INTERN @@ -170,15 +170,15 @@ row_merge_drop_temp_indexes(void); /*=============================*/ -/*********************************************************************//** -Creates temporary merge files, and if UNIV_PFS_IO defined, register -the file descriptor with Performance Schema. +/** Create temporary merge files in the given paramater path, and if +UNIV_PFS_IO defined, register the file descriptor with Performance Schema. +@param[in] path location for creating temporary merge files. @return File descriptor */ UNIV_INTERN int -row_merge_file_create_low(void) -/*===========================*/ - __attribute__((warn_unused_result)); +row_merge_file_create_low( + const char* path) + MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** Destroy a merge file. And de-register the file from Performance Schema if UNIV_PFS_IO is defined. */ @@ -214,7 +214,7 @@ old_table->name */ const char* tmp_name, /*!< in: new name for old_table */ trx_t* trx) /*!< in/out: dictionary transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Rename an index in the dictionary that was created. The data @@ -228,7 +228,7 @@ trx_t* trx, /*!< in/out: transaction */ table_id_t table_id, /*!< in: table identifier */ index_id_t index_id) /*!< in: index identifier */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Rename an index in the dictionary that is to be dropped. The data dictionary must have been locked exclusively by the caller, because @@ -241,7 +241,7 @@ trx_t* trx, /*!< in/out: transaction */ table_id_t table_id, /*!< in: table identifier */ index_id_t index_id) /*!< in: index identifier */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Create the index and load in to the dictionary. @return index, or NULL on error */ @@ -274,7 +274,7 @@ /*=================*/ trx_t* trx, /*!< in: transaction */ dict_table_t* table) /*!< in: table instance to drop */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Build indexes on a table by reading a clustered index, creating a temporary file containing index entries, merge sorting @@ -307,7 +307,7 @@ AUTO_INCREMENT column, or ULINT_UNDEFINED if none is added */ ib_sequence_t& sequence) /*!< in/out: autoinc sequence */ - __attribute__((nonnull(1,2,3,5,6,8), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,5,6,8), warn_unused_result)); /********************************************************************//** Write a buffer to a block. */ UNIV_INTERN @@ -317,7 +317,7 @@ const row_merge_buf_t* buf, /*!< in: sorted buffer */ const merge_file_t* of, /*!< in: output file */ row_merge_block_t* block) /*!< out: buffer for writing to file */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Sort a buffer. */ UNIV_INTERN @@ -327,7 +327,7 @@ row_merge_buf_t* buf, /*!< in/out: sort buffer */ row_merge_dup_t* dup) /*!< in/out: reporter of duplicates (NULL if non-unique index) */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /********************************************************************//** Write a merge block to the file system. @return TRUE if request was successful, FALSE if fail */ @@ -347,16 +347,18 @@ row_merge_buf_empty( /*================*/ row_merge_buf_t* buf) /*!< in,own: sort buffer */ - __attribute__((warn_unused_result, nonnull)); -/*********************************************************************//** -Create a merge file. + MY_ATTRIBUTE((warn_unused_result, nonnull)); + +/** Create a merge file in the given location. +@param[out] merge_file merge file structure +@param[in] path location for creating temporary file @return file descriptor, or -1 on failure */ UNIV_INTERN int row_merge_file_create( -/*==================*/ - merge_file_t* merge_file) /*!< out: merge file structure */ - __attribute__((nonnull)); + merge_file_t* merge_file, + const char* path); + /*********************************************************************//** Merge disk files. @return DB_SUCCESS or error code */ @@ -371,7 +373,7 @@ index entries */ row_merge_block_t* block, /*!< in/out: 3 buffers */ int* tmpfd) /*!< in/out: temporary file handle */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Allocate a sort buffer. @return own: sort buffer */ @@ -380,7 +382,7 @@ row_merge_buf_create( /*=================*/ dict_index_t* index) /*!< in: secondary index */ - __attribute__((warn_unused_result, nonnull, malloc)); + MY_ATTRIBUTE((warn_unused_result, nonnull, malloc)); /*********************************************************************//** Deallocate a sort buffer. */ UNIV_INTERN @@ -388,7 +390,7 @@ row_merge_buf_free( /*===============*/ row_merge_buf_t* buf) /*!< in,own: sort buffer to be freed */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Destroy a merge file. */ UNIV_INTERN @@ -396,7 +398,7 @@ row_merge_file_destroy( /*===================*/ merge_file_t* merge_file) /*!< in/out: merge file structure */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Read a merge block from the file system. @return TRUE if request was successful, FALSE if fail */ @@ -426,5 +428,5 @@ or NULL on end of list (non-NULL on I/O error) */ ulint* offsets)/*!< out: offsets of mrec */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* row0merge.h */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0mysql.h mysql-5.6-5.6.33/storage/innobase/include/row0mysql.h --- mysql-5.6-5.6.27/storage/innobase/include/row0mysql.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0mysql.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -167,7 +167,7 @@ trx_t* trx, /*!< in: transaction */ que_thr_t* thr, /*!< in: query thread, or NULL */ trx_savept_t* savept) /*!< in: savepoint, or NULL */ - __attribute__((nonnull(1,2))); + MY_ATTRIBUTE((nonnull(1,2))); /********************************************************************//** Create a prebuilt struct for a MySQL table handle. @return own: a prebuilt struct */ @@ -209,7 +209,7 @@ /*=============================*/ row_prebuilt_t* prebuilt) /*!< in: prebuilt struct in the MySQL table handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Sets a table lock on the table mentioned in prebuilt. @return error code or DB_SUCCESS */ @@ -225,7 +225,7 @@ prebuilt->select_lock_type */ ulint mode) /*!< in: lock mode of table (ignored if table==NULL) */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*********************************************************************//** Does an insert for MySQL. @return error code or DB_SUCCESS */ @@ -236,7 +236,7 @@ byte* mysql_rec, /*!< in: row in the MySQL format */ row_prebuilt_t* prebuilt) /*!< in: prebuilt struct in MySQL handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Builds a dummy query graph used in selects. */ UNIV_INTERN @@ -276,7 +276,7 @@ the MySQL format */ row_prebuilt_t* prebuilt) /*!< in: prebuilt struct in MySQL handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** This can only be used when srv_locks_unsafe_for_binlog is TRUE or this session is using a READ COMMITTED or READ UNCOMMITTED isolation level. @@ -297,7 +297,7 @@ the records under pcur and clust_pcur, and we do not need to reposition the cursors. */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Checks if a table name contains the string "/#sql" which denotes temporary tables in MySQL. @@ -306,7 +306,7 @@ bool row_is_mysql_tmp_table_name( /*========================*/ - const char* name) __attribute__((warn_unused_result)); + const char* name) MY_ATTRIBUTE((warn_unused_result)); /*!< in: table name in the form 'database/tablename' */ @@ -331,7 +331,7 @@ upd_node_t* node, /*!< in: update node used in the cascade or set null operation */ dict_table_t* table) /*!< in: table where we do the operation */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Locks the data dictionary exclusively for performing a table create or other data dictionary modification operation. */ @@ -387,7 +387,7 @@ added to the data dictionary cache) */ trx_t* trx, /*!< in/out: transaction */ bool commit) /*!< in: if true, commit the transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Does an index creation operation for MySQL. TODO: currently failure to create an index results in dropping the whole table! This is no problem @@ -406,7 +406,7 @@ index columns, which are then checked for not being too large. */ - __attribute__((nonnull(1,2), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2), warn_unused_result)); /*********************************************************************//** Scans a table create SQL string and adds to the data dictionary the foreign key constraints declared in the string. This function @@ -432,7 +432,7 @@ ibool reject_fks) /*!< in: if TRUE, fail with error code DB_CANNOT_ADD_CONSTRAINT if any foreign keys are found. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** The master thread in srv0srv.cc calls this regularly to drop tables which we must drop in background after queries to them have ended. Such lazy @@ -461,7 +461,7 @@ dict_table_t* table, /*!< in: table to lock */ enum lock_mode mode, /*!< in: LOCK_X or LOCK_S */ const char* op_info) /*!< in: string for trx->op_info */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Truncates a table for MySQL. @@ -472,7 +472,7 @@ /*=========================*/ dict_table_t* table, /*!< in: table handle */ trx_t* trx) /*!< in: transaction handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Drops a table for MySQL. If the name of the dropped table ends in one of "innodb_monitor", "innodb_lock_monitor", "innodb_tablespace_monitor", @@ -491,7 +491,7 @@ bool nonatomic = true) /*!< in: whether it is permitted to release and reacquire dict_operation_lock */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Drop all temporary tables during crash recovery. */ UNIV_INTERN @@ -510,7 +510,7 @@ /*=============================*/ const char* name, /*!< in: table name */ trx_t* trx) /*!< in: transaction handle */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Imports a tablespace. The space id in the .ibd file must match the space id of the table in the data dictionary. @@ -521,7 +521,7 @@ /*============================*/ dict_table_t* table, /*!< in/out: table */ row_prebuilt_t* prebuilt) /*!< in: prebuilt struct in MySQL */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Drops a database for MySQL. @return error code or DB_SUCCESS */ @@ -531,7 +531,7 @@ /*========================*/ const char* name, /*!< in: database name which ends to '/' */ trx_t* trx) /*!< in: transaction handle */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Renames a table for MySQL. @return error code or DB_SUCCESS */ @@ -543,7 +543,7 @@ const char* new_name, /*!< in: new table name */ trx_t* trx, /*!< in/out: transaction */ bool commit) /*!< in: whether to commit trx */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Checks that the index contains entries in an ascending order, unique constraint is not broken, and calculates the number of index entries @@ -558,7 +558,7 @@ const dict_index_t* index, /*!< in: index */ ulint* n_rows) /*!< out: number of entries seen in the consistent read */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Determines if a table is a magic monitor table. @return true if monitor table */ @@ -568,7 +568,7 @@ /*=======================*/ const char* table_name) /*!< in: name of the table, in the form database/table_name */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Initialize this module */ UNIV_INTERN @@ -593,7 +593,7 @@ dict_table_t* table, /*!< in/out: table */ trx_t* trx, /*!< in/out: transaction */ table_id_t* new_id) /*!< out: new table id */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /* A struct describing a place for an individual column in the MySQL row format which is presented to the table handler in ha_innobase. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0purge.h mysql-5.6-5.6.33/storage/innobase/include/row0purge.h --- mysql-5.6-5.6.27/storage/innobase/include/row0purge.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0purge.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -47,7 +47,7 @@ que_thr_t* parent, /*!< in: parent node, i.e., a thr node */ mem_heap_t* heap) /*!< in: memory heap where created */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************//** Determines if it is possible to remove a secondary index entry. Removal is possible if the secondary index entry does not refer to any @@ -70,7 +70,7 @@ purge_node_t* node, /*!< in/out: row purge node */ dict_index_t* index, /*!< in: secondary index */ const dtuple_t* entry) /*!< in: secondary index entry */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*************************************************************** Does the purge operation for a single undo log record. This is a high-level function used in an SQL execution graph. @@ -80,7 +80,7 @@ row_purge_step( /*===========*/ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /* Purge node structure */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0quiesce.h mysql-5.6-5.6.33/storage/innobase/include/row0quiesce.h --- mysql-5.6-5.6.27/storage/innobase/include/row0quiesce.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0quiesce.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -43,7 +43,7 @@ /*====================*/ dict_table_t* table, /*!< in: quiesce this table */ trx_t* trx) /*!< in/out: transaction/session */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*********************************************************************//** Set a table's quiesce state. @@ -55,7 +55,7 @@ dict_table_t* table, /*!< in: quiesce this table */ ib_quiesce_t state, /*!< in: quiesce state to set */ trx_t* trx) /*!< in/out: transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Cleanup after table quiesce. */ @@ -65,7 +65,7 @@ /*=======================*/ dict_table_t* table, /*!< in: quiesce this table */ trx_t* trx) /*!< in/out: transaction/session */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_NONINL #include "row0quiesce.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0row.h mysql-5.6-5.6.33/storage/innobase/include/row0row.h --- mysql-5.6-5.6.27/storage/innobase/include/row0row.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0row.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -47,7 +47,7 @@ /*==================*/ const dict_index_t* index, /*!< in: clustered index */ const ulint* offsets)/*!< in: record offsets */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Reads the trx id field from a clustered index record. @return value of the field */ @@ -58,7 +58,7 @@ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Reads the roll pointer field from a clustered index record. @return value of the field */ @@ -69,7 +69,7 @@ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** When an insert or purge to a table is performed, this function builds the entry to be inserted into or purged from an index on the table. @@ -88,7 +88,7 @@ mem_heap_t* heap) /*!< in: memory heap from which the memory for the index entry is allocated */ - __attribute__((warn_unused_result, nonnull(1,3,4))); + MY_ATTRIBUTE((warn_unused_result, nonnull(1,3,4))); /*****************************************************************//** When an insert or purge to a table is performed, this function builds the entry to be inserted into or purged from an index on the table. @@ -107,7 +107,7 @@ mem_heap_t* heap) /*!< in: memory heap from which the memory for the index entry is allocated */ - __attribute__((warn_unused_result, nonnull(1,3,4))); + MY_ATTRIBUTE((warn_unused_result, nonnull(1,3,4))); /*******************************************************************//** An inverse function to row_build_index_entry. Builds a row from a record in a clustered index. @@ -155,7 +155,7 @@ prefixes, or NULL */ mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ - __attribute__((nonnull(2,3,9))); + MY_ATTRIBUTE((nonnull(2,3,9))); /*******************************************************************//** Converts an index record to a typed data tuple. @return index entry built; does not set info_bits, and the data fields @@ -171,7 +171,7 @@ stored columns */ mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Converts an index record to a typed data tuple. NOTE that externally stored (often big) fields are NOT copied to heap. @@ -187,7 +187,7 @@ stored columns */ mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. @@ -210,7 +210,7 @@ as long as the row reference is used! */ mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. */ @@ -232,7 +232,7 @@ ulint* offsets,/*!< in: rec_get_offsets(rec, index) or NULL */ trx_t* trx) /*!< in: transaction or NULL */ - __attribute__((nonnull(1,2,3))); + MY_ATTRIBUTE((nonnull(1,2,3))); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. */ @@ -263,7 +263,7 @@ const dict_table_t* table, /*!< in: table */ const dtuple_t* ref, /*!< in: row reference */ mtr_t* mtr) /*!< in/out: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Fetches the clustered index record for a secondary index record. The latches on the secondary index record are preserved. @@ -277,7 +277,7 @@ dict_index_t* index, /*!< in: secondary index */ dict_index_t** clust_index,/*!< out: clustered index */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** Result of row_search_index_entry */ enum row_search_result { @@ -305,7 +305,7 @@ btr_pcur_t* pcur, /*!< in/out: persistent cursor, which must be closed by the caller */ mtr_t* mtr) /*!< in: mtr */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #define ROW_COPY_DATA 1 #define ROW_COPY_POINTERS 2 @@ -334,7 +334,7 @@ char* buf, /*!< out: output buffer */ ulint buf_size) /*!< in: output buffer size in bytes */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0row.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0sel.h mysql-5.6-5.6.33/storage/innobase/include/row0sel.h --- mysql-5.6-5.6.27/storage/innobase/include/row0sel.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0sel.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -168,7 +168,7 @@ then prebuilt must have a pcur with stored position! In opening of a cursor 'direction' should be 0. */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Checks if MySQL at the moment is allowed for this table to retrieve a consistent read result, or store it to the query cache. @@ -190,7 +190,7 @@ dict_index_t* index, /*!< in: index to search */ const char* col_name, /*!< in: autoinc column name */ ib_uint64_t* value) /*!< out: AUTOINC value read */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** A structure for caching column values for prefetched rows */ struct sel_buf_t{ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0uins.h mysql-5.6-5.6.33/storage/innobase/include/row0uins.h --- mysql-5.6-5.6.27/storage/innobase/include/row0uins.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0uins.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -46,7 +46,7 @@ row_undo_ins( /*=========*/ undo_node_t* node) /*!< in: row undo node */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0uins.ic" #endif diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0umod.h mysql-5.6-5.6.33/storage/innobase/include/row0umod.h --- mysql-5.6-5.6.27/storage/innobase/include/row0umod.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0umod.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -43,7 +43,7 @@ /*=========*/ undo_node_t* node, /*!< in: row undo node */ que_thr_t* thr) /*!< in: query thread */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0umod.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0upd.h mysql-5.6-5.6.33/storage/innobase/include/row0upd.h --- mysql-5.6-5.6.27/storage/innobase/include/row0upd.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0upd.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -91,7 +91,7 @@ /*======================*/ const upd_t* update, /*!< in: update vector */ ulint no) /*!< in: field_no */ - __attribute__((nonnull, pure)); + MY_ATTRIBUTE((nonnull, pure)); /*********************************************************************//** Writes into the redo log the values of trx id and roll ptr and enough info to determine their positions within a clustered index record. @@ -174,7 +174,7 @@ row_upd_changes_disowned_external( /*==============================*/ const upd_t* update) /*!< in: update vector */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /***********************************************************//** Replaces the new column values stored in the update vector to the @@ -207,7 +207,7 @@ const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ const dtuple_t* entry, /*!< in: entry to insert */ mem_heap_t* heap) /*!< in: memory heap from which allocated */ - __attribute__((warn_unused_result, nonnull)); + MY_ATTRIBUTE((warn_unused_result, nonnull)); /***************************************************************//** Builds an update vector from those fields, excluding the roll ptr and trx id fields, which in an index entry differ from a record that has @@ -227,7 +227,7 @@ trx_t* trx, /*!< in: transaction (for diagnostics), or NULL */ mem_heap_t* heap) /*!< in: memory heap from which allocated */ - __attribute__((nonnull(1,2,3,7), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2,3,7), warn_unused_result)); /***********************************************************//** Replaces the new column values stored in the update vector to the index entry given. */ @@ -250,7 +250,7 @@ does not work for non-clustered indexes. */ mem_heap_t* heap) /*!< in: memory heap for allocating and copying the new values */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***********************************************************//** Replaces the new column values stored in the update vector to the index entry given. */ @@ -269,7 +269,7 @@ an upd_field is the clustered index position */ mem_heap_t* heap) /*!< in: memory heap for allocating and copying the new values */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /***********************************************************//** Replaces the new column values stored in the update vector. */ UNIV_INTERN @@ -311,7 +311,7 @@ compile time */ const row_ext_t*ext) /*!< NULL, or prefixes of the externally stored columns in the old row */ - __attribute__((nonnull(1,2), warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2), warn_unused_result)); #ifdef UNIV_DEBUG # define row_upd_changes_ord_field_binary(index,update,thr,row,ext) \ row_upd_changes_ord_field_binary_func(index,update,thr,row,ext) @@ -338,7 +338,7 @@ /*===================*/ dict_table_t* table, /*!< in: table */ upd_field_t* upd_field) /*!< in: field to check */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************//** Checks if an update vector changes an ordering field of an index record. This function is fast if the update vector is short or the number of ordering diff -Nru mysql-5.6-5.6.27/storage/innobase/include/row0vers.h mysql-5.6-5.6.33/storage/innobase/include/row0vers.h --- mysql-5.6-5.6.27/storage/innobase/include/row0vers.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/row0vers.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -110,7 +110,7 @@ if the history is missing or the record does not exist in the view, that is, it was freshly inserted afterwards */ - __attribute__((nonnull(1,2,3,4,5,6,7))); + MY_ATTRIBUTE((nonnull(1,2,3,4,5,6,7))); /*****************************************************************//** Constructs the last committed version of a clustered index record, @@ -136,7 +136,7 @@ const rec_t** old_vers)/*!< out: rec, old version, or NULL if the record does not exist in the view, that is, it was freshly inserted afterwards */ - __attribute__((nonnull(1,2,3,4,5))); + MY_ATTRIBUTE((nonnull(1,2,3,4,5))); #ifndef UNIV_NONINL diff -Nru mysql-5.6-5.6.27/storage/innobase/include/srv0srv.h mysql-5.6-5.6.33/storage/innobase/include/srv0srv.h --- mysql-5.6-5.6.27/storage/innobase/include/srv0srv.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/srv0srv.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2008, 2009, Google Inc. Copyright (c) 2009, Percona Inc. @@ -734,7 +734,7 @@ os_thread_ret_t DECLARE_THREAD(srv_purge_coordinator_thread)( /*=========================================*/ - void* arg __attribute__((unused))); /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))); /*!< in: a dummy parameter required by os_thread_create */ /*********************************************************************//** @@ -744,7 +744,7 @@ os_thread_ret_t DECLARE_THREAD(srv_worker_thread)( /*==============================*/ - void* arg __attribute__((unused))); /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))); /*!< in: a dummy parameter required by os_thread_create */ } /* extern "C" */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/srv0start.h mysql-5.6-5.6.33/storage/innobase/include/srv0start.h --- mysql-5.6-5.6.27/storage/innobase/include/srv0start.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/srv0start.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -105,7 +105,7 @@ ulint dest_len, /*!< in: max bytes to copy */ const char* basedir, /*!< in: base directory */ const char* table_name) /*!< in: source table name */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*****************************************************************//** Get the meta-data filename from the table name. */ @@ -116,7 +116,7 @@ dict_table_t* table, /*!< in: table */ char* filename, /*!< out: filename */ ulint max_len) /*!< in: filename max length */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /** Log sequence number at shutdown */ extern lsn_t srv_shutdown_lsn; diff -Nru mysql-5.6-5.6.27/storage/innobase/include/sync0arr.h mysql-5.6-5.6.33/storage/innobase/include/sync0arr.h --- mysql-5.6-5.6.27/storage/innobase/include/sync0arr.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/sync0arr.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -110,7 +110,7 @@ /*========================*/ os_thread_id_t* waiter, /*!< out: longest waiting thread */ const void** sema) /*!< out: longest-waited-for semaphore */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /********************************************************************//** Validates the integrity of the wait array. Checks that the number of reserved cells equals the count variable. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/sync0rw.h mysql-5.6-5.6.33/storage/innobase/include/sync0rw.h --- mysql-5.6-5.6.27/storage/innobase/include/sync0rw.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/sync0rw.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -333,7 +333,7 @@ rw_lock_s_lock_low( /*===============*/ rw_lock_t* lock, /*!< in: pointer to rw-lock */ - ulint pass __attribute__((unused)), + ulint pass MY_ATTRIBUTE((unused)), /*!< in: pass value; != 0, if the lock will be passed to another thread to unlock */ const char* file_name, /*!< in: file name where lock requested */ @@ -501,7 +501,7 @@ rw_lock_t* lock, /*!< in: rw-lock */ ulint lock_type) /*!< in: lock type: RW_LOCK_SHARED, RW_LOCK_EX */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* UNIV_SYNC_DEBUG */ /******************************************************************//** Checks if somebody has locked the rw-lock in the specified mode. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/sync0rw.ic mysql-5.6-5.6.33/storage/innobase/include/sync0rw.ic --- mysql-5.6-5.6.27/storage/innobase/include/sync0rw.ic 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/sync0rw.ic 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -306,7 +306,7 @@ rw_lock_s_lock_low( /*===============*/ rw_lock_t* lock, /*!< in: pointer to rw-lock */ - ulint pass __attribute__((unused)), + ulint pass MY_ATTRIBUTE((unused)), /*!< in: pass value; != 0, if the lock will be passed to another thread to unlock */ const char* file_name, /*!< in: file name where lock requested */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/sync0sync.h mysql-5.6-5.6.33/storage/innobase/include/sync0sync.h --- mysql-5.6-5.6.27/storage/innobase/include/sync0sync.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/sync0sync.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2012, Facebook Inc. @@ -400,7 +400,7 @@ mutex_own( /*======*/ const ib_mutex_t* mutex) /*!< in: mutex */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* UNIV_DEBUG */ #ifdef UNIV_SYNC_DEBUG /******************************************************************//** @@ -415,7 +415,7 @@ ulint level, /*!< in: level in the latching order; if SYNC_LEVEL_VARYING, nothing is done */ ibool relock) /*!< in: TRUE if re-entering an x-lock */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /******************************************************************//** Removes a latch from the thread level array if it is found there. @return TRUE if found in the array; it is no error if the latch is @@ -445,7 +445,7 @@ /*============================*/ ibool dict_mutex_allowed) /*!< in: TRUE if dictionary mutex is allowed to be owned by the thread */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /******************************************************************//** Checks if the level array for the current thread is empty, except for data dictionary latches. */ @@ -462,7 +462,7 @@ ibool has_search_latch) /*!< in: TRUE if and only if the thread is supposed to hold btr_search_latch */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); /******************************************************************//** Gets the debug information for a reserved mutex. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/trx0rec.h mysql-5.6-5.6.33/storage/innobase/include/trx0rec.h --- mysql-5.6-5.6.27/storage/innobase/include/trx0rec.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/trx0rec.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -86,7 +86,7 @@ trx_undo_rec_get_offset( /*====================*/ undo_no_t undo_no) /*!< in: undo no read from node */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /**********************************************************************//** Returns the start of the undo record data area. */ @@ -109,7 +109,7 @@ externally stored fild */ undo_no_t* undo_no, /*!< out: undo log record number */ table_id_t* table_id) /*!< out: table id */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Builds a row reference from an undo log record. @return pointer to remaining part of undo record */ @@ -201,7 +201,7 @@ only in the assertion. */ mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Writes information to an undo log about an insert, update, or a delete marking of a clustered index record. This information is used in a rollback of the @@ -233,7 +233,7 @@ inserted undo log record, 0 if BTR_NO_UNDO_LOG flag was specified */ - __attribute__((nonnull(3,4,10), warn_unused_result)); + MY_ATTRIBUTE((nonnull(3,4,10), warn_unused_result)); /******************************************************************//** Copies an undo record to heap. This function can be called if we know that the undo log record exists. @@ -244,7 +244,7 @@ /*======================*/ roll_ptr_t roll_ptr, /*!< in: roll pointer to record */ mem_heap_t* heap) /*!< in: memory heap where copied */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Build a previous version of a clustered index record. The caller must hold a latch on the index page of the clustered index record. @@ -268,7 +268,7 @@ rec_t** old_vers)/*!< out, own: previous version, or NULL if rec is the first inserted version, or if history data has been deleted */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /***********************************************************//** Parses a redo log record of adding an undo log record. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/trx0roll.h mysql-5.6-5.6.33/storage/innobase/include/trx0roll.h --- mysql-5.6-5.6.27/storage/innobase/include/trx0roll.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/trx0roll.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -125,7 +125,7 @@ os_thread_ret_t DECLARE_THREAD(trx_rollback_or_clean_all_recovered)( /*================================================*/ - void* arg __attribute__((unused))); + void* arg MY_ATTRIBUTE((unused))); /*!< in: a dummy parameter required by os_thread_create */ /*********************************************************************//** @@ -152,7 +152,7 @@ trx_rollback_for_mysql( /*===================*/ trx_t* trx) /*!< in/out: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Rollback the latest SQL statement for MySQL. @return error code or DB_SUCCESS */ @@ -161,7 +161,7 @@ trx_rollback_last_sql_stat_for_mysql( /*=================================*/ trx_t* trx) /*!< in/out: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Rollback a transaction to a given savepoint or do a complete rollback. @return error code or DB_SUCCESS */ @@ -173,7 +173,7 @@ trx_savept_t* savept) /*!< in: pointer to savepoint undo number, if partial rollback requested, or NULL for complete rollback */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /*******************************************************************//** Rolls back a transaction back to a named savepoint. Modifications after the savepoint are undone but InnoDB does NOT release the corresponding locks @@ -195,7 +195,7 @@ information to remove the binlog entries of the queries executed after the savepoint */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Creates a named savepoint. If the transaction is not yet started, starts it. If there is already a savepoint of the same name, this call erases that old @@ -212,7 +212,7 @@ position corresponding to this connection at the time of the savepoint */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Releases a named savepoint. Savepoints which were set after this savepoint are deleted. @@ -224,7 +224,7 @@ /*============================*/ trx_t* trx, /*!< in: transaction handle */ const char* savepoint_name) /*!< in: savepoint name */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Frees savepoint structs starting from savep. */ UNIV_INTERN diff -Nru mysql-5.6-5.6.27/storage/innobase/include/trx0sys.h mysql-5.6-5.6.33/storage/innobase/include/trx0sys.h --- mysql-5.6-5.6.27/storage/innobase/include/trx0sys.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/trx0sys.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -267,7 +267,7 @@ trx_in_trx_list( /*============*/ const trx_t* in_trx) /*!< in: transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ #if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG /***********************************************************//** @@ -278,7 +278,7 @@ trx_assert_recovered( /*=================*/ trx_id_t trx_id) /*!< in: transaction identifier */ - __attribute__((warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */ /*****************************************************************//** Updates the offset information about the end of the MySQL binlog entry diff -Nru mysql-5.6-5.6.27/storage/innobase/include/trx0trx.h mysql-5.6-5.6.33/storage/innobase/include/trx0trx.h --- mysql-5.6-5.6.27/storage/innobase/include/trx0trx.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/trx0trx.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -103,7 +103,7 @@ trx_free_prepared( /*==============*/ trx_t* trx) /*!< in, own: trx object */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); /********************************************************************//** Frees a transaction object for MySQL. */ UNIV_INTERN @@ -169,7 +169,7 @@ /*==================*/ trx_t* trx, /*!< in/out: transaction */ trx_dict_op_t op) /*!< in: dictionary operation type */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG #define trx_start_for_ddl(t, o) \ @@ -191,7 +191,7 @@ trx_commit( /*=======*/ trx_t* trx) /*!< in/out: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /****************************************************************//** Commits a transaction and a mini-transaction. */ UNIV_INTERN @@ -201,7 +201,7 @@ trx_t* trx, /*!< in/out: transaction */ mtr_t* mtr) /*!< in/out: mini-transaction (will be committed), or NULL if trx made no modifications */ - __attribute__((nonnull(1))); + MY_ATTRIBUTE((nonnull(1))); /****************************************************************//** Cleans up a transaction at database startup. The cleanup is needed if the transaction already got to the middle of a commit when the database @@ -255,7 +255,7 @@ trx_commit_complete_for_mysql( /*==========================*/ trx_t* trx) /*!< in/out: transaction */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Marks the latest SQL statement ended. */ UNIV_INTERN @@ -317,7 +317,7 @@ /*!< in: length of trx->lock.trx_locks */ ulint heap_size) /*!< in: mem_heap_get_size(trx->lock.lock_heap) */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Prints info about a transaction. @@ -331,7 +331,7 @@ const trx_t* trx, /*!< in: transaction */ ulint max_query_len) /*!< in: max query length to print, or 0 to use the default max length */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Prints info about a transaction. @@ -344,7 +344,7 @@ const trx_t* trx, /*!< in: transaction */ ulint max_query_len) /*!< in: max query length to print, or 0 to use the default max length */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); /**********************************************************************//** Determine if a transaction is a dictionary operation. @@ -354,7 +354,7 @@ trx_get_dict_operation( /*===================*/ const trx_t* trx) /*!< in: transaction */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /**********************************************************************//** Flag a transaction a dictionary operation. */ UNIV_INLINE @@ -383,7 +383,7 @@ if state != TRX_STATE_NOT_STARTED asserts that trx->state != TRX_STATE_NOT_STARTED */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); # ifdef UNIV_DEBUG /**********************************************************************//** Asserts that a transaction has been started. @@ -394,7 +394,7 @@ trx_assert_started( /*===============*/ const trx_t* trx) /*!< in: transaction */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); # endif /* UNIV_DEBUG */ /**********************************************************************//** diff -Nru mysql-5.6-5.6.27/storage/innobase/include/trx0undo.h mysql-5.6-5.6.33/storage/innobase/include/trx0undo.h --- mysql-5.6-5.6.27/storage/innobase/include/trx0undo.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/trx0undo.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -73,7 +73,7 @@ trx_undo_trx_id_is_insert( /*======================*/ const byte* trx_id) /*!< in: DB_TRX_ID, followed by DB_ROLL_PTR */ - __attribute__((nonnull, pure, warn_unused_result)); + MY_ATTRIBUTE((nonnull, pure, warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ /*****************************************************************//** Writes a roll ptr to an index page. In case that the size changes in @@ -214,7 +214,7 @@ mtr_t* mtr) /*!< in: mtr which does not have a latch to any undo log page; the caller must have reserved the rollback segment mutex */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /********************************************************************//** Frees the last undo log page. The caller must hold the rollback segment mutex. */ @@ -229,7 +229,7 @@ mtr_t* mtr) /*!< in/out: mini-transaction which does not have a latch to any undo log page or which has allocated the undo log page */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG # define trx_undo_free_last_page(trx,undo,mtr) \ trx_undo_free_last_page_func(trx,undo,mtr) @@ -251,7 +251,7 @@ trx_undo_t* undo, /*!< in/out: undo log */ undo_no_t limit) /*!< in: all undo records with undo number >= this value should be truncated */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG # define trx_undo_truncate_end(trx,undo,limit) \ trx_undo_truncate_end_func(trx,undo,limit) @@ -300,7 +300,7 @@ /*=================*/ trx_t* trx, /*!< in: transaction */ ulint type) /*!< in: TRX_UNDO_INSERT or TRX_UNDO_UPDATE */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Sets the state of the undo log segment at a transaction finish. @return undo log segment header page, x-latched */ @@ -350,7 +350,7 @@ trx_undo_free_prepared( /*===================*/ trx_t* trx) /*!< in/out: PREPARED transaction */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); #endif /* !UNIV_HOTBACKUP */ /***********************************************************//** Parses the redo log entry of an undo log page initialization. diff -Nru mysql-5.6-5.6.27/storage/innobase/include/univ.i mysql-5.6-5.6.33/storage/innobase/include/univ.i --- mysql-5.6-5.6.27/storage/innobase/include/univ.i 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/univ.i 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -249,7 +249,7 @@ GCC visibility directive on all Sun operating systems because there is no easy way to get it to work. See http://bugs.mysql.com/bug.php?id=52263. */ #if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(sun) || defined(__INTEL_COMPILER) -# define UNIV_INTERN __attribute__((visibility ("hidden"))) +# define UNIV_INTERN MY_ATTRIBUTE((visibility ("hidden"))) #else # define UNIV_INTERN #endif @@ -264,7 +264,7 @@ program. The paths leading to call of cold functions within code are marked as unlikely by the branch prediction mechanism. optimize a rarely invoked function for size instead for speed. */ -# define UNIV_COLD __attribute__((cold)) +# define UNIV_COLD MY_ATTRIBUTE((cold)) #else # define UNIV_COLD /* empty */ #endif @@ -528,7 +528,7 @@ #if defined(__GNUC__) && (__GNUC__ > 2) && ! defined(__INTEL_COMPILER) #define HAVE_GCC_GT_2 /* Tell the compiler that variable/function is unused. */ -# define UNIV_UNUSED __attribute__ ((unused)) +# define UNIV_UNUSED MY_ATTRIBUTE ((unused)) #else # define UNIV_UNUSED #endif /* CHECK FOR GCC VER_GT_2 */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ut0byte.h mysql-5.6-5.6.33/storage/innobase/include/ut0byte.h --- mysql-5.6-5.6.27/storage/innobase/include/ut0byte.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ut0byte.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -39,7 +39,7 @@ /*==========*/ ulint high, /*!< in: high-order 32 bits */ ulint low) /*!< in: low-order 32 bits */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /********************************************************//** Rounds a 64-bit integer downward to a multiple of a power of 2. @@ -80,7 +80,7 @@ /*==========*/ const void* ptr, /*!< in: pointer */ ulint align_no) /*!< in: align by this number */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*********************************************************//** The following function computes the offset of a pointer from the nearest aligned address. @@ -91,7 +91,7 @@ /*============*/ const void* ptr, /*!< in: pointer */ ulint align_no) /*!< in: align by this number */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*****************************************************************//** Gets the nth bit of a ulint. @return TRUE if nth bit is 1; 0th bit is defined to be the least significant */ diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ut0dbg.h mysql-5.6-5.6.33/storage/innobase/include/ut0dbg.h --- mysql-5.6-5.6.27/storage/innobase/include/ut0dbg.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ut0dbg.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -59,7 +59,7 @@ const char* expr, /*!< in: the failed assertion */ const char* file, /*!< in: source file containing the assertion */ ulint line) /*!< in: line number of the assertion */ - UNIV_COLD __attribute__((nonnull(2))); + UNIV_COLD MY_ATTRIBUTE((nonnull(2))); /** Abort the execution. */ # define UT_DBG_PANIC abort() diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ut0mem.h mysql-5.6-5.6.33/storage/innobase/include/ut0mem.h --- mysql-5.6-5.6.27/storage/innobase/include/ut0mem.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ut0mem.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -87,7 +87,7 @@ ulint n, /*!< in: number of bytes to allocate */ ibool assert_on_error) /*!< in: if TRUE, we crash mysqld if the memory cannot be allocated */ - __attribute__((malloc)); + MY_ATTRIBUTE((malloc)); /**********************************************************************//** Allocates memory. */ #define ut_malloc(n) ut_malloc_low(n, TRUE) diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ut0rnd.h mysql-5.6-5.6.33/storage/innobase/include/ut0rnd.h --- mysql-5.6-5.6.27/storage/innobase/include/ut0rnd.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ut0rnd.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -96,7 +96,7 @@ ut_fold_ull( /*========*/ ib_uint64_t d) /*!< in: 64-bit integer */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*************************************************************//** Folds a character string ending in the null character. @return folded value */ @@ -105,7 +105,7 @@ ut_fold_string( /*===========*/ const char* str) /*!< in: null-terminated string */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); /***********************************************************//** Looks for a prime number slightly greater than the given argument. The prime is chosen so that it is not near any power of 2. @@ -115,7 +115,7 @@ ut_find_prime( /*==========*/ ulint n) /*!< in: positive number > 100 */ - __attribute__((const)); + MY_ATTRIBUTE((const)); #endif /* !UNIV_INNOCHECKSUM */ @@ -128,7 +128,7 @@ /*===============*/ ulint n1, /*!< in: ulint */ ulint n2) /*!< in: ulint */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /*************************************************************//** Folds a binary string. @return folded value */ @@ -138,7 +138,7 @@ /*===========*/ const byte* str, /*!< in: string of bytes */ ulint len) /*!< in: length */ - __attribute__((pure)); + MY_ATTRIBUTE((pure)); #ifndef UNIV_NONINL diff -Nru mysql-5.6-5.6.27/storage/innobase/include/ut0ut.h mysql-5.6-5.6.33/storage/innobase/include/ut0ut.h --- mysql-5.6-5.6.27/storage/innobase/include/ut0ut.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/include/ut0ut.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -217,7 +217,7 @@ ut_2_power_up( /*==========*/ ulint n) /*!< in: number != 0 */ - __attribute__((const)); + MY_ATTRIBUTE((const)); /** Determine how many bytes (groups of 8 bits) are needed to store the given number of bits. @@ -297,7 +297,7 @@ ut_print_timestamp( /*===============*/ FILE* file) /*!< in: file where to print */ - UNIV_COLD __attribute__((nonnull)); + UNIV_COLD MY_ATTRIBUTE((nonnull)); #ifndef UNIV_INNOCHECKSUM @@ -485,7 +485,7 @@ ulint* aux_arr, /*!< in/out: aux array to use in sort */ ulint low, /*!< in: lower bound */ ulint high) /*!< in: upper bound */ - __attribute__((nonnull)); + MY_ATTRIBUTE((nonnull)); #ifndef UNIV_NONINL #include "ut0ut.ic" diff -Nru mysql-5.6-5.6.27/storage/innobase/lock/lock0lock.cc mysql-5.6-5.6.33/storage/innobase/lock/lock0lock.cc --- mysql-5.6-5.6.27/storage/innobase/lock/lock0lock.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/lock/lock0lock.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -409,7 +409,7 @@ lock_rec_validate_page( /*===================*/ const buf_block_t* block) /*!< in: buffer block */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ /* The lock system */ @@ -493,7 +493,7 @@ #ifdef UNIV_DEBUG UNIV_INTERN #else -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) #endif bool lock_check_trx_id_sanity( @@ -618,7 +618,7 @@ lock_sys->rec_hash = hash_create(n_cells); if (!srv_read_only_mode) { - lock_latest_err_file = os_file_create_tmpfile(); + lock_latest_err_file = os_file_create_tmpfile(NULL); ut_a(lock_latest_err_file); } } @@ -3616,7 +3616,7 @@ ut_ad(heap_no == ULINT_UNDEFINED); ut_ad(lock_get_type_low(lock) == LOCK_TABLE); - lock = UT_LIST_GET_PREV(un_member.tab_lock.locks, lock); + lock = UT_LIST_GET_NEXT(un_member.tab_lock.locks, lock); } } while (lock != NULL && lock->trx->lock.deadlock_mark > ctx->mark_start); @@ -3666,7 +3666,8 @@ } else { *heap_no = ULINT_UNDEFINED; ut_ad(lock_get_type_low(lock) == LOCK_TABLE); - lock = UT_LIST_GET_PREV(un_member.tab_lock.locks, lock); + dict_table_t* table = lock->un_member.tab_lock.table; + lock = UT_LIST_GET_FIRST(table->locks); } ut_a(lock != NULL); @@ -4392,7 +4393,8 @@ dberr_t err; const lock_t* wait_for; - ut_ad(table && thr); + ut_ad(table != NULL); + ut_ad(thr != NULL); if (flags & BTR_NO_LOCKING_FLAG) { @@ -5779,7 +5781,7 @@ /*********************************************************************//** Validate record locks up to a limit. @return lock at limit or NULL if no more locks in the hash bucket */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const lock_t* lock_rec_validate( /*==============*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/lock/lock0wait.cc mysql-5.6-5.6.33/storage/innobase/lock/lock0wait.cc --- mysql-5.6-5.6.27/storage/innobase/lock/lock0wait.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/lock/lock0wait.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -479,7 +479,7 @@ os_thread_ret_t DECLARE_THREAD(lock_wait_timeout_thread)( /*=====================================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /* in: a dummy parameter required by os_thread_create */ { diff -Nru mysql-5.6-5.6.27/storage/innobase/log/log0log.cc mysql-5.6-5.6.33/storage/innobase/log/log0log.cc --- mysql-5.6-5.6.27/storage/innobase/log/log0log.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/log/log0log.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -975,7 +975,7 @@ ulint space_id, /*!< in: space id of the file space which contains the log files of this group */ - ulint archive_space_id __attribute__((unused))) + ulint archive_space_id MY_ATTRIBUTE((unused))) /*!< in: space id of the file space which contains some archived log files for this group; currently, only @@ -2352,7 +2352,7 @@ log_archived_file_name_gen( /*=======================*/ char* buf, /*!< in: buffer where to write */ - ulint id __attribute__((unused)), + ulint id MY_ATTRIBUTE((unused)), /*!< in: group id; currently we only archive the first group */ ulint file_no)/*!< in: file number */ diff -Nru mysql-5.6-5.6.27/storage/innobase/log/log0recv.cc mysql-5.6-5.6.33/storage/innobase/log/log0recv.cc --- mysql-5.6-5.6.27/storage/innobase/log/log0recv.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/log/log0recv.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -328,7 +328,7 @@ os_thread_ret_t DECLARE_THREAD(recv_writer_thread)( /*===============================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { @@ -742,7 +742,7 @@ /********************************************************//** Looks for the maximum consistent checkpoint from the log groups. @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t recv_find_max_checkpoint( /*=====================*/ @@ -827,6 +827,10 @@ fprintf(stderr, "InnoDB: No valid checkpoint found.\n" + "InnoDB: If you are attempting downgrade" + " from MySQL 5.7.9 or later,\n" + "InnoDB: please refer to " REFMAN + "upgrading-downgrading.html\n" "InnoDB: If this error appears when you are" " creating an InnoDB database,\n" "InnoDB: the problem may be that during" diff -Nru mysql-5.6-5.6.27/storage/innobase/mem/mem0dbg.cc mysql-5.6-5.6.33/storage/innobase/mem/mem0dbg.cc --- mysql-5.6-5.6.27/storage/innobase/mem/mem0dbg.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/mem/mem0dbg.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -248,7 +248,7 @@ mem_field_erase( /*============*/ byte* buf, /*!< in: memory field */ - ulint n __attribute__((unused))) + ulint n MY_ATTRIBUTE((unused))) /*!< in: how many bytes the user requested */ { byte* usr_buf; @@ -450,7 +450,7 @@ mem_heap_validate_or_print( /*=======================*/ mem_heap_t* heap, /*!< in: memory heap */ - byte* top __attribute__((unused)), + byte* top MY_ATTRIBUTE((unused)), /*!< in: calculate and validate only until this top pointer in the heap is reached, if this pointer is NULL, ignored */ diff -Nru mysql-5.6-5.6.27/storage/innobase/mtr/mtr0mtr.cc mysql-5.6-5.6.33/storage/innobase/mtr/mtr0mtr.cc --- mysql-5.6-5.6.27/storage/innobase/mtr/mtr0mtr.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/mtr/mtr0mtr.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -58,7 +58,7 @@ /*****************************************************************//** Releases the item in the slot given. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void mtr_memo_slot_release_func( /*=======================*/ @@ -105,7 +105,7 @@ Releases the mlocks and other objects stored in an mtr memo. They are released in the order opposite to which they were pushed to the memo. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void mtr_memo_pop_all( /*=============*/ @@ -395,7 +395,7 @@ /*===========*/ const byte* ptr, /*!< in: pointer from where to read */ ulint type, /*!< in: MLOG_1BYTE, MLOG_2BYTES, MLOG_4BYTES */ - mtr_t* mtr __attribute__((unused))) + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in: mini-transaction handle */ { ut_ad(mtr->state == MTR_ACTIVE); diff -Nru mysql-5.6-5.6.27/storage/innobase/os/os0file.cc mysql-5.6-5.6.33/storage/innobase/os/os0file.cc --- mysql-5.6-5.6.27/storage/innobase/os/os0file.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/os/os0file.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /*********************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Percona Inc. Portions of this file contain modifications contributed and copyrighted @@ -753,17 +753,19 @@ } } -/***********************************************************************//** -Creates a temporary file. This function is like tmpfile(3), but -the temporary file is created in the MySQL temporary directory. -@return temporary file handle, or NULL on error */ +/** Create a temporary file. This function is like tmpfile(3), but +the temporary file is created in the given parameter path. If the path +is null then it will create the file in the mysql server configuration +parameter (--tmpdir). +@param[in] path location for creating temporary file +@return temporary file handle, or NULL on error */ UNIV_INTERN FILE* -os_file_create_tmpfile(void) -/*========================*/ +os_file_create_tmpfile( + const char* path) { FILE* file = NULL; - int fd = innobase_mysql_tmpfile(); + int fd = innobase_mysql_tmpfile(path); ut_ad(!srv_read_only_mode); @@ -1467,11 +1469,11 @@ os_file_set_nocache( /*================*/ int fd /*!< in: file descriptor to alter */ - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const char* file_name /*!< in: used in the diagnostic message */ - __attribute__((unused)), - const char* operation_name __attribute__((unused))) + MY_ATTRIBUTE((unused)), + const char* operation_name MY_ATTRIBUTE((unused))) /*!< in: "open" or "create"; used in the diagnostic message */ { @@ -2351,7 +2353,7 @@ /*******************************************************************//** Does a synchronous read operation in Posix. @return number of bytes read, -1 if error */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ssize_t os_file_pread( /*==========*/ @@ -2462,7 +2464,7 @@ /*******************************************************************//** Does a synchronous write operation in Posix. @return number of bytes written, -1 if error */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ssize_t os_file_pwrite( /*===========*/ @@ -3628,7 +3630,7 @@ return(FALSE); } else if (!srv_read_only_mode) { /* Now check if tmpdir supports native aio ops. */ - fd = innobase_mysql_tmpfile(); + fd = innobase_mysql_tmpfile(NULL); if (fd < 0) { ib_logf(IB_LOG_LEVEL_WARN, diff -Nru mysql-5.6-5.6.27/storage/innobase/page/page0page.cc mysql-5.6-5.6.33/storage/innobase/page/page0page.cc --- mysql-5.6-5.6.27/storage/innobase/page/page0page.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/page/page0page.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -304,7 +304,7 @@ page_parse_create( /*==============*/ byte* ptr, /*!< in: buffer */ - byte* end_ptr __attribute__((unused)), /*!< in: buffer end */ + byte* end_ptr MY_ATTRIBUTE((unused)), /*!< in: buffer end */ ulint comp, /*!< in: nonzero=compact page format */ buf_block_t* block, /*!< in: block or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ diff -Nru mysql-5.6-5.6.27/storage/innobase/page/page0zip.cc mysql-5.6-5.6.33/storage/innobase/page/page0zip.cc --- mysql-5.6-5.6.27/storage/innobase/page/page0zip.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/page/page0zip.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -119,7 +119,7 @@ independently of any UNIV_ debugging conditions. */ #if defined UNIV_DEBUG || defined UNIV_ZIP_DEBUG # include -__attribute__((format (printf, 1, 2))) +MY_ATTRIBUTE((format (printf, 1, 2))) /**********************************************************************//** Report a failure to decompress or compress. @return number of characters printed */ @@ -738,8 +738,8 @@ void page_zip_free( /*==========*/ - void* opaque __attribute__((unused)), /*!< in: memory heap */ - void* address __attribute__((unused)))/*!< in: object to free */ + void* opaque MY_ATTRIBUTE((unused)), /*!< in: memory heap */ + void* address MY_ATTRIBUTE((unused)))/*!< in: object to free */ { } @@ -4769,7 +4769,8 @@ ulint size; ulint trailer_size; - ut_ad(ptr && end_ptr); + ut_ad(ptr != NULL); + ut_ad(end_ptr != NULL); ut_ad(!page == !page_zip); if (UNIV_UNLIKELY(ptr + (2 + 2) > end_ptr)) { diff -Nru mysql-5.6-5.6.27/storage/innobase/pars/lexyy.cc mysql-5.6-5.6.33/storage/innobase/pars/lexyy.cc --- mysql-5.6-5.6.27/storage/innobase/pars/lexyy.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/pars/lexyy.cc 2016-08-26 11:22:35.000000000 +0000 @@ -295,7 +295,7 @@ static int yy_did_buffer_switch_on_eof; void yyrestart (FILE *input_file ); -__attribute__((unused)) static void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +MY_ATTRIBUTE((unused)) static void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); static YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); @@ -916,7 +916,7 @@ #line 1 "pars0lex.l" /***************************************************************************** -Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1027,7 +1027,7 @@ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ -__attribute__((unused)) static int yylex_destroy (void ); +MY_ATTRIBUTE((unused)) static int yylex_destroy (void ); int yyget_debug (void ); @@ -2664,7 +2664,7 @@ * @param new_buffer The new input buffer. * */ - __attribute__((unused)) static void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) + MY_ATTRIBUTE((unused)) static void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body @@ -3042,7 +3042,7 @@ } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ -__attribute__((unused)) static int yylex_destroy (void) +MY_ATTRIBUTE((unused)) static int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ diff -Nru mysql-5.6-5.6.27/storage/innobase/pars/make_flex.sh mysql-5.6-5.6.33/storage/innobase/pars/make_flex.sh --- mysql-5.6-5.6.27/storage/innobase/pars/make_flex.sh 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/pars/make_flex.sh 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +# Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software @@ -33,15 +33,15 @@ s/'"$TMPFILE"'/'"$OUTFILE"'/; s/\(int offset = \)\((yy_c_buf_p) - (yytext_ptr)\);/\1(int)(\2);/; s/\(void yy\(restart\|_\(delete\|flush\)_buffer\)\)/static \1/; -s/\(void yy_switch_to_buffer\)/__attribute__((unused)) static \1/; -s/\(void yy\(push\|pop\)_buffer_state\)/__attribute__((unused)) static \1/; +s/\(void yy_switch_to_buffer\)/MY_ATTRIBUTE((unused)) static \1/; +s/\(void yy\(push\|pop\)_buffer_state\)/MY_ATTRIBUTE((unused)) static \1/; s/\(YY_BUFFER_STATE yy_create_buffer\)/static \1/; -s/\(\(int\|void\) yy[gs]et_\)/__attribute__((unused)) static \1/; +s/\(\(int\|void\) yy[gs]et_\)/MY_ATTRIBUTE((unused)) static \1/; s/\(void \*\?yy\(\(re\)\?alloc\|free\)\)/static \1/; s/\(extern \)\?\(int yy\(leng\|lineno\|_flex_debug\)\)/static \2/; -s/\(int yylex_destroy\)/__attribute__((unused)) static \1/; +s/\(int yylex_destroy\)/MY_ATTRIBUTE((unused)) static \1/; s/\(extern \)\?\(int yylex \)/UNIV_INTERN \2/; -s/^\(\(FILE\|char\) *\* *yyget\)/__attribute__((unused)) static \1/; +s/^\(\(FILE\|char\) *\* *yyget\)/MY_ATTRIBUTE((unused)) static \1/; s/^\(extern \)\?\(\(FILE\|char\) *\* *yy\)/static \2/; ' < $TMPFILE >> $OUTFILE diff -Nru mysql-5.6-5.6.27/storage/innobase/pars/pars0pars.cc mysql-5.6-5.6.33/storage/innobase/pars/pars0pars.cc --- mysql-5.6-5.6.27/storage/innobase/pars/pars0pars.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/pars/pars0pars.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1925,7 +1925,7 @@ sym_node_t* column_defs, /*!< in: list of column names */ sym_node_t* compact, /* in: non-NULL if COMPACT table. */ sym_node_t* block_size, /* in: block size (can be NULL) */ - void* not_fit_in_memory __attribute__((unused))) + void* not_fit_in_memory MY_ATTRIBUTE((unused))) /*!< in: a non-NULL pointer means that this is a table which in simulations should be simulated as not fitting @@ -2141,7 +2141,7 @@ que_fork_t* pars_stored_procedure_call( /*=======================*/ - sym_node_t* sym_node __attribute__((unused))) + sym_node_t* sym_node MY_ATTRIBUTE((unused))) /*!< in: stored procedure name */ { ut_error; @@ -2201,7 +2201,7 @@ void yyerror( /*====*/ - const char* s __attribute__((unused))) + const char* s MY_ATTRIBUTE((unused))) /*!< in: error message string */ { ut_ad(s); diff -Nru mysql-5.6-5.6.27/storage/innobase/rem/rem0cmp.cc mysql-5.6-5.6.33/storage/innobase/rem/rem0cmp.cc --- mysql-5.6-5.6.27/storage/innobase/rem/rem0cmp.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/rem/rem0cmp.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -75,7 +75,7 @@ completely matched fields; when function returns, contains the value for current comparison */ - __attribute__((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); #endif /* UNIV_DEBUG */ /*************************************************************//** This function is used to compare two data fields for which the data type @@ -659,7 +659,10 @@ in current field */ int ret; /* return value */ - ut_ad(dtuple && rec && matched_fields && matched_bytes); + ut_ad(dtuple != NULL); + ut_ad(rec != NULL); + ut_ad(matched_fields != NULL); + ut_ad(matched_bytes != NULL); ut_ad(dtuple_check_typed(dtuple)); ut_ad(rec_offs_validate(rec, NULL, offsets)); @@ -920,7 +923,7 @@ @retval 1 if rec1 field is greater than rec2 @retval -1 if rec1 field is less than rec2 @retval 0 if rec1 field equals to rec2 */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) int cmp_rec_rec_simple_field( /*=====================*/ @@ -1139,7 +1142,9 @@ int ret = 0; /* return value */ ulint comp; - ut_ad(rec1 && rec2 && index); + ut_ad(rec1 != NULL); + ut_ad(rec2 != NULL); + ut_ad(index != NULL); ut_ad(rec_offs_validate(rec1, index, offsets1)); ut_ad(rec_offs_validate(rec2, index, offsets2)); ut_ad(rec_offs_comp(offsets1) == rec_offs_comp(offsets2)); @@ -1375,7 +1380,9 @@ int ret; /* return value */ ulint cur_field; /* current field number */ - ut_ad(dtuple && rec && matched_fields); + ut_ad(dtuple != NULL); + ut_ad(rec != NULL); + ut_ad(matched_fields != NULL); ut_ad(dtuple_check_typed(dtuple)); ut_ad(rec_offs_validate(rec, NULL, offsets)); diff -Nru mysql-5.6-5.6.27/storage/innobase/rem/rem0rec.cc mysql-5.6-5.6.33/storage/innobase/rem/rem0rec.cc --- mysql-5.6-5.6.27/storage/innobase/rem/rem0rec.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/rem/rem0rec.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -241,7 +241,7 @@ Determine the offset to each field in a leaf-page record in ROW_FORMAT=COMPACT. This is a special case of rec_init_offsets() and rec_get_offsets_func(). */ -UNIV_INLINE __attribute__((nonnull)) +UNIV_INLINE MY_ATTRIBUTE((nonnull)) void rec_init_offsets_comp_ordinary( /*===========================*/ @@ -785,7 +785,7 @@ /**********************************************************//** Determines the size of a data tuple prefix in ROW_FORMAT=COMPACT. @return total size */ -UNIV_INLINE __attribute__((warn_unused_result, nonnull(1,2))) +UNIV_INLINE MY_ATTRIBUTE((warn_unused_result, nonnull(1,2))) ulint rec_get_converted_size_comp_prefix_low( /*===================================*/ @@ -1130,7 +1130,7 @@ /*********************************************************//** Builds a ROW_FORMAT=COMPACT record out of a data tuple. */ -UNIV_INLINE __attribute__((nonnull)) +UNIV_INLINE MY_ATTRIBUTE((nonnull)) void rec_convert_dtuple_to_rec_comp( /*===========================*/ @@ -1338,7 +1338,9 @@ { rec_t* rec; - ut_ad(buf && index && dtuple); + ut_ad(buf != NULL); + ut_ad(index != NULL); + ut_ad(dtuple != NULL); ut_ad(dtuple_validate(dtuple)); ut_ad(dtuple_check_typed(dtuple)); diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0ftsort.cc mysql-5.6-5.6.33/storage/innobase/row/row0ftsort.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0ftsort.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0ftsort.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2010, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -220,6 +220,9 @@ common_info->merge_event = os_event_create(); common_info->opt_doc_id_size = opt_doc_id_size; + ut_ad(trx->mysql_thd != NULL); + const char* path = thd_innodb_tmpdir(trx->mysql_thd); + /* There will be FTS_NUM_AUX_INDEX number of "sort buckets" for each parallel sort thread. Each "sort bucket" holds records for a particular "FTS index partition" */ @@ -241,8 +244,8 @@ psort_info[j].merge_buf[i] = row_merge_buf_create( dup->index); - if (row_merge_file_create(psort_info[j].merge_file[i]) - < 0) { + if (row_merge_file_create(psort_info[j].merge_file[i], + path) < 0) { goto func_exit; } @@ -509,8 +512,18 @@ dfield_dup(field, buf->heap); /* One variable length column, word with its lenght less than - fts_max_token_size, add one extra size and one extra byte */ - cur_len += 2; + fts_max_token_size, add one extra size and one extra byte. + + Since the max length for FTS token now is larger than 255, + so we will need to signify length byte itself, so only 1 to 128 + bytes can be used for 1 bytes, larger than that 2 bytes. */ + if (t_str.f_len < 128) { + /* Extra size is one byte. */ + cur_len += 2; + } else { + /* Extra size is two bytes. */ + cur_len += 3; + } /* Reserve one byte for the end marker of row_merge_block_t. */ if (buf->total_size + data_size[idx] + cur_len @@ -610,6 +623,11 @@ ulint retried = 0; dberr_t error = DB_SUCCESS; + ut_ad(psort_info->psort_common->trx->mysql_thd != NULL); + + const char* path = thd_innodb_tmpdir( + psort_info->psort_common->trx->mysql_thd); + ut_ad(psort_info); buf = psort_info->merge_buf; @@ -839,7 +857,7 @@ continue; } - tmpfd[i] = row_merge_file_create_low(); + tmpfd[i] = row_merge_file_create_low(path); if (tmpfd[i] < 0) { error = DB_OUT_OF_MEMORY; goto func_exit; @@ -968,7 +986,7 @@ /********************************************************************//** Insert processed FTS data to auxillary index tables. @return DB_SUCCESS if insertion runs fine */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t row_merge_write_fts_word( /*=====================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0import.cc mysql-5.6-5.6.33/storage/innobase/row/row0import.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0import.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0import.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -2068,8 +2068,20 @@ return(IMPORT_PAGE_STATUS_CORRUPTED); } else if (offset > 0 && page_get_page_no(page) == 0) { - const byte* b = page; - const byte* e = b + m_page_size; + ulint checksum; + + checksum = mach_read_from_4(page + FIL_PAGE_SPACE_OR_CHKSUM); + if (checksum != 0) { + /* Checksum check passed in buf_page_is_corrupted(). */ + ib_logf(IB_LOG_LEVEL_WARN, + "%s: Page %lu checksum %lu should be zero.", + m_filepath, (ulong) (offset / m_page_size), + checksum); + } + + const byte* b = page + FIL_PAGE_OFFSET; + const byte* e = page + m_page_size + - FIL_PAGE_END_LSN_OLD_CHKSUM; /* If the page number is zero and offset > 0 then the entire page MUST consist of zeroes. If not then @@ -2167,7 +2179,7 @@ Clean up after import tablespace failure, this function will acquire the dictionary latches on behalf of the transaction if the transaction hasn't already acquired them. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_import_discard_changes( /*=======================*/ @@ -2218,7 +2230,7 @@ /*****************************************************************//** Clean up after import tablespace. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_cleanup( /*===============*/ @@ -2253,7 +2265,7 @@ /*****************************************************************//** Report error during tablespace import. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_error( /*=============*/ @@ -2281,7 +2293,7 @@ Adjust the root page index node and leaf node segment headers, update with the new space id. For all the table's secondary indexes. @return error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_adjust_root_pages_of_secondary_indexes( /*==============================================*/ @@ -2397,7 +2409,7 @@ /*****************************************************************//** Ensure that dict_sys->row_id exceeds SELECT MAX(DB_ROW_ID). @return error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_set_sys_max_row_id( /*==========================*/ @@ -2547,7 +2559,7 @@ /*********************************************************************//** Write the meta data (index user fields) config file. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_cfg_read_index_fields( /*=============================*/ @@ -2630,7 +2642,7 @@ Read the index names and root page numbers of the indexes and set the values. Row format [root_page_no, len of str, str ... ] @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_read_index_data( /*=======================*/ @@ -2825,7 +2837,7 @@ /*********************************************************************//** Read the meta data (table columns) config file. Deserialise the contents of dict_col_t structure, along with the column name. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_read_columns( /*====================*/ @@ -2950,7 +2962,7 @@ /*****************************************************************//** Read the contents of the .cfg file. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_read_v1( /*===============*/ @@ -3116,7 +3128,7 @@ /** Read the contents of the .cfg file. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_read_meta_data( /*======================*/ @@ -3159,7 +3171,7 @@ /** Read the contents of the .cfg file. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_import_read_cfg( /*================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0ins.cc mysql-5.6-5.6.33/storage/innobase/row/row0ins.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0ins.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0ins.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -224,7 +224,7 @@ in the index. This situation can occur if the delete-marked record is kept in the index for consistent reads. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_sec_index_entry_by_modify( /*==============================*/ @@ -319,7 +319,7 @@ existing record in the index. This situation can occur if the delete marked record is kept in the index for consistent reads. @return DB_SUCCESS, DB_FAIL, or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_clust_index_entry_by_modify( /*================================*/ @@ -427,7 +427,7 @@ Returns the number of ancestor UPDATE or DELETE nodes of a cascaded update/delete node. @return number of ancestors */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ulint row_ins_cascade_n_ancestors( /*========================*/ @@ -453,7 +453,7 @@ can also be 0 if no foreign key fields changed; the returned value is ULINT_UNDEFINED if the column type in the child table is too short to fit the new value in the parent table: that means the update fails */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ulint row_ins_cascade_calc_update_vec( /*============================*/ @@ -926,7 +926,7 @@ and the constraint had an ON DELETE or ON UPDATE condition which was not RESTRICT. @return DB_SUCCESS, DB_LOCK_WAIT, or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_foreign_check_on_constraint( /*================================*/ @@ -1747,7 +1747,7 @@ sets shared locks which lock either the success or the failure of a constraint. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_check_foreign_constraints( /*==============================*/ @@ -1888,7 +1888,7 @@ whether a uniqueness violation has occurred for the key value of the entry. Set shared locks on possible duplicate records. @return DB_SUCCESS, DB_DUPLICATE_KEY, or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_scan_sec_index_for_duplicate( /*=================================*/ @@ -2030,7 +2030,7 @@ @retval DB_SUCCESS_LOCKED_REC when rec is an exact match of entry or a newer version of entry (the entry should not be inserted) @retval DB_DUPLICATE_KEY when entry is a duplicate of rec */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_duplicate_online( /*=====================*/ @@ -2071,7 +2071,7 @@ @retval DB_SUCCESS_LOCKED_REC when rec is an exact match of entry or a newer version of entry (the entry should not be inserted) @retval DB_DUPLICATE_KEY when entry is a duplicate of rec */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_duplicate_error_in_clust_online( /*====================================*/ @@ -2114,7 +2114,7 @@ record @retval DB_SUCCESS_LOCKED_REC if an exact match of the record was found in online table rebuild (flags & (BTR_KEEP_SYS_FLAG | BTR_NO_LOCKING_FLAG)) */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_duplicate_error_in_clust( /*=============================*/ @@ -2532,7 +2532,7 @@ /***************************************************************//** Starts a mini-transaction and checks if the index will be dropped. @return true if the index is to be dropped */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_ins_sec_mtr_start_and_check_if_aborted( /*=======================================*/ @@ -2973,7 +2973,7 @@ /***********************************************************//** Sets the values of the dtuple fields in entry from the values of appropriate columns in row. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_ins_index_entry_set_vals( /*=========================*/ @@ -3026,7 +3026,7 @@ Inserts a single index entry to the table. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins_index_entry_step( /*=====================*/ @@ -3149,7 +3149,7 @@ Inserts a row to a table. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_ins( /*====*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0log.cc mysql-5.6-5.6.33/storage/innobase/row/row0log.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0log.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0log.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -194,13 +194,30 @@ or by index->lock X-latch only */ row_log_buf_t head; /*!< reader context; protected by MDL only; modifiable by row_log_apply_ops() */ + const char* path; /*!< where to create temporary file during + log operation */ }; +/** Create the file or online log if it does not exist. +@param[in,out] log online rebuild log +@return file descriptor. */ +static MY_ATTRIBUTE((warn_unused_result)) +int +row_log_tmpfile( + row_log_t* log) +{ + DBUG_ENTER("row_log_tmpfile"); + if (log->fd < 0) { + log->fd = row_merge_file_create_low(log->path); + } + + DBUG_RETURN(log->fd); +} /** Allocate the memory for the log buffer. @param[in,out] log_buf Buffer used for log operation @return TRUE if success, false if not */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) bool row_log_block_allocate( row_log_buf_t& log_buf) @@ -340,6 +357,12 @@ log->tail.buf, avail_size); } UNIV_MEM_ASSERT_RW(log->tail.block, srv_sort_buf_size); + + if (row_log_tmpfile(log) < 0) { + log->error = DB_OUT_OF_MEMORY; + goto err_exit; + } + ret = os_file_write( "(modification log)", OS_FILE_FROM_FD(log->fd), @@ -384,7 +407,7 @@ /******************************************************//** Starts logging an operation to a table that is being rebuilt. @return pointer to log, or NULL if no logging is necessary */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) byte* row_log_table_open( /*===============*/ @@ -419,7 +442,7 @@ /******************************************************//** Stops logging an operation to a table that is being rebuilt. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_log_table_close_func( /*=====================*/ @@ -450,6 +473,12 @@ log->tail.buf, avail); } UNIV_MEM_ASSERT_RW(log->tail.block, srv_sort_buf_size); + + if (row_log_tmpfile(log) < 0) { + log->error = DB_OUT_OF_MEMORY; + goto err_exit; + } + ret = os_file_write( "(modification log)", OS_FILE_FROM_FD(log->fd), @@ -469,6 +498,7 @@ log->tail.total += size; UNIV_MEM_INVALID(log->tail.buf, sizeof log->tail.buf); +err_exit: mutex_exit(&log->mutex); } @@ -583,7 +613,7 @@ &old_pk_extra_size); ut_ad(old_pk_extra_size < 0x100); - mrec_size = 4 + old_pk_size; + mrec_size = 6 + old_pk_size; /* Log enough prefix of the BLOB unless both the old and new table are in COMPACT or REDUNDANT format, @@ -613,8 +643,8 @@ *b++ = static_cast(old_pk_extra_size); /* Log the size of external prefix we saved */ - mach_write_to_2(b, ext_size); - b += 2; + mach_write_to_4(b, ext_size); + b += 4; rec_convert_dtuple_to_temp( b + old_pk_extra_size, new_index, @@ -782,7 +812,7 @@ /******************************************************//** Logs an insert or update to a table that is being rebuilt. */ -static __attribute__((nonnull(1,2,3))) +static MY_ATTRIBUTE((nonnull(1,2,3))) void row_log_table_low( /*==============*/ @@ -1282,7 +1312,7 @@ /******************************************************//** Converts a log record to a table row. @return converted row, or NULL if the conversion fails */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const dtuple_t* row_log_table_apply_convert_mrec( /*=============================*/ @@ -1436,7 +1466,7 @@ /******************************************************//** Replays an insert operation on a table that was rebuilt. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_log_table_apply_insert_low( /*===========================*/ @@ -1454,6 +1484,7 @@ dtuple_t* entry; const row_log_t*log = dup->index->online_log; dict_index_t* index = dict_table_get_first_index(log->table); + ulint n_index = 0; ut_ad(dtuple_validate(row)); ut_ad(trx_id); @@ -1489,6 +1520,8 @@ } do { + n_index++; + if (!(index = dict_table_get_next_index(index))) { break; } @@ -1501,6 +1534,12 @@ error = row_ins_sec_index_entry_low( flags, BTR_MODIFY_TREE, index, offsets_heap, heap, entry, trx_id, thr); + + /* Report correct index name for duplicate key error. */ + if (error == DB_DUPLICATE_KEY) { + thr_get_trx(thr)->error_key_num = n_index; + } + } while (error == DB_SUCCESS); return(error); @@ -1509,7 +1548,7 @@ /******************************************************//** Replays an insert operation on a table that was rebuilt. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_log_table_apply_insert( /*=======================*/ @@ -1561,7 +1600,7 @@ /******************************************************//** Deletes a record from a table that is being rebuilt. @return DB_SUCCESS or error code */ -static __attribute__((nonnull(1, 2, 4, 5), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1, 2, 4, 5), warn_unused_result)) dberr_t row_log_table_apply_delete_low( /*===========================*/ @@ -1659,7 +1698,7 @@ /******************************************************//** Replays a delete operation on a table that was rebuilt. @return DB_SUCCESS or error code */ -static __attribute__((nonnull(1, 3, 4, 5, 6, 7), warn_unused_result)) +static MY_ATTRIBUTE((nonnull(1, 3, 4, 5, 6, 7), warn_unused_result)) dberr_t row_log_table_apply_delete( /*=======================*/ @@ -1781,7 +1820,7 @@ /******************************************************//** Replays an update operation on a table that was rebuilt. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_log_table_apply_update( /*=======================*/ @@ -1808,6 +1847,7 @@ mtr_t mtr; btr_pcur_t pcur; dberr_t error; + ulint n_index = 0; ut_ad(dtuple_get_n_fields_cmp(old_pk) == dict_index_get_n_unique(index)); @@ -2083,6 +2123,8 @@ break; } + n_index++; + if (index->type & DICT_FTS) { continue; } @@ -2126,6 +2168,11 @@ BTR_MODIFY_TREE, index, offsets_heap, heap, entry, trx_id, thr); + /* Report correct index name for duplicate key error. */ + if (error == DB_DUPLICATE_KEY) { + thr_get_trx(thr)->error_key_num = n_index; + } + mtr_start(&mtr); } @@ -2136,7 +2183,7 @@ Applies an operation to a table that was rebuilt. @return NULL on failure (mrec corruption) or when out of data; pointer to next record on success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const mrec_t* row_log_table_apply_op( /*===================*/ @@ -2221,14 +2268,14 @@ break; case ROW_T_DELETE: - /* 1 (extra_size) + 2 (ext_size) + at least 1 (payload) */ - if (mrec + 4 >= mrec_end) { + /* 1 (extra_size) + 4 (ext_size) + at least 1 (payload) */ + if (mrec + 6 >= mrec_end) { return(NULL); } extra_size = *mrec++; - ext_size = mach_read_from_2(mrec); - mrec += 2; + ext_size = mach_read_from_4(mrec); + mrec += 4; ut_ad(mrec < mrec_end); /* We assume extra_size < 0x100 for the PRIMARY KEY prefix. @@ -2427,7 +2474,7 @@ /******************************************************//** Applies operations to a table was rebuilt. @return DB_SUCCESS, or error code on failure */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_log_table_apply_ops( /*====================*/ @@ -2519,7 +2566,8 @@ if (index->online_log->head.blocks) { #ifdef HAVE_FTRUNCATE /* Truncate the file in order to save space. */ - if (ftruncate(index->online_log->fd, 0) == -1) { + if (index->online_log->fd != -1 + && ftruncate(index->online_log->fd, 0) == -1) { perror("ftruncate"); } #endif /* HAVE_FTRUNCATE */ @@ -2835,8 +2883,9 @@ const dtuple_t* add_cols, /*!< in: default values of added columns, or NULL */ - const ulint* col_map)/*!< in: mapping of old column + const ulint* col_map,/*!< in: mapping of old column numbers to new ones, or NULL if !table */ + const char* path) /*!< in: where to create temporary file */ { row_log_t* log; DBUG_ENTER("row_log_allocate"); @@ -2855,11 +2904,7 @@ DBUG_RETURN(false); } - log->fd = row_merge_file_create_low(); - if (log->fd < 0) { - ut_free(log); - DBUG_RETURN(false); - } + log->fd = -1; mutex_create(index_online_log_key, &log->mutex, SYNC_INDEX_ONLINE_LOG); log->blobs = NULL; @@ -2874,6 +2919,7 @@ log->tail.block = log->head.block = NULL; log->head.blocks = log->head.bytes = 0; log->head.total = 0; + log->path = path; dict_index_set_online_status(index, ONLINE_INDEX_CREATION); index->online_log = log; @@ -2925,7 +2971,7 @@ /******************************************************//** Applies an operation to a secondary index that was being created. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_log_apply_op_low( /*=================*/ @@ -3152,7 +3198,7 @@ Applies an operation to a secondary index that was being created. @return NULL on failure (mrec corruption) or when out of data; pointer to next record on success */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) const mrec_t* row_log_apply_op( /*=============*/ @@ -3277,7 +3323,7 @@ /******************************************************//** Applies operations to a secondary index that was being created. @return DB_SUCCESS, or error code on failure */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t row_log_apply_ops( /*==============*/ @@ -3351,7 +3397,8 @@ if (index->online_log->head.blocks) { #ifdef HAVE_FTRUNCATE /* Truncate the file in order to save space. */ - if (ftruncate(index->online_log->fd, 0) == -1) { + if (index->online_log->fd != -1 + && ftruncate(index->online_log->fd, 0) == -1) { perror("ftruncate"); } #endif /* HAVE_FTRUNCATE */ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0merge.cc mysql-5.6-5.6.33/storage/innobase/row/row0merge.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0merge.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0merge.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -70,7 +70,7 @@ #ifdef UNIV_DEBUG /******************************************************//** Display a merge tuple. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_merge_tuple_print( /*==================*/ @@ -105,7 +105,7 @@ /******************************************************//** Encode an index record. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_merge_buf_encode( /*=================*/ @@ -142,7 +142,7 @@ /******************************************************//** Allocate a sort buffer. @return own: sort buffer */ -static __attribute__((malloc, nonnull)) +static MY_ATTRIBUTE((malloc, nonnull)) row_merge_buf_t* row_merge_buf_create_low( /*=====================*/ @@ -642,7 +642,7 @@ /*************************************************************//** Compare two tuples. @return 1, 0, -1 if a is greater, equal, less, respectively, than b */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) int row_merge_tuple_cmp( /*================*/ @@ -721,7 +721,7 @@ /**********************************************************************//** Merge sort the tuple buffer in main memory. */ -static __attribute__((nonnull(4,5))) +static MY_ATTRIBUTE((nonnull(4,5))) void row_merge_tuple_sort( /*=================*/ @@ -1241,47 +1241,95 @@ return(&block[0]); } -/********************************************************************//** -Reads clustered index of the table and create temporary files +/** Create a temporary file if it has not been created already. +@param[in,out] tmpfd temporary file handle +@param[in] path path to create temporary file +@return file descriptor, or -1 on failure */ +static MY_ATTRIBUTE((warn_unused_result)) +int +row_merge_tmpfile_if_needed( + int* tmpfd, + const char* path) +{ + if (*tmpfd < 0) { + *tmpfd = row_merge_file_create_low(path); + } + + return(*tmpfd); +} + +/** Create a temporary file for merge sort if it was not created already. +@param[in,out] file merge file structure +@param[in,out] tmpfd temporary file structure +@param[in] nrec number of records in the file +@param[in] path path to create temporary files +@return file descriptor, or -1 on failure */ +static MY_ATTRIBUTE((warn_unused_result)) +int +row_merge_file_create_if_needed( + merge_file_t* file, + int* tmpfd, + ulint nrec, + const char* path) +{ + ut_ad(file->fd < 0 || *tmpfd >=0); + if (file->fd < 0 && row_merge_file_create(file, path) >= 0) { + if (row_merge_tmpfile_if_needed(tmpfd, path) < 0) { + return(-1); + } + + file->n_rec = nrec; + } + + ut_ad(file->fd < 0 || *tmpfd >=0); + return(file->fd); +} + +/** Reads clustered index of the table and create temporary files containing the index entries for the indexes to be built. -@return DB_SUCCESS or error */ -static __attribute__((nonnull(1,2,3,4,6,9,10,16), warn_unused_result)) +@param[in] trx transaction +@param[in,out] table MySQL table object, for reporting erroneous + records +@param[in] old_table table where rows are read from +@param[in] new_table table where indexes are created; identical to + old_table unless creating a PRIMARY KEY +@param[in] online true if creating indexes online +@param[in] index indexes to be created +@param[in] fts_sort_idx full-text index to be created, or NULL +@param[in] psort_info parallel sort info for fts_sort_idx creation, + or NULL +@param[in] files temporary files +@param[in] key_numbers MySQL key numbers to create +@param[in] n_index number of indexes to create +@param[in] add_cols default values of added columns, or NULL +@param[in] col_map mapping of old column numbers to new ones, or + NULL if old_table == new_table +@param[in] add_autoinc number of added AUTO_INCREMENT columns, or + ULINT_UNDEFINED if none is added +@param[in,out] sequence autoinc sequence +@param[in,out] block file buffer +@param[in,out] tmpfd temporary file handle +return DB_SUCCESS or error */ +static MY_ATTRIBUTE((nonnull(1,2,3,4,6,9,10,16), warn_unused_result)) dberr_t row_merge_read_clustered_index( -/*===========================*/ - trx_t* trx, /*!< in: transaction */ - struct TABLE* table, /*!< in/out: MySQL table object, - for reporting erroneous records */ - const dict_table_t* old_table,/*!< in: table where rows are - read from */ - const dict_table_t* new_table,/*!< in: table where indexes are - created; identical to old_table - unless creating a PRIMARY KEY */ - bool online, /*!< in: true if creating indexes - online */ - dict_index_t** index, /*!< in: indexes to be created */ + trx_t* trx, + struct TABLE* table, + const dict_table_t* old_table, + const dict_table_t* new_table, + bool online, + dict_index_t** index, dict_index_t* fts_sort_idx, - /*!< in: full-text index to be created, - or NULL */ fts_psort_t* psort_info, - /*!< in: parallel sort info for - fts_sort_idx creation, or NULL */ - merge_file_t* files, /*!< in: temporary files */ + merge_file_t* files, const ulint* key_numbers, - /*!< in: MySQL key numbers to create */ - ulint n_index,/*!< in: number of indexes to create */ + ulint n_index, const dtuple_t* add_cols, - /*!< in: default values of - added columns, or NULL */ - const ulint* col_map,/*!< in: mapping of old column - numbers to new ones, or NULL - if old_table == new_table */ + const ulint* col_map, ulint add_autoinc, - /*!< in: number of added - AUTO_INCREMENT column, or - ULINT_UNDEFINED if none is added */ - ib_sequence_t& sequence,/*!< in/out: autoinc sequence */ - row_merge_block_t* block) /*!< in/out: file buffer */ + ib_sequence_t& sequence, + row_merge_block_t* block, + int* tmpfd) { dict_index_t* clust_index; /* Clustered index */ mem_heap_t* row_heap; /* Heap memory to create @@ -1313,6 +1361,9 @@ DEBUG_FTS_SORT_PRINT("FTS_SORT: Start Create Index\n"); #endif + ut_ad(trx->mysql_thd != NULL); + const char* path = thd_innodb_tmpdir(trx->mysql_thd); + /* Create and initialize memory for record buffers */ merge_buf = static_cast( @@ -1777,13 +1828,25 @@ dict_index_get_lock(buf->index)); } - row_merge_buf_write(buf, file, block); + if (buf->n_tuples > 0) { - if (!row_merge_write(file->fd, file->offset++, - block)) { - err = DB_TEMP_FILE_WRITE_FAILURE; - trx->error_key_num = i; - break; + if (row_merge_file_create_if_needed( + file, tmpfd, buf->n_tuples, path) < 0) { + err = DB_OUT_OF_MEMORY; + trx->error_key_num = i; + break; + } + + ut_ad(file->n_rec > 0); + + row_merge_buf_write(buf, file, block); + + if (!row_merge_write(file->fd, file->offset++, + block)) { + err = DB_TEMP_FILE_WRITE_FAILURE; + trx->error_key_num = i; + break; + } } UNIV_MEM_INVALID(&block[0], srv_sort_buf_size); @@ -1827,6 +1890,7 @@ func_exit: mtr_commit(&mtr); + mem_heap_free(row_heap); if (nonnull) { @@ -1922,7 +1986,8 @@ if (max_doc_id && err == DB_SUCCESS) { /* Sync fts cache for other fts indexes to keep all fts indexes consistent in sync_doc_id. */ - err = fts_sync_table(const_cast(new_table)); + err = fts_sync_table(const_cast(new_table), + false, true, false); if (err == DB_SUCCESS) { fts_update_next_doc_id( @@ -1963,7 +2028,7 @@ /*************************************************************//** Merge two blocks of records on disk and write a bigger block. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_merge_blocks( /*=============*/ @@ -2074,7 +2139,7 @@ /*************************************************************//** Copy a block of index entries. @return TRUE on success, FALSE on failure */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ibool row_merge_blocks_copy( /*==================*/ @@ -2147,7 +2212,7 @@ /*************************************************************//** Merge disk files. @return DB_SUCCESS or error code */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) dberr_t row_merge( /*======*/ @@ -2333,7 +2398,7 @@ /*************************************************************//** Copy externally stored columns to the data tuple. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_merge_copy_blobs( /*=================*/ @@ -2378,7 +2443,7 @@ Read sorted file containing index data tuples and insert these data tuples to the index @return DB_SUCCESS or error number */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_merge_insert_index_tuples( /*==========================*/ @@ -3039,14 +3104,15 @@ trx_free_for_background(trx); } -/*********************************************************************//** -Creates temporary merge files, and if UNIV_PFS_IO defined, register -the file descriptor with Performance Schema. -@return file descriptor, or -1 on failure */ + +/** Create temporary merge files in the given paramater path, and if +UNIV_PFS_IO defined, register the file descriptor with Performance Schema. +@param[in] path location for creating temporary merge files. +@return File descriptor */ UNIV_INTERN int -row_merge_file_create_low(void) -/*===========================*/ +row_merge_file_create_low( + const char* path) { int fd; #ifdef UNIV_PFS_IO @@ -3060,7 +3126,7 @@ "Innodb Merge Temp File", __FILE__, __LINE__); #endif - fd = innobase_mysql_tmpfile(); + fd = innobase_mysql_tmpfile(path); #ifdef UNIV_PFS_IO register_pfs_file_open_end(locker, fd); #endif @@ -3073,16 +3139,18 @@ return(fd); } -/*********************************************************************//** -Create a merge file. + +/** Create a merge file in the given location. +@param[out] merge_file merge file structure +@param[in] path location for creating temporary file @return file descriptor, or -1 on failure */ UNIV_INTERN int row_merge_file_create( -/*==================*/ - merge_file_t* merge_file) /*!< out: merge file structure */ + merge_file_t* merge_file, + const char* path) { - merge_file->fd = row_merge_file_create_low(); + merge_file->fd = row_merge_file_create_low(path); merge_file->offset = 0; merge_file->n_rec = 0; @@ -3388,7 +3456,7 @@ /*********************************************************************//** Create and execute a query graph for creating an index. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_merge_create_index_graph( /*=========================*/ @@ -3598,10 +3666,6 @@ } for (i = 0; i < n_indexes; i++) { - if (row_merge_file_create(&merge_files[i]) < 0) { - error = DB_OUT_OF_MEMORY; - goto func_exit; - } if (indexes[i]->type & DICT_FTS) { ibool opt_doc_id_size = FALSE; @@ -3630,13 +3694,6 @@ } } - tmpfd = row_merge_file_create_low(); - - if (tmpfd < 0) { - error = DB_OUT_OF_MEMORY; - goto func_exit; - } - /* Reset the MySQL row buffer that is used when reporting duplicate keys. */ innobase_rec_reset(table); @@ -3648,7 +3705,7 @@ trx, table, old_table, new_table, online, indexes, fts_sort_idx, psort_info, merge_files, key_numbers, n_indexes, add_cols, col_map, - add_autoinc, sequence, block); + add_autoinc, sequence, block, &tmpfd); if (error != DB_SUCCESS) { @@ -3729,7 +3786,7 @@ #ifdef FTS_INTERNAL_DIAG_PRINT DEBUG_FTS_SORT_PRINT("FTS_SORT: Complete Insert\n"); #endif - } else { + } else if (merge_files[i].fd != -1) { row_merge_dup_t dup = { sort_idx, table, col_map, 0}; diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0mysql.cc mysql-5.6-5.6.33/storage/innobase/row/row0mysql.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0mysql.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0mysql.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1419,9 +1419,12 @@ } /* Difference between Doc IDs are restricted within - 4 bytes integer. See fts_get_encoded_len() */ + 4 bytes integer. See fts_get_encoded_len(). Consecutive + doc_ids difference should not exceed + FTS_DOC_ID_MAX_STEP value. */ - if (doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) { + if (next_doc_id > 1 + && doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) { fprintf(stderr, "InnoDB: Doc ID " UINT64PF " is too" " big. Its difference with largest" @@ -1678,7 +1681,8 @@ trx_t* trx = prebuilt->trx; ulint fk_depth = 0; - ut_ad(prebuilt && trx); + ut_ad(prebuilt != NULL); + ut_ad(trx != NULL); UT_NOT_USED(mysql_rec); if (prebuilt->table->ibd_file_missing) { @@ -1871,7 +1875,8 @@ btr_pcur_t* clust_pcur = &prebuilt->clust_pcur; trx_t* trx = prebuilt->trx; - ut_ad(prebuilt && trx); + ut_ad(prebuilt != NULL); + ut_ad(trx != NULL); if (UNIV_UNLIKELY (!srv_locks_unsafe_for_binlog @@ -2671,6 +2676,10 @@ return(n_tables + n_tables_dropped); } + DBUG_EXECUTE_IF("row_drop_tables_in_background_sleep", + os_thread_sleep(5000000); + ); + table = dict_table_open_on_name(drop->table_name, FALSE, FALSE, DICT_ERR_IGNORE_NONE); @@ -2681,6 +2690,16 @@ goto already_dropped; } + if (!table->to_be_dropped) { + /* There is a scenario: the old table is dropped + just after it's added into drop list, and new + table with the same name is created, then we try + to drop the new table in background. */ + dict_table_close(table, FALSE, FALSE); + + goto already_dropped; + } + ut_a(!table->can_be_evicted); dict_table_close(table, FALSE, FALSE); @@ -3940,6 +3959,13 @@ } } + + DBUG_EXECUTE_IF("row_drop_table_add_to_background", + row_add_table_to_background_drop_list(table->name); + err = DB_SUCCESS; + goto funct_exit; + ); + /* TODO: could we replace the counter n_foreign_key_checks_running with lock checks on the table? Acquire here an exclusive lock on the table, and rewrite lock0lock.cc and the lock wait in srv0srv.cc so that @@ -4473,7 +4499,7 @@ Drop all foreign keys in a database, see Bug#18942. Called at the end of row_drop_database_for_mysql(). @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t drop_all_foreign_keys_in_db( /*========================*/ @@ -4556,6 +4582,19 @@ row_mysql_lock_data_dictionary(trx); while ((table_name = dict_get_first_table_name_in_db(name))) { + /* Drop parent table if it is a fts aux table, to + avoid accessing dropped fts aux tables in information + scheam when parent table still exists. + Note: Drop parent table will drop fts aux tables. */ + char* parent_table_name; + parent_table_name = fts_get_parent_table_name( + table_name, strlen(table_name)); + + if (parent_table_name != NULL) { + mem_free(table_name); + table_name = parent_table_name; + } + ut_a(memcmp(table_name, name, namelen) == 0); table = dict_table_open_on_name( @@ -4665,7 +4704,7 @@ Checks if a table name contains the string "/#sql" which denotes temporary tables in MySQL. @return true if temporary table */ -UNIV_INTERN __attribute__((warn_unused_result)) +UNIV_INTERN MY_ATTRIBUTE((warn_unused_result)) bool row_is_mysql_tmp_table_name( /*========================*/ @@ -4679,7 +4718,7 @@ /****************************************************************//** Delete a single constraint. @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_delete_constraint_low( /*======================*/ @@ -4702,7 +4741,7 @@ /****************************************************************//** Delete a single constraint. @return error code or DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_delete_constraint( /*==================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0purge.cc mysql-5.6-5.6.33/storage/innobase/row/row0purge.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0purge.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0purge.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -69,7 +69,8 @@ { purge_node_t* node; - ut_ad(parent && heap); + ut_ad(parent != NULL); + ut_ad(heap != NULL); node = static_cast( mem_heap_zalloc(heap, sizeof(*node))); @@ -120,7 +121,7 @@ Removes a delete marked clustered index record if possible. @retval true if the row was not found, or it was successfully removed @retval false if the row was modified after the delete marking */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_purge_remove_clust_if_poss_low( /*===============================*/ @@ -202,7 +203,7 @@ @retval true if the row was not found, or it was successfully removed @retval false the purge needs to be suspended because of running out of file space. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_purge_remove_clust_if_poss( /*===========================*/ @@ -274,7 +275,7 @@ Removes a secondary index entry if possible, by modifying the index tree. Does not try to buffer the delete. @return TRUE if success or if not found */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) ibool row_purge_remove_sec_if_poss_tree( /*==============================*/ @@ -396,7 +397,7 @@ if possible. @retval true if success or if not found @retval false if row_purge_remove_sec_if_poss_tree() should be invoked */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_purge_remove_sec_if_poss_leaf( /*==============================*/ @@ -507,7 +508,7 @@ /***********************************************************//** Removes a secondary index entry if possible. */ -UNIV_INLINE __attribute__((nonnull(1,2))) +UNIV_INLINE MY_ATTRIBUTE((nonnull(1,2))) void row_purge_remove_sec_if_poss( /*=========================*/ @@ -554,7 +555,7 @@ @retval true if the row was not found, or it was successfully removed @retval false the purge needs to be suspended because of running out of file space */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_purge_del_mark( /*===============*/ @@ -745,7 +746,8 @@ ulint info_bits; ulint type; - ut_ad(node && thr); + ut_ad(node != NULL); + ut_ad(thr != NULL); ptr = trx_undo_rec_get_pars( undo_rec, &type, &node->cmpl_info, @@ -830,7 +832,7 @@ /***********************************************************//** Purges the parsed record. @return true if purged, false if skipped */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool row_purge_record_func( /*==================*/ @@ -895,7 +897,7 @@ Fetches an undo log record and does the purge for the recorded operation. If none left, or the current purge completed, returns the control to the parent node, which is always a query thread node. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_purge( /*======*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0quiesce.cc mysql-5.6-5.6.33/storage/innobase/row/row0quiesce.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0quiesce.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0quiesce.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -37,7 +37,7 @@ /*********************************************************************//** Write the meta data (index user fields) config file. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_quiesce_write_index_fields( /*===========================*/ @@ -97,7 +97,7 @@ /*********************************************************************//** Write the meta data config file index information. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_quiesce_write_indexes( /*======================*/ @@ -210,7 +210,7 @@ dict_col_t structure, along with the column name. All fields are serialized as ib_uint32_t. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_quiesce_write_table( /*====================*/ @@ -293,7 +293,7 @@ /*********************************************************************//** Write the meta data config file header. @return DB_SUCCESS or error code. */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_quiesce_write_header( /*=====================*/ @@ -415,7 +415,7 @@ /*********************************************************************//** Write the table meta data after quiesce. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_quiesce_write_cfg( /*==================*/ @@ -530,10 +530,8 @@ trx_purge_stop(); } - ut_a(table->id > 0); - for (ulint count = 0; - ibuf_contract_in_background(table->id, TRUE) != 0 + ibuf_merge_space(table->space) != 0 && !trx_is_interrupted(trx); ++count) { if (!(count % 20)) { diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0row.cc mysql-5.6-5.6.33/storage/innobase/row/row0row.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0row.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0row.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -240,7 +240,9 @@ ulint offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); - ut_ad(index && rec && heap); + ut_ad(index != NULL); + ut_ad(rec != NULL); + ut_ad(heap != NULL); ut_ad(dict_index_is_clust(index)); ut_ad(!mutex_own(&trx_sys->mutex)); ut_ad(!col_map || col_table); @@ -409,7 +411,9 @@ ulint len; ulint rec_len; - ut_ad(rec && heap && index); + ut_ad(rec != NULL); + ut_ad(heap != NULL); + ut_ad(index != NULL); /* Because this function may be invoked by row0merge.cc on a record whose header is in different format, the check rec_offs_validate(rec, index, offsets) must be avoided here. */ @@ -464,7 +468,9 @@ byte* buf; const rec_t* copy_rec; - ut_ad(rec && heap && index); + ut_ad(rec != NULL); + ut_ad(heap != NULL); + ut_ad(index != NULL); ut_ad(rec_offs_validate(rec, index, offsets)); /* Take a copy of rec to heap */ @@ -523,7 +529,9 @@ ulint* offsets = offsets_; rec_offs_init(offsets_); - ut_ad(index && rec && heap); + ut_ad(index != NULL); + ut_ad(rec != NULL); + ut_ad(heap != NULL); ut_ad(!dict_index_is_clust(index)); offsets = rec_get_offsets(rec, index, offsets, diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0sel.cc mysql-5.6-5.6.33/storage/innobase/row/row0sel.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0sel.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0sel.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -675,7 +675,7 @@ /*********************************************************************//** Builds a previous version of a clustered index record for a consistent read @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_sel_build_prev_vers( /*====================*/ @@ -710,7 +710,7 @@ /*********************************************************************//** Builds the last committed version of a clustered index record for a semi-consistent read. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_sel_build_committed_vers_for_mysql( /*===================================*/ @@ -808,7 +808,7 @@ Retrieves the clustered index record corresponding to a record in a non-clustered index. Does the necessary locking. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_sel_get_clust_rec( /*==================*/ @@ -1312,7 +1312,7 @@ /*********************************************************************//** Performs a select step. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_sel( /*====*/ @@ -2563,7 +2563,7 @@ /**************************************************************//** Stores a non-SQL-NULL field in the MySQL format. The counterpart of this function is row_mysql_store_col_in_innobase_format() in row0mysql.cc. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_sel_field_store_in_mysql_format_func( /*=====================================*/ @@ -2752,7 +2752,7 @@ #endif /* UNIV_DEBUG */ /**************************************************************//** Convert a field in the Innobase format to a field in the MySQL format. */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) ibool row_sel_store_mysql_field_func( /*===========================*/ @@ -2902,7 +2902,7 @@ columns to mysql_rec, other columns are left blank. All columns may not be needed in the query. @return TRUE on success, FALSE if not all columns could be retrieved */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) ibool row_sel_store_mysql_rec( /*====================*/ @@ -2964,7 +2964,7 @@ /*********************************************************************//** Builds a previous version of a clustered index record for a consistent read @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_sel_build_prev_vers_for_mysql( /*==============================*/ @@ -3001,7 +3001,7 @@ non-clustered index. Does the necessary locking. Used in the MySQL interface. @return DB_SUCCESS, DB_SUCCESS_LOCKED_REC, or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_sel_get_clust_rec_for_mysql( /*============================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0uins.cc mysql-5.6-5.6.33/storage/innobase/row/row0uins.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0uins.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0uins.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -61,7 +61,7 @@ Removes a clustered index record. The pcur in node was positioned on the record, now it is detached. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_ins_remove_clust_rec( /*==========================*/ @@ -176,7 +176,7 @@ /***************************************************************//** Removes a secondary index entry if found. @return DB_SUCCESS, DB_FAIL, or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_ins_remove_sec_low( /*========================*/ @@ -251,7 +251,7 @@ Removes a secondary index entry from the index if found. Tries first optimistic, then pessimistic descent down the tree. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_ins_remove_sec( /*====================*/ @@ -350,7 +350,7 @@ /***************************************************************//** Removes secondary index records. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_ins_remove_sec_rec( /*========================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0umod.cc mysql-5.6-5.6.33/storage/innobase/row/row0umod.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0umod.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0umod.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -72,7 +72,7 @@ /***********************************************************//** Undoes a modify in a clustered index record. @return DB_SUCCESS, DB_FAIL, or error code: we may run out of file space */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_clust_low( /*===================*/ @@ -154,7 +154,7 @@ delete-marked record and there no longer exist transactions that would see the delete-marked record. @return DB_SUCCESS, DB_FAIL, or error code: we may run out of file space */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_remove_clust_low( /*==========================*/ @@ -243,7 +243,7 @@ Undoes a modify in a clustered index record. Sets also the node state for the next round of undo. @return DB_SUCCESS or error code: we may run out of file space */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_clust( /*===============*/ @@ -380,7 +380,7 @@ /***********************************************************//** Delete marks or removes a secondary index entry if found. @return DB_SUCCESS, DB_FAIL, or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_del_mark_or_remove_sec_low( /*====================================*/ @@ -516,7 +516,7 @@ clustered index record or an earlier version of it, if the secondary index record through which we do the search is delete-marked. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_del_mark_or_remove_sec( /*================================*/ @@ -549,7 +549,7 @@ @retval DB_OUT_OF_FILE_SPACE when running out of tablespace @retval DB_DUPLICATE_KEY if the value was missing and an insert would lead to a duplicate exists */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_del_unmark_sec_and_undo_update( /*========================================*/ @@ -745,7 +745,7 @@ /***********************************************************//** Flags a secondary index corrupted. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_undo_mod_sec_flag_corrupted( /*============================*/ @@ -777,7 +777,7 @@ /***********************************************************//** Undoes a modify in secondary indexes when undo record type is UPD_DEL. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_upd_del_sec( /*=====================*/ @@ -844,7 +844,7 @@ /***********************************************************//** Undoes a modify in secondary indexes when undo record type is DEL_MARK. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_del_mark_sec( /*======================*/ @@ -912,7 +912,7 @@ /***********************************************************//** Undoes a modify in secondary indexes when undo record type is UPD_EXIST. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo_mod_upd_exist_sec( /*=======================*/ @@ -1028,7 +1028,7 @@ /***********************************************************//** Parses the row reference and other info in a modify undo log record. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void row_undo_mod_parse_undo_rec( /*========================*/ @@ -1105,7 +1105,8 @@ dberr_t err; ibool dict_locked; - ut_ad(node && thr); + ut_ad(node != NULL); + ut_ad(thr != NULL); ut_ad(node->state == UNDO_NODE_MODIFY); dict_locked = thr_get_trx(thr)->dict_operation_lock_mode == RW_X_LATCH; diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0undo.cc mysql-5.6-5.6.33/storage/innobase/row/row0undo.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0undo.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0undo.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -245,7 +245,7 @@ If none left, or a partial rollback completed, returns control to the parent node, which is always a query thread node. @return DB_SUCCESS if operation successfully completed, else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_undo( /*=====*/ @@ -257,7 +257,8 @@ roll_ptr_t roll_ptr; ibool locked_data_dict; - ut_ad(node && thr); + ut_ad(node != NULL); + ut_ad(thr != NULL); trx = node->trx; diff -Nru mysql-5.6-5.6.27/storage/innobase/row/row0upd.cc mysql-5.6-5.6.33/storage/innobase/row/row0upd.cc --- mysql-5.6-5.6.27/storage/innobase/row/row0upd.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/row/row0upd.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -170,7 +170,7 @@ pcur position! @return DB_SUCCESS or an error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_check_references_constraints( /*=================================*/ @@ -607,7 +607,7 @@ roll_ptr_t roll_ptr,/*!< in: roll ptr of the undo log record */ byte* log_ptr,/*!< pointer to a buffer of size > 20 opened in mlog */ - mtr_t* mtr __attribute__((unused))) /*!< in: mtr */ + mtr_t* mtr MY_ATTRIBUTE((unused))) /*!< in: mtr */ { ut_ad(dict_index_is_clust(index)); ut_ad(mtr); @@ -1642,7 +1642,7 @@ Updates a secondary index entry of a row. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_sec_index_entry( /*====================*/ @@ -1844,7 +1844,7 @@ deletes it if this is a delete. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_sec_step( /*=============*/ @@ -1877,7 +1877,7 @@ freed in a rollback. A limited version of this function used to be called btr_cur_mark_dtuple_inherited_extern(). @return TRUE if any columns were inherited */ -static __attribute__((warn_unused_result)) +static MY_ATTRIBUTE((warn_unused_result)) ibool row_upd_clust_rec_by_insert_inherit_func( /*=====================================*/ @@ -1956,7 +1956,7 @@ database applications. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_clust_rec_by_insert( /*========================*/ @@ -2081,7 +2081,7 @@ not change. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_clust_rec( /*==============*/ @@ -2240,7 +2240,7 @@ /***********************************************************//** Delete marks a clustered index record. @return DB_SUCCESS if operation successfully completed, else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_del_mark_clust_rec( /*=======================*/ @@ -2292,7 +2292,7 @@ Updates the clustered index record. @return DB_SUCCESS if operation successfully completed, DB_LOCK_WAIT in case of a lock wait, else error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd_clust_step( /*===============*/ @@ -2488,7 +2488,7 @@ record, and the position of the cursor is stored in the cursor. @return DB_SUCCESS if operation successfully completed, else error code or DB_LOCK_WAIT */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t row_upd( /*====*/ @@ -2497,7 +2497,8 @@ { dberr_t err = DB_SUCCESS; - ut_ad(node && thr); + ut_ad(node != NULL); + ut_ad(thr != NULL); if (UNIV_LIKELY(node->in_mysql_interface)) { diff -Nru mysql-5.6-5.6.27/storage/innobase/srv/srv0mon.cc mysql-5.6-5.6.33/storage/innobase/srv/srv0mon.cc --- mysql-5.6-5.6.27/storage/innobase/srv/srv0mon.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/srv/srv0mon.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2010, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1347,7 +1347,10 @@ module */ set_current_module = FALSE; } else if (module_id == MONITOR_ALL_COUNTER) { - continue; + if (!(innodb_counter_info[ix].monitor_type + & MONITOR_GROUP_MODULE)) { + continue; + } } else { /* Hitting the next module, stop */ break; diff -Nru mysql-5.6-5.6.27/storage/innobase/srv/srv0srv.cc mysql-5.6-5.6.33/storage/innobase/srv/srv0srv.cc --- mysql-5.6-5.6.27/storage/innobase/srv/srv0srv.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/srv/srv0srv.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. @@ -1497,7 +1497,7 @@ os_thread_ret_t DECLARE_THREAD(srv_monitor_thread)( /*===============================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { @@ -1667,12 +1667,14 @@ /*********************************************************************//** A thread which prints warnings about semaphore waits which have lasted too long. These can be used to track bugs which cause hangs. +Note: In order to make sync_arr_wake_threads_if_sema_free work as expected, +we should avoid waiting any mutexes in this function! @return a dummy parameter */ extern "C" UNIV_INTERN os_thread_ret_t DECLARE_THREAD(srv_error_monitor_thread)( /*=====================================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { @@ -1706,22 +1708,22 @@ /* Try to track a strange bug reported by Harald Fuchs and others, where the lsn seems to decrease at times */ - new_lsn = log_get_lsn(); + if (log_peek_lsn(&new_lsn)) { + if (new_lsn < old_lsn) { + ut_print_timestamp(stderr); + fprintf(stderr, + " InnoDB: Error: old log sequence number " LSN_PF + " was greater\n" + "InnoDB: than the new log sequence number " LSN_PF "!\n" + "InnoDB: Please submit a bug report" + " to http://bugs.mysql.com\n", + old_lsn, new_lsn); + ut_ad(0); + } - if (new_lsn < old_lsn) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: Error: old log sequence number " LSN_PF - " was greater\n" - "InnoDB: than the new log sequence number " LSN_PF "!\n" - "InnoDB: Please submit a bug report" - " to http://bugs.mysql.com\n", - old_lsn, new_lsn); - ut_ad(0); + old_lsn = new_lsn; } - old_lsn = new_lsn; - if (difftime(time(NULL), srv_last_monitor_time) > 60) { /* We referesh InnoDB Monitor values so that averages are printed from at most 60 last seconds */ @@ -2100,7 +2102,7 @@ /* Do an ibuf merge */ srv_main_thread_op_info = "doing insert buffer merge"; counter_time = ut_time_us(NULL); - ibuf_contract_in_background(0, FALSE); + ibuf_merge_in_background(false); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_IBUF_MERGE_MICROSECOND, counter_time); @@ -2192,7 +2194,7 @@ /* Do an ibuf merge */ counter_time = ut_time_us(NULL); srv_main_thread_op_info = "doing insert buffer merge"; - ibuf_contract_in_background(0, TRUE); + ibuf_merge_in_background(true); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_IBUF_MERGE_MICROSECOND, counter_time); @@ -2268,7 +2270,7 @@ /* Do an ibuf merge */ srv_main_thread_op_info = "doing insert buffer merge"; - n_bytes_merged = ibuf_contract_in_background(0, TRUE); + n_bytes_merged = ibuf_merge_in_background(true); /* Flush logs if needed */ srv_sync_log_buffer_in_background(); @@ -2308,7 +2310,7 @@ os_thread_ret_t DECLARE_THREAD(srv_master_thread)( /*==============================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { @@ -2452,7 +2454,7 @@ os_thread_ret_t DECLARE_THREAD(srv_worker_thread)( /*==============================*/ - void* arg __attribute__((unused))) /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { srv_slot_t* slot; @@ -2710,7 +2712,7 @@ os_thread_ret_t DECLARE_THREAD(srv_purge_coordinator_thread)( /*=========================================*/ - void* arg __attribute__((unused))) /*!< in: a dummy parameter + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { srv_slot_t* slot; diff -Nru mysql-5.6-5.6.27/storage/innobase/srv/srv0start.cc mysql-5.6-5.6.33/storage/innobase/srv/srv0start.cc --- mysql-5.6-5.6.27/storage/innobase/srv/srv0start.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/srv/srv0start.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2009, Percona Inc. @@ -147,6 +147,9 @@ #define SRV_N_PENDING_IOS_PER_THREAD OS_AIO_N_PENDING_IOS_PER_THREAD #define SRV_MAX_N_PENDING_SYNC_IOS 100 +/** The round off to MB is similar as done in srv_parse_megabytes() */ +#define CALC_NUMBER_OF_PAGES(size) ((size) / (1024 * 1024)) * \ + ((1024 * 1024) / (UNIV_PAGE_SIZE)) #ifdef UNIV_PFS_THREAD /* Keys to register InnoDB threads with performance schema */ UNIV_INTERN mysql_pfs_key_t io_handler_thread_key; @@ -506,7 +509,7 @@ void srv_normalize_path_for_win( /*=======================*/ - char* str __attribute__((unused))) /*!< in/out: null-terminated + char* str MY_ATTRIBUTE((unused))) /*!< in/out: null-terminated character string */ { #ifdef __WIN__ @@ -523,7 +526,7 @@ /*********************************************************************//** Creates a log file. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t create_log_file( /*============*/ @@ -730,7 +733,7 @@ /*********************************************************************//** Opens a log file. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t open_log_file( /*==========*/ @@ -758,7 +761,7 @@ /*********************************************************************//** Creates or opens database data files and closes them. @return DB_SUCCESS or error code */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t open_or_create_data_files( /*======================*/ @@ -958,10 +961,16 @@ size_check: size = os_file_get_size(files[i]); ut_a(size != (os_offset_t) -1); - /* Round size downward to megabytes */ - rounded_size_pages = (ulint) - (size >> UNIV_PAGE_SIZE_SHIFT); + /* Under some error conditions like disk full + narios or file size reaching filesystem + limit the data file could contain an incomplete + extent at the end. When we extend a data file + and if some failure happens, then also the data + file could contain an incomplete extent. So we + need to round the size downward to a megabyte.*/ + + rounded_size_pages = (ulint) CALC_NUMBER_OF_PAGES(size); if (i == srv_n_data_files - 1 && srv_auto_extend_last_data_file) { @@ -1875,7 +1884,7 @@ } } else { srv_monitor_file_name = NULL; - srv_monitor_file = os_file_create_tmpfile(); + srv_monitor_file = os_file_create_tmpfile(NULL); if (!srv_monitor_file) { return(DB_ERROR); @@ -1885,7 +1894,7 @@ mutex_create(srv_dict_tmpfile_mutex_key, &srv_dict_tmpfile_mutex, SYNC_DICT_OPERATION); - srv_dict_tmpfile = os_file_create_tmpfile(); + srv_dict_tmpfile = os_file_create_tmpfile(NULL); if (!srv_dict_tmpfile) { return(DB_ERROR); @@ -1894,7 +1903,7 @@ mutex_create(srv_misc_tmpfile_mutex_key, &srv_misc_tmpfile_mutex, SYNC_ANY_LATCH); - srv_misc_tmpfile = os_file_create_tmpfile(); + srv_misc_tmpfile = os_file_create_tmpfile(NULL); if (!srv_misc_tmpfile) { return(DB_ERROR); diff -Nru mysql-5.6-5.6.27/storage/innobase/sync/sync0sync.cc mysql-5.6-5.6.33/storage/innobase/sync/sync0sync.cc --- mysql-5.6-5.6.27/storage/innobase/sync/sync0sync.cc 2015-09-18 14:24:46.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/sync/sync0sync.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -387,10 +387,10 @@ mutex_enter_nowait_func( /*====================*/ ib_mutex_t* mutex, /*!< in: pointer to mutex */ - const char* file_name __attribute__((unused)), + const char* file_name MY_ATTRIBUTE((unused)), /*!< in: file name where mutex requested */ - ulint line __attribute__((unused))) + ulint line MY_ATTRIBUTE((unused))) /*!< in: line where requested */ { ut_ad(mutex_validate(mutex)); diff -Nru mysql-5.6-5.6.27/storage/innobase/trx/trx0purge.cc mysql-5.6-5.6.33/storage/innobase/trx/trx0purge.cc --- mysql-5.6-5.6.27/storage/innobase/trx/trx0purge.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/trx/trx0purge.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -913,7 +913,7 @@ released with the corresponding release function. @return copy of an undo log record or pointer to trx_purge_dummy_rec, if the whole undo log can skipped in purge; NULL if none left */ -static __attribute__((warn_unused_result, nonnull)) +static MY_ATTRIBUTE((warn_unused_result, nonnull)) trx_undo_rec_t* trx_purge_fetch_next_rec( /*=====================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/trx/trx0rec.cc mysql-5.6-5.6.33/storage/innobase/trx/trx0rec.cc --- mysql-5.6-5.6.27/storage/innobase/trx/trx0rec.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/trx/trx0rec.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1132,7 +1132,7 @@ /***********************************************************************//** Erases the unused undo log page end. @return TRUE if the page contained something, FALSE if it was empty */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) ibool trx_undo_erase_page_end( /*====================*/ @@ -1158,7 +1158,7 @@ trx_undo_parse_erase_page_end( /*==========================*/ byte* ptr, /*!< in: buffer */ - byte* end_ptr __attribute__((unused)), /*!< in: buffer end */ + byte* end_ptr MY_ATTRIBUTE((unused)), /*!< in: buffer end */ page_t* page, /*!< in: page or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ { @@ -1441,7 +1441,7 @@ @retval true if the undo log has been truncated and we cannot fetch the old version @retval false if the undo log record is available */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool trx_undo_get_undo_rec( /*==================*/ @@ -1469,7 +1469,7 @@ #ifdef UNIV_DEBUG #define ATTRIB_USED_ONLY_IN_DEBUG #else /* UNIV_DEBUG */ -#define ATTRIB_USED_ONLY_IN_DEBUG __attribute__((unused)) +#define ATTRIB_USED_ONLY_IN_DEBUG MY_ATTRIBUTE((unused)) #endif /* UNIV_DEBUG */ /*******************************************************************//** diff -Nru mysql-5.6-5.6.27/storage/innobase/trx/trx0roll.cc mysql-5.6-5.6.33/storage/innobase/trx/trx0roll.cc --- mysql-5.6-5.6.27/storage/innobase/trx/trx0roll.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/trx/trx0roll.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -336,7 +336,7 @@ were set after this savepoint are deleted. @return if no savepoint of the name found then DB_NO_SAVEPOINT, otherwise DB_SUCCESS */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t trx_rollback_to_savepoint_for_mysql_low( /*====================================*/ @@ -796,7 +796,7 @@ os_thread_ret_t DECLARE_THREAD(trx_rollback_or_clean_all_recovered)( /*================================================*/ - void* arg __attribute__((unused))) + void* arg MY_ATTRIBUTE((unused))) /*!< in: a dummy parameter required by os_thread_create */ { diff -Nru mysql-5.6-5.6.27/storage/innobase/trx/trx0trx.cc mysql-5.6-5.6.33/storage/innobase/trx/trx0trx.cc --- mysql-5.6-5.6.27/storage/innobase/trx/trx0trx.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/trx/trx0trx.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -959,7 +959,7 @@ /****************************************************************//** Assign the transaction its history serialisation number and write the update UNDO log record to the assigned rollback segment. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void trx_write_serialisation_history( /*============================*/ @@ -1030,7 +1030,7 @@ /******************************************************************** Finalize a transaction containing updates for a FTS table. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void trx_finalize_for_fts_table( /*=======================*/ @@ -1063,7 +1063,7 @@ /******************************************************************//** Finalize a transaction containing updates to FTS tables. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void trx_finalize_for_fts( /*=================*/ @@ -1130,7 +1130,7 @@ /**********************************************************************//** If required, flushes the log to disk based on the value of innodb_flush_log_at_trx_commit. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void trx_flush_log_if_needed( /*====================*/ @@ -1145,7 +1145,7 @@ /****************************************************************//** Commits a transaction in memory. */ -static __attribute__((nonnull)) +static MY_ATTRIBUTE((nonnull)) void trx_commit_in_memory( /*=================*/ @@ -2136,7 +2136,7 @@ @return trx on match, the trx->xid will be invalidated; note that the trx may have been committed, unless the caller is holding lock_sys->mutex */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) trx_t* trx_get_trx_by_xid_low( /*===================*/ diff -Nru mysql-5.6-5.6.27/storage/innobase/trx/trx0undo.cc mysql-5.6-5.6.33/storage/innobase/trx/trx0undo.cc --- mysql-5.6-5.6.27/storage/innobase/trx/trx0undo.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/innobase/trx/trx0undo.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -419,11 +419,11 @@ Creates a new undo log segment in file. @return DB_SUCCESS if page creation OK possible error codes are: DB_TOO_MANY_CONCURRENT_TRXS DB_OUT_OF_FILE_SPACE */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t trx_undo_seg_create( /*================*/ - trx_rseg_t* rseg __attribute__((unused)),/*!< in: rollback segment */ + trx_rseg_t* rseg MY_ATTRIBUTE((unused)),/*!< in: rollback segment */ trx_rsegf_t* rseg_hdr,/*!< in: rollback segment header, page x-latched */ ulint type, /*!< in: type of the segment: TRX_UNDO_INSERT or @@ -443,7 +443,9 @@ ibool success; dberr_t err = DB_SUCCESS; - ut_ad(mtr && id && rseg_hdr); + ut_ad(mtr != NULL); + ut_ad(id != NULL); + ut_ad(rseg_hdr != NULL); ut_ad(mutex_own(&(rseg->mutex))); /* fputs(type == TRX_UNDO_INSERT @@ -827,7 +829,7 @@ trx_undo_parse_discard_latest( /*==========================*/ byte* ptr, /*!< in: buffer */ - byte* end_ptr __attribute__((unused)), /*!< in: buffer end */ + byte* end_ptr MY_ATTRIBUTE((unused)), /*!< in: buffer end */ page_t* page, /*!< in: page or NULL */ mtr_t* mtr) /*!< in: mtr or NULL */ { @@ -1557,7 +1559,7 @@ @return DB_SUCCESS if successful in creating the new undo lob object, possible error codes are: DB_TOO_MANY_CONCURRENT_TRXS DB_OUT_OF_FILE_SPACE DB_OUT_OF_MEMORY */ -static __attribute__((nonnull, warn_unused_result)) +static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t trx_undo_create( /*============*/ diff -Nru mysql-5.6-5.6.27/storage/myisam/ft_boolean_search.c mysql-5.6-5.6.33/storage/myisam/ft_boolean_search.c --- mysql-5.6-5.6.27/storage/myisam/ft_boolean_search.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/ft_boolean_search.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -199,7 +199,8 @@ ftbw= (FTB_WORD *)alloc_root(&ftb_param->ftb->mem_root, sizeof(FTB_WORD) + (info->trunc ? MI_MAX_KEY_BUFF : - word_len * ftb_param->ftb->charset->mbmaxlen + + (word_len + 1) * + ftb_param->ftb->charset->mbmaxlen + HA_FT_WLEN + ftb_param->ftb->info->s->rec_reflength)); ftbw->len= word_len + 1; @@ -331,7 +332,7 @@ } -static int _ftb_no_dupes_cmp(const void* not_used __attribute__((unused)), +static int _ftb_no_dupes_cmp(const void* not_used MY_ATTRIBUTE((unused)), const void *a,const void *b) { return CMP_NUM((*((my_off_t*)a)), (*((my_off_t*)b))); @@ -362,6 +363,8 @@ MI_INFO *info=ftb->info; uint UNINIT_VAR(off), extra= HA_FT_WLEN + info->s->rec_reflength; uchar *lastkey_buf=ftbw->word+ftbw->off; + uint max_word_length= (ftbw->flags & FTB_FLAG_TRUNC) ? MI_MAX_KEY_BUFF : + ((ftbw->len) * ftb->charset->mbmaxlen) + extra; if (ftbw->flags & FTB_FLAG_TRUNC) lastkey_buf+=ftbw->len; @@ -421,7 +424,7 @@ (my_bool) (ftbw->flags & FTB_FLAG_TRUNC),0); } - if (r) /* not found */ + if (r || info->lastkey_length > max_word_length) /* not found */ { if (!ftbw->off || !(ftbw->flags & FTB_FLAG_TRUNC)) { @@ -640,7 +643,7 @@ static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info MY_ATTRIBUTE((unused))) { MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; FT_WORD *w= (FT_WORD *)phrase_param->document->data; @@ -898,7 +901,7 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, char *word, int len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info MY_ATTRIBUTE((unused))) { MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; FT_INFO *ftb= ftb_param->ftb; diff -Nru mysql-5.6-5.6.27/storage/myisam/ft_nlq_search.c mysql-5.6-5.6.33/storage/myisam/ft_nlq_search.c --- mysql-5.6-5.6.27/storage/myisam/ft_nlq_search.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/ft_nlq_search.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,7 +51,7 @@ double tmp_weight; } FT_SUPERDOC; -static int FT_SUPERDOC_cmp(void* cmp_arg __attribute__((unused)), +static int FT_SUPERDOC_cmp(void* cmp_arg MY_ATTRIBUTE((unused)), FT_SUPERDOC *p1, FT_SUPERDOC *p2) { if (p1->doc.dpos < p2->doc.dpos) @@ -189,7 +189,7 @@ static int walk_and_copy(FT_SUPERDOC *from, - uint32 count __attribute__((unused)), FT_DOC **to) + uint32 count MY_ATTRIBUTE((unused)), FT_DOC **to) { DBUG_ENTER("walk_and_copy"); from->doc.weight+=from->tmp_weight*from->word_ptr->weight; @@ -200,7 +200,7 @@ } static int walk_and_push(FT_SUPERDOC *from, - uint32 count __attribute__((unused)), QUEUE *best) + uint32 count MY_ATTRIBUTE((unused)), QUEUE *best) { DBUG_ENTER("walk_and_copy"); from->doc.weight+=from->tmp_weight*from->word_ptr->weight; @@ -210,7 +210,7 @@ } -static int FT_DOC_cmp(void *unused __attribute__((unused)), +static int FT_DOC_cmp(void *unused MY_ATTRIBUTE((unused)), FT_DOC *a, FT_DOC *b) { double c= b->weight - a->weight; @@ -345,8 +345,8 @@ float ft_nlq_find_relevance(FT_INFO *handler, - uchar *record __attribute__((unused)), - uint length __attribute__((unused))) + uchar *record MY_ATTRIBUTE((unused)), + uint length MY_ATTRIBUTE((unused))) { int a,b,c; FT_DOC *docs=handler->doc; diff -Nru mysql-5.6-5.6.27/storage/myisam/ft_parser.c mysql-5.6-5.6.33/storage/myisam/ft_parser.c --- mysql-5.6-5.6.27/storage/myisam/ft_parser.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/ft_parser.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,5 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights + reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,6 +17,7 @@ /* Written by Sergei A. Golubchik, who has a shared copyright to this code */ #include "ftdefs.h" +#include "ctype.h" typedef struct st_ft_docstat { FT_WORD *list; @@ -89,7 +91,7 @@ for (i=0; i 127 || my_isalnum(default_charset_info, str[i])) + if ((unsigned char)(str[i]) > 127 || isalnum(str[i])) return 1; for (j=0; jpos); diff -Nru mysql-5.6-5.6.27/storage/myisam/ha_myisam.cc mysql-5.6-5.6.33/storage/myisam/ha_myisam.cc --- mysql-5.6-5.6.27/storage/myisam/ha_myisam.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/ha_myisam.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1089,24 +1089,36 @@ /* TODO: respect myisam_repair_threads variable */ my_snprintf(buf, 40, "Repair with %d threads", my_count_bits(key_map)); thd_proc_info(thd, buf); + /* + The new file is created with the right stats, so we can skip + copying file stats from old to new. + */ error = mi_repair_parallel(¶m, file, fixed_name, - param.testflag & T_QUICK); + param.testflag & T_QUICK, TRUE); thd_proc_info(thd, "Repair done"); // to reset proc_info, as // it was pointing to local buffer } else { thd_proc_info(thd, "Repair by sorting"); + /* + The new file is created with the right stats, so we can skip + copying file stats from old to new. + */ error = mi_repair_by_sort(¶m, file, fixed_name, - param.testflag & T_QUICK); + param.testflag & T_QUICK, TRUE); } } else { thd_proc_info(thd, "Repair with keycache"); param.testflag &= ~T_REP_BY_SORT; + /* + The new file is created with the right stats, so we can skip + copying file stats from old to new. + */ error= mi_repair(¶m, file, fixed_name, - param.testflag & T_QUICK); + param.testflag & T_QUICK, TRUE); } #ifdef HAVE_MMAP if (remap) @@ -1122,7 +1134,11 @@ { optimize_done=1; thd_proc_info(thd, "Sorting index"); - error=mi_sort_index(¶m,file,fixed_name); + /* + The new file is created with the right stats, so we can skip + copying file stats from old to new. + */ + error=mi_sort_index(¶m,file,fixed_name, TRUE); } if (!statistics_done && (local_testflag & T_STATISTICS)) { @@ -1725,8 +1741,8 @@ } int ha_myisam::index_next_same(uchar *buf, - const uchar *key __attribute__((unused)), - uint length __attribute__((unused))) + const uchar *key MY_ATTRIBUTE((unused)), + uint length MY_ATTRIBUTE((unused))) { int error; DBUG_ASSERT(inited==INDEX); diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_check.c mysql-5.6-5.6.33/storage/myisam/mi_check.c --- mysql-5.6-5.6.27/storage/myisam/mi_check.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_check.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -138,7 +138,7 @@ { reg2 ha_rows i; uint delete_link_length; - my_off_t empty,next_link,UNINIT_VAR(old_link); + my_off_t empty, next_link, old_link= 0; char buff[22],buff2[22]; DBUG_ENTER("chk_del"); @@ -1512,7 +1512,7 @@ /* Save new datafile-name in temp_filename */ int mi_repair(MI_CHECK *param, register MI_INFO *info, - char * name, int rep_quick) + char * name, int rep_quick, my_bool no_copy_stat) { int error,got_error; ha_rows start_records,new_header_length; @@ -1726,6 +1726,11 @@ /* Replace the actual file with the temporary file */ if (new_file >= 0) { + myf flags= 0; + if (param->testflag & T_BACKUP_DATA) + flags |= MY_REDEL_MAKE_BACKUP; + if (no_copy_stat) + flags |= MY_REDEL_NO_COPY_STAT; mysql_file_close(new_file, MYF(0)); info->dfile=new_file= -1; /* @@ -1744,8 +1749,7 @@ info->s->file_map= NULL; } if (change_to_newfile(share->data_file_name, MI_NAME_DEXT, DATA_TMP_EXT, - (param->testflag & T_BACKUP_DATA ? - MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) || + flags) || mi_open_datafile(info,share,name,-1)) got_error=1; @@ -1902,7 +1906,7 @@ /* Tell system that we want all memory for our cache */ -void lock_memory(MI_CHECK *param __attribute__((unused))) +void lock_memory(MI_CHECK *param MY_ATTRIBUTE((unused))) { #ifdef SUN_OS /* Key-cacheing thrases on sun 4.1 */ if (param->opt_lock_memory) @@ -1933,7 +1937,8 @@ /* Sort index for more efficent reads */ -int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name) +int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name, + my_bool no_copy_stat) { reg2 uint key; reg1 MI_KEYDEF *keyinfo; @@ -2010,7 +2015,7 @@ share->kfile = -1; (void) mysql_file_close(new_file, MYF(MY_WME)); if (change_to_newfile(share->index_file_name, MI_NAME_IEXT, INDEX_TMP_EXT, - MYF(0)) || + no_copy_stat ? MYF(MY_REDEL_NO_COPY_STAT) : MYF(0)) || mi_open_keyfile(share)) goto err2; info->lock_type= F_UNLCK; /* Force mi_readinfo to lock */ @@ -2215,6 +2220,8 @@ info MyISAM handler to repair name Name of table (for warnings) rep_quick set to <> 0 if we should not change data file + no_copy_stat Don't copy file stats from old to new file, + assume that new file was created with correct stats RESULT 0 ok @@ -2222,7 +2229,7 @@ */ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, - const char * name, int rep_quick) + const char * name, int rep_quick, my_bool no_copy_stat) { int got_error; uint i; @@ -2549,11 +2556,15 @@ /* Replace the actual file with the temporary file */ if (new_file >= 0) { + myf flags= 0; + if (param->testflag & T_BACKUP_DATA) + flags |= MY_REDEL_MAKE_BACKUP; + if (no_copy_stat) + flags |= MY_REDEL_NO_COPY_STAT; mysql_file_close(new_file, MYF(0)); info->dfile=new_file= -1; if (change_to_newfile(share->data_file_name,MI_NAME_DEXT, DATA_TMP_EXT, - (param->testflag & T_BACKUP_DATA ? - MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) || + flags) || mi_open_datafile(info,share,name,-1)) got_error=1; } @@ -2601,6 +2612,8 @@ info MyISAM handler to repair name Name of table (for warnings) rep_quick set to <> 0 if we should not change data file + no_copy_stat Don't copy file stats from old to new file, + assume that new file was created with correct stats DESCRIPTION Same as mi_repair_by_sort but do it multithreaded @@ -2635,7 +2648,7 @@ */ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, - const char * name, int rep_quick) + const char * name, int rep_quick, my_bool no_copy_stat) { int got_error; uint i,key, total_key_length, istep; @@ -3082,11 +3095,15 @@ /* Replace the actual file with the temporary file */ if (new_file >= 0) { + myf flags= 0; + if (param->testflag & T_BACKUP_DATA) + flags |= MY_REDEL_MAKE_BACKUP; + if (no_copy_stat) + flags |= MY_REDEL_NO_COPY_STAT; mysql_file_close(new_file, MYF(0)); info->dfile=new_file= -1; if (change_to_newfile(share->data_file_name, MI_NAME_DEXT, DATA_TMP_EXT, - (param->testflag & T_BACKUP_DATA ? - MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) || + flags) || mi_open_datafile(info,share,name,-1)) got_error=1; } diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_extrafunc.h mysql-5.6-5.6.33/storage/myisam/mi_extrafunc.h --- mysql-5.6-5.6.27/storage/myisam/mi_extrafunc.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_extrafunc.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,4 @@ -/* Copyright (c) 2000-2006 MySQL AB, 2009 Sun Microsystems, Inc. - Use is subject to license terms. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,9 +13,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -void _mi_report_crashed(MI_INFO *file __attribute__((unused)), - const char *message __attribute__((unused)), - const char *sfile __attribute__((unused)), - uint sline __attribute__((unused))) +void _mi_report_crashed(MI_INFO *file MY_ATTRIBUTE((unused)), + const char *message MY_ATTRIBUTE((unused)), + const char *sfile MY_ATTRIBUTE((unused)), + uint sline MY_ATTRIBUTE((unused))) { } diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_keycache.c mysql-5.6-5.6.33/storage/myisam/mi_keycache.c --- mysql-5.6-5.6.27/storage/myisam/mi_keycache.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_keycache.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,4 @@ -/* Copyright (c) 2003-2008 MySQL AB, 2009 Sun Microsystems, Inc. - Use is subject to license terms. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -48,7 +47,7 @@ */ int mi_assign_to_key_cache(MI_INFO *info, - ulonglong key_map __attribute__((unused)), + ulonglong key_map MY_ATTRIBUTE((unused)), KEY_CACHE *key_cache) { int error= 0; diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_open.c mysql-5.6-5.6.33/storage/myisam/mi_open.c --- mysql-5.6-5.6.27/storage/myisam/mi_open.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_open.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1229,7 +1229,7 @@ *************************************************************************/ int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, const char *org_name, - File file_to_dup __attribute__((unused))) + File file_to_dup MY_ATTRIBUTE((unused))) { char *data_name= share->data_file_name; char real_data_name[FN_REFLEN]; diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_packrec.c mysql-5.6-5.6.33/storage/myisam/mi_packrec.c --- mysql-5.6-5.6.27/storage/myisam/mi_packrec.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_packrec.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1009,7 +1009,7 @@ } static void uf_constant(MI_COLUMNDEF *rec, - MI_BIT_BUFF *bit_buff __attribute__((unused)), + MI_BIT_BUFF *bit_buff MY_ATTRIBUTE((unused)), uchar *to, uchar *end) { @@ -1027,8 +1027,8 @@ /*ARGSUSED*/ -static void uf_zero(MI_COLUMNDEF *rec __attribute__((unused)), - MI_BIT_BUFF *bit_buff __attribute__((unused)), +static void uf_zero(MI_COLUMNDEF *rec MY_ATTRIBUTE((unused)), + MI_BIT_BUFF *bit_buff MY_ATTRIBUTE((unused)), uchar *to, uchar *end) { memset(to, 0, (end-to)); @@ -1058,7 +1058,7 @@ static void uf_varchar1(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, - uchar *to, uchar *end __attribute__((unused))) + uchar *to, uchar *end MY_ATTRIBUTE((unused))) { if (get_bit(bit_buff)) to[0]= 0; /* Zero lengths */ @@ -1072,7 +1072,7 @@ static void uf_varchar2(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, - uchar *to, uchar *end __attribute__((unused))) + uchar *to, uchar *end MY_ATTRIBUTE((unused))) { if (get_bit(bit_buff)) to[0]=to[1]=0; /* Zero lengths */ @@ -1607,7 +1607,7 @@ static int _mi_read_rnd_mempack_record(MI_INFO *info, uchar *buf, register my_off_t filepos, my_bool skip_deleted_blocks - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { MI_BLOCK_INFO block_info; MYISAM_SHARE *share=info->s; diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_search.c mysql-5.6-5.6.33/storage/myisam/mi_search.c --- mysql-5.6-5.6.27/storage/myisam/mi_search.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_search.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -180,7 +180,7 @@ int _mi_bin_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, uchar *key, uint key_len, uint comp_flag, uchar **ret_pos, - uchar *buff __attribute__((unused)), my_bool *last_key) + uchar *buff MY_ATTRIBUTE((unused)), my_bool *last_key) { reg4 int start,mid,end,save_end; int flag; @@ -1420,9 +1420,9 @@ int _mi_calc_static_key_length(MI_KEYDEF *keyinfo,uint nod_flag, - uchar *next_pos __attribute__((unused)), - uchar *org_key __attribute__((unused)), - uchar *prev_key __attribute__((unused)), + uchar *next_pos MY_ATTRIBUTE((unused)), + uchar *org_key MY_ATTRIBUTE((unused)), + uchar *prev_key MY_ATTRIBUTE((unused)), uchar *key, MI_KEY_PARAM *s_temp) { s_temp->key=key; @@ -1433,9 +1433,9 @@ int _mi_calc_var_key_length(MI_KEYDEF *keyinfo,uint nod_flag, - uchar *next_pos __attribute__((unused)), - uchar *org_key __attribute__((unused)), - uchar *prev_key __attribute__((unused)), + uchar *next_pos MY_ATTRIBUTE((unused)), + uchar *org_key MY_ATTRIBUTE((unused)), + uchar *prev_key MY_ATTRIBUTE((unused)), uchar *key, MI_KEY_PARAM *s_temp) { s_temp->key=key; @@ -1825,7 +1825,7 @@ /* store key without compression */ -void _mi_store_static_key(MI_KEYDEF *keyinfo __attribute__((unused)), +void _mi_store_static_key(MI_KEYDEF *keyinfo MY_ATTRIBUTE((unused)), register uchar *key_pos, register MI_KEY_PARAM *s_temp) { @@ -1840,7 +1840,7 @@ { *((pos)++) = (uchar) ((length) >> 8); *((pos)++) = (uchar) (length); } } -void _mi_store_var_pack_key(MI_KEYDEF *keyinfo __attribute__((unused)), +void _mi_store_var_pack_key(MI_KEYDEF *keyinfo MY_ATTRIBUTE((unused)), register uchar *key_pos, register MI_KEY_PARAM *s_temp) { @@ -1903,7 +1903,7 @@ /* variable length key with prefix compression */ -void _mi_store_bin_pack_key(MI_KEYDEF *keyinfo __attribute__((unused)), +void _mi_store_bin_pack_key(MI_KEYDEF *keyinfo MY_ATTRIBUTE((unused)), register uchar *key_pos, register MI_KEY_PARAM *s_temp) { diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_static.c mysql-5.6-5.6.33/storage/myisam/mi_static.c --- mysql-5.6-5.6.27/storage/myisam/mi_static.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_static.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,7 +41,7 @@ ulong myisam_data_pointer_size=4; ulonglong myisam_mmap_size= SIZE_T_MAX, myisam_mmap_used= 0; -static int always_valid(const char *filename __attribute__((unused))) +static int always_valid(const char *filename MY_ATTRIBUTE((unused))) { return 0; } diff -Nru mysql-5.6-5.6.27/storage/myisam/mi_test1.c mysql-5.6-5.6.33/storage/myisam/mi_test1.c --- mysql-5.6-5.6.27/storage/myisam/mi_test1.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/mi_test1.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -586,8 +586,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch(optid) { case 'a': diff -Nru mysql-5.6-5.6.27/storage/myisam/myisamchk.c mysql-5.6-5.6.33/storage/myisam/myisamchk.c --- mysql-5.6-5.6.27/storage/myisam/myisamchk.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/myisamchk.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -466,7 +466,7 @@ static my_bool get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch (optid) { @@ -994,14 +994,18 @@ info->s->state.key_map, param->force_sort)) { + /* + The new file might not be created with the right stats depending + on how myisamchk is run, so we must copy file stats from old to new. + */ if (param->testflag & T_REP_BY_SORT) - error=mi_repair_by_sort(param,info,filename,rep_quick); + error= mi_repair_by_sort(param, info, filename, rep_quick, FALSE); else - error=mi_repair_parallel(param,info,filename,rep_quick); + error= mi_repair_parallel(param, info, filename, rep_quick, FALSE); state_updated=1; } else if (param->testflag & T_REP_ANY) - error=mi_repair(param, info,filename,rep_quick); + error= mi_repair(param, info, filename, rep_quick, FALSE); } if (!error && param->testflag & T_SORT_RECORDS) { @@ -1041,12 +1045,12 @@ { if (param->verbose) puts("Table had a compressed index; We must now recreate the index"); - error=mi_repair_by_sort(param,info,filename,1); + error= mi_repair_by_sort(param, info, filename, 1, FALSE); } } } if (!error && param->testflag & T_SORT_INDEX) - error=mi_sort_index(param,info,filename); + error= mi_sort_index(param, info, filename, FALSE); if (!error) share->state.changed&= ~(STATE_CHANGED | STATE_CRASHED | STATE_CRASHED_ON_REPAIR); @@ -1711,7 +1715,7 @@ static int not_killed= 0; -volatile int *killed_ptr(MI_CHECK *param __attribute__((unused))) +volatile int *killed_ptr(MI_CHECK *param MY_ATTRIBUTE((unused))) { return ¬_killed; /* always NULL */ } @@ -1719,7 +1723,7 @@ /* print warnings and errors */ /* VARARGS */ -void mi_check_print_info(MI_CHECK *param __attribute__((unused)), +void mi_check_print_info(MI_CHECK *param MY_ATTRIBUTE((unused)), const char *fmt,...) { va_list args; diff -Nru mysql-5.6-5.6.27/storage/myisam/myisam_ftdump.c mysql-5.6-5.6.33/storage/myisam/myisam_ftdump.c --- mysql-5.6-5.6.27/storage/myisam/myisam_ftdump.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/myisam_ftdump.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -226,8 +226,8 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch(optid) { case 'd': diff -Nru mysql-5.6-5.6.27/storage/myisam/myisamlog.c mysql-5.6-5.6.33/storage/myisam/myisamlog.c --- mysql-5.6-5.6.27/storage/myisam/myisamlog.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/myisamlog.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -695,7 +695,7 @@ } /* read_string */ -static int file_info_compare(void* cmp_arg __attribute__((unused)), +static int file_info_compare(void* cmp_arg MY_ATTRIBUTE((unused)), void *a, void *b) { long lint; @@ -709,7 +709,7 @@ /* ARGSUSED */ static int test_if_open (struct file_info *key, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), struct test_if_open_param *param) { if (!strcmp(key->name,param->name) && key->id > param->max_id) @@ -737,7 +737,7 @@ /* ARGSUSED */ static int test_when_accessed (struct file_info *key, - element_count count __attribute__((unused)), + element_count count MY_ATTRIBUTE((unused)), struct st_access_param *access_param) { if (key->accessed < access_param->min_accessed && ! key->closed) diff -Nru mysql-5.6-5.6.27/storage/myisam/myisampack.c mysql-5.6-5.6.33/storage/myisam/myisampack.c --- mysql-5.6-5.6.27/storage/myisam/myisampack.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/myisampack.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ #endif #include #include +#include // ORACLE_WELCOME_COPYRIGHT_NOTICE #if SIZEOF_LONG_LONG > 4 #define BITS_SAVED 64 @@ -130,7 +131,7 @@ uint trees, HUFF_COUNTS *huff_counts, uint fields); -static int compare_tree(void* cmp_arg __attribute__((unused)), +static int compare_tree(void* cmp_arg MY_ATTRIBUTE((unused)), const uchar *s,const uchar *t); static int get_statistic(PACK_MRG_INFO *mrg,HUFF_COUNTS *huff_counts); static void check_counts(HUFF_COUNTS *huff_counts,uint trees, @@ -300,9 +301,7 @@ static void usage(void) { print_version(); - puts("Copyright 2002-2008 MySQL AB, 2008 Sun Microsystems, Inc."); - puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,"); - puts("and you are welcome to modify and redistribute it under the GPL license\n"); + puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2002")); puts("Pack a MyISAM-table to take much less space."); puts("Keys are not updated, you must run myisamchk -rq on the datafile"); @@ -317,7 +316,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { uint length; @@ -1176,7 +1175,7 @@ DBUG_RETURN(error != HA_ERR_END_OF_FILE); } -static int compare_huff_elements(void *not_used __attribute__((unused)), +static int compare_huff_elements(void *not_used MY_ATTRIBUTE((unused)), uchar *a, uchar *b) { return *((my_off_t*) a) < *((my_off_t*) b) ? -1 : @@ -1693,7 +1692,7 @@ return 0; } -static int compare_tree(void* cmp_arg __attribute__((unused)), +static int compare_tree(void* cmp_arg MY_ATTRIBUTE((unused)), register const uchar *s, register const uchar *t) { uint length; diff -Nru mysql-5.6-5.6.27/storage/myisam/rt_test.c mysql-5.6-5.6.33/storage/myisam/rt_test.c --- mysql-5.6-5.6.27/storage/myisam/rt_test.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/rt_test.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -79,7 +79,7 @@ -1 }; -int main(int argc __attribute__((unused)),char *argv[] __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char *argv[] MY_ATTRIBUTE((unused))) { MY_INIT(argv[0]); exit(run_test("rt_test")); @@ -367,7 +367,7 @@ static void print_record(uchar * record, - my_off_t offs __attribute__((unused)), + my_off_t offs MY_ATTRIBUTE((unused)), const char * tail) { int i; @@ -420,7 +420,7 @@ } #else -int main(int argc __attribute__((unused)),char *argv[] __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char *argv[] MY_ATTRIBUTE((unused))) { exit(0); } diff -Nru mysql-5.6-5.6.27/storage/myisam/sort.c mysql-5.6-5.6.33/storage/myisam/sort.c --- mysql-5.6-5.6.27/storage/myisam/sort.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/sort.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -886,7 +886,7 @@ } -static int write_merge_key(MI_SORT_PARAM *info __attribute__((unused)), +static int write_merge_key(MI_SORT_PARAM *info MY_ATTRIBUTE((unused)), IO_CACHE *to_file, uchar *key, uint sort_length, uint count) { diff -Nru mysql-5.6-5.6.27/storage/myisam/sp_key.c mysql-5.6-5.6.33/storage/myisam/sp_key.c --- mysql-5.6-5.6.27/storage/myisam/sp_key.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/sp_key.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ */ static int sp_add_point_to_mbr(uchar *(*wkb), uchar *end, uint n_dims, - uchar byte_order __attribute__((unused)), + uchar byte_order MY_ATTRIBUTE((unused)), double *mbr) { double ord; diff -Nru mysql-5.6-5.6.27/storage/myisam/sp_test.c mysql-5.6-5.6.33/storage/myisam/sp_test.c --- mysql-5.6-5.6.27/storage/myisam/sp_test.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisam/sp_test.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ static char blob_key[MAX_REC_LENGTH]; -int main(int argc __attribute__((unused)),char *argv[]) +int main(int argc MY_ATTRIBUTE((unused)),char *argv[]) { MY_INIT(argv[0]); exit(run_test("sp_test")); @@ -487,7 +487,7 @@ } #else -int main(int argc __attribute__((unused)),char *argv[] __attribute__((unused))) +int main(int argc MY_ATTRIBUTE((unused)),char *argv[] MY_ATTRIBUTE((unused))) { exit(0); } diff -Nru mysql-5.6-5.6.27/storage/myisammrg/ha_myisammrg.cc mysql-5.6-5.6.33/storage/myisammrg/ha_myisammrg.cc --- mysql-5.6-5.6.27/storage/myisammrg/ha_myisammrg.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/myisammrg/ha_myisammrg.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -347,7 +347,7 @@ and adds a child list of TABLE_LIST to the parent handler. */ -int ha_myisammrg::open(const char *name, int mode __attribute__((unused)), +int ha_myisammrg::open(const char *name, int mode MY_ATTRIBUTE((unused)), uint test_if_locked_arg) { DBUG_ENTER("ha_myisammrg::open"); @@ -1183,8 +1183,8 @@ } int ha_myisammrg::index_next_same(uchar * buf, - const uchar *key __attribute__((unused)), - uint length __attribute__((unused))) + const uchar *key MY_ATTRIBUTE((unused)), + uint length MY_ATTRIBUTE((unused))) { int error; DBUG_ASSERT(this->file->children_attached); diff -Nru mysql-5.6-5.6.27/storage/ndb/include/ndb_global.h mysql-5.6-5.6.33/storage/ndb/include/ndb_global.h --- mysql-5.6-5.6.27/storage/ndb/include/ndb_global.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/ndb/include/ndb_global.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -251,19 +251,19 @@ #endif /** - * __attribute__((noreturn)) was introduce in gcc 2.5 + * MY_ATTRIBUTE((noreturn)) was introduce in gcc 2.5 */ #if (GCC_VERSION >= 2005) -#define ATTRIBUTE_NORETURN __attribute__((noreturn)) +#define ATTRIBUTE_NORETURN MY_ATTRIBUTE((noreturn)) #else #define ATTRIBUTE_NORETURN #endif /** - * __attribute__((noinline)) was introduce in gcc 3.1 + * MY_ATTRIBUTE((noinline)) was introduce in gcc 3.1 */ #if (GCC_VERSION >= 3001) -#define ATTRIBUTE_NOINLINE __attribute__((noinline)) +#define ATTRIBUTE_NOINLINE MY_ATTRIBUTE((noinline)) #else #define ATTRIBUTE_NOINLINE #endif diff -Nru mysql-5.6-5.6.27/storage/ndb/include/util/ndb_opts.h mysql-5.6-5.6.33/storage/ndb/include/util/ndb_opts.h --- mysql-5.6-5.6.27/storage/ndb/include/util/ndb_opts.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/ndb/include/util/ndb_opts.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -123,7 +123,7 @@ void (*usage)(void)); my_bool ndb_std_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), + const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument); void ndb_usage(void (*usagefunc)(void), const char *load_default_groups[], diff -Nru mysql-5.6-5.6.27/storage/ndb/src/common/util/ndb_opts.c mysql-5.6-5.6.33/storage/ndb/src/common/util/ndb_opts.c --- mysql-5.6-5.6.27/storage/ndb/src/common/util/ndb_opts.c 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/ndb/src/common/util/ndb_opts.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -82,8 +82,8 @@ my_bool ndb_std_get_one_option(int optid, - const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) + const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) { switch (optid) { #ifndef DBUG_OFF diff -Nru mysql-5.6-5.6.27/storage/ndb/src/cw/cpcd/main.cpp mysql-5.6-5.6.33/storage/ndb/src/cw/cpcd/main.cpp --- mysql-5.6-5.6.27/storage/ndb/src/cw/cpcd/main.cpp 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/ndb/src/cw/cpcd/main.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ }; static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { return 0; diff -Nru mysql-5.6-5.6.27/storage/ndb/tools/restore/restore_main.cpp mysql-5.6-5.6.33/storage/ndb/tools/restore/restore_main.cpp --- mysql-5.6-5.6.27/storage/ndb/tools/restore/restore_main.cpp 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/ndb/tools/restore/restore_main.cpp 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -415,7 +415,7 @@ } static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { #ifndef DBUG_OFF diff -Nru mysql-5.6-5.6.27/storage/perfschema/pfs.cc mysql-5.6-5.6.33/storage/perfschema/pfs.cc --- mysql-5.6-5.6.27/storage/perfschema/pfs.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/pfs.cc 2016-08-26 11:22:35.000000000 +0000 @@ -4388,6 +4388,8 @@ const void *charset) { DBUG_ASSERT(state != NULL); + DBUG_ASSERT(charset != NULL); + if (! flag_global_instrumentation) return NULL; PFS_statement_class *klass= find_statement_class(key); @@ -4432,6 +4434,8 @@ pfs->m_lock_time= 0; pfs->m_current_schema_name_length= 0; pfs->m_sqltext_length= 0; + pfs->m_sqltext_truncated= false; + pfs->m_sqltext_cs_number= system_charset_info->number; /* default */ pfs->m_message_text[0]= '\0'; pfs->m_sql_errno= 0; @@ -4511,6 +4515,7 @@ state->m_digest= NULL; state->m_schema_name_length= 0; + state->m_cs_number= ((CHARSET_INFO *)charset)->number; return reinterpret_cast (state); } @@ -4616,10 +4621,14 @@ PFS_events_statements *pfs= reinterpret_cast (state->m_statement); DBUG_ASSERT(pfs != NULL); if (text_len > sizeof (pfs->m_sqltext)) + { text_len= sizeof(pfs->m_sqltext); + pfs->m_sqltext_truncated= true; + } if (text_len) memcpy(pfs->m_sqltext, text, text_len); pfs->m_sqltext_length= text_len; + pfs->m_sqltext_cs_number= state->m_cs_number; } return; diff -Nru mysql-5.6-5.6.27/storage/perfschema/pfs_events_statements.h mysql-5.6-5.6.33/storage/perfschema/pfs_events_statements.h --- mysql-5.6-5.6.27/storage/perfschema/pfs_events_statements.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/pfs_events_statements.h 2016-08-26 11:22:35.000000000 +0000 @@ -88,6 +88,12 @@ ulonglong m_no_index_used; /** Optimizer metric, number of 'no good index used'. */ ulonglong m_no_good_index_used; + + /** True if sqltext was truncated. */ + bool m_sqltext_truncated; + /** Statement character set number. */ + uint m_sqltext_cs_number; + /** Statement digest. This underlying token array storage pointer is immutable, diff -Nru mysql-5.6-5.6.27/storage/perfschema/table_events_statements.cc mysql-5.6-5.6.33/storage/perfschema/table_events_statements.cc --- mysql-5.6-5.6.27/storage/perfschema/table_events_statements.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/table_events_statements.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -337,9 +337,38 @@ m_row.m_name= klass->m_name; m_row.m_name_length= klass->m_name_length; - m_row.m_sqltext_length= statement->m_sqltext_length; - if (m_row.m_sqltext_length > 0) - memcpy(m_row.m_sqltext, statement->m_sqltext, m_row.m_sqltext_length); + CHARSET_INFO *cs= get_charset(statement->m_sqltext_cs_number, MYF(0)); + size_t valid_length= statement->m_sqltext_length; + + if (cs != NULL) + { + if (cs->mbmaxlen > 1) + { + int well_formed_error; + valid_length= cs->cset->well_formed_len(cs, + statement->m_sqltext, + statement->m_sqltext + valid_length, + valid_length, + &well_formed_error); + } + } + + m_row.m_sqltext.set_charset(cs); + m_row.m_sqltext.length(0); + m_row.m_sqltext.append(statement->m_sqltext, (uint32)valid_length, cs); + + /* Indicate that sqltext is truncated or not well-formed. */ + if (statement->m_sqltext_truncated || valid_length < statement->m_sqltext_length) + { + size_t chars= m_row.m_sqltext.numchars(); + if (chars > 3) + { + chars-= 3; + size_t bytes_offset= m_row.m_sqltext.charpos(chars, 0); + m_row.m_sqltext.length(bytes_offset); + m_row.m_sqltext.append("...", 3); + } + } m_row.m_current_schema_name_length= statement->m_current_schema_name_length; if (m_row.m_current_schema_name_length > 0) @@ -482,8 +511,8 @@ f->set_null(); break; case 9: /* SQL_TEXT */ - if (m_row.m_sqltext_length) - set_field_longtext_utf8(f, m_row.m_sqltext, m_row.m_sqltext_length); + if (m_row.m_sqltext.length()) + set_field_longtext_utf8(f, m_row.m_sqltext.ptr(), m_row.m_sqltext.length()); else f->set_null(); break; diff -Nru mysql-5.6-5.6.27/storage/perfschema/table_events_statements.h mysql-5.6-5.6.33/storage/perfschema/table_events_statements.h --- mysql-5.6-5.6.27/storage/perfschema/table_events_statements.h 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/table_events_statements.h 2016-08-26 11:22:35.000000000 +0000 @@ -63,11 +63,9 @@ /** Length in bytes of @c m_source. */ uint m_source_length; /** Column SQL_TEXT. */ - char m_sqltext[COL_INFO_SIZE]; + String m_sqltext; /** Column DIGEST and DIGEST_TEXT. */ PFS_digest_row m_digest; - /** Length in bytes of @c m_info. */ - uint m_sqltext_length; /** Column CURRENT_SCHEMA. */ char m_current_schema_name[NAME_LEN]; /** Length in bytes of @c m_current_schema_name. */ diff -Nru mysql-5.6-5.6.27/storage/perfschema/table_session_connect.cc mysql-5.6-5.6.33/storage/perfschema/table_session_connect.cc --- mysql-5.6-5.6.27/storage/perfschema/table_session_connect.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/table_session_connect.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -251,7 +251,8 @@ &m_row.m_attr_value_length)) { /* we don't expect internal threads to have connection attributes */ - DBUG_ASSERT(pfs->m_processlist_id != 0); + if (pfs->m_processlist_id == 0) + return; m_row.m_ordinal_position= ordinal; m_row.m_process_id= pfs->m_processlist_id; diff -Nru mysql-5.6-5.6.27/storage/perfschema/unittest/pfs_server_stubs.cc mysql-5.6-5.6.33/storage/perfschema/unittest/pfs_server_stubs.cc --- mysql-5.6-5.6.27/storage/perfschema/unittest/pfs_server_stubs.cc 2015-09-18 14:24:45.000000000 +0000 +++ mysql-5.6-5.6.33/storage/perfschema/unittest/pfs_server_stubs.cc 2016-08-26 11:22:35.000000000 +0000 @@ -28,6 +28,7 @@ uint lower_case_table_names= 0; CHARSET_INFO *files_charset_info= NULL; +CHARSET_INFO *system_charset_info= NULL; void compute_digest_md5(const sql_digest_storage *, unsigned char *) { diff -Nru mysql-5.6-5.6.27/strings/conf_to_src.c mysql-5.6-5.6.33/strings/conf_to_src.c --- mysql-5.6-5.6.27/strings/conf_to_src.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/strings/conf_to_src.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -145,8 +145,8 @@ static void -default_reporter(enum loglevel level __attribute__ ((unused)), - const char *format __attribute__ ((unused)), +default_reporter(enum loglevel level MY_ATTRIBUTE ((unused)), + const char *format MY_ATTRIBUTE ((unused)), ...) { } @@ -271,7 +271,7 @@ fprint_copyright(FILE *file) { fprintf(file, -"/* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.\n" +"/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.\n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" @@ -290,7 +290,7 @@ int -main(int argc, char **argv __attribute__((unused))) +main(int argc, char **argv MY_ATTRIBUTE((unused))) { CHARSET_INFO ncs; CHARSET_INFO *cs; diff -Nru mysql-5.6-5.6.27/strings/ctype-big5.c mysql-5.6-5.6.33/strings/ctype-big5.c --- mysql-5.6-5.6.27/strings/ctype-big5.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-big5.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -872,7 +872,7 @@ /* Compare strings */ -static int my_strnncoll_big5(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncoll_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool b_is_prefix) @@ -885,7 +885,7 @@ /* compare strings, ignore end space */ -static int my_strnncollsp_big5(const CHARSET_INFO* cs __attribute__((unused)), +static int my_strnncollsp_big5(const CHARSET_INFO* cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -957,14 +957,14 @@ } -static uint ismbchar_big5(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return (isbig5head(*(p)) && (e)-(p)>1 && isbig5tail(*((p)+1))? 2: 0); } -static uint mbcharlen_big5(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (isbig5head(c)? 2 : 1); @@ -6742,7 +6742,7 @@ static int -my_wc_mb_big5(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { @@ -6771,7 +6771,7 @@ static int -my_mb_wc_big5(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc,const uchar *s,const uchar *e) { @@ -6801,7 +6801,7 @@ CP950 and HKSCS additional characters are also accepted. */ static -size_t my_well_formed_len_big5(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_big5(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-bin.c mysql-5.6-5.6.33/strings/ctype-bin.c --- mysql-5.6-5.6.27/strings/ctype-bin.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-bin.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (c) 2002 MySQL AB & tommy@valley.ne.jp - Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -69,13 +69,13 @@ static my_bool my_coll_init_8bit_bin(CHARSET_INFO *cs, - MY_CHARSET_LOADER *loader __attribute__((unused))) + MY_CHARSET_LOADER *loader MY_ATTRIBUTE((unused))) { cs->max_sort_char=255; return FALSE; } -static int my_strnncoll_binary(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncoll_binary(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool t_is_prefix) @@ -86,8 +86,8 @@ } -size_t my_lengthsp_binary(const CHARSET_INFO *cs __attribute__((unused)), - const char *ptr __attribute__((unused)), +size_t my_lengthsp_binary(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *ptr MY_ATTRIBUTE((unused)), size_t length) { return length; @@ -117,18 +117,18 @@ */ static int my_strnncollsp_binary(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { return my_strnncoll_binary(cs,s,slen,t,tlen,0); } static int my_strnncoll_8bit_bin(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool t_is_prefix) @@ -165,7 +165,7 @@ */ static int my_strnncollsp_8bit_bin(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -214,41 +214,41 @@ /* This function is used for all conversion functions */ -static size_t my_case_str_bin(const CHARSET_INFO *cs __attribute__((unused)), - char *str __attribute__((unused))) +static size_t my_case_str_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + char *str MY_ATTRIBUTE((unused))) { return 0; } -static size_t my_case_bin(const CHARSET_INFO *cs __attribute__((unused)), - char *src __attribute__((unused)), +static size_t my_case_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + char *src MY_ATTRIBUTE((unused)), size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { return srclen; } -static int my_strcasecmp_bin(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strcasecmp_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *s, const char *t) { return strcmp(s,t); } -uint my_mbcharlen_8bit(const CHARSET_INFO *cs __attribute__((unused)), - uint c __attribute__((unused))) +uint my_mbcharlen_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + uint c MY_ATTRIBUTE((unused))) { return 1; } -static int my_mb_wc_bin(const CHARSET_INFO *cs __attribute__((unused)), +static int my_mb_wc_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *wc, const uchar *str, - const uchar *end __attribute__((unused))) + const uchar *end MY_ATTRIBUTE((unused))) { if (str >= end) return MY_CS_TOOSMALL; @@ -258,10 +258,10 @@ } -static int my_wc_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +static int my_wc_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, - uchar *e __attribute__((unused))) + uchar *e MY_ATTRIBUTE((unused))) { if (s >= e) return MY_CS_TOOSMALL; @@ -275,7 +275,7 @@ } -void my_hash_sort_8bit_bin(const CHARSET_INFO *cs __attribute__((unused)), +void my_hash_sort_8bit_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len, ulong *nr1, ulong *nr2) { @@ -296,7 +296,7 @@ } -void my_hash_sort_bin(const CHARSET_INFO *cs __attribute__((unused)), +void my_hash_sort_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len,ulong *nr1, ulong *nr2) { const uchar *pos = key; @@ -428,7 +428,7 @@ static -uint my_instr_bin(const CHARSET_INFO *cs __attribute__((unused)), +uint my_instr_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, size_t b_length, const char *s, size_t s_length, my_match_t *match, uint nmatch) diff -Nru mysql-5.6-5.6.27/strings/ctype-cp932.c mysql-5.6-5.6.33/strings/ctype-cp932.c --- mysql-5.6-5.6.27/strings/ctype-cp932.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-cp932.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -182,13 +182,13 @@ (0x80<=(c) && (c)<=0xfc)) -static uint ismbchar_cp932(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return (iscp932head((uchar) *p) && (e-p)>1 && iscp932tail((uchar)p[1]) ? 2: 0); } -static uint mbcharlen_cp932(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (iscp932head((uchar) c) ? 2 : 1); @@ -1742,7 +1742,7 @@ } -static int my_strnncoll_cp932(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncoll_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool b_is_prefix) @@ -1755,11 +1755,11 @@ static int my_strnncollsp_cp932(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { const uchar *a_end= a + a_length; const uchar *b_end= b + b_length; @@ -34601,7 +34601,7 @@ */ static int -my_mb_wc_cp932(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e){ int hi; @@ -34645,7 +34645,7 @@ @retval MY_CS_ILUNI If the Unicode character does not exist in CP932 */ static int -my_wc_mb_cp932(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -34685,7 +34685,7 @@ static -size_t my_numcells_cp932(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numcells_cp932(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *str, const char *str_end) { size_t clen= 0; @@ -34720,7 +34720,7 @@ static size_t my_well_formed_len_cp932(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-czech.c mysql-5.6-5.6.33/strings/ctype-czech.c --- mysql-5.6-5.6.27/strings/ctype-czech.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-czech.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -228,7 +228,7 @@ the length of the strings being specified */ -static int my_strnncoll_czech(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncoll_czech(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s1, size_t len1, const uchar *s2, size_t len2, my_bool s2_is_prefix) @@ -266,7 +266,7 @@ const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { for ( ; slen && s[slen-1] == ' ' ; slen--); for ( ; tlen && t[tlen-1] == ' ' ; tlen--); @@ -279,7 +279,7 @@ */ static size_t my_strnxfrmlen_czech(const CHARSET_INFO *cs - __attribute__((unused)), size_t len) + MY_ATTRIBUTE((unused)), size_t len) { return len * 4 + 4; } @@ -291,9 +291,9 @@ */ static size_t -my_strnxfrm_czech(const CHARSET_INFO *cs __attribute__((unused)), +my_strnxfrm_czech(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uchar *dest, size_t len, - uint nweights_arg __attribute__((unused)), + uint nweights_arg MY_ATTRIBUTE((unused)), const uchar *src, size_t srclen, uint flags) { int value; @@ -369,7 +369,7 @@ static my_bool my_like_range_czech(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const char *ptr,size_t ptr_length, pbool escape, pbool w_one, pbool w_many, size_t res_length, char *min_str, diff -Nru mysql-5.6-5.6.27/strings/ctype-eucjpms.c mysql-5.6-5.6.33/strings/ctype-eucjpms.c --- mysql-5.6-5.6.27/strings/ctype-eucjpms.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-eucjpms.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (c) 2002 MySQL AB & tommy@valley.ne.jp - Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -185,7 +185,7 @@ #define iseucjpms_ss3(c) (((c)&0xff) == 0x8f) -static uint ismbchar_eucjpms(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_eucjpms(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return ((*(uchar*)(p)<0x80)? 0:\ @@ -195,7 +195,7 @@ 0); } -static uint mbcharlen_eucjpms(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_eucjpms(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (iseucjpms(c)? 2: iseucjpms_ss2(c)? 2: iseucjpms_ss3(c)? 3: 1); @@ -67311,7 +67311,7 @@ @retval MY_CS_ILSEQ If a wrong byte sequence was found */ static int -my_mb_wc_eucjpms(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_eucjpms(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { int hi; @@ -67371,7 +67371,7 @@ @retval MY_CS_ILUNI If the Unicode character does not exist in EUCJPMS */ static int -my_wc_mb_eucjpms(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_eucjpms(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int jp; @@ -67427,7 +67427,7 @@ static size_t my_well_formed_len_eucjpms(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const char *beg, const char *end, size_t pos, int *error) { @@ -67475,7 +67475,7 @@ static -size_t my_numcells_eucjpms(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numcells_eucjpms(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *str, const char *str_end) { size_t clen; diff -Nru mysql-5.6-5.6.27/strings/ctype-euc_kr.c mysql-5.6-5.6.33/strings/ctype-euc_kr.c --- mysql-5.6-5.6.27/strings/ctype-euc_kr.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-euc_kr.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -202,7 +202,7 @@ iseuc_kr_tail3(c)) -static uint ismbchar_euc_kr(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_euc_kr(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return ((*(uchar*)(p)<0x80)? 0:\ @@ -210,7 +210,7 @@ 0); } -static uint mbcharlen_euc_kr(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_euc_kr(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (iseuc_kr_head(c) ? 2 : 1); @@ -9877,7 +9877,7 @@ static int -my_wc_mb_euc_kr(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_euc_kr(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -9905,7 +9905,7 @@ static int -my_mb_wc_euc_kr(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_euc_kr(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { @@ -9934,7 +9934,7 @@ Returns well formed length of a EUC-KR string. */ static size_t -my_well_formed_len_euckr(const CHARSET_INFO *cs __attribute__((unused)), +my_well_formed_len_euckr(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-gb2312.c mysql-5.6-5.6.33/strings/ctype-gb2312.c --- mysql-5.6-5.6.27/strings/ctype-gb2312.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-gb2312.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -165,13 +165,13 @@ #define isgb2312tail(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xfe) -static uint ismbchar_gb2312(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_gb2312(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return (isgb2312head(*(p)) && (e)-(p)>1 && isgb2312tail(*((p)+1))? 2: 0); } -static uint mbcharlen_gb2312(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_gb2312(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (isgb2312head(c)? 2 : 1); @@ -6282,7 +6282,7 @@ static int -my_wc_mb_gb2312(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_gb2312(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -6310,7 +6310,7 @@ static int -my_mb_wc_gb2312(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_gb2312(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e){ int hi; @@ -6337,7 +6337,7 @@ Returns well formed length of a EUC-KR string. */ static size_t -my_well_formed_len_gb2312(const CHARSET_INFO *cs __attribute__((unused)), +my_well_formed_len_gb2312(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-gbk.c mysql-5.6-5.6.33/strings/ctype-gbk.c --- mysql-5.6-5.6.27/strings/ctype-gbk.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-gbk.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -3475,7 +3475,7 @@ -int my_strnncoll_gbk(const CHARSET_INFO *cs __attribute__((unused)), +int my_strnncoll_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool b_is_prefix) @@ -3486,7 +3486,7 @@ } -static int my_strnncollsp_gbk(const CHARSET_INFO * cs __attribute__((unused)), +static int my_strnncollsp_gbk(const CHARSET_INFO * cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -3558,13 +3558,13 @@ } -static uint ismbchar_gbk(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return (isgbkhead(*(p)) && (e)-(p)>1 && isgbktail(*((p)+1))? 2: 0); } -static uint mbcharlen_gbk(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (isgbkhead(c)? 2 : 1); @@ -10675,7 +10675,7 @@ } static int -my_wc_mb_gbk(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -10701,7 +10701,7 @@ } static int -my_mb_wc_gbk(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { int hi; @@ -10732,7 +10732,7 @@ Returns well formed length of a GBK string. */ static -size_t my_well_formed_len_gbk(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_gbk(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-latin1.c mysql-5.6-5.6.33/strings/ctype-latin1.c --- mysql-5.6-5.6.27/strings/ctype-latin1.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-latin1.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -356,10 +356,10 @@ }; static -int my_mb_wc_latin1(const CHARSET_INFO *cs __attribute__((unused)), +int my_mb_wc_latin1(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *wc, const uchar *str, - const uchar *end __attribute__((unused))) + const uchar *end MY_ATTRIBUTE((unused))) { if (str >= end) return MY_CS_TOOSMALL; @@ -369,10 +369,10 @@ } static -int my_wc_mb_latin1(const CHARSET_INFO *cs __attribute__((unused)), +int my_wc_mb_latin1(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *str, - uchar *end __attribute__((unused))) + uchar *end MY_ATTRIBUTE((unused))) { uchar *pl; @@ -547,7 +547,7 @@ static int my_strnncoll_latin1_de(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool b_is_prefix) @@ -589,7 +589,7 @@ static int my_strnncollsp_latin1_de(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -683,7 +683,7 @@ } -void my_hash_sort_latin1_de(const CHARSET_INFO *cs __attribute__((unused)), +void my_hash_sort_latin1_de(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len, ulong *nr1, ulong *nr2) { diff -Nru mysql-5.6-5.6.27/strings/ctype-mb.c mysql-5.6-5.6.33/strings/ctype-mb.c --- mysql-5.6-5.6.27/strings/ctype-mb.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-mb.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -74,8 +74,8 @@ For character sets which don't change octet length in case conversion. */ size_t my_caseup_mb(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { register uint32 l; register char *srcend= src + srclen; @@ -109,8 +109,8 @@ size_t my_casedn_mb(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { register uint32 l; register char *srcend= src + srclen; @@ -155,7 +155,7 @@ static size_t my_casefold_mb_varlen(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst, size_t dstlen __attribute__((unused)), + char *dst, size_t dstlen MY_ATTRIBUTE((unused)), uchar *map, size_t is_upper) { @@ -373,7 +373,7 @@ } -size_t my_numchars_mb(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numchars_mb(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *pos, const char *end) { register size_t count= 0; @@ -387,7 +387,7 @@ } -size_t my_charpos_mb(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_charpos_mb(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *pos, const char *end, size_t length) { const char *start= pos; @@ -482,7 +482,7 @@ /* BINARY collations handlers for MB charsets */ int -my_strnncoll_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +my_strnncoll_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool t_is_prefix) @@ -519,7 +519,7 @@ */ int -my_strnncollsp_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +my_strnncollsp_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -670,7 +670,7 @@ int -my_strcasecmp_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +my_strcasecmp_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *s, const char *t) { return strcmp(s,t); @@ -678,7 +678,7 @@ void -my_hash_sort_mb_bin(const CHARSET_INFO *cs __attribute__((unused)), +my_hash_sort_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len,ulong *nr1, ulong *nr2) { const uchar *pos = key; diff -Nru mysql-5.6-5.6.27/strings/ctype-simple.c mysql-5.6-5.6.33/strings/ctype-simple.c --- mysql-5.6-5.6.27/strings/ctype-simple.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-simple.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -216,8 +216,8 @@ size_t my_caseup_8bit(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { char *end= src + srclen; register uchar *map= cs->to_upper; @@ -229,8 +229,8 @@ size_t my_casedn_8bit(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { char *end= src + srclen; register uchar *map=cs->to_lower; @@ -251,7 +251,7 @@ int my_mb_wc_8bit(const CHARSET_INFO *cs,my_wc_t *wc, const uchar *str, - const uchar *end __attribute__((unused))) + const uchar *end MY_ATTRIBUTE((unused))) { if (str >= end) return MY_CS_TOOSMALL; @@ -288,8 +288,8 @@ end buffer must be checked. */ -size_t my_snprintf_8bit(const CHARSET_INFO *cs __attribute__((unused)), - char* to, size_t n __attribute__((unused)), +size_t my_snprintf_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + char* to, size_t n MY_ATTRIBUTE((unused)), const char* fmt, ...) { va_list args; @@ -506,7 +506,7 @@ } -longlong my_strntoll_8bit(const CHARSET_INFO *cs __attribute__((unused)), +longlong my_strntoll_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *nptr, size_t l, int base, char **endptr,int *err) { @@ -714,7 +714,7 @@ */ -double my_strntod_8bit(const CHARSET_INFO *cs __attribute__((unused)), +double my_strntod_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char *str, size_t length, char **end, int *err) { @@ -731,7 +731,7 @@ Assume len >= 1 */ -size_t my_long10_to_str_8bit(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_long10_to_str_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char *dst, size_t len, int radix, long int val) { char buffer[66]; @@ -773,7 +773,7 @@ size_t my_longlong10_to_str_8bit(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), char *dst, size_t len, int radix, longlong val) { @@ -1030,37 +1030,37 @@ } -void my_fill_8bit(const CHARSET_INFO *cs __attribute__((unused)), +void my_fill_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char *s, size_t l, int fill) { memset(s, fill, l); } -size_t my_numchars_8bit(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numchars_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e) { return (size_t) (e - b); } -size_t my_numcells_8bit(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numcells_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e) { return (size_t) (e - b); } -size_t my_charpos_8bit(const CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused)), +size_t my_charpos_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *b MY_ATTRIBUTE((unused)), + const char *e MY_ATTRIBUTE((unused)), size_t pos) { return pos; } -size_t my_well_formed_len_8bit(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *start, const char *end, size_t nchars, int *error) { @@ -1070,7 +1070,7 @@ } -size_t my_lengthsp_8bit(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_lengthsp_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *ptr, size_t length) { const char *end; @@ -1274,14 +1274,14 @@ static my_bool my_coll_init_simple(CHARSET_INFO *cs, - MY_CHARSET_LOADER *loader __attribute__((unused))) + MY_CHARSET_LOADER *loader MY_ATTRIBUTE((unused))) { set_max_sort_char(cs); return FALSE; } -longlong my_strtoll10_8bit(const CHARSET_INFO *cs __attribute__((unused)), +longlong my_strtoll10_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *nptr, char **endptr, int *error) { return my_strtoll10(nptr, endptr, error); @@ -1387,7 +1387,7 @@ */ ulonglong -my_strntoull10rnd_8bit(const CHARSET_INFO *cs __attribute__((unused)), +my_strntoull10rnd_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *str, size_t length, int unsigned_flag, char **endptr, int *error) { @@ -1665,17 +1665,17 @@ -my_bool my_propagate_simple(const CHARSET_INFO *cs __attribute__((unused)), - const uchar *str __attribute__((unused)), - size_t length __attribute__((unused))) +my_bool my_propagate_simple(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const uchar *str MY_ATTRIBUTE((unused)), + size_t length MY_ATTRIBUTE((unused))) { return 1; } -my_bool my_propagate_complex(const CHARSET_INFO *cs __attribute__((unused)), - const uchar *str __attribute__((unused)), - size_t length __attribute__((unused))) +my_bool my_propagate_complex(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const uchar *str MY_ATTRIBUTE((unused)), + size_t length MY_ATTRIBUTE((unused))) { return 0; } diff -Nru mysql-5.6-5.6.27/strings/ctype-sjis.c mysql-5.6-5.6.33/strings/ctype-sjis.c --- mysql-5.6-5.6.27/strings/ctype-sjis.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-sjis.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -182,13 +182,13 @@ (0x80<=(c) && (c)<=0xfc)) -static uint ismbchar_sjis(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return (issjishead((uchar) *p) && (e-p)>1 && issjistail((uchar)p[1]) ? 2: 0); } -static uint mbcharlen_sjis(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (issjishead((uchar) c) ? 2 : 1); @@ -1112,7 +1112,7 @@ } -static int my_strnncoll_sjis(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncoll_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool b_is_prefix) @@ -1124,7 +1124,7 @@ } -static int my_strnncollsp_sjis(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncollsp_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *a, size_t a_length, const uchar *b, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -33968,7 +33968,7 @@ @retval MY_CS_ILSEQ If a wrong byte sequence was found */ static int -my_mb_wc_sjis(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e){ int hi; @@ -34012,7 +34012,7 @@ @retval MY_CS_ILUNI If the Unicode character does not exist in SJIS */ static int -my_wc_mb_sjis(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -34061,7 +34061,7 @@ static -size_t my_numcells_sjis(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numcells_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *str, const char *str_end) { size_t clen; @@ -34094,7 +34094,7 @@ CP932 additional characters are also accepted. */ static -size_t my_well_formed_len_sjis(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_sjis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos, int *error) { diff -Nru mysql-5.6-5.6.27/strings/ctype-tis620.c mysql-5.6-5.6.33/strings/ctype-tis620.c --- mysql-5.6-5.6.27/strings/ctype-tis620.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-tis620.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -526,7 +526,7 @@ */ static -int my_strnncoll_tis620(const CHARSET_INFO *cs __attribute__((unused)), +int my_strnncoll_tis620(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s1, size_t len1, const uchar *s2, size_t len2, my_bool s2_is_prefix) @@ -556,7 +556,7 @@ static -int my_strnncollsp_tis620(const CHARSET_INFO * cs __attribute__((unused)), +int my_strnncollsp_tis620(const CHARSET_INFO * cs MY_ATTRIBUTE((unused)), const uchar *a0, size_t a_length, const uchar *b0, size_t b_length, my_bool diff_if_only_endspace_difference) @@ -841,10 +841,10 @@ static -int my_mb_wc_tis620(const CHARSET_INFO *cs __attribute__((unused)), +int my_mb_wc_tis620(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *wc, const uchar *str, - const uchar *end __attribute__((unused))) + const uchar *end MY_ATTRIBUTE((unused))) { if (str >= end) return MY_CS_TOOSMALL; @@ -854,10 +854,10 @@ } static -int my_wc_mb_tis620(const CHARSET_INFO *cs __attribute__((unused)), +int my_wc_mb_tis620(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *str, - uchar *end __attribute__((unused))) + uchar *end MY_ATTRIBUTE((unused))) { uchar *pl; diff -Nru mysql-5.6-5.6.27/strings/ctype-ucs2.c mysql-5.6-5.6.33/strings/ctype-ucs2.c --- mysql-5.6-5.6.27/strings/ctype-ucs2.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-ucs2.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -64,8 +64,8 @@ static size_t -my_caseup_str_mb2_or_mb4(const CHARSET_INFO * cs __attribute__((unused)), - char * s __attribute__((unused))) +my_caseup_str_mb2_or_mb4(const CHARSET_INFO * cs MY_ATTRIBUTE((unused)), + char * s MY_ATTRIBUTE((unused))) { DBUG_ASSERT(0); return 0; @@ -73,8 +73,8 @@ static size_t -my_casedn_str_mb2_or_mb4(const CHARSET_INFO *cs __attribute__((unused)), - char * s __attribute__((unused))) +my_casedn_str_mb2_or_mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + char * s MY_ATTRIBUTE((unused))) { DBUG_ASSERT(0); return 0; @@ -82,9 +82,9 @@ static int -my_strcasecmp_mb2_or_mb4(const CHARSET_INFO *cs __attribute__((unused)), - const char *s __attribute__((unused)), - const char *t __attribute__((unused))) +my_strcasecmp_mb2_or_mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *s MY_ATTRIBUTE((unused)), + const char *t MY_ATTRIBUTE((unused))) { DBUG_ASSERT(0); return 0; @@ -1047,7 +1047,7 @@ static size_t -my_snprintf_mb2(const CHARSET_INFO *cs __attribute__((unused)), +my_snprintf_mb2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char* to, size_t n, const char* fmt, ...) { size_t retval; @@ -1060,7 +1060,7 @@ static size_t -my_lengthsp_mb2(const CHARSET_INFO *cs __attribute__((unused)), +my_lengthsp_mb2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *ptr, size_t length) { const char *end= ptr + length; @@ -1102,7 +1102,7 @@ ((c & 3) << 8) + d + 0x10000) static int -my_utf16_uni(const CHARSET_INFO *cs __attribute__((unused)), +my_utf16_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { if (s + 2 > e) @@ -1135,7 +1135,7 @@ static int -my_uni_utf16(const CHARSET_INFO *cs __attribute__((unused)), +my_uni_utf16(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { if (wc <= 0xFFFF) @@ -1201,8 +1201,8 @@ static size_t my_caseup_utf16(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -1246,8 +1246,8 @@ static size_t my_casedn_utf16(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -1415,8 +1415,8 @@ static uint -my_mbcharlen_utf16(const CHARSET_INFO *cs __attribute__((unused)), - uint c __attribute__((unused))) +my_mbcharlen_utf16(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + uint c MY_ATTRIBUTE((unused))) { DBUG_ASSERT(0); return MY_UTF16_HIGH_HEAD(c) ? 4 : 2; @@ -1749,7 +1749,7 @@ static int -my_utf16le_uni(const CHARSET_INFO *cs __attribute__((unused)), +my_utf16le_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { my_wc_t lo; @@ -1779,7 +1779,7 @@ static int -my_uni_utf16le(const CHARSET_INFO *cs __attribute__((unused)), +my_uni_utf16le(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { if (wc < MY_UTF16_SURROGATE_HIGH_FIRST || @@ -1806,7 +1806,7 @@ static size_t -my_lengthsp_utf16le(const CHARSET_INFO *cs __attribute__((unused)), +my_lengthsp_utf16le(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *ptr, size_t length) { const char *end= ptr + length; @@ -1922,7 +1922,7 @@ #ifdef HAVE_CHARSET_utf32 static int -my_utf32_uni(const CHARSET_INFO *cs __attribute__((unused)), +my_utf32_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { if (s + 4 > e) @@ -1933,7 +1933,7 @@ static int -my_uni_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_uni_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { if (s + 4 > e) @@ -1983,8 +1983,8 @@ static size_t my_caseup_utf32(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -2039,8 +2039,8 @@ static size_t my_casedn_utf32(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -2198,7 +2198,7 @@ static size_t -my_strnxfrmlen_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_strnxfrmlen_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), size_t len) { return len / 2; @@ -2206,17 +2206,17 @@ static uint -my_ismbchar_utf32(const CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused))) +my_ismbchar_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *b MY_ATTRIBUTE((unused)), + const char *e MY_ATTRIBUTE((unused))) { return 4; } static uint -my_mbcharlen_utf32(const CHARSET_INFO *cs __attribute__((unused)) , - uint c __attribute__((unused))) +my_mbcharlen_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)) , + uint c MY_ATTRIBUTE((unused))) { return 4; } @@ -2312,7 +2312,7 @@ static size_t -my_snprintf_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_snprintf_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char* to, size_t n, const char* fmt, ...) { size_t retval; @@ -2325,7 +2325,7 @@ static longlong -my_strtoll10_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_strtoll10_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *nptr, char **endptr, int *error) { const char *s, *end, *start, *n_end, *true_end; @@ -2495,7 +2495,7 @@ static size_t -my_numchars_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_numchars_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e) { return (size_t) (e - b) / 4; @@ -2503,7 +2503,7 @@ static size_t -my_charpos_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_charpos_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t pos) { size_t string_length= (size_t) (e - b); @@ -2512,7 +2512,7 @@ static size_t -my_well_formed_len_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_well_formed_len_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t nchars, int *error) { @@ -2565,7 +2565,7 @@ static size_t -my_lengthsp_utf32(const CHARSET_INFO *cs __attribute__((unused)), +my_lengthsp_utf32(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *ptr, size_t length) { const char *end= ptr + length; @@ -2643,11 +2643,11 @@ static int -my_strnncollsp_utf32_bin(const CHARSET_INFO *cs __attribute__((unused)), +my_strnncollsp_utf32_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { const uchar *se, *te; size_t minlen; @@ -2910,7 +2910,7 @@ }; -static int my_ucs2_uni(const CHARSET_INFO *cs __attribute__((unused)), +static int my_ucs2_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t * pwc, const uchar *s, const uchar *e) { if (s+2 > e) /* Need 2 characters */ @@ -2920,7 +2920,7 @@ return 2; } -static int my_uni_ucs2(const CHARSET_INFO *cs __attribute__((unused)) , +static int my_uni_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)) , my_wc_t wc, uchar *r, uchar *e) { if ( r+2 > e ) @@ -2963,8 +2963,8 @@ static size_t my_caseup_ucs2(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -3008,8 +3008,8 @@ static size_t my_casedn_ucs2(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) + char *dst MY_ATTRIBUTE((unused)), + size_t dstlen MY_ATTRIBUTE((unused))) { my_wc_t wc; int res; @@ -3030,7 +3030,7 @@ static void -my_fill_ucs2(const CHARSET_INFO *cs __attribute__((unused)), +my_fill_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char *s, size_t l, int fill) { DBUG_ASSERT(fill <= 0xFFFF); @@ -3101,11 +3101,11 @@ > 0 a > b */ -static int my_strnncollsp_ucs2(const CHARSET_INFO *cs __attribute__((unused)), +static int my_strnncollsp_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { const uchar *se, *te; size_t minlen; @@ -3152,23 +3152,23 @@ } -static uint my_ismbchar_ucs2(const CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused))) +static uint my_ismbchar_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *b MY_ATTRIBUTE((unused)), + const char *e MY_ATTRIBUTE((unused))) { return 2; } -static uint my_mbcharlen_ucs2(const CHARSET_INFO *cs __attribute__((unused)) , - uint c __attribute__((unused))) +static uint my_mbcharlen_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)) , + uint c MY_ATTRIBUTE((unused))) { return 2; } static -size_t my_numchars_ucs2(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numchars_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e) { return (size_t) (e-b)/2; @@ -3176,9 +3176,9 @@ static -size_t my_charpos_ucs2(const CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused)), +size_t my_charpos_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), + const char *b MY_ATTRIBUTE((unused)), + const char *e MY_ATTRIBUTE((unused)), size_t pos) { size_t string_length= (size_t) (e - b); @@ -3187,7 +3187,7 @@ static -size_t my_well_formed_len_ucs2(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_ucs2(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *b, const char *e, size_t nchars, int *error) { @@ -3255,11 +3255,11 @@ } static int my_strnncollsp_ucs2_bin(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { const uchar *se, *te; size_t minlen; @@ -3303,7 +3303,7 @@ static -void my_hash_sort_ucs2_bin(const CHARSET_INFO *cs __attribute__((unused)), +void my_hash_sort_ucs2_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *key, size_t len,ulong *nr1, ulong *nr2) { const uchar *pos = key; diff -Nru mysql-5.6-5.6.27/strings/ctype-ujis.c mysql-5.6-5.6.33/strings/ctype-ujis.c --- mysql-5.6-5.6.27/strings/ctype-ujis.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-ujis.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (c) 2002 MySQL AB & tommy@valley.ne.jp - Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -184,7 +184,7 @@ #define isujis_ss3(c) (((c)&0xff) == 0x8f) -static uint ismbchar_ujis(const CHARSET_INFO *cs __attribute__((unused)), +static uint ismbchar_ujis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char* p, const char *e) { return ((*(uchar*)(p)<0x80)? 0:\ @@ -194,7 +194,7 @@ 0); } -static uint mbcharlen_ujis(const CHARSET_INFO *cs __attribute__((unused)), +static uint mbcharlen_ujis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { return (isujis(c)? 2: isujis_ss2(c)? 2: isujis_ss3(c)? 3: 1); @@ -210,7 +210,7 @@ */ static -size_t my_well_formed_len_ujis(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_well_formed_len_ujis(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *beg, const char *end, size_t pos, int *error) { @@ -260,7 +260,7 @@ static -size_t my_numcells_eucjp(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_numcells_eucjp(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *str, const char *str_end) { size_t clen; @@ -65880,7 +65880,7 @@ @retval MY_CS_ILSEQ If a wrong byte sequence was found */ static int -my_mb_wc_euc_jp(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_euc_jp(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { int hi; @@ -65940,7 +65940,7 @@ @retval MY_CS_ILUNI If the Unicode character does not exist in UJIS */ static int -my_wc_mb_euc_jp(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_euc_jp(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int jp; @@ -67181,7 +67181,7 @@ static size_t my_casefold_ujis(const CHARSET_INFO *cs, char *src, size_t srclen, - char *dst, size_t dstlen __attribute__((unused)), + char *dst, size_t dstlen MY_ATTRIBUTE((unused)), uchar *map, size_t is_upper) { diff -Nru mysql-5.6-5.6.27/strings/ctype-utf8.c mysql-5.6-5.6.33/strings/ctype-utf8.c --- mysql-5.6-5.6.27/strings/ctype-utf8.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-utf8.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -5327,7 +5327,7 @@ } -static int my_utf8_uni(const CHARSET_INFO *cs __attribute__((unused)), +static int my_utf8_uni(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t * pwc, const uchar *s, const uchar *e) { uchar c; @@ -5438,7 +5438,7 @@ for example, for a null-terminated string */ static int my_utf8_uni_no_range(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), my_wc_t * pwc, const uchar *s) { uchar c; @@ -5479,7 +5479,7 @@ } -static int my_uni_utf8 (const CHARSET_INFO *cs __attribute__((unused)), +static int my_uni_utf8 (const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *r, uchar *e) { int count; @@ -5529,7 +5529,7 @@ The same as above, but without range check. */ static int my_uni_utf8_no_range(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *r) { int count; @@ -5955,7 +5955,7 @@ static -size_t my_strnxfrmlen_utf8(const CHARSET_INFO *cs __attribute__((unused)), +size_t my_strnxfrmlen_utf8(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), size_t len) { return (len * 2 + 2) / 3; @@ -5963,7 +5963,7 @@ static -int my_valid_mbcharlen_utf8(const CHARSET_INFO *cs __attribute__((unused)), +int my_valid_mbcharlen_utf8(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, const uchar *e) { uchar c; @@ -6050,7 +6050,7 @@ return (res>1) ? res : 0; } -static uint my_mbcharlen_utf8(const CHARSET_INFO *cs __attribute__((unused)), +static uint my_mbcharlen_utf8(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { if (c < 0x80) @@ -7575,7 +7575,7 @@ #define MY_FILENAME_ESCAPE '@' static int -my_mb_wc_filename(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_filename(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s, const uchar *e) { int byte1, byte2; @@ -7635,7 +7635,7 @@ static int -my_wc_mb_filename(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_filename(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *s, uchar *e) { int code; @@ -7898,7 +7898,7 @@ static int -my_mb_wc_utf8mb4(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t * pwc, const uchar *s, const uchar *e) { uchar c; @@ -7984,7 +7984,7 @@ for example, for a null-terminated string */ static int -my_mb_wc_utf8mb4_no_range(const CHARSET_INFO *cs __attribute__((unused)), +my_mb_wc_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t *pwc, const uchar *s) { uchar c; @@ -8039,7 +8039,7 @@ static int -my_wc_mb_utf8mb4(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *r, uchar *e) { int count; @@ -8075,7 +8075,7 @@ The same as above, but without range check. */ static int -my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs __attribute__((unused)), +my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), my_wc_t wc, uchar *r) { int count; @@ -8514,7 +8514,7 @@ static size_t -my_strnxfrmlen_utf8mb4(const CHARSET_INFO *cs __attribute__((unused)), +my_strnxfrmlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), size_t len) { /* TODO: fix when working on WL "Unicode new version" */ @@ -8523,7 +8523,7 @@ static int -my_valid_mbcharlen_utf8mb4(const CHARSET_INFO *cs __attribute__((unused)), +my_valid_mbcharlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const uchar *s, const uchar *e) { uchar c; @@ -8605,7 +8605,7 @@ static uint -my_mbcharlen_utf8mb4(const CHARSET_INFO *cs __attribute__((unused)), uint c) +my_mbcharlen_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uint c) { if (c < 0x80) return 1; diff -Nru mysql-5.6-5.6.27/strings/ctype-win1250ch.c mysql-5.6-5.6.33/strings/ctype-win1250ch.c --- mysql-5.6-5.6.27/strings/ctype-win1250ch.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/strings/ctype-win1250ch.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -436,7 +436,7 @@ #define IS_END(p, src, len) (((char *)p - (char *)src) >= (len)) static int my_strnncoll_win1250ch(const CHARSET_INFO *cs - __attribute__((unused)), + MY_ATTRIBUTE((unused)), const uchar *s1, size_t len1, const uchar *s2, size_t len2, my_bool s2_is_prefix) @@ -471,7 +471,7 @@ const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool diff_if_only_endspace_difference - __attribute__((unused))) + MY_ATTRIBUTE((unused))) { for ( ; slen && s[slen-1] == ' ' ; slen--); for ( ; tlen && t[tlen-1] == ' ' ; tlen--); @@ -480,9 +480,9 @@ static size_t -my_strnxfrm_win1250ch(const CHARSET_INFO *cs __attribute__((unused)), +my_strnxfrm_win1250ch(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), uchar *dest, size_t len, - uint nweights_arg __attribute__((unused)), + uint nweights_arg MY_ATTRIBUTE((unused)), const uchar *src, size_t srclen, uint flags) { int value; @@ -614,7 +614,7 @@ */ static my_bool -my_like_range_win1250ch(const CHARSET_INFO *cs __attribute__((unused)), +my_like_range_win1250ch(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *ptr, size_t ptr_length, pbool escape, pbool w_one, pbool w_many, size_t res_length, diff -Nru mysql-5.6-5.6.27/support-files/MacOSX/ReadMe.txt mysql-5.6-5.6.33/support-files/MacOSX/ReadMe.txt --- mysql-5.6-5.6.27/support-files/MacOSX/ReadMe.txt 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/support-files/MacOSX/ReadMe.txt 2016-08-26 11:32:53.000000000 +0000 @@ -1,354 +1,42 @@ -2.4 Installing MySQL on OS X - For a list of OS X versions that the MySQL server supports, - see - http://www.mysql.com/support/supportedplatforms/database.html - . - - MySQL for OS X is available in a number of different forms: - - * Native Package Installer, which uses the native OS X - installer (DMG) to walk you through the installation of - MySQL. For more information, see Section 2.4.2, - "Installing MySQL on OS X Using Native Packages." You can - use the package installer with OS X. The user you use to - perform the installation must have administrator - privileges. - - * Compressed TAR archive, which uses a file packaged using - the Unix tar and gzip commands. To use this method, you - will need to open a Terminal window. You do not need - administrator privileges using this method, as you can - install the MySQL server anywhere using this method. For - more information on using this method, you can use the - generic instructions for using a tarball, Section 2.2, - "Installing MySQL on Unix/Linux Using Generic Binaries." - In addition to the core installation, the Package - Installer also includes Section 2.4.3, "Installing a - MySQL Launch Daemon" and Section 2.4.4, "Installing and - Using the MySQL Preference Pane," both of which simplify - the management of your installation. - - For additional information on using MySQL on OS X, see - Section 2.4.1, "General Notes on Installing MySQL on OS X." - -2.4.1 General Notes on Installing MySQL on OS X - - You should keep the following issues and notes in mind: - - * As of MySQL server 5.6.26, the DMG bundles a launchd - daemon instead of the deprecated startup item. Startup - items do not function as of OS X 10.10 (Yosemite), so - using launchd is preferred. The available MySQL - preference pane under OS X System Preferences was also - updated to use launchd. - - * You may need (or want) to create a specific mysql user to - own the MySQL directory and data. You can do this through - the Directory Utility, and the mysql user should already - exist. For use in single user mode, an entry for _mysql - (note the underscore prefix) should already exist within - the system /etc/passwd file. - - * Because the MySQL package installer installs the MySQL - contents into a version and platform specific directory, - you can use this to upgrade and migrate your database - between versions. You will need to either copy the data - directory from the old version to the new version, or - alternatively specify an alternative datadir value to set - location of the data directory. By default, the MySQL - directories are installed under /usr/local/. - - * You might want to add aliases to your shell's resource - file to make it easier to access commonly used programs - such as mysql and mysqladmin from the command line. The - syntax for bash is: -alias mysql=/usr/local/mysql/bin/mysql -alias mysqladmin=/usr/local/mysql/bin/mysqladmin - - For tcsh, use: -alias mysql /usr/local/mysql/bin/mysql -alias mysqladmin /usr/local/mysql/bin/mysqladmin - - Even better, add /usr/local/mysql/bin to your PATH - environment variable. You can do this by modifying the - appropriate startup file for your shell. For more - information, see Section 4.2.1, "Invoking MySQL - Programs." - - * After you have copied over the MySQL database files from - the previous installation and have successfully started - the new server, you should consider removing the old - installation files to save disk space. Additionally, you - should also remove older versions of the Package Receipt - directories located in - /Library/Receipts/mysql-VERSION.pkg. - - * Prior to OS X 10.7, MySQL server was bundled with OS X - Server. - -2.4.2 Installing MySQL on OS X Using Native Packages - - The package is located inside a disk image (.dmg) file that - you first need to mount by double-clicking its icon in the - Finder. It should then mount the image and display its - contents. - Note - - Before proceeding with the installation, be sure to stop all - running MySQL server instances by using either the MySQL - Manager Application (on OS X Server), the preference pane, or - mysqladmin shutdown on the command line. - - When installing from the package version, you can also - install the MySQL preference pane, which will enable you to - control the startup and execution of your MySQL server from - System Preferences. For more information, see Section 2.4.4, - "Installing and Using the MySQL Preference Pane." - - When installing using the package installer, the files are - installed into a directory within /usr/local matching the - name of the installation version and platform. For example, - the installer file mysql-5.6.28-osx10.9-x86_64.dmg installs - MySQL into /usr/local/mysql-5.6.28-osx10.9-x86_64/ . The - following table shows the layout of the installation - directory. - - Table 2.5 MySQL Installation Layout on OS X - Directory Contents of Directory - bin, scripts mysqld server, client and utility programs - data Log files, databases - docs Helper documents, like the Release Notes and build - information - include Include (header) files - lib Libraries - man Unix manual pages - mysql-test MySQL test suite - share Miscellaneous support files, including error messages, - sample configuration files, SQL for database installation - sql-bench Benchmarks - support-files Scripts and sample configuration files - /tmp/mysql.sock Location of the MySQL Unix socket - - During the package installer process, a symbolic link from - /usr/local/mysql to the version/platform specific directory - created during installation will be created automatically. - - 1. Download and open the MySQL package installer, which is - provided on a disk image (.dmg) that includes the main - MySQL installation package file. Double-click the disk - image to open it. - Figure 2.41 MySQL Package Installer: DMG Contents - MySQL Package Installer: DMG Contents - - 2. Double-click the MySQL installer package. It will be - named according to the version of MySQL you have - downloaded. For example, if you have downloaded MySQL - server 5.6.28, double-click - mysql-5.6.28-osx-10.9-x86_64.pkg. - - 3. You will be presented with the opening installer dialog. - Click Continue to begin installation. - Figure 2.42 MySQL Package Installer: Introduction - MySQL Package Installer: Introduction - - 4. If you have downloaded the community version of MySQL, - you will be shown a copy of the relevant GNU General - Public License. Click Continue and then Agree to - continue. - - 5. From the Installation Type page you can either click - Install to execute the installation wizard using all - defaults, click Customize to alter which components to - install (MySQL server, Preference Pane, Launchd Support - -- all enabled by default), or click Change Installation - Location to change the type of installation for either - all users, only the user executing the Installer, or - define a custom location. - Figure 2.43 MySQL Package Installer: Installation Type - MySQL Package Installer: Installation Type - Figure 2.44 MySQL Package Installer: Destination Select - (Change Installation Location) - MySQL Package Installer: Destination Select (Change - Installation Location) - Figure 2.45 MySQL Package Installer: Customize - MySQL Package Installer: Customize - - 6. Click Install to begin the installation process. - - 7. Once the installation has been completed successfully, - you will be shown an Install Succeeded message with a - short summary. Now, Close the wizard and begin using the - MySQL server. - Figure 2.46 MySQL Package Installer: Summary - MySQL Package Installer: Summary - - MySQL server is now installed, but it is not loaded (started) - by default. Use either launchctl from the command dline, or - start MySQL by clicking "Start" using the MySQL preference - pane. For additional information, see Section 2.4.3, - "Installing a MySQL Launch Daemon," and Section 2.4.4, - "Installing and Using the MySQL Preference Pane." - -2.4.3 Installing a MySQL Launch Daemon - - OS X uses launch daemons to automatically start, stop, and - manage processes and applications such as MySQL. - Note - - Before MySQL 5.6.26, the OS X builds installed startup items - instead of launchd daemons. However, startup items do not - function as of OS X 10.10 (Yosemite). The OS X builds now - install launchd daemons. - - By default, the installation package (DMG) on OS X installs a - launchd file named - /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist that - contains a plist definition similar to: - - - - - - Label com.oracle.oss.mysql.mysqld - ProcessType Interactive - Disabled - RunAtLoad - KeepAlive - SessionCreate - LaunchOnlyOnce - UserName _mysql - GroupName _mysql - ExitTimeOut 600 - Program /usr/local/mysql/bin/mysqld - ProgramArguments - - /usr/local/mysql/bin/mysqld - --user=_mysql - --basedir=/usr/local/mysql - --datadir=/usr/local/mysql/data - --plugin-dir=/usr/local/mysql/lib/plugin - --log-error=/usr/local/mysql/data/mysqld.local.err - - --pid-file=/usr/local/mysql/data/mysqld.local.pid< -/string> - --port=3306 - - WorkingDirectory /usr/local/mysql - - - - - Note - - Some users report that adding a plist DOCTYPE declaration - causes the launchd operation to fail, despite it passing the - lint check. We suspect it's a copy-n-paste error. The md5 - checksum of a file containing the above snippet is - 60d7963a0bb2994b69b8b9c123db09df. - - To enable the launchd service, you can either: - - * Click Start MySQL Server from the MySQL preference pane. - Figure 2.47 MySQL Preference Pane: Location - MySQL Preference Pane: Location - Figure 2.48 MySQL Preference Pane: Usage - MySQL Preference Pane: Usage - - * Or, manually load the launchd file. -shell> cd /Library/LaunchDaemons -shell> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist - - Note - - When upgrading MySQL server, the launchd installation process - will remove the old startup items that were installed with - MySQL server 5.6.25 and below. - -2.4.4 Installing and Using the MySQL Preference Pane - - The MySQL Installation Package includes a MySQL preference - pane that enables you to start, stop, and control automated - startup during boot of your MySQL installation. - - This preference pane is installed by default, and is listed - under your system's System Preferences window. - - Figure 2.49 MySQL Preference Pane: Location - MySQL Preference Pane: Location - - To install the MySQL Preference Pane: - - 1. Download and open the MySQL package installer, which is - provided on a disk image (.dmg) that includes the main - MySQL installation package. - Note - Before MySQL 5.6.26, OS X packages included the - deprecated startup items instead of launchd daemons, and - the preference pane managed that intstead of launchd. - Figure 2.50 MySQL Package Installer: DMG Contents - MySQL Package Installer: DMG Contents - - 2. Go through the process of installing the MySQL server, as - described in the documentation at Section 2.4.2, - "Installing MySQL on OS X Using Native Packages." - - 3. Click Customize at the Installation Type step. The - "Preference Pane" option is listed there and enabled by - default. - Figure 2.51 MySQL Installer on OS X: Customize - MySQL Installer on OS X: Customize - - 4. Complete the MySQL server installation process. - - Note - - The MySQL preference pane only starts and stops MySQL - installation installed from the MySQL package installation - that have been installed in the default location. - - Once the MySQL preference pane has been installed, you can - control your MySQL server instance using the preference pane. - To use the preference pane, open the System Preferences... - from the Apple menu. Select the MySQL preference pane by - clicking the MySQL logo within the bottom section of the - preference panes list. - - Figure 2.52 MySQL Preference Pane: Location - MySQL Preference Pane: Location - - Figure 2.53 MySQL Preference Pane: Usage - MySQL Preference Pane: Usage - - The MySQL Preference Pane shows the current status of the - MySQL server, showing stopped (in red) if the server is not - running and running (in green) if the server has already been - started. The preference pane also shows the current setting - for whether the MySQL server has been set to start - automatically. - - * To start the MySQL server using the preference pane: - Click Start MySQL Server. You may be prompted for the - username and password of a user with administrator - privileges to start the MySQL server. - - * To stop the MySQL server using the preference pane: - Click Stop MySQL Server. You may be prompted for the - username and password of a user with administrator - privileges to stop the MySQL server. - - * To automatically start the MySQL server when the system - boots: - Check the check box next to Automatically Start MySQL - Server on Startup. - - * To disable automatic MySQL server startup when the system - boots: - Uncheck the check box next to Automatically Start MySQL - Server on Startup. - - You can close the System Preferences... window once you have - completed your settings. + + + Oops, something changed or went wrong + + +

Introduction

+

+Hello there! The requested file or URL is missing. Intentional? Known? +Maybe. I'm here to help you figure it out so let's begin. +

+ + +

What Happened To This URL?

+

+We are not sure why the file you desire is missing, please contact +the MySQL documentation team if you think it should exist. URLs +that might interest you include: +

+ + + +

What Happened?

+

+The /docs/ and /docs-confidential/ directories were merged into +a single /docs/ directory for MySQL docs. Your path includes /docs-confidential/ +so perhaps it was moved. +

+ +

Contact Us

+

+For questions and concerns, please ask the MySQL documentation about this by emailing +mysql-docs_ww_grp@oracle.com or by +visiting #docs on Jabber. +

+ + diff -Nru mysql-5.6-5.6.27/support-files/mysql.5.6.27.spec mysql-5.6-5.6.33/support-files/mysql.5.6.27.spec --- mysql-5.6-5.6.27/support-files/mysql.5.6.27.spec 2015-09-18 14:24:55.000000000 +0000 +++ mysql-5.6-5.6.33/support-files/mysql.5.6.27.spec 1970-01-01 00:00:00.000000000 +0000 @@ -1,2103 +0,0 @@ -# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. If not, write to the -# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston -# MA 02110-1301 USA. - -############################################################################## -# Some common macro definitions -############################################################################## - -# NOTE: "vendor" is used in upgrade/downgrade check, so you can't -# change these, has to be exactly as is. -%global mysql_old_vendor MySQL AB -%global mysql_vendor_2 Sun Microsystems, Inc. -%global mysql_vendor Oracle and/or its affiliates - -%global mysql_version 5.6.27 - -%global mysqld_user mysql -%global mysqld_group mysql -%global mysqldatadir /var/lib/mysql - -%global release 1 - - -# -# Macros we use which are not available in all supported versions of RPM -# -# - defined/undefined are missing on RHEL4 -# -%if %{expand:%{?defined:0}%{!?defined:1}} -%define defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}} -%endif -%if %{expand:%{?undefined:0}%{!?undefined:1}} -%define undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}} -%endif - -# ---------------------------------------------------------------------------- -# RPM build tools now automatically detect Perl module dependencies. This -# detection causes problems as it is broken in some versions, and it also -# provides unwanted dependencies from mandatory scripts in our package. -# It might not be possible to disable this in all versions of RPM, but here we -# try anyway. We keep the "AutoReqProv: no" for the "test" sub package, as -# disabling here might fail, and that package has the most problems. -# See: -# http://fedoraproject.org/wiki/Packaging/Perl#Filtering_Requires:_and_Provides -# http://www.wideopen.com/archives/rpm-list/2002-October/msg00343.html -# ---------------------------------------------------------------------------- -%undefine __perl_provides -%undefine __perl_requires - -############################################################################## -# Command line handling -############################################################################## -# -# To set options: -# -# $ rpmbuild --define="option " ... -# - -# ---------------------------------------------------------------------------- -# Commercial builds -# ---------------------------------------------------------------------------- -%if %{undefined commercial} -%define commercial 0 -%endif - -# ---------------------------------------------------------------------------- -# Source name -# ---------------------------------------------------------------------------- -%if %{undefined src_base} -%define src_base mysql -%endif -%define src_dir %{src_base}-%{mysql_version} - -# ---------------------------------------------------------------------------- -# Feature set (storage engines, options). Default to community (everything) -# ---------------------------------------------------------------------------- -%if %{undefined feature_set} -%define feature_set community -%endif - -# ---------------------------------------------------------------------------- -# Server comment strings -# ---------------------------------------------------------------------------- -%if %{undefined compilation_comment_debug} -%define compilation_comment_debug MySQL Community Server - Debug (GPL) -%endif -%if %{undefined compilation_comment_release} -%define compilation_comment_release MySQL Community Server (GPL) -%endif - -# ---------------------------------------------------------------------------- -# Product and server suffixes -# ---------------------------------------------------------------------------- -%if %{undefined product_suffix} - %if %{defined short_product_tag} - %define product_suffix -%{short_product_tag} - %else - %define product_suffix %{nil} - %endif -%endif - -%if %{undefined server_suffix} -%define server_suffix %{nil} -%endif - -# ---------------------------------------------------------------------------- -# Distribution support -# ---------------------------------------------------------------------------- -%if %{undefined distro_specific} -%define distro_specific 0 -%endif -%if %{distro_specific} - %if %(test -f /etc/enterprise-release && echo 1 || echo 0) - %define oelver %(rpm -qf --qf '%%{version}\\n' /etc/enterprise-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') - %if "%oelver" == "4" - %define distro_description Oracle Enterprise Linux 4 - %define distro_releasetag oel4 - %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %if "%oelver" == "5" - %define distro_description Oracle Enterprise Linux 5 - %define distro_releasetag oel5 - %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %{error:Oracle Enterprise Linux %{oelver} is unsupported} - %endif - %endif - %else - %if %(test -f /etc/oracle-release && echo 1 || echo 0) - %define elver %(rpm -qf --qf '%%{version}\\n' /etc/oracle-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') - %if "%elver" == "6" || "%elver" == "7" - %define distro_description Oracle Linux %elver - %define distro_releasetag el%elver - %define distro_buildreq gcc-c++ ncurses-devel perl time zlib-devel cmake libaio-devel numactl-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %{error:Oracle Linux %{elver} is unsupported} - %endif - %else - %if %(test -f /etc/redhat-release && echo 1 || echo 0) - %define rhelver %(rpm -qf --qf '%%{version}\\n' /etc/redhat-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') - %if "%rhelver" == "4" - %define distro_description Red Hat Enterprise Linux 4 - %define distro_releasetag rhel4 - %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %if "%rhelver" == "5" - %define distro_description Red Hat Enterprise Linux 5 - %define distro_releasetag rhel5 - %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %if "%rhelver" == "6" - %define distro_description Red Hat Enterprise Linux 6 - %define distro_releasetag rhel6 - %define distro_buildreq gcc-c++ ncurses-devel perl time zlib-devel cmake libaio-devel numactl-devel - %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools - %else - %{error:Red Hat Enterprise Linux %{rhelver} is unsupported} - %endif - %endif - %endif - %else - %if %(test -f /etc/SuSE-release && echo 1 || echo 0) - %define susever %(rpm -qf --qf '%%{version}\\n' /etc/SuSE-release | cut -d. -f1) - %if "%susever" == "10" - %define distro_description SUSE Linux Enterprise Server 10 - %define distro_releasetag sles10 - %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client zlib-devel cmake libaio-devel - %define distro_requires aaa_base coreutils grep procps pwdutils - %else - %if "%susever" == "11" - %define distro_description SUSE Linux Enterprise Server 11 - %define distro_releasetag sles11 - %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client procps pwdutils zlib-devel cmake libaio-devel libnuma-devel - %define distro_requires aaa_base coreutils grep procps pwdutils - %else - %{error:SuSE %{susever} is unsupported} - %endif - %endif - %else - %{error:Unsupported distribution} - %endif - %endif - %endif - %endif -%else - %define glibc_version %(/lib/libc.so.6 | grep stable | cut -d, -f1 | cut -c38-) - %define distro_description Generic Linux (glibc %{glibc_version}) - %define distro_releasetag linux_glibc%{glibc_version} - %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel - %define distro_requires coreutils grep procps /sbin/chkconfig /usr/sbin/useradd /usr/sbin/groupadd -%endif - -# Avoid debuginfo RPMs, leaves binaries unstripped -%define debug_package %{nil} - -# Hack to work around bug in RHEL5 __os_install_post macro, wrong inverted -# test for __debug_package -%define __strip /bin/true - -# ---------------------------------------------------------------------------- -# Support optional "tcmalloc" library (experimental) -# ---------------------------------------------------------------------------- -%if %{defined malloc_lib_target} -%define WITH_TCMALLOC 1 -%else -%define WITH_TCMALLOC 0 -%endif - -############################################################################## -# Configuration based upon above user input, not to be set directly -############################################################################## - -%if 0%{?commercial} -%define license_files_server %{src_dir}/LICENSE.mysql -%define license_type Commercial -%else -%define license_files_server %{src_dir}/COPYING %{src_dir}/README -%define license_type GPL -%endif - -############################################################################## -# Main spec file section -############################################################################## - -Name: MySQL%{product_suffix} -Summary: MySQL: a very fast and reliable SQL database server -Group: Applications/Databases -Version: 5.6.27 -Release: %{release}%{?distro_releasetag:.%{distro_releasetag}} -Distribution: %{distro_description} -License: Copyright (c) 2000, 2015, %{mysql_vendor}. All rights reserved. Under %{license_type} license as shown in the Description field. -Source: http://www.mysql.com/Downloads/MySQL-5.6/%{src_dir}.tar.gz -URL: http://www.mysql.com/ -Packager: MySQL Release Engineering -Vendor: %{mysql_vendor} -BuildRequires: %{distro_buildreq} - -# Regression tests may take a long time, override the default to skip them -%{!?runselftest:%global runselftest 1} - -# Think about what you use here since the first step is to -# run a rm -rf -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -# From the manual -%description -The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, -and robust SQL (Structured Query Language) database server. MySQL Server -is intended for mission-critical, heavy-load production systems as well -as for embedding into mass-deployed software. MySQL is a trademark of -%{mysql_vendor} - -The MySQL software has Dual Licensing, which means you can use the MySQL -software free of charge under the GNU General Public License -(http://www.gnu.org/licenses/). You can also purchase commercial MySQL -licenses from %{mysql_vendor} if you do not wish to be bound by the terms of -the GPL. See the chapter "Licensing and Support" in the manual for -further info. - -The MySQL web site (http://www.mysql.com/) provides the latest -news and information about the MySQL software. Also please see the -documentation and the manual for more information. - -############################################################################## -# Sub package definition -############################################################################## - -%package -n MySQL-server%{product_suffix} -Summary: MySQL: a very fast and reliable SQL database server -Group: Applications/Databases -Requires: %{distro_requires} -%if 0%{?commercial} -Obsoletes: MySQL-server -%else -Obsoletes: MySQL-server-advanced -%endif -Obsoletes: mysql-server < %{version}-%{release} -Obsoletes: mysql-server-advanced -Obsoletes: MySQL-server-classic MySQL-server-community MySQL-server-enterprise -Obsoletes: MySQL-server-advanced-gpl MySQL-server-enterprise-gpl -Provides: mysql-server = %{version}-%{release} -Provides: mysql-server%{?_isa} = %{version}-%{release} - -%description -n MySQL-server%{product_suffix} -The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, -and robust SQL (Structured Query Language) database server. MySQL Server -is intended for mission-critical, heavy-load production systems as well -as for embedding into mass-deployed software. MySQL is a trademark of -%{mysql_vendor} - -The MySQL software has Dual Licensing, which means you can use the MySQL -software free of charge under the GNU General Public License -(http://www.gnu.org/licenses/). You can also purchase commercial MySQL -licenses from %{mysql_vendor} if you do not wish to be bound by the terms of -the GPL. See the chapter "Licensing and Support" in the manual for -further info. - -The MySQL web site (http://www.mysql.com/) provides the latest news and -information about the MySQL software. Also please see the documentation -and the manual for more information. - -This package includes the MySQL server binary as well as related utilities -to run and administer a MySQL server. - -If you want to access and work with the database, you have to install -package "MySQL-client%{product_suffix}" as well! - -# ---------------------------------------------------------------------------- -%package -n MySQL-client%{product_suffix} -Summary: MySQL - Client -Group: Applications/Databases -%if 0%{?commercial} -Obsoletes: MySQL-client -%else -Obsoletes: MySQL-client-advanced -%endif -Obsoletes: mysql < %{version}-%{release} -Obsoletes: mysql-advanced < %{version}-%{release} -Obsoletes: MySQL-client-classic MySQL-client-community MySQL-client-enterprise -Obsoletes: MySQL-client-advanced-gpl MySQL-client-enterprise-gpl -Provides: mysql = %{version}-%{release} -Provides: mysql%{?_isa} = %{version}-%{release} - -%description -n MySQL-client%{product_suffix} -This package contains the standard MySQL clients and administration tools. - -For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ - -# ---------------------------------------------------------------------------- -%package -n MySQL-test%{product_suffix} -Summary: MySQL - Test suite -Group: Applications/Databases -%if 0%{?commercial} -Requires: MySQL-client-advanced perl -Obsoletes: MySQL-test -%else -Requires: MySQL-client perl -Obsoletes: MySQL-test-advanced -%endif -Obsoletes: mysql-test < %{version}-%{release} -Obsoletes: mysql-test-advanced -Obsoletes: MySQL-test-classic MySQL-test-community MySQL-test-enterprise -Obsoletes: MySQL-test-advanced-gpl MySQL-test-enterprise-gpl -Provides: mysql-test = %{version}-%{release} -Provides: mysql-test%{?_isa} = %{version}-%{release} -AutoReqProv: no - -%description -n MySQL-test%{product_suffix} -This package contains the MySQL regression test suite. - -For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ - -# ---------------------------------------------------------------------------- -%package -n MySQL-devel%{product_suffix} -Summary: MySQL - Development header files and libraries -Group: Applications/Databases -%if 0%{?commercial} -Obsoletes: MySQL-devel -%else -Obsoletes: MySQL-devel-advanced -%endif -Obsoletes: mysql-devel < %{version}-%{release} -Obsoletes: mysql-embedded-devel mysql-devel-advanced mysql-embedded-devel-advanced -Obsoletes: MySQL-devel-classic MySQL-devel-community MySQL-devel-enterprise -Obsoletes: MySQL-devel-advanced-gpl MySQL-devel-enterprise-gpl -Provides: mysql-devel = %{version}-%{release} -Provides: mysql-devel%{?_isa} = %{version}-%{release} - -%description -n MySQL-devel%{product_suffix} -This package contains the development header files and libraries necessary -to develop MySQL client applications. - -For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ - -# ---------------------------------------------------------------------------- -%package -n MySQL-shared%{product_suffix} -Summary: MySQL - Shared libraries -Group: Applications/Databases -%if 0%{?commercial} -Obsoletes: MySQL-shared -%else -Obsoletes: MySQL-shared-advanced -%endif -Obsoletes: MySQL-shared-standard MySQL-shared-pro -Obsoletes: MySQL-shared-pro-cert MySQL-shared-pro-gpl -Obsoletes: MySQL-shared-pro-gpl-cert -Obsoletes: MySQL-shared-classic MySQL-shared-community MySQL-shared-enterprise -Obsoletes: MySQL-shared-advanced-gpl MySQL-shared-enterprise-gpl - -%description -n MySQL-shared%{product_suffix} -This package contains the shared libraries (*.so*) which certain languages -and applications need to dynamically load and use MySQL. - -# ---------------------------------------------------------------------------- -%package -n MySQL-embedded%{product_suffix} -Summary: MySQL - Embedded library -Group: Applications/Databases -%if 0%{?commercial} -Requires: MySQL-devel-advanced -Obsoletes: MySQL-embedded -%else -Requires: MySQL-devel -Obsoletes: MySQL-embedded-advanced -%endif -Obsoletes: mysql-embedded < %{version}-%{release} -Obsoletes: mysql-embedded-advanced -Obsoletes: MySQL-embedded-pro -Obsoletes: MySQL-embedded-classic MySQL-embedded-community MySQL-embedded-enterprise -Obsoletes: MySQL-embedded-advanced-gpl MySQL-embedded-enterprise-gpl -Provides: mysql-embedded = %{version}-%{release} -Provides: mysql-embedded%{?_isa} = %{version}-%{release} - -%description -n MySQL-embedded%{product_suffix} -This package contains the MySQL server as an embedded library. - -The embedded MySQL server library makes it possible to run a full-featured -MySQL server inside the client application. The main benefits are increased -speed and more simple management for embedded applications. - -The API is identical for the embedded MySQL version and the -client/server version. - -For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ - -############################################################################## -%prep -%setup -T -a 0 -c -n %{src_dir} -############################################################################## -%build - -# Fail quickly and obviously if user tries to build as root -%if %runselftest - if [ x"`id -u`" = x0 ]; then - echo "The MySQL regression tests may fail if run as root." - echo "If you really need to build the RPM as root, use" - echo "--define='runselftest 0' to skip the regression tests." - exit 1 - fi -%endif - -# Be strict about variables, bail at earliest opportunity, etc. -set -eu - -# Optional package files -touch optional-files-devel - -# -# Set environment in order of preference, MYSQL_BUILD_* first, then variable -# name, finally a default. RPM_OPT_FLAGS is assumed to be a part of the -# default RPM build environment. -# - -# This is a hack, $RPM_OPT_FLAGS on ia64 hosts contains flags which break -# the compile in cmd-line-utils/libedit - needs investigation, but for now -# we simply unset it and use those specified directly in cmake. -%if "%{_arch}" == "ia64" -RPM_OPT_FLAGS= -%endif - -export PATH=${MYSQL_BUILD_PATH:-$PATH} -export CC=${MYSQL_BUILD_CC:-${CC:-gcc}} -export CXX=${MYSQL_BUILD_CXX:-${CXX:-g++}} -export CFLAGS=${MYSQL_BUILD_CFLAGS:-${CFLAGS:-$RPM_OPT_FLAGS}} -export CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-${CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors}} -export LDFLAGS=${MYSQL_BUILD_LDFLAGS:-${LDFLAGS:-}} -export CMAKE=${MYSQL_BUILD_CMAKE:-${CMAKE:-cmake}} -export MAKE_JFLAG=${MYSQL_BUILD_MAKE_JFLAG:-} - -# By default, a build will include the bundeled "yaSSL" library for SSL. -# However, there may be a need to override. -# Protect against undefined variables if there is no override option. -%if %{undefined with_ssl} -%define ssl_option %{nil} -%else -%define ssl_option -DWITH_SSL=%{with_ssl} -%endif - -# Build debug mysqld and libmysqld.a -mkdir debug -( - cd debug - # Attempt to remove any optimisation flags from the debug build - CFLAGS=`echo " ${CFLAGS} " | \ - sed -e 's/ -O[0-9]* / /' \ - -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ - -e 's/ -unroll2 / /' \ - -e 's/ -ip / /' \ - -e 's/^ //' \ - -e 's/ $//'` - CXXFLAGS=`echo " ${CXXFLAGS} " | \ - sed -e 's/ -O[0-9]* / /' \ - -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ - -e 's/ -unroll2 / /' \ - -e 's/ -ip / /' \ - -e 's/^ //' \ - -e 's/ $//'` - # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before - # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM - ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \ - -DCMAKE_BUILD_TYPE=Debug \ - -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ - -DFEATURE_SET="%{feature_set}" \ - %{ssl_option} \ - -DCOMPILATION_COMMENT="%{compilation_comment_debug}" \ - -DMYSQL_SERVER_SUFFIX="%{server_suffix}" - echo BEGIN_DEBUG_CONFIG ; egrep '^#define' include/config.h ; echo END_DEBUG_CONFIG - make ${MAKE_JFLAG} VERBOSE=1 -) -# Build full release -mkdir release -( - cd release - # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before - # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM - ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ - -DFEATURE_SET="%{feature_set}" \ - %{ssl_option} \ - -DCOMPILATION_COMMENT="%{compilation_comment_release}" \ - -DMYSQL_SERVER_SUFFIX="%{server_suffix}" - echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG - make ${MAKE_JFLAG} VERBOSE=1 -) - -%if %runselftest - MTR_BUILD_THREAD=auto - export MTR_BUILD_THREAD - - (cd release && make test-bt-fast || true) -%endif - -############################################################################## -%install - -RBR=$RPM_BUILD_ROOT -MBD=$RPM_BUILD_DIR/%{src_dir} - -# Ensure that needed directories exists -install -d $RBR%{_sysconfdir}/{logrotate.d,init.d} -install -d $RBR%{mysqldatadir}/mysql -install -d $RBR%{_datadir}/mysql-test -install -d $RBR%{_datadir}/mysql/SELinux/RHEL4 -install -d $RBR%{_includedir} -install -d $RBR%{_libdir} -install -d $RBR%{_mandir} -install -d $RBR%{_sbindir} - -mkdir -p $RBR%{_sysconfdir}/my.cnf.d - -# Install all binaries -( - cd $MBD/release - make DESTDIR=$RBR install -) - -# FIXME: at some point we should stop doing this and just install everything -# FIXME: directly into %{_libdir}/mysql - perhaps at the same time as renaming -# FIXME: the shared libraries to use libmysql*-$major.$minor.so syntax -mv -v $RBR/%{_libdir}/*.a $RBR/%{_libdir}/mysql/ - -# Install logrotate and autostart -install -m 644 $MBD/release/support-files/mysql-log-rotate $RBR%{_sysconfdir}/logrotate.d/mysql -install -m 755 $MBD/release/support-files/mysql.server $RBR%{_sysconfdir}/init.d/mysql - -# Create a symlink "rcmysql", pointing to the init.script. SuSE users -# will appreciate that, as all services usually offer this. -ln -s %{_sysconfdir}/init.d/mysql $RBR%{_sbindir}/rcmysql - -# Touch the place where the my.cnf config file might be located -# Just to make sure it's in the file list and marked as a config file -touch $RBR%{_sysconfdir}/my.cnf - -# Install SELinux files in datadir -install -m 600 $MBD/%{src_dir}/support-files/RHEL4-SElinux/mysql.{fc,te} \ - $RBR%{_datadir}/mysql/SELinux/RHEL4 - -%if %{WITH_TCMALLOC} -# Even though this is a shared library, put it under /usr/lib*/mysql, so it -# doesn't conflict with possible shared lib by the same name in /usr/lib*. See -# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used. -install -m 644 "%{malloc_lib_source}" \ - "$RBR%{_libdir}/mysql/%{malloc_lib_target}" -%endif - -# Remove man pages we explicitly do not want to package, avoids 'unpackaged -# files' warning. -# This has become obsolete: rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1* - -############################################################################## -# Post processing actions, i.e. when installed -############################################################################## - -%pre -n MySQL-server%{product_suffix} -# This is the code running at the beginning of a RPM upgrade action, -# before replacing the old files with the new ones. - -# ATTENTION: Parts of this are duplicated in the "triggerpostun" ! - -# There are users who deviate from the default file system layout. -# Check local settings to support them. -if [ -x %{_bindir}/my_print_defaults ] -then - mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` - PID_FILE_PATT=`%{_bindir}/my_print_defaults server mysqld | grep '^--pid-file=' | sed -n 's/--pid-file=//p'` -fi -if [ -z "$mysql_datadir" ] -then - mysql_datadir=%{mysqldatadir} -fi -if [ -z "$PID_FILE_PATT" ] -then - PID_FILE_PATT="$mysql_datadir/*.pid" -fi - -# Check if we can safely upgrade. An upgrade is only safe if it's from one -# of our RPMs in the same version family. - -# Handle both ways of spelling the capability. -installed=`rpm -q --whatprovides mysql-server 2> /dev/null` -if [ $? -ne 0 -o -z "$installed" ]; then - installed=`rpm -q --whatprovides MySQL-server 2> /dev/null` -fi -if [ $? -eq 0 -a -n "$installed" ]; then - installed=`echo $installed | sed 's/\([^ ]*\) .*/\1/'` # Tests have shown duplicated package names - vendor=`rpm -q --queryformat='%{VENDOR}' "$installed" 2>&1` - version=`rpm -q --queryformat='%{VERSION}' "$installed" 2>&1` - myoldvendor='%{mysql_old_vendor}' - myvendor_2='%{mysql_vendor_2}' - myvendor='%{mysql_vendor}' - myversion='%{mysql_version}' - - old_family=`echo $version \ - | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` - new_family=`echo $myversion \ - | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` - - [ -z "$vendor" ] && vendor='' - [ -z "$old_family" ] && old_family="" - [ -z "$new_family" ] && new_family="" - - error_text= - if [ "$vendor" != "$myoldvendor" \ - -a "$vendor" != "$myvendor_2" \ - -a "$vendor" != "$myvendor" ]; then - error_text="$error_text -The current MySQL server package is provided by a different -vendor ($vendor) than $myoldvendor, $myvendor_2, or $myvendor. -Some files may be installed to different locations, including log -files and the service startup script in %{_sysconfdir}/init.d/. -" - fi - - if [ "$old_family" != "$new_family" ]; then - error_text="$error_text -Upgrading directly from MySQL $old_family to MySQL $new_family may not -be safe in all cases. A manual dump and restore using mysqldump is -recommended. It is important to review the MySQL manual's Upgrading -section for version-specific incompatibilities. -" - fi - - if [ -n "$error_text" ]; then - cat <&2 - -****************************************************************** -A MySQL server package ($installed) is installed. -$error_text -A manual upgrade is required. - -- Ensure that you have a complete, working backup of your data and my.cnf - files -- Shut down the MySQL server cleanly -- Remove the existing MySQL packages. Usually this command will - list the packages you should remove: - rpm -qa | grep -i '^mysql-' - - You may choose to use 'rpm --nodeps -ev ' to remove - the package which contains the mysqlclient shared library. The - library will be reinstalled by the MySQL-shared-compat package. -- Install the new MySQL packages supplied by $myvendor -- Ensure that the MySQL server is started -- Run the 'mysql_upgrade' program - -This is a brief description of the upgrade process. Important details -can be found in the MySQL manual, in the Upgrading section. -****************************************************************** -HERE - exit 1 - fi -fi - -# We assume that if there is exactly one ".pid" file, -# it contains the valid PID of a running MySQL server. -NR_PID_FILES=`ls -1 $PID_FILE_PATT 2>/dev/null | wc -l` -case $NR_PID_FILES in - 0 ) SERVER_TO_START='' ;; # No "*.pid" file == no running server - 1 ) SERVER_TO_START='true' ;; - * ) SERVER_TO_START='' # Situation not clear - SEVERAL_PID_FILES=true ;; -esac -# That logic may be debated: We might check whether it is non-empty, -# contains exactly one number (possibly a PID), and whether "ps" finds it. -# OTOH, if there is no such process, it means a crash without a cleanup - -# is that a reason not to start a new server after upgrade? - -STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER - -if [ -f "$STATUS_FILE" ]; then - echo "Some previous upgrade was not finished:" - ls -ld $STATUS_FILE - echo "Please check its status, then do" - echo " rm $STATUS_FILE" - echo "before repeating the MySQL upgrade." - exit 1 -elif [ -n "$SEVERAL_PID_FILES" ] ; then - echo "You have more than one PID file:" - ls -ld $PID_FILE_PATT - echo "Please check which one (if any) corresponds to a running server" - echo "and delete all others before repeating the MySQL upgrade." - exit 1 -fi - -NEW_VERSION=%{mysql_version}-%{release} - -# The "pre" section code is also run on a first installation, -# when there is no data directory yet. Protect against error messages. -# Check for the existence of subdirectory "mysql/", the database of system -# tables like "mysql.user". -if [ -d $mysql_datadir/mysql ] ; then - echo "MySQL RPM upgrade to version $NEW_VERSION" > $STATUS_FILE - echo "'pre' step running at `date`" >> $STATUS_FILE - echo >> $STATUS_FILE - fcount=`ls -ltr $mysql_datadir/*.err 2>/dev/null | wc -l` - if [ $fcount -gt 0 ] ; then - echo "ERR file(s):" >> $STATUS_FILE - ls -ltr $mysql_datadir/*.err >> $STATUS_FILE - echo >> $STATUS_FILE - echo "Latest 'Version' line in latest file:" >> $STATUS_FILE - grep '^Version' `ls -tr $mysql_datadir/*.err | tail -1` | \ - tail -1 >> $STATUS_FILE - echo >> $STATUS_FILE - fi - - if [ -n "$SERVER_TO_START" ] ; then - # There is only one PID file, race possibility ignored - echo "PID file:" >> $STATUS_FILE - ls -l $PID_FILE_PATT >> $STATUS_FILE - cat $PID_FILE_PATT >> $STATUS_FILE - echo >> $STATUS_FILE - echo "Server process:" >> $STATUS_FILE - ps -fp `cat $PID_FILE_PATT` >> $STATUS_FILE - echo >> $STATUS_FILE - echo "SERVER_TO_START=$SERVER_TO_START" >> $STATUS_FILE - else - # Take a note we checked it ... - echo "PID file:" >> $STATUS_FILE - ls -l $PID_FILE_PATT >> $STATUS_FILE 2>&1 - fi -fi - -# Shut down a previously installed server first -# Note we *could* make that depend on $SERVER_TO_START, but we rather don't, -# so a "stop" is attempted even if there is no PID file. -# (Maybe the "stop" doesn't work then, but we might fix that in itself.) -if [ -x %{_sysconfdir}/init.d/mysql ] ; then - %{_sysconfdir}/init.d/mysql stop > /dev/null 2>&1 - echo "Giving mysqld 5 seconds to exit nicely" - sleep 5 -fi - -%post -n MySQL-server%{product_suffix} -# This is the code running at the end of a RPM install or upgrade action, -# after the (new) files have been written. - -# ATTENTION: Parts of this are duplicated in the "triggerpostun" ! - -# There are users who deviate from the default file system layout. -# Check local settings to support them. -if [ -x %{_bindir}/my_print_defaults ] -then - mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` -fi -if [ -z "$mysql_datadir" ] -then - mysql_datadir=%{mysqldatadir} -fi - -NEW_VERSION=%{mysql_version}-%{release} -STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER - -# ---------------------------------------------------------------------- -# Create data directory if needed, check whether upgrade or install -# ---------------------------------------------------------------------- -if [ ! -d "$mysql_datadir" ] ; then mkdir -m 755 "$mysql_datadir" ; fi -if [ -f "$STATUS_FILE" ] ; then - SERVER_TO_START=`grep '^SERVER_TO_START=' $STATUS_FILE | cut -c17-` -else - SERVER_TO_START='' -fi -# echo "Analyzed: SERVER_TO_START=$SERVER_TO_START" -if [ ! -d $mysql_datadir/mysql ] ; then - mkdir $mysql_datadir/mysql $mysql_datadir/test - echo "MySQL RPM installation of version $NEW_VERSION" >> $STATUS_FILE -else - # If the directory exists, we may assume it is an upgrade. - echo "MySQL RPM upgrade to version $NEW_VERSION" >> $STATUS_FILE -fi - -# ---------------------------------------------------------------------- -# Make MySQL start/shutdown automatically when the machine does it. -# ---------------------------------------------------------------------- -# NOTE: This still needs to be debated. Should we check whether these links -# for the other run levels exist(ed) before the upgrade? -# use chkconfig on Enterprise Linux and newer SuSE releases -if [ -x /sbin/chkconfig ] ; then - /sbin/chkconfig --add mysql -# use insserv for older SuSE Linux versions -elif [ -x /sbin/insserv ] ; then - /sbin/insserv %{_sysconfdir}/init.d/mysql -fi - -# ---------------------------------------------------------------------- -# Create a MySQL user and group. Do not report any problems if it already -# exists. -# ---------------------------------------------------------------------- -groupadd -r %{mysqld_group} 2> /dev/null || true -useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" \ - -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true -# The user may already exist, make sure it has the proper group nevertheless -# (BUG#12823) -usermod -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true - -# ---------------------------------------------------------------------- -# Change permissions so that the user that will run the MySQL daemon -# owns all database files. -# ---------------------------------------------------------------------- -chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir - -# ---------------------------------------------------------------------- -# Initiate databases if needed -# ---------------------------------------------------------------------- -if ! grep '^MySQL RPM upgrade' $STATUS_FILE >/dev/null 2>&1 ; then - # Fix bug#45415: no "mysql_install_db" on an upgrade - # Do this as a negative to err towards more "install" runs - # rather than to miss one. - %{_bindir}/mysql_install_db --rpm --user=%{mysqld_user} --random-passwords - - # Attention: Now 'root' is the only database user, - # its password is a random value found in ~/.mysql_secret, - # and the "password expired" flag is set: - # Any client needs that password, and the first command - # executed must be a new "set password"! -fi - -# ---------------------------------------------------------------------- -# Upgrade databases if needed would go here - but it cannot be automated yet -# ---------------------------------------------------------------------- - -# ---------------------------------------------------------------------- -# Change permissions again to fix any new files. -# ---------------------------------------------------------------------- -chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir - -# ---------------------------------------------------------------------- -# Fix permissions for the permission database so that only the user -# can read them. -# ---------------------------------------------------------------------- -chmod -R og-rw $mysql_datadir/mysql - -# ---------------------------------------------------------------------- -# install SELinux files - but don't override existing ones -# ---------------------------------------------------------------------- -SETARGETDIR=/etc/selinux/targeted/src/policy -SEDOMPROG=$SETARGETDIR/domains/program -SECONPROG=$SETARGETDIR/file_contexts/program -if [ -f /etc/redhat-release ] \ - && (grep -q "Red Hat Enterprise Linux .. release 4" /etc/redhat-release \ - || grep -q "CentOS release 4" /etc/redhat-release) ; then - echo - echo - echo 'Notes regarding SELinux on this platform:' - echo '=========================================' - echo - echo 'The default policy might cause server startup to fail because it is' - echo 'not allowed to access critical files. In this case, please update' - echo 'your installation.' - echo - echo 'The default policy might also cause inavailability of SSL related' - echo 'features because the server is not allowed to access /dev/random' - echo 'and /dev/urandom. If this is a problem, please do the following:' - echo - echo ' 1) install selinux-policy-targeted-sources from your OS vendor' - echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' - echo ' allow mysqld_t random_device_t:chr_file read;' - echo ' allow mysqld_t urandom_device_t:chr_file read;' - echo ' 3) cd to '$SETARGETDIR' and issue the following command:' - echo ' make load' - echo - echo -fi - -if [ -x sbin/restorecon ] ; then - sbin/restorecon -R var/lib/mysql -fi - -# Was the server running before the upgrade? If so, restart the new one. -if [ "$SERVER_TO_START" = "true" ] ; then - # Restart in the same way that mysqld will be started normally. - if [ -x %{_sysconfdir}/init.d/mysql ] ; then - %{_sysconfdir}/init.d/mysql start - echo "Giving mysqld 5 seconds to start" - sleep 5 - fi -fi - -# Collect an upgrade history ... -echo "Upgrade/install finished at `date`" >> $STATUS_FILE -echo >> $STATUS_FILE -echo "=====" >> $STATUS_FILE -STATUS_HISTORY=$mysql_datadir/RPM_UPGRADE_HISTORY -cat $STATUS_FILE >> $STATUS_HISTORY -mv -f $STATUS_FILE ${STATUS_FILE}-LAST # for "triggerpostun" - - -#echo "Thank you for installing the MySQL Community Server! For Production -#systems, we recommend MySQL Enterprise, which contains enterprise-ready -#software, intelligent advisory services, and full production support with -#scheduled service packs and more. Visit www.mysql.com/enterprise for more -#information." - -%preun -n MySQL-server%{product_suffix} - -# Which '$1' does this refer to? Fedora docs have info: -# " ... a count of the number of versions of the package that are installed. -# Action Count -# Install the first time 1 -# Upgrade 2 or higher (depending on the number of versions installed) -# Remove last version of package 0 " -# -# http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html - -if [ $1 = 0 ] ; then - # Stop MySQL before uninstalling it - if [ -x %{_sysconfdir}/init.d/mysql ] ; then - %{_sysconfdir}/init.d/mysql stop > /dev/null - # Remove autostart of MySQL - # use chkconfig on Enterprise Linux and newer SuSE releases - if [ -x /sbin/chkconfig ] ; then - /sbin/chkconfig --del mysql - # For older SuSE Linux versions - elif [ -x /sbin/insserv ] ; then - /sbin/insserv -r %{_sysconfdir}/init.d/mysql - fi - fi -fi - -# We do not remove the mysql user since it may still own a lot of -# database files. - -%triggerpostun -n MySQL-server%{product_suffix} --MySQL-server-community - -# Setup: We renamed this package, so any existing "server-community" -# package will be removed when this "server" is installed. -# Problem: RPM will first run the "pre" and "post" sections of this script, -# and only then the "preun" of that old community server. -# But this "preun" includes stopping the server and uninstalling the service, -# "chkconfig --del mysql" which removes the symlinks to the start script. -# Solution: *After* the community server got removed, restart this server -# and re-install the service. -# -# For information about triggers in spec files, see the Fedora docs: -# http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch10s02.html -# For all details of this code, see the "pre" and "post" sections. - -# There are users who deviate from the default file system layout. -# Check local settings to support them. -if [ -x %{_bindir}/my_print_defaults ] -then - mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` -fi -if [ -z "$mysql_datadir" ] -then - mysql_datadir=%{mysqldatadir} -fi - -NEW_VERSION=%{mysql_version}-%{release} -STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER-LAST # Note the difference! -STATUS_HISTORY=$mysql_datadir/RPM_UPGRADE_HISTORY - -if [ -f "$STATUS_FILE" ] ; then - SERVER_TO_START=`grep '^SERVER_TO_START=' $STATUS_FILE | cut -c17-` -else - # This should never happen, but let's be prepared - SERVER_TO_START='' -fi -echo "Analyzed: SERVER_TO_START=$SERVER_TO_START" - -if [ -x /sbin/chkconfig ] ; then - /sbin/chkconfig --add mysql -# use insserv for older SuSE Linux versions -elif [ -x /sbin/insserv ] ; then - /sbin/insserv %{_sysconfdir}/init.d/mysql -fi - -# Was the server running before the upgrade? If so, restart the new one. -if [ "$SERVER_TO_START" = "true" ] ; then - # Restart in the same way that mysqld will be started normally. - if [ -x %{_sysconfdir}/init.d/mysql ] ; then - %{_sysconfdir}/init.d/mysql start - echo "Giving mysqld 5 seconds to start" - sleep 5 - fi -fi - -echo "Trigger 'postun --community' finished at `date`" >> $STATUS_HISTORY -echo >> $STATUS_HISTORY -echo "=====" >> $STATUS_HISTORY - - -# ---------------------------------------------------------------------- -# Clean up the BuildRoot after build is done -# ---------------------------------------------------------------------- -%clean -[ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] \ - && rm -rf $RPM_BUILD_ROOT; - -############################################################################## -# Files section -############################################################################## - -%files -n MySQL-server%{product_suffix} -f release/support-files/plugins.files -%defattr(-,root,root,0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -%doc %{src_dir}/Docs/ChangeLog -%doc %{src_dir}/Docs/INFO_SRC* -%doc release/Docs/INFO_BIN* -%doc release/support-files/my-default.cnf - -%if 0%{?commercial} -%doc %attr(644, root, root) %{_infodir}/mysql.info* -%endif - -%doc %attr(644, root, man) %{_mandir}/man1/innochecksum.1* -%doc %attr(644, root, man) %{_mandir}/man1/my_print_defaults.1* -%doc %attr(644, root, man) %{_mandir}/man1/myisam_ftdump.1* -%doc %attr(644, root, man) %{_mandir}/man1/myisamchk.1* -%doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1* -%doc %attr(644, root, man) %{_mandir}/man1/myisampack.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_convert_table_format.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_extensions.1* -%doc %attr(644, root, man) %{_mandir}/man8/mysqld.8* -%doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqldumpslow.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_plugin.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_secure_installation.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_setpermission.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* -%doc %attr(644, root, man) %{_mandir}/man1/perror.1* -%doc %attr(644, root, man) %{_mandir}/man1/replace.1* -%doc %attr(644, root, man) %{_mandir}/man1/resolve_stack_dump.1* -%doc %attr(644, root, man) %{_mandir}/man1/resolveip.1* - -%ghost %config(noreplace,missingok) %{_sysconfdir}/my.cnf -%dir %{_sysconfdir}/my.cnf.d - -%attr(755, root, root) %{_bindir}/innochecksum -%attr(755, root, root) %{_bindir}/my_print_defaults -%attr(755, root, root) %{_bindir}/myisam_ftdump -%attr(755, root, root) %{_bindir}/myisamchk -%attr(755, root, root) %{_bindir}/myisamlog -%attr(755, root, root) %{_bindir}/myisampack -%attr(755, root, root) %{_bindir}/mysql_convert_table_format -%attr(755, root, root) %{_bindir}/mysql_fix_extensions -%attr(755, root, root) %{_bindir}/mysql_install_db -%attr(755, root, root) %{_bindir}/mysql_plugin -%attr(755, root, root) %{_bindir}/mysql_secure_installation -%attr(755, root, root) %{_bindir}/mysql_setpermission -%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql -%attr(755, root, root) %{_bindir}/mysql_upgrade -%attr(755, root, root) %{_bindir}/mysql_zap -%attr(755, root, root) %{_bindir}/mysqlbug -%attr(755, root, root) %{_bindir}/mysqld_multi -%attr(755, root, root) %{_bindir}/mysqld_safe -%attr(755, root, root) %{_bindir}/mysqldumpslow -%attr(755, root, root) %{_bindir}/mysqlhotcopy -%attr(755, root, root) %{_bindir}/mysqltest -%attr(755, root, root) %{_bindir}/perror -%attr(755, root, root) %{_bindir}/replace -%attr(755, root, root) %{_bindir}/resolve_stack_dump -%attr(755, root, root) %{_bindir}/resolveip - -%attr(755, root, root) %{_sbindir}/mysqld -%attr(755, root, root) %{_sbindir}/mysqld-debug -%attr(755, root, root) %{_sbindir}/rcmysql -%attr(755, root, root) %{_libdir}/mysql/plugin/daemon_example.ini - -%if %{WITH_TCMALLOC} -%attr(755, root, root) %{_libdir}/mysql/%{malloc_lib_target} -%endif - -%attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql -%attr(755, root, root) %{_sysconfdir}/init.d/mysql -%attr(755, root, root) %{_datadir}/mysql/ -%dir %attr(755, mysql, mysql) /var/lib/mysql - -# ---------------------------------------------------------------------------- -%files -n MySQL-client%{product_suffix} -%defattr(-, root, root, 0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -%attr(755, root, root) %{_bindir}/msql2mysql -%attr(755, root, root) %{_bindir}/mysql -%attr(755, root, root) %{_bindir}/mysql_find_rows -%attr(755, root, root) %{_bindir}/mysql_waitpid -%attr(755, root, root) %{_bindir}/mysqlaccess -# XXX: This should be moved to %{_sysconfdir} -%attr(644, root, root) %{_bindir}/mysqlaccess.conf -%attr(755, root, root) %{_bindir}/mysqladmin -%attr(755, root, root) %{_bindir}/mysqlbinlog -%attr(755, root, root) %{_bindir}/mysqlcheck -%attr(755, root, root) %{_bindir}/mysqldump -%attr(755, root, root) %{_bindir}/mysqlimport -%attr(755, root, root) %{_bindir}/mysqlshow -%attr(755, root, root) %{_bindir}/mysqlslap -%attr(755, root, root) %{_bindir}/mysql_config_editor - -%doc %attr(644, root, man) %{_mandir}/man1/msql2mysql.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_find_rows.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_waitpid.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlaccess.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqladmin.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlbinlog.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlcheck.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqldump.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlimport.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlshow.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlslap.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_config_editor.1* - -# ---------------------------------------------------------------------------- -%files -n MySQL-devel%{product_suffix} -f optional-files-devel -%defattr(-, root, root, 0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -%doc %attr(644, root, man) %{_mandir}/man1/comp_err.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_config.1* -%attr(755, root, root) %{_bindir}/mysql_config -%dir %attr(755, root, root) %{_includedir}/mysql -%dir %attr(755, root, root) %{_libdir}/mysql -%{_includedir}/mysql/* -%{_datadir}/aclocal/mysql.m4 -%{_libdir}/mysql/libmysqlclient.a -%{_libdir}/mysql/libmysqlclient_r.a -%{_libdir}/mysql/libmysqlservices.a - -# ---------------------------------------------------------------------------- -%files -n MySQL-shared%{product_suffix} -%defattr(-, root, root, 0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -# Shared libraries (omit for architectures that don't support them) -%{_libdir}/libmysql*.so* - -%post -n MySQL-shared%{product_suffix} -/sbin/ldconfig - -%postun -n MySQL-shared%{product_suffix} -/sbin/ldconfig - -# ---------------------------------------------------------------------------- -%files -n MySQL-test%{product_suffix} -%defattr(-, root, root, 0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -%attr(-, root, root) %{_datadir}/mysql-test -%attr(755, root, root) %{_bindir}/mysql_client_test -%attr(755, root, root) %{_bindir}/mysql_client_test_embedded -%attr(755, root, root) %{_bindir}/mysqltest_embedded -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* - -# ---------------------------------------------------------------------------- -%files -n MySQL-embedded%{product_suffix} -%defattr(-, root, root, 0755) -%if %{defined license_files_server} -%doc %{license_files_server} -%endif -%attr(755, root, root) %{_bindir}/mysql_embedded -%attr(644, root, root) %{_libdir}/mysql/libmysqld.a -%attr(644, root, root) %{_libdir}/mysql/libmysqld-debug.a - -############################################################################## -# The spec file changelog only includes changes made to the spec file -# itself - note that they must be ordered by date (important when -# merging BK trees) -############################################################################## -%changelog -* Mon Oct 06 2014 Balasubramanian Kandasamy -- Add license info in each subpackage - -* Wed May 28 2014 Balasubramanian Kandasamy -- Updated usergroup to mysql on datadir - -* Wed Oct 30 2013 Balasubramanian Kandasamy -- Removed non gpl file docs/mysql.info from community packages - -* Mon Sep 09 2013 Balasubramanian Kandasamy -- Updated logic to get the correct count of PID files - -* Fri Aug 16 2013 Balasubramanian Kandasamy -- Added provides lowercase mysql tags - -* Wed Jun 26 2013 Balasubramanian Kandasamy -- Cleaned up spec file to resolve rpm dependencies. - -* Mon Nov 05 2012 Joerg Bruehe - -- Allow to override the default to use the bundled yaSSL by an option like - --define="with_ssl /path/to/ssl" - -* Wed Oct 10 2012 Bjorn Munch - -- Replace old my-*.cnf config file examples with template my-default.cnf - -* Fri Oct 05 2012 Joerg Bruehe - -- Let the installation use the new option "--random-passwords" of "mysql_install_db". - (Bug# 12794345 Ensure root password) -- Fix an inconsistency: "new install" vs "upgrade" are told from the (non)existence - of "$mysql_datadir/mysql" (holding table "mysql.user" and other system stuff). - -* Tue Jul 24 2012 Joerg Bruehe - -- Add a macro "runselftest": - if set to 1 (default), the test suite will be run during the RPM build; - this can be oveeridden via the command line by adding - --define "runselftest 0" - Failures of the test suite will NOT make the RPM build fail! - -* Mon Jul 16 2012 Joerg Bruehe - -- Add the man page for the "mysql_config_editor". - -* Mon Jun 11 2012 Joerg Bruehe - -- Make sure newly added "SPECIFIC-ULN/" directory does not disturb packaging. - -* Wed Feb 29 2012 Brajmohan Saxena - -- Removal all traces of the readline library from mysql (BUG 13738013) - -* Wed Sep 28 2011 Joerg Bruehe - -- Fix duplicate mentioning of "mysql_plugin" and its manual page, - it is better to keep alphabetic order in the files list (merging!). - -* Wed Sep 14 2011 Joerg Bruehe - -- Let the RPM capabilities ("obsoletes" etc) ensure that an upgrade may replace - the RPMs of any configuration (of the current or the preceding release series) - by the new ones. This is done by not using the implicitly generated capabilities - (which include the configuration name) and relying on more generic ones which - just list the function ("server", "client", ...). - The implicit generation cannot be prevented, so all these capabilities must be - explicitly listed in "Obsoletes:" - -* Tue Sep 13 2011 Jonathan Perkin - -- Add support for Oracle Linux 6 and Red Hat Enterprise Linux 6. Due to - changes in RPM behaviour ($RPM_BUILD_ROOT is removed prior to install) - this necessitated a move of the libmygcc.a installation to the install - phase, which is probably where it belonged in the first place. - -* Tue Sep 13 2011 Joerg Bruehe - -- "make_win_bin_dist" and its manual are dropped, cmake does it different. - -* Thu Sep 08 2011 Daniel Fischer - -- Add mysql_plugin man page. - -* Tue Aug 30 2011 Tor Didriksen - -- Set CXX=g++ by default to add a dependency on libgcc/libstdc++. - Also, remove the use of the -fno-exceptions and -fno-rtti flags. - TODO: update distro_buildreq/distro_requires - -* Tue Aug 30 2011 Joerg Bruehe - -- Add the manual page for "mysql_plugin" to the server package. - -* Fri Aug 19 2011 Joerg Bruehe - -- Null-upmerge the fix of bug#37165: This spec file is not affected. -- Replace "/var/lib/mysql" by the spec file variable "%%{mysqldatadir}". - -* Fri Aug 12 2011 Daniel Fischer - -- Source plugin library files list from cmake-generated file. - -* Mon Jul 25 2011 Chuck Bell - -- Added the mysql_plugin client - enables or disables plugins. - -* Thu Jul 21 2011 Sunanda Menon - -- Fix bug#12561297: Added the MySQL embedded binary - -* Thu Jul 07 2011 Joerg Bruehe - -- Fix bug#45415: "rpm upgrade recreates test database" - Let the creation of the "test" database happen only during a new installation, - not in an RPM upgrade. - This affects both the "mkdir" and the call of "mysql_install_db". - -* Wed Feb 09 2011 Joerg Bruehe - -- Fix bug#56581: If an installation deviates from the default file locations - ("datadir" and "pid-file"), the mechanism to detect a running server (on upgrade) - should still work, and use these locations. - The problem was that the fix for bug#27072 did not check for local settings. - -* Mon Jan 31 2011 Joerg Bruehe - -- Install the new "manifest" files: "INFO_SRC" and "INFO_BIN". - -* Tue Nov 23 2010 Jonathan Perkin - -- EXCEPTIONS-CLIENT has been deleted, remove it from here too -- Support MYSQL_BUILD_MAKE_JFLAG environment variable for passing - a '-j' argument to make. - -* Mon Nov 1 2010 Georgi Kodinov - -- Added test authentication (WL#1054) plugin binaries - -* Wed Oct 6 2010 Georgi Kodinov - -- Added example external authentication (WL#1054) plugin binaries - -* Wed Aug 11 2010 Joerg Bruehe - -- With a recent spec file cleanup, names have changed: A "-community" part was dropped. - Reflect that in the "Obsoletes" specifications. -- Add a "triggerpostun" to handle the uninstall of the "-community" server RPM. -- This fixes bug#55015 "MySQL server is not restarted properly after RPM upgrade". - -* Tue Jun 15 2010 Joerg Bruehe - -- Change the behaviour on installation and upgrade: - On installation, do not autostart the server. - *Iff* the server was stopped before the upgrade is started, this is taken as a - sign the administrator is handling that manually, and so the new server will - not be started automatically at the end of the upgrade. - The start/stop scripts will still be installed, so the server will be started - on the next machine boot. - This is the 5.5 version of fixing bug#27072 (RPM autostarting the server). - -* Tue Jun 1 2010 Jonathan Perkin - -- Implement SELinux checks from distribution-specific spec file. - -* Wed May 12 2010 Jonathan Perkin - -- Large number of changes to build using CMake -- Introduce distribution-specific RPMs -- Drop debuginfo, build all binaries with debug/symbols -- Remove __os_install_post, use native macro -- Remove _unpackaged_files_terminate_build, make it an error to have - unpackaged files -- Remove cluster RPMs - -* Wed Mar 24 2010 Joerg Bruehe - -- Add "--with-perfschema" to the configure options. - -* Mon Mar 22 2010 Joerg Bruehe - -- User "usr/lib*" to allow for both "usr/lib" and "usr/lib64", - mask "rmdir" return code 1. -- Remove "ha_example.*" files from the list, they aren't built. - -* Wed Mar 17 2010 Joerg Bruehe - -- Fix a wrong path name in handling the debug plugins. - -* Wed Mar 10 2010 Joerg Bruehe - -- Take the result of the debug plugin build and put it into the optimized tree, - so that it becomes part of the final installation; - include the files in the packlist. Part of the fixes for bug#49022. - -* Mon Mar 01 2010 Joerg Bruehe - -- Set "Oracle and/or its affiliates" as the vendor and copyright owner, - accept upgrading from packages showing MySQL or Sun as vendor. - -* Fri Feb 12 2010 Joerg Bruehe - -- Formatting changes: - Have a consistent structure of separator lines and of indentation - (8 leading blanks => tab). -- Introduce the variable "src_dir". -- Give the environment variables "MYSQL_BUILD_CC(CXX)" precedence - over "CC" ("CXX"). -- Drop the old "with_static" argument analysis, this is not supported - in 5.1 since ages. -- Introduce variables to control the handlers individually, as well - as other options. -- Use the new "--with-plugin" notation for the table handlers. -- Drop handling "/etc/rc.d/init.d/mysql", the switch to "/etc/init.d/mysql" - was done back in 2002 already. -- Make "--with-zlib-dir=bundled" the default, add an option to disable it. -- Add missing manual pages to the file list. -- Improve the runtime check for "libgcc.a", protect it against being tried - with the Intel compiler "icc". - -* Mon Jan 11 2010 Joerg Bruehe - -- Change RPM file naming: - - Suffix like "-m2", "-rc" becomes part of version as "_m2", "_rc". - - Release counts from 1, not 0. - -* Wed Dec 23 2009 Joerg Bruehe - -- The "semisync" plugin file name has lost its introductory "lib", - adapt the file lists for the subpackages. - This is a part missing from the fix for bug#48351. -- Remove the "fix_privilege_tables" manual, it does not exist in 5.5 - (and likely, the whole script will go, too). - -* Mon Nov 16 2009 Joerg Bruehe - -- Fix some problems with the directives around "tcmalloc" (experimental), - remove erroneous traces of the InnoDB plugin (that is 5.1 only). - -* Tue Oct 06 2009 Magnus Blaudd - -- Removed mysql_fix_privilege_tables - -* Fri Oct 02 2009 Alexander Nozdrin - -- "mysqlmanager" got removed from version 5.4, all references deleted. - -* Fri Aug 28 2009 Joerg Bruehe - -- Merge up from 5.1 to 5.4: Remove handling for the InnoDB plugin. - -* Thu Aug 27 2009 Joerg Bruehe - -- This version does not contain the "Instance manager", "mysqlmanager": - Remove it from the spec file so that packaging succeeds. - -* Mon Aug 24 2009 Jonathan Perkin - -- Add conditionals for bundled zlib and innodb plugin - -* Fri Aug 21 2009 Jonathan Perkin - -- Install plugin libraries in appropriate packages. -- Disable libdaemon_example and ftexample plugins. - -* Thu Aug 20 2009 Jonathan Perkin - -- Update variable used for mysql-test suite location to match source. - -* Fri Nov 07 2008 Joerg Bruehe - -- Correct yesterday's fix, so that it also works for the last flag, - and fix a wrong quoting: un-quoted quote marks must not be escaped. - -* Thu Nov 06 2008 Kent Boortz - -- Removed "mysql_upgrade_shell" -- Removed some copy/paste between debug and normal build - -* Thu Nov 06 2008 Joerg Bruehe - -- Modify CFLAGS and CXXFLAGS such that a debug build is not optimized. - This should cover both gcc and icc flags. Fixes bug#40546. - -* Fri Aug 29 2008 Kent Boortz - -- Removed the "Federated" storage engine option, and enabled in all - -* Tue Aug 26 2008 Joerg Bruehe - -- Get rid of the "warning: Installed (but unpackaged) file(s) found:" - Some generated files aren't needed in RPMs: - - the "sql-bench/" subdirectory - Some files were missing: - - /usr/share/aclocal/mysql.m4 ("devel" subpackage) - - Manual "mysqlbug" ("server" subpackage) - - Program "innochecksum" and its manual ("server" subpackage) - - Manual "mysql_find_rows" ("client" subpackage) - - Script "mysql_upgrade_shell" ("client" subpackage) - - Program "ndb_cpcd" and its manual ("ndb-extra" subpackage) - - Manuals "ndb_mgm" + "ndb_restore" ("ndb-tools" subpackage) - -* Mon Mar 31 2008 Kent Boortz - -- Made the "Federated" storage engine an option -- Made the "Cluster" storage engine and sub packages an option - -* Wed Mar 19 2008 Joerg Bruehe - -- Add the man pages for "ndbd" and "ndb_mgmd". - -* Mon Feb 18 2008 Timothy Smith - -- Require a manual upgrade if the alread-installed mysql-server is - from another vendor, or is of a different major version. - -* Wed May 02 2007 Joerg Bruehe - -- "ndb_size.tmpl" is not needed any more, - "man1/mysql_install_db.1" lacked the trailing '*'. - -* Sat Apr 07 2007 Kent Boortz - -- Removed man page for "mysql_create_system_tables" - -* Wed Mar 21 2007 Daniel Fischer - -- Add debug server. - -* Mon Mar 19 2007 Daniel Fischer - -- Remove Max RPMs; the server RPMs contain a mysqld compiled with all - features that previously only were built into Max. - -* Fri Mar 02 2007 Joerg Bruehe - -- Add several man pages for NDB which are now created. - -* Fri Jan 05 2007 Kent Boortz - -- Put back "libmygcc.a", found no real reason it was removed. - -- Add CFLAGS to gcc call with --print-libgcc-file, to make sure the - correct "libgcc.a" path is returned for the 32/64 bit architecture. - -* Mon Dec 18 2006 Joerg Bruehe - -- Fix the move of "mysqlmanager" to section 8: Directory name was wrong. - -* Thu Dec 14 2006 Joerg Bruehe - -- Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" - in the server RPM. -- The "mysqlmanager" man page got moved from section 1 to 8. - -* Thu Nov 30 2006 Joerg Bruehe - -- Call "make install" using "benchdir_root=%%{_datadir}", - because that is affecting the regression test suite as well. - -* Thu Nov 16 2006 Joerg Bruehe - -- Explicitly note that the "MySQL-shared" RPMs (as built by MySQL AB) - replace "mysql-shared" (as distributed by SuSE) to allow easy upgrading - (bug#22081). - -* Mon Nov 13 2006 Joerg Bruehe - -- Add "--with-partition" to all server builds. - -- Use "--report-features" in one test run per server build. - -* Tue Aug 15 2006 Joerg Bruehe - -- The "max" server is removed from packages, effective from 5.1.12-beta. - Delete all steps to build, package, or install it. - -* Mon Jul 10 2006 Joerg Bruehe - -- Fix a typing error in the "make" target for the Perl script to run the tests. - -* Tue Jul 04 2006 Joerg Bruehe - -- Use the Perl script to run the tests, because it will automatically check - whether the server is configured with SSL. - -* Tue Jun 27 2006 Joerg Bruehe - -- move "mysqldumpslow" from the client RPM to the server RPM (bug#20216) - -- Revert all previous attempts to call "mysql_upgrade" during RPM upgrade, - there are some more aspects which need to be solved before this is possible. - For now, just ensure the binary "mysql_upgrade" is delivered and installed. - -* Thu Jun 22 2006 Joerg Bruehe - -- Close a gap of the previous version by explicitly using - a newly created temporary directory for the socket to be used - in the "mysql_upgrade" operation, overriding any local setting. - -* Tue Jun 20 2006 Joerg Bruehe - -- To run "mysql_upgrade", we need a running server; - start it in isolation and skip password checks. - -* Sat May 20 2006 Kent Boortz - -- Always compile for PIC, position independent code. - -* Wed May 10 2006 Kent Boortz - -- Use character set "all" when compiling with Cluster, to make Cluster - nodes independent on the character set directory, and the problem - that two RPM sub packages both wants to install this directory. - -* Mon May 01 2006 Kent Boortz - -- Use "./libtool --mode=execute" instead of searching for the - executable in current directory and ".libs". - -* Fri Apr 28 2006 Kent Boortz - -- Install and run "mysql_upgrade" - -* Wed Apr 12 2006 Jim Winstead - -- Remove sql-bench, and MySQL-bench RPM (will be built as an independent - project from the mysql-bench repository) - -* Tue Apr 11 2006 Jim Winstead - -- Remove old mysqltestmanager and related programs -* Sat Apr 01 2006 Kent Boortz - -- Set $LDFLAGS from $MYSQL_BUILD_LDFLAGS - -* Tue Mar 07 2006 Kent Boortz - -- Changed product name from "Community Edition" to "Community Server" - -* Mon Mar 06 2006 Kent Boortz - -- Fast mutexes is now disabled by default, but should be - used in Linux builds. - -* Mon Feb 20 2006 Kent Boortz - -- Reintroduced a max build -- Limited testing of 'debug' and 'max' servers -- Berkeley DB only in 'max' - -* Mon Feb 13 2006 Joerg Bruehe - -- Use "-i" on "make test-force"; - this is essential for later evaluation of this log file. - -* Thu Feb 09 2006 Kent Boortz - -- Pass '-static' to libtool, link static with our own libraries, dynamic - with system libraries. Link with the bundled zlib. - -* Wed Feb 08 2006 Kristian Nielsen - -- Modified RPM spec to match new 5.1 debug+max combined community packaging. - -* Sun Dec 18 2005 Kent Boortz - -- Added "client/mysqlslap" - -* Mon Dec 12 2005 Rodrigo Novo - -- Added zlib to the list of (static) libraries installed -- Added check against libtool wierdness (WRT: sql/mysqld || sql/.libs/mysqld) -- Compile MySQL with bundled zlib -- Fixed %%packager name to "MySQL Production Engineering Team" - -* Mon Dec 05 2005 Joerg Bruehe - -- Avoid using the "bundled" zlib on "shared" builds: - As it is not installed (on the build system), this gives dependency - problems with "libtool" causing the build to fail. - (Change was done on Nov 11, but left uncommented.) - -* Tue Nov 22 2005 Joerg Bruehe - -- Extend the file existence check for "init.d/mysql" on un-install - to also guard the call to "insserv"/"chkconfig". - -* Thu Oct 27 2005 Lenz Grimmer - -- added more man pages - -* Wed Oct 19 2005 Kent Boortz - -- Made yaSSL support an option (off by default) - -* Wed Oct 19 2005 Kent Boortz - -- Enabled yaSSL support - -* Sat Oct 15 2005 Kent Boortz - -- Give mode arguments the same way in all places -- Moved copy of mysqld.a to "standard" build, but - disabled it as we don't do embedded yet in 5.0 - -* Fri Oct 14 2005 Kent Boortz - -- For 5.x, always compile with --with-big-tables -- Copy the config.log file to location outside - the build tree - -* Fri Oct 14 2005 Kent Boortz - -- Removed unneeded/obsolete configure options -- Added archive engine to standard server -- Removed the embedded server from experimental server -- Changed suffix "-Max" => "-max" -- Changed comment string "Max" => "Experimental" - -* Thu Oct 13 2005 Lenz Grimmer - -- added a usermod call to assign a potential existing mysql user to the - correct user group (BUG#12823) -- Save the perror binary built during Max build so it supports the NDB - error codes (BUG#13740) -- added a separate macro "mysqld_group" to be able to define the - user group of the mysql user seperately, if desired. - -* Thu Sep 29 2005 Lenz Grimmer - -- fixed the removing of the RPM_BUILD_ROOT in the %clean section (the - $RBR variable did not get expanded, thus leaving old build roots behind) - -* Thu Aug 04 2005 Lenz Grimmer - -- Fixed the creation of the mysql user group account in the postinstall - section (BUG 12348) -- Fixed enabling the Archive storage engine in the Max binary - -* Tue Aug 02 2005 Lenz Grimmer - -- Fixed the Requires: tag for the server RPM (BUG 12233) - -* Fri Jul 15 2005 Lenz Grimmer - -- create a "mysql" user group and assign the mysql user account to that group - in the server postinstall section. (BUG 10984) - -* Tue Jun 14 2005 Lenz Grimmer - -- Do not build statically on i386 by default, only when adding either "--with - static" or "--define '_with_static 1'" to the RPM build options. Static - linking really only makes sense when linking against the specially patched - glibc 2.2.5. - -* Mon Jun 06 2005 Lenz Grimmer - -- added mysql_client_test to the "bench" subpackage (BUG 10676) -- added the libndbclient static and shared libraries (BUG 10676) - -* Wed Jun 01 2005 Lenz Grimmer - -- use "mysqldatadir" variable instead of hard-coding the path multiple times -- use the "mysqld_user" variable on all occasions a user name is referenced -- removed (incomplete) Brazilian translations -- removed redundant release tags from the subpackage descriptions - -* Wed May 25 2005 Joerg Bruehe - -- Added a "make clean" between separate calls to "BuildMySQL". - -* Thu May 12 2005 Guilhem Bichot - -- Removed the mysql_tableinfo script made obsolete by the information schema - -* Wed Apr 20 2005 Lenz Grimmer - -- Enabled the "blackhole" storage engine for the Max RPM - -* Wed Apr 13 2005 Lenz Grimmer - -- removed the MySQL manual files (html/ps/texi) - they have been removed - from the MySQL sources and are now available seperately. - -* Mon Apr 4 2005 Petr Chardin - -- old mysqlmanager, mysqlmanagerc and mysqlmanager-pwger renamed into - mysqltestmanager, mysqltestmanager and mysqltestmanager-pwgen respectively - -* Fri Mar 18 2005 Lenz Grimmer - -- Disabled RAID in the Max binaries once and for all (it has finally been - removed from the source tree) - -* Sun Feb 20 2005 Petr Chardin - -- Install MySQL Instance Manager together with mysqld, touch mysqlmanager - password file - -* Mon Feb 14 2005 Lenz Grimmer - -- Fixed the compilation comments and moved them into the separate build sections - for Max and Standard - -* Mon Feb 7 2005 Tomas Ulin - -- enabled the "Ndbcluster" storage engine for the max binary -- added extra make install in ndb subdir after Max build to get ndb binaries -- added packages for ndbcluster storage engine - -* Fri Jan 14 2005 Lenz Grimmer - -- replaced obsoleted "BuildPrereq" with "BuildRequires" instead - -* Thu Jan 13 2005 Lenz Grimmer - -- enabled the "Federated" storage engine for the max binary - -* Tue Jan 04 2005 Petr Chardin - -- ISAM and merge storage engines were purged. As well as appropriate - tools and manpages (isamchk and isamlog) - -* Fri Dec 31 2004 Lenz Grimmer - -- enabled the "Archive" storage engine for the max binary -- enabled the "CSV" storage engine for the max binary -- enabled the "Example" storage engine for the max binary - -* Thu Aug 26 2004 Lenz Grimmer - -- MySQL-Max now requires MySQL-server instead of MySQL (BUG 3860) - -* Fri Aug 20 2004 Lenz Grimmer - -- do not link statically on IA64/AMD64 as these systems do not have - a patched glibc installed - -* Tue Aug 10 2004 Lenz Grimmer - -- Added libmygcc.a to the devel subpackage (required to link applications - against the the embedded server libmysqld.a) (BUG 4921) - -* Mon Aug 09 2004 Lenz Grimmer - -- Added EXCEPTIONS-CLIENT to the "devel" package - -* Thu Jul 29 2004 Lenz Grimmer - -- disabled OpenSSL in the Max binaries again (the RPM packages were the - only exception to this anyway) (BUG 1043) - -* Wed Jun 30 2004 Lenz Grimmer - -- fixed server postinstall (mysql_install_db was called with the wrong - parameter) - -* Thu Jun 24 2004 Lenz Grimmer - -- added mysql_tzinfo_to_sql to the server subpackage -- run "make clean" instead of "make distclean" - -* Mon Apr 05 2004 Lenz Grimmer - -- added ncurses-devel to the build prerequisites (BUG 3377) - -* Thu Feb 12 2004 Lenz Grimmer - -- when using gcc, _always_ use CXX=gcc -- replaced Copyright with License field (Copyright is obsolete) - -* Tue Feb 03 2004 Lenz Grimmer - -- added myisam_ftdump to the Server package - -* Tue Jan 13 2004 Lenz Grimmer - -- link the mysql client against libreadline instead of libedit (BUG 2289) - -* Mon Dec 22 2003 Lenz Grimmer - -- marked /etc/logrotate.d/mysql as a config file (BUG 2156) - -* Sat Dec 13 2003 Lenz Grimmer - -- fixed file permissions (BUG 1672) - -* Thu Dec 11 2003 Lenz Grimmer - -- made testing for gcc3 a bit more robust - -* Fri Dec 05 2003 Lenz Grimmer - -- added missing file mysql_create_system_tables to the server subpackage - -* Fri Nov 21 2003 Lenz Grimmer - -- removed dependency on MySQL-client from the MySQL-devel subpackage - as it is not really required. (BUG 1610) - -* Fri Aug 29 2003 Lenz Grimmer - -- Fixed BUG 1162 (removed macro names from the changelog) -- Really fixed BUG 998 (disable the checking for installed but - unpackaged files) - -* Tue Aug 05 2003 Lenz Grimmer - -- Fixed BUG 959 (libmysqld not being compiled properly) -- Fixed BUG 998 (RPM build errors): added missing files to the - distribution (mysql_fix_extensions, mysql_tableinfo, mysqldumpslow, - mysql_fix_privilege_tables.1), removed "-n" from install section. - -* Wed Jul 09 2003 Lenz Grimmer - -- removed the GIF Icon (file was not included in the sources anyway) -- removed unused variable shared_lib_version -- do not run automake before building the standard binary - (should not be necessary) -- add server suffix '-standard' to standard binary (to be in line - with the binary tarball distributions) -- Use more RPM macros (_exec_prefix, _sbindir, _libdir, _sysconfdir, - _datadir, _includedir) throughout the spec file. -- allow overriding CC and CXX (required when building with other compilers) - -* Fri May 16 2003 Lenz Grimmer - -- re-enabled RAID again - -* Wed Apr 30 2003 Lenz Grimmer - -- disabled MyISAM RAID (--with-raid) - it throws an assertion which - needs to be investigated first. - -* Mon Mar 10 2003 Lenz Grimmer - -- added missing file mysql_secure_installation to server subpackage - (BUG 141) - -* Tue Feb 11 2003 Lenz Grimmer - -- re-added missing pre- and post(un)install scripts to server subpackage -- added config file /etc/my.cnf to the file list (just for completeness) -- make sure to create the datadir with 755 permissions - -* Mon Jan 27 2003 Lenz Grimmer - -- removed unused CC and CXX variables -- CFLAGS and CXXFLAGS should honor RPM_OPT_FLAGS - -* Fri Jan 24 2003 Lenz Grimmer - -- renamed package "MySQL" to "MySQL-server" -- fixed Copyright tag -- added mysql_waitpid to client subpackage (required for mysql-test-run) - -* Wed Nov 27 2002 Lenz Grimmer - -- moved init script from /etc/rc.d/init.d to /etc/init.d (the majority of - Linux distributions now support this scheme as proposed by the LSB either - directly or via a compatibility symlink) -- Use new "restart" init script action instead of starting and stopping - separately -- Be more flexible in activating the automatic bootup - use insserv (on - older SuSE versions) or chkconfig (Red Hat, newer SuSE versions and - others) to create the respective symlinks - -* Wed Sep 25 2002 Lenz Grimmer - -- MySQL-Max now requires MySQL >= 4.0 to avoid version mismatches - (mixing 3.23 and 4.0 packages) - -* Fri Aug 09 2002 Lenz Grimmer - -- Turn off OpenSSL in MySQL-Max for now until it works properly again -- enable RAID for the Max binary instead -- added compatibility link: safe_mysqld -> mysqld_safe to ease the - transition from 3.23 - -* Thu Jul 18 2002 Lenz Grimmer - -- Reworked the build steps a little bit: the Max binary is supposed - to include OpenSSL, which cannot be linked statically, thus trying - to statically link against a special glibc is futile anyway -- because of this, it is not required to make yet another build run - just to compile the shared libs (saves a lot of time) -- updated package description of the Max subpackage -- clean up the BuildRoot directory afterwards - -* Mon Jul 15 2002 Lenz Grimmer - -- Updated Packager information -- Fixed the build options: the regular package is supposed to - include InnoDB and linked statically, while the Max package - should include BDB and SSL support - -* Fri May 03 2002 Lenz Grimmer - -- Use more RPM macros (e.g. infodir, mandir) to make the spec - file more portable -- reorganized the installation of documentation files: let RPM - take care of this -- reorganized the file list: actually install man pages along - with the binaries of the respective subpackage -- do not include libmysqld.a in the devel subpackage as well, if we - have a special "embedded" subpackage -- reworked the package descriptions - -* Mon Oct 8 2001 Monty - -- Added embedded server as a separate RPM - -* Fri Apr 13 2001 Monty - -- Added mysqld-max to the distribution - -* Tue Jan 2 2001 Monty - -- Added mysql-test to the bench package - -* Fri Aug 18 2000 Tim Smith - -- Added separate libmysql_r directory; now both a threaded - and non-threaded library is shipped. - -* Tue Sep 28 1999 David Axmark - -- Added the support-files/my-example.cnf to the docs directory. - -- Removed devel dependency on base since it is about client - development. - -* Wed Sep 8 1999 David Axmark - -- Cleaned up some for 3.23. - -* Thu Jul 1 1999 David Axmark - -- Added support for shared libraries in a separate sub - package. Original fix by David Fox (dsfox@cogsci.ucsd.edu) - -- The --enable-assembler switch is now automatically disables on - platforms there assembler code is unavailable. This should allow - building this RPM on non i386 systems. - -* Mon Feb 22 1999 David Axmark - -- Removed unportable cc switches from the spec file. The defaults can - now be overridden with environment variables. This feature is used - to compile the official RPM with optimal (but compiler version - specific) switches. - -- Removed the repetitive description parts for the sub rpms. Maybe add - again if RPM gets a multiline macro capability. - -- Added support for a pt_BR translation. Translation contributed by - Jorge Godoy . - -* Wed Nov 4 1998 David Axmark - -- A lot of changes in all the rpm and install scripts. This may even - be a working RPM :-) - -* Sun Aug 16 1998 David Axmark - -- A developers changelog for MySQL is available in the source RPM. And - there is a history of major user visible changed in the Reference - Manual. Only RPM specific changes will be documented here. diff -Nru mysql-5.6-5.6.27/support-files/mysql.5.6.33.spec mysql-5.6-5.6.33/support-files/mysql.5.6.33.spec --- mysql-5.6-5.6.27/support-files/mysql.5.6.33.spec 1970-01-01 00:00:00.000000000 +0000 +++ mysql-5.6-5.6.33/support-files/mysql.5.6.33.spec 2016-08-26 11:32:53.000000000 +0000 @@ -0,0 +1,2103 @@ +# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston +# MA 02110-1301 USA. + +############################################################################## +# Some common macro definitions +############################################################################## + +# NOTE: "vendor" is used in upgrade/downgrade check, so you can't +# change these, has to be exactly as is. +%global mysql_old_vendor MySQL AB +%global mysql_vendor_2 Sun Microsystems, Inc. +%global mysql_vendor Oracle and/or its affiliates + +%global mysql_version 5.6.33 + +%global mysqld_user mysql +%global mysqld_group mysql +%global mysqldatadir /var/lib/mysql + +%global release 1 + + +# +# Macros we use which are not available in all supported versions of RPM +# +# - defined/undefined are missing on RHEL4 +# +%if %{expand:%{?defined:0}%{!?defined:1}} +%define defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}} +%endif +%if %{expand:%{?undefined:0}%{!?undefined:1}} +%define undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}} +%endif + +# ---------------------------------------------------------------------------- +# RPM build tools now automatically detect Perl module dependencies. This +# detection causes problems as it is broken in some versions, and it also +# provides unwanted dependencies from mandatory scripts in our package. +# It might not be possible to disable this in all versions of RPM, but here we +# try anyway. We keep the "AutoReqProv: no" for the "test" sub package, as +# disabling here might fail, and that package has the most problems. +# See: +# http://fedoraproject.org/wiki/Packaging/Perl#Filtering_Requires:_and_Provides +# http://www.wideopen.com/archives/rpm-list/2002-October/msg00343.html +# ---------------------------------------------------------------------------- +%undefine __perl_provides +%undefine __perl_requires + +############################################################################## +# Command line handling +############################################################################## +# +# To set options: +# +# $ rpmbuild --define="option " ... +# + +# ---------------------------------------------------------------------------- +# Commercial builds +# ---------------------------------------------------------------------------- +%if %{undefined commercial} +%define commercial 0 +%endif + +# ---------------------------------------------------------------------------- +# Source name +# ---------------------------------------------------------------------------- +%if %{undefined src_base} +%define src_base mysql +%endif +%define src_dir %{src_base}-%{mysql_version} + +# ---------------------------------------------------------------------------- +# Feature set (storage engines, options). Default to community (everything) +# ---------------------------------------------------------------------------- +%if %{undefined feature_set} +%define feature_set community +%endif + +# ---------------------------------------------------------------------------- +# Server comment strings +# ---------------------------------------------------------------------------- +%if %{undefined compilation_comment_debug} +%define compilation_comment_debug MySQL Community Server - Debug (GPL) +%endif +%if %{undefined compilation_comment_release} +%define compilation_comment_release MySQL Community Server (GPL) +%endif + +# ---------------------------------------------------------------------------- +# Product and server suffixes +# ---------------------------------------------------------------------------- +%if %{undefined product_suffix} + %if %{defined short_product_tag} + %define product_suffix -%{short_product_tag} + %else + %define product_suffix %{nil} + %endif +%endif + +%if %{undefined server_suffix} +%define server_suffix %{nil} +%endif + +# ---------------------------------------------------------------------------- +# Distribution support +# ---------------------------------------------------------------------------- +%if %{undefined distro_specific} +%define distro_specific 0 +%endif +%if %{distro_specific} + %if %(test -f /etc/enterprise-release && echo 1 || echo 0) + %define oelver %(rpm -qf --qf '%%{version}\\n' /etc/enterprise-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') + %if "%oelver" == "4" + %define distro_description Oracle Enterprise Linux 4 + %define distro_releasetag oel4 + %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %if "%oelver" == "5" + %define distro_description Oracle Enterprise Linux 5 + %define distro_releasetag oel5 + %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %{error:Oracle Enterprise Linux %{oelver} is unsupported} + %endif + %endif + %else + %if %(test -f /etc/oracle-release && echo 1 || echo 0) + %define elver %(rpm -qf --qf '%%{version}\\n' /etc/oracle-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') + %if "%elver" == "6" || "%elver" == "7" + %define distro_description Oracle Linux %elver + %define distro_releasetag el%elver + %define distro_buildreq gcc-c++ ncurses-devel perl time zlib-devel cmake libaio-devel numactl-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %{error:Oracle Linux %{elver} is unsupported} + %endif + %else + %if %(test -f /etc/redhat-release && echo 1 || echo 0) + %define rhelver %(rpm -qf --qf '%%{version}\\n' /etc/redhat-release | sed -e 's/^\\([0-9]*\\).*/\\1/g') + %if "%rhelver" == "4" + %define distro_description Red Hat Enterprise Linux 4 + %define distro_releasetag rhel4 + %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %if "%rhelver" == "5" + %define distro_description Red Hat Enterprise Linux 5 + %define distro_releasetag rhel5 + %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel cmake libaio-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %if "%rhelver" == "6" + %define distro_description Red Hat Enterprise Linux 6 + %define distro_releasetag rhel6 + %define distro_buildreq gcc-c++ ncurses-devel perl time zlib-devel cmake libaio-devel numactl-devel + %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools + %else + %{error:Red Hat Enterprise Linux %{rhelver} is unsupported} + %endif + %endif + %endif + %else + %if %(test -f /etc/SuSE-release && echo 1 || echo 0) + %define susever %(rpm -qf --qf '%%{version}\\n' /etc/SuSE-release | cut -d. -f1) + %if "%susever" == "10" + %define distro_description SUSE Linux Enterprise Server 10 + %define distro_releasetag sles10 + %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client zlib-devel cmake libaio-devel + %define distro_requires aaa_base coreutils grep procps pwdutils + %else + %if "%susever" == "11" + %define distro_description SUSE Linux Enterprise Server 11 + %define distro_releasetag sles11 + %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client procps pwdutils zlib-devel cmake libaio-devel libnuma-devel + %define distro_requires aaa_base coreutils grep procps pwdutils + %else + %{error:SuSE %{susever} is unsupported} + %endif + %endif + %else + %{error:Unsupported distribution} + %endif + %endif + %endif + %endif +%else + %define glibc_version %(/lib/libc.so.6 | grep stable | cut -d, -f1 | cut -c38-) + %define distro_description Generic Linux (glibc %{glibc_version}) + %define distro_releasetag linux_glibc%{glibc_version} + %define distro_buildreq gcc-c++ gperf ncurses-devel perl time zlib-devel + %define distro_requires coreutils grep procps /sbin/chkconfig /usr/sbin/useradd /usr/sbin/groupadd +%endif + +# Avoid debuginfo RPMs, leaves binaries unstripped +%define debug_package %{nil} + +# Hack to work around bug in RHEL5 __os_install_post macro, wrong inverted +# test for __debug_package +%define __strip /bin/true + +# ---------------------------------------------------------------------------- +# Support optional "tcmalloc" library (experimental) +# ---------------------------------------------------------------------------- +%if %{defined malloc_lib_target} +%define WITH_TCMALLOC 1 +%else +%define WITH_TCMALLOC 0 +%endif + +############################################################################## +# Configuration based upon above user input, not to be set directly +############################################################################## + +%if 0%{?commercial} +%define license_files_server %{src_dir}/LICENSE.mysql +%define license_type Commercial +%else +%define license_files_server %{src_dir}/COPYING %{src_dir}/README +%define license_type GPL +%endif + +############################################################################## +# Main spec file section +############################################################################## + +Name: MySQL%{product_suffix} +Summary: MySQL: a very fast and reliable SQL database server +Group: Applications/Databases +Version: 5.6.33 +Release: %{release}%{?distro_releasetag:.%{distro_releasetag}} +Distribution: %{distro_description} +License: Copyright (c) 2000, 2016, %{mysql_vendor}. All rights reserved. Under %{license_type} license as shown in the Description field. +Source: http://www.mysql.com/Downloads/MySQL-5.6/%{src_dir}.tar.gz +URL: http://www.mysql.com/ +Packager: MySQL Release Engineering +Vendor: %{mysql_vendor} +BuildRequires: %{distro_buildreq} + +# Regression tests may take a long time, override the default to skip them +%{!?runselftest:%global runselftest 1} + +# Think about what you use here since the first step is to +# run a rm -rf +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +# From the manual +%description +The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, +and robust SQL (Structured Query Language) database server. MySQL Server +is intended for mission-critical, heavy-load production systems as well +as for embedding into mass-deployed software. MySQL is a trademark of +%{mysql_vendor} + +The MySQL software has Dual Licensing, which means you can use the MySQL +software free of charge under the GNU General Public License +(http://www.gnu.org/licenses/). You can also purchase commercial MySQL +licenses from %{mysql_vendor} if you do not wish to be bound by the terms of +the GPL. See the chapter "Licensing and Support" in the manual for +further info. + +The MySQL web site (http://www.mysql.com/) provides the latest +news and information about the MySQL software. Also please see the +documentation and the manual for more information. + +############################################################################## +# Sub package definition +############################################################################## + +%package -n MySQL-server%{product_suffix} +Summary: MySQL: a very fast and reliable SQL database server +Group: Applications/Databases +Requires: %{distro_requires} +%if 0%{?commercial} +Obsoletes: MySQL-server +%else +Obsoletes: MySQL-server-advanced +%endif +Obsoletes: mysql-server < %{version}-%{release} +Obsoletes: mysql-server-advanced +Obsoletes: MySQL-server-classic MySQL-server-community MySQL-server-enterprise +Obsoletes: MySQL-server-advanced-gpl MySQL-server-enterprise-gpl +Provides: mysql-server = %{version}-%{release} +Provides: mysql-server%{?_isa} = %{version}-%{release} + +%description -n MySQL-server%{product_suffix} +The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, +and robust SQL (Structured Query Language) database server. MySQL Server +is intended for mission-critical, heavy-load production systems as well +as for embedding into mass-deployed software. MySQL is a trademark of +%{mysql_vendor} + +The MySQL software has Dual Licensing, which means you can use the MySQL +software free of charge under the GNU General Public License +(http://www.gnu.org/licenses/). You can also purchase commercial MySQL +licenses from %{mysql_vendor} if you do not wish to be bound by the terms of +the GPL. See the chapter "Licensing and Support" in the manual for +further info. + +The MySQL web site (http://www.mysql.com/) provides the latest news and +information about the MySQL software. Also please see the documentation +and the manual for more information. + +This package includes the MySQL server binary as well as related utilities +to run and administer a MySQL server. + +If you want to access and work with the database, you have to install +package "MySQL-client%{product_suffix}" as well! + +# ---------------------------------------------------------------------------- +%package -n MySQL-client%{product_suffix} +Summary: MySQL - Client +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: MySQL-client +%else +Obsoletes: MySQL-client-advanced +%endif +Obsoletes: mysql < %{version}-%{release} +Obsoletes: mysql-advanced < %{version}-%{release} +Obsoletes: MySQL-client-classic MySQL-client-community MySQL-client-enterprise +Obsoletes: MySQL-client-advanced-gpl MySQL-client-enterprise-gpl +Provides: mysql = %{version}-%{release} +Provides: mysql%{?_isa} = %{version}-%{release} + +%description -n MySQL-client%{product_suffix} +This package contains the standard MySQL clients and administration tools. + +For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ + +# ---------------------------------------------------------------------------- +%package -n MySQL-test%{product_suffix} +Summary: MySQL - Test suite +Group: Applications/Databases +%if 0%{?commercial} +Requires: MySQL-client-advanced perl +Obsoletes: MySQL-test +%else +Requires: MySQL-client perl +Obsoletes: MySQL-test-advanced +%endif +Obsoletes: mysql-test < %{version}-%{release} +Obsoletes: mysql-test-advanced +Obsoletes: MySQL-test-classic MySQL-test-community MySQL-test-enterprise +Obsoletes: MySQL-test-advanced-gpl MySQL-test-enterprise-gpl +Provides: mysql-test = %{version}-%{release} +Provides: mysql-test%{?_isa} = %{version}-%{release} +AutoReqProv: no + +%description -n MySQL-test%{product_suffix} +This package contains the MySQL regression test suite. + +For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ + +# ---------------------------------------------------------------------------- +%package -n MySQL-devel%{product_suffix} +Summary: MySQL - Development header files and libraries +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: MySQL-devel +%else +Obsoletes: MySQL-devel-advanced +%endif +Obsoletes: mysql-devel < %{version}-%{release} +Obsoletes: mysql-embedded-devel mysql-devel-advanced mysql-embedded-devel-advanced +Obsoletes: MySQL-devel-classic MySQL-devel-community MySQL-devel-enterprise +Obsoletes: MySQL-devel-advanced-gpl MySQL-devel-enterprise-gpl +Provides: mysql-devel = %{version}-%{release} +Provides: mysql-devel%{?_isa} = %{version}-%{release} + +%description -n MySQL-devel%{product_suffix} +This package contains the development header files and libraries necessary +to develop MySQL client applications. + +For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ + +# ---------------------------------------------------------------------------- +%package -n MySQL-shared%{product_suffix} +Summary: MySQL - Shared libraries +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: MySQL-shared +%else +Obsoletes: MySQL-shared-advanced +%endif +Obsoletes: MySQL-shared-standard MySQL-shared-pro +Obsoletes: MySQL-shared-pro-cert MySQL-shared-pro-gpl +Obsoletes: MySQL-shared-pro-gpl-cert +Obsoletes: MySQL-shared-classic MySQL-shared-community MySQL-shared-enterprise +Obsoletes: MySQL-shared-advanced-gpl MySQL-shared-enterprise-gpl + +%description -n MySQL-shared%{product_suffix} +This package contains the shared libraries (*.so*) which certain languages +and applications need to dynamically load and use MySQL. + +# ---------------------------------------------------------------------------- +%package -n MySQL-embedded%{product_suffix} +Summary: MySQL - Embedded library +Group: Applications/Databases +%if 0%{?commercial} +Requires: MySQL-devel-advanced +Obsoletes: MySQL-embedded +%else +Requires: MySQL-devel +Obsoletes: MySQL-embedded-advanced +%endif +Obsoletes: mysql-embedded < %{version}-%{release} +Obsoletes: mysql-embedded-advanced +Obsoletes: MySQL-embedded-pro +Obsoletes: MySQL-embedded-classic MySQL-embedded-community MySQL-embedded-enterprise +Obsoletes: MySQL-embedded-advanced-gpl MySQL-embedded-enterprise-gpl +Provides: mysql-embedded = %{version}-%{release} +Provides: mysql-embedded%{?_isa} = %{version}-%{release} + +%description -n MySQL-embedded%{product_suffix} +This package contains the MySQL server as an embedded library. + +The embedded MySQL server library makes it possible to run a full-featured +MySQL server inside the client application. The main benefits are increased +speed and more simple management for embedded applications. + +The API is identical for the embedded MySQL version and the +client/server version. + +For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ + +############################################################################## +%prep +%setup -T -a 0 -c -n %{src_dir} +############################################################################## +%build + +# Fail quickly and obviously if user tries to build as root +%if %runselftest + if [ x"`id -u`" = x0 ]; then + echo "The MySQL regression tests may fail if run as root." + echo "If you really need to build the RPM as root, use" + echo "--define='runselftest 0' to skip the regression tests." + exit 1 + fi +%endif + +# Be strict about variables, bail at earliest opportunity, etc. +set -eu + +# Optional package files +touch optional-files-devel + +# +# Set environment in order of preference, MYSQL_BUILD_* first, then variable +# name, finally a default. RPM_OPT_FLAGS is assumed to be a part of the +# default RPM build environment. +# + +# This is a hack, $RPM_OPT_FLAGS on ia64 hosts contains flags which break +# the compile in cmd-line-utils/libedit - needs investigation, but for now +# we simply unset it and use those specified directly in cmake. +%if "%{_arch}" == "ia64" +RPM_OPT_FLAGS= +%endif + +export PATH=${MYSQL_BUILD_PATH:-$PATH} +export CC=${MYSQL_BUILD_CC:-${CC:-gcc}} +export CXX=${MYSQL_BUILD_CXX:-${CXX:-g++}} +export CFLAGS=${MYSQL_BUILD_CFLAGS:-${CFLAGS:-$RPM_OPT_FLAGS}} +export CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-${CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors}} +export LDFLAGS=${MYSQL_BUILD_LDFLAGS:-${LDFLAGS:-}} +export CMAKE=${MYSQL_BUILD_CMAKE:-${CMAKE:-cmake}} +export MAKE_JFLAG=${MYSQL_BUILD_MAKE_JFLAG:-} + +# By default, a build will include the bundeled "yaSSL" library for SSL. +# However, there may be a need to override. +# Protect against undefined variables if there is no override option. +%if %{undefined with_ssl} +%define ssl_option %{nil} +%else +%define ssl_option -DWITH_SSL=%{with_ssl} +%endif + +# Build debug mysqld and libmysqld.a +mkdir debug +( + cd debug + # Attempt to remove any optimisation flags from the debug build + CFLAGS=`echo " ${CFLAGS} " | \ + sed -e 's/ -O[0-9]* / /' \ + -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ + -e 's/ -unroll2 / /' \ + -e 's/ -ip / /' \ + -e 's/^ //' \ + -e 's/ $//'` + CXXFLAGS=`echo " ${CXXFLAGS} " | \ + sed -e 's/ -O[0-9]* / /' \ + -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ + -e 's/ -unroll2 / /' \ + -e 's/ -ip / /' \ + -e 's/^ //' \ + -e 's/ $//'` + # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before + # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM + ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \ + -DCMAKE_BUILD_TYPE=Debug \ + -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ + -DFEATURE_SET="%{feature_set}" \ + %{ssl_option} \ + -DCOMPILATION_COMMENT="%{compilation_comment_debug}" \ + -DMYSQL_SERVER_SUFFIX="%{server_suffix}" + echo BEGIN_DEBUG_CONFIG ; egrep '^#define' include/config.h ; echo END_DEBUG_CONFIG + make ${MAKE_JFLAG} VERBOSE=1 +) +# Build full release +mkdir release +( + cd release + # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before + # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM + ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ + -DFEATURE_SET="%{feature_set}" \ + %{ssl_option} \ + -DCOMPILATION_COMMENT="%{compilation_comment_release}" \ + -DMYSQL_SERVER_SUFFIX="%{server_suffix}" + echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG + make ${MAKE_JFLAG} VERBOSE=1 +) + +%if %runselftest + MTR_BUILD_THREAD=auto + export MTR_BUILD_THREAD + + (cd release && make test-bt-fast || true) +%endif + +############################################################################## +%install + +RBR=$RPM_BUILD_ROOT +MBD=$RPM_BUILD_DIR/%{src_dir} + +# Ensure that needed directories exists +install -d $RBR%{_sysconfdir}/{logrotate.d,init.d} +install -d $RBR%{mysqldatadir}/mysql +install -d $RBR%{_datadir}/mysql-test +install -d $RBR%{_datadir}/mysql/SELinux/RHEL4 +install -d $RBR%{_includedir} +install -d $RBR%{_libdir} +install -d $RBR%{_mandir} +install -d $RBR%{_sbindir} + +mkdir -p $RBR%{_sysconfdir}/my.cnf.d + +# Install all binaries +( + cd $MBD/release + make DESTDIR=$RBR install +) + +# FIXME: at some point we should stop doing this and just install everything +# FIXME: directly into %{_libdir}/mysql - perhaps at the same time as renaming +# FIXME: the shared libraries to use libmysql*-$major.$minor.so syntax +mv -v $RBR/%{_libdir}/*.a $RBR/%{_libdir}/mysql/ + +# Install logrotate and autostart +install -m 644 $MBD/release/support-files/mysql-log-rotate $RBR%{_sysconfdir}/logrotate.d/mysql +install -m 755 $MBD/release/support-files/mysql.server $RBR%{_sysconfdir}/init.d/mysql + +# Create a symlink "rcmysql", pointing to the init.script. SuSE users +# will appreciate that, as all services usually offer this. +ln -s %{_sysconfdir}/init.d/mysql $RBR%{_sbindir}/rcmysql + +# Touch the place where the my.cnf config file might be located +# Just to make sure it's in the file list and marked as a config file +touch $RBR%{_sysconfdir}/my.cnf + +# Install SELinux files in datadir +install -m 600 $MBD/%{src_dir}/support-files/RHEL4-SElinux/mysql.{fc,te} \ + $RBR%{_datadir}/mysql/SELinux/RHEL4 + +%if %{WITH_TCMALLOC} +# Even though this is a shared library, put it under /usr/lib*/mysql, so it +# doesn't conflict with possible shared lib by the same name in /usr/lib*. See +# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used. +install -m 644 "%{malloc_lib_source}" \ + "$RBR%{_libdir}/mysql/%{malloc_lib_target}" +%endif + +# Remove man pages we explicitly do not want to package, avoids 'unpackaged +# files' warning. +# This has become obsolete: rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1* + +############################################################################## +# Post processing actions, i.e. when installed +############################################################################## + +%pre -n MySQL-server%{product_suffix} +# This is the code running at the beginning of a RPM upgrade action, +# before replacing the old files with the new ones. + +# ATTENTION: Parts of this are duplicated in the "triggerpostun" ! + +# There are users who deviate from the default file system layout. +# Check local settings to support them. +if [ -x %{_bindir}/my_print_defaults ] +then + mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` + PID_FILE_PATT=`%{_bindir}/my_print_defaults server mysqld | grep '^--pid-file=' | sed -n 's/--pid-file=//p'` +fi +if [ -z "$mysql_datadir" ] +then + mysql_datadir=%{mysqldatadir} +fi +if [ -z "$PID_FILE_PATT" ] +then + PID_FILE_PATT="$mysql_datadir/*.pid" +fi + +# Check if we can safely upgrade. An upgrade is only safe if it's from one +# of our RPMs in the same version family. + +# Handle both ways of spelling the capability. +installed=`rpm -q --whatprovides mysql-server 2> /dev/null` +if [ $? -ne 0 -o -z "$installed" ]; then + installed=`rpm -q --whatprovides MySQL-server 2> /dev/null` +fi +if [ $? -eq 0 -a -n "$installed" ]; then + installed=`echo $installed | sed 's/\([^ ]*\) .*/\1/'` # Tests have shown duplicated package names + vendor=`rpm -q --queryformat='%{VENDOR}' "$installed" 2>&1` + version=`rpm -q --queryformat='%{VERSION}' "$installed" 2>&1` + myoldvendor='%{mysql_old_vendor}' + myvendor_2='%{mysql_vendor_2}' + myvendor='%{mysql_vendor}' + myversion='%{mysql_version}' + + old_family=`echo $version \ + | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` + new_family=`echo $myversion \ + | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` + + [ -z "$vendor" ] && vendor='' + [ -z "$old_family" ] && old_family="" + [ -z "$new_family" ] && new_family="" + + error_text= + if [ "$vendor" != "$myoldvendor" \ + -a "$vendor" != "$myvendor_2" \ + -a "$vendor" != "$myvendor" ]; then + error_text="$error_text +The current MySQL server package is provided by a different +vendor ($vendor) than $myoldvendor, $myvendor_2, or $myvendor. +Some files may be installed to different locations, including log +files and the service startup script in %{_sysconfdir}/init.d/. +" + fi + + if [ "$old_family" != "$new_family" ]; then + error_text="$error_text +Upgrading directly from MySQL $old_family to MySQL $new_family may not +be safe in all cases. A manual dump and restore using mysqldump is +recommended. It is important to review the MySQL manual's Upgrading +section for version-specific incompatibilities. +" + fi + + if [ -n "$error_text" ]; then + cat <&2 + +****************************************************************** +A MySQL server package ($installed) is installed. +$error_text +A manual upgrade is required. + +- Ensure that you have a complete, working backup of your data and my.cnf + files +- Shut down the MySQL server cleanly +- Remove the existing MySQL packages. Usually this command will + list the packages you should remove: + rpm -qa | grep -i '^mysql-' + + You may choose to use 'rpm --nodeps -ev ' to remove + the package which contains the mysqlclient shared library. The + library will be reinstalled by the MySQL-shared-compat package. +- Install the new MySQL packages supplied by $myvendor +- Ensure that the MySQL server is started +- Run the 'mysql_upgrade' program + +This is a brief description of the upgrade process. Important details +can be found in the MySQL manual, in the Upgrading section. +****************************************************************** +HERE + exit 1 + fi +fi + +# We assume that if there is exactly one ".pid" file, +# it contains the valid PID of a running MySQL server. +NR_PID_FILES=`ls -1 $PID_FILE_PATT 2>/dev/null | wc -l` +case $NR_PID_FILES in + 0 ) SERVER_TO_START='' ;; # No "*.pid" file == no running server + 1 ) SERVER_TO_START='true' ;; + * ) SERVER_TO_START='' # Situation not clear + SEVERAL_PID_FILES=true ;; +esac +# That logic may be debated: We might check whether it is non-empty, +# contains exactly one number (possibly a PID), and whether "ps" finds it. +# OTOH, if there is no such process, it means a crash without a cleanup - +# is that a reason not to start a new server after upgrade? + +STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER + +if [ -f "$STATUS_FILE" ]; then + echo "Some previous upgrade was not finished:" + ls -ld $STATUS_FILE + echo "Please check its status, then do" + echo " rm $STATUS_FILE" + echo "before repeating the MySQL upgrade." + exit 1 +elif [ -n "$SEVERAL_PID_FILES" ] ; then + echo "You have more than one PID file:" + ls -ld $PID_FILE_PATT + echo "Please check which one (if any) corresponds to a running server" + echo "and delete all others before repeating the MySQL upgrade." + exit 1 +fi + +NEW_VERSION=%{mysql_version}-%{release} + +# The "pre" section code is also run on a first installation, +# when there is no data directory yet. Protect against error messages. +# Check for the existence of subdirectory "mysql/", the database of system +# tables like "mysql.user". +if [ -d $mysql_datadir/mysql ] ; then + echo "MySQL RPM upgrade to version $NEW_VERSION" > $STATUS_FILE + echo "'pre' step running at `date`" >> $STATUS_FILE + echo >> $STATUS_FILE + fcount=`ls -ltr $mysql_datadir/*.err 2>/dev/null | wc -l` + if [ $fcount -gt 0 ] ; then + echo "ERR file(s):" >> $STATUS_FILE + ls -ltr $mysql_datadir/*.err >> $STATUS_FILE + echo >> $STATUS_FILE + echo "Latest 'Version' line in latest file:" >> $STATUS_FILE + grep '^Version' `ls -tr $mysql_datadir/*.err | tail -1` | \ + tail -1 >> $STATUS_FILE + echo >> $STATUS_FILE + fi + + if [ -n "$SERVER_TO_START" ] ; then + # There is only one PID file, race possibility ignored + echo "PID file:" >> $STATUS_FILE + ls -l $PID_FILE_PATT >> $STATUS_FILE + cat $PID_FILE_PATT >> $STATUS_FILE + echo >> $STATUS_FILE + echo "Server process:" >> $STATUS_FILE + ps -fp `cat $PID_FILE_PATT` >> $STATUS_FILE + echo >> $STATUS_FILE + echo "SERVER_TO_START=$SERVER_TO_START" >> $STATUS_FILE + else + # Take a note we checked it ... + echo "PID file:" >> $STATUS_FILE + ls -l $PID_FILE_PATT >> $STATUS_FILE 2>&1 + fi +fi + +# Shut down a previously installed server first +# Note we *could* make that depend on $SERVER_TO_START, but we rather don't, +# so a "stop" is attempted even if there is no PID file. +# (Maybe the "stop" doesn't work then, but we might fix that in itself.) +if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql stop > /dev/null 2>&1 + echo "Giving mysqld 5 seconds to exit nicely" + sleep 5 +fi + +%post -n MySQL-server%{product_suffix} +# This is the code running at the end of a RPM install or upgrade action, +# after the (new) files have been written. + +# ATTENTION: Parts of this are duplicated in the "triggerpostun" ! + +# There are users who deviate from the default file system layout. +# Check local settings to support them. +if [ -x %{_bindir}/my_print_defaults ] +then + mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` +fi +if [ -z "$mysql_datadir" ] +then + mysql_datadir=%{mysqldatadir} +fi + +NEW_VERSION=%{mysql_version}-%{release} +STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER + +# ---------------------------------------------------------------------- +# Create data directory if needed, check whether upgrade or install +# ---------------------------------------------------------------------- +if [ ! -d "$mysql_datadir" ] ; then mkdir -m 755 "$mysql_datadir" ; fi +if [ -f "$STATUS_FILE" ] ; then + SERVER_TO_START=`grep '^SERVER_TO_START=' $STATUS_FILE | cut -c17-` +else + SERVER_TO_START='' +fi +# echo "Analyzed: SERVER_TO_START=$SERVER_TO_START" +if [ ! -d $mysql_datadir/mysql ] ; then + mkdir $mysql_datadir/mysql $mysql_datadir/test + echo "MySQL RPM installation of version $NEW_VERSION" >> $STATUS_FILE +else + # If the directory exists, we may assume it is an upgrade. + echo "MySQL RPM upgrade to version $NEW_VERSION" >> $STATUS_FILE +fi + +# ---------------------------------------------------------------------- +# Make MySQL start/shutdown automatically when the machine does it. +# ---------------------------------------------------------------------- +# NOTE: This still needs to be debated. Should we check whether these links +# for the other run levels exist(ed) before the upgrade? +# use chkconfig on Enterprise Linux and newer SuSE releases +if [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig --add mysql +# use insserv for older SuSE Linux versions +elif [ -x /sbin/insserv ] ; then + /sbin/insserv %{_sysconfdir}/init.d/mysql +fi + +# ---------------------------------------------------------------------- +# Create a MySQL user and group. Do not report any problems if it already +# exists. +# ---------------------------------------------------------------------- +groupadd -r %{mysqld_group} 2> /dev/null || true +useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" \ + -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true +# The user may already exist, make sure it has the proper group nevertheless +# (BUG#12823) +usermod -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true + +# ---------------------------------------------------------------------- +# Change permissions so that the user that will run the MySQL daemon +# owns all database files. +# ---------------------------------------------------------------------- +chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir + +# ---------------------------------------------------------------------- +# Initiate databases if needed +# ---------------------------------------------------------------------- +if ! grep '^MySQL RPM upgrade' $STATUS_FILE >/dev/null 2>&1 ; then + # Fix bug#45415: no "mysql_install_db" on an upgrade + # Do this as a negative to err towards more "install" runs + # rather than to miss one. + %{_bindir}/mysql_install_db --rpm --user=%{mysqld_user} --random-passwords + + # Attention: Now 'root' is the only database user, + # its password is a random value found in ~/.mysql_secret, + # and the "password expired" flag is set: + # Any client needs that password, and the first command + # executed must be a new "set password"! +fi + +# ---------------------------------------------------------------------- +# Upgrade databases if needed would go here - but it cannot be automated yet +# ---------------------------------------------------------------------- + +# ---------------------------------------------------------------------- +# Change permissions again to fix any new files. +# ---------------------------------------------------------------------- +chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir + +# ---------------------------------------------------------------------- +# Fix permissions for the permission database so that only the user +# can read them. +# ---------------------------------------------------------------------- +chmod -R og-rw $mysql_datadir/mysql + +# ---------------------------------------------------------------------- +# install SELinux files - but don't override existing ones +# ---------------------------------------------------------------------- +SETARGETDIR=/etc/selinux/targeted/src/policy +SEDOMPROG=$SETARGETDIR/domains/program +SECONPROG=$SETARGETDIR/file_contexts/program +if [ -f /etc/redhat-release ] \ + && (grep -q "Red Hat Enterprise Linux .. release 4" /etc/redhat-release \ + || grep -q "CentOS release 4" /etc/redhat-release) ; then + echo + echo + echo 'Notes regarding SELinux on this platform:' + echo '=========================================' + echo + echo 'The default policy might cause server startup to fail because it is' + echo 'not allowed to access critical files. In this case, please update' + echo 'your installation.' + echo + echo 'The default policy might also cause inavailability of SSL related' + echo 'features because the server is not allowed to access /dev/random' + echo 'and /dev/urandom. If this is a problem, please do the following:' + echo + echo ' 1) install selinux-policy-targeted-sources from your OS vendor' + echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' + echo ' allow mysqld_t random_device_t:chr_file read;' + echo ' allow mysqld_t urandom_device_t:chr_file read;' + echo ' 3) cd to '$SETARGETDIR' and issue the following command:' + echo ' make load' + echo + echo +fi + +if [ -x sbin/restorecon ] ; then + sbin/restorecon -R var/lib/mysql +fi + +# Was the server running before the upgrade? If so, restart the new one. +if [ "$SERVER_TO_START" = "true" ] ; then + # Restart in the same way that mysqld will be started normally. + if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql start + echo "Giving mysqld 5 seconds to start" + sleep 5 + fi +fi + +# Collect an upgrade history ... +echo "Upgrade/install finished at `date`" >> $STATUS_FILE +echo >> $STATUS_FILE +echo "=====" >> $STATUS_FILE +STATUS_HISTORY=$mysql_datadir/RPM_UPGRADE_HISTORY +cat $STATUS_FILE >> $STATUS_HISTORY +mv -f $STATUS_FILE ${STATUS_FILE}-LAST # for "triggerpostun" + + +#echo "Thank you for installing the MySQL Community Server! For Production +#systems, we recommend MySQL Enterprise, which contains enterprise-ready +#software, intelligent advisory services, and full production support with +#scheduled service packs and more. Visit www.mysql.com/enterprise for more +#information." + +%preun -n MySQL-server%{product_suffix} + +# Which '$1' does this refer to? Fedora docs have info: +# " ... a count of the number of versions of the package that are installed. +# Action Count +# Install the first time 1 +# Upgrade 2 or higher (depending on the number of versions installed) +# Remove last version of package 0 " +# +# http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html + +if [ $1 = 0 ] ; then + # Stop MySQL before uninstalling it + if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql stop > /dev/null + # Remove autostart of MySQL + # use chkconfig on Enterprise Linux and newer SuSE releases + if [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig --del mysql + # For older SuSE Linux versions + elif [ -x /sbin/insserv ] ; then + /sbin/insserv -r %{_sysconfdir}/init.d/mysql + fi + fi +fi + +# We do not remove the mysql user since it may still own a lot of +# database files. + +%triggerpostun -n MySQL-server%{product_suffix} --MySQL-server-community + +# Setup: We renamed this package, so any existing "server-community" +# package will be removed when this "server" is installed. +# Problem: RPM will first run the "pre" and "post" sections of this script, +# and only then the "preun" of that old community server. +# But this "preun" includes stopping the server and uninstalling the service, +# "chkconfig --del mysql" which removes the symlinks to the start script. +# Solution: *After* the community server got removed, restart this server +# and re-install the service. +# +# For information about triggers in spec files, see the Fedora docs: +# http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch10s02.html +# For all details of this code, see the "pre" and "post" sections. + +# There are users who deviate from the default file system layout. +# Check local settings to support them. +if [ -x %{_bindir}/my_print_defaults ] +then + mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | tail -1 | sed -n 's/--datadir=//p'` +fi +if [ -z "$mysql_datadir" ] +then + mysql_datadir=%{mysqldatadir} +fi + +NEW_VERSION=%{mysql_version}-%{release} +STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER-LAST # Note the difference! +STATUS_HISTORY=$mysql_datadir/RPM_UPGRADE_HISTORY + +if [ -f "$STATUS_FILE" ] ; then + SERVER_TO_START=`grep '^SERVER_TO_START=' $STATUS_FILE | cut -c17-` +else + # This should never happen, but let's be prepared + SERVER_TO_START='' +fi +echo "Analyzed: SERVER_TO_START=$SERVER_TO_START" + +if [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig --add mysql +# use insserv for older SuSE Linux versions +elif [ -x /sbin/insserv ] ; then + /sbin/insserv %{_sysconfdir}/init.d/mysql +fi + +# Was the server running before the upgrade? If so, restart the new one. +if [ "$SERVER_TO_START" = "true" ] ; then + # Restart in the same way that mysqld will be started normally. + if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql start + echo "Giving mysqld 5 seconds to start" + sleep 5 + fi +fi + +echo "Trigger 'postun --community' finished at `date`" >> $STATUS_HISTORY +echo >> $STATUS_HISTORY +echo "=====" >> $STATUS_HISTORY + + +# ---------------------------------------------------------------------- +# Clean up the BuildRoot after build is done +# ---------------------------------------------------------------------- +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] \ + && rm -rf $RPM_BUILD_ROOT; + +############################################################################## +# Files section +############################################################################## + +%files -n MySQL-server%{product_suffix} -f release/support-files/plugins.files +%defattr(-,root,root,0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +%doc %{src_dir}/Docs/ChangeLog +%doc %{src_dir}/Docs/INFO_SRC* +%doc release/Docs/INFO_BIN* +%doc release/support-files/my-default.cnf + +%if 0%{?commercial} +%doc %attr(644, root, root) %{_infodir}/mysql.info* +%endif + +%doc %attr(644, root, man) %{_mandir}/man1/innochecksum.1* +%doc %attr(644, root, man) %{_mandir}/man1/my_print_defaults.1* +%doc %attr(644, root, man) %{_mandir}/man1/myisam_ftdump.1* +%doc %attr(644, root, man) %{_mandir}/man1/myisamchk.1* +%doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1* +%doc %attr(644, root, man) %{_mandir}/man1/myisampack.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_convert_table_format.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_extensions.1* +%doc %attr(644, root, man) %{_mandir}/man8/mysqld.8* +%doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqldumpslow.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_plugin.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_secure_installation.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_setpermission.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* +%doc %attr(644, root, man) %{_mandir}/man1/perror.1* +%doc %attr(644, root, man) %{_mandir}/man1/replace.1* +%doc %attr(644, root, man) %{_mandir}/man1/resolve_stack_dump.1* +%doc %attr(644, root, man) %{_mandir}/man1/resolveip.1* + +%ghost %config(noreplace,missingok) %{_sysconfdir}/my.cnf +%dir %{_sysconfdir}/my.cnf.d + +%attr(755, root, root) %{_bindir}/innochecksum +%attr(755, root, root) %{_bindir}/my_print_defaults +%attr(755, root, root) %{_bindir}/myisam_ftdump +%attr(755, root, root) %{_bindir}/myisamchk +%attr(755, root, root) %{_bindir}/myisamlog +%attr(755, root, root) %{_bindir}/myisampack +%attr(755, root, root) %{_bindir}/mysql_convert_table_format +%attr(755, root, root) %{_bindir}/mysql_fix_extensions +%attr(755, root, root) %{_bindir}/mysql_install_db +%attr(755, root, root) %{_bindir}/mysql_plugin +%attr(755, root, root) %{_bindir}/mysql_secure_installation +%attr(755, root, root) %{_bindir}/mysql_setpermission +%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql +%attr(755, root, root) %{_bindir}/mysql_upgrade +%attr(755, root, root) %{_bindir}/mysql_zap +%attr(755, root, root) %{_bindir}/mysqlbug +%attr(755, root, root) %{_bindir}/mysqld_multi +%attr(755, root, root) %{_bindir}/mysqld_safe +%attr(755, root, root) %{_bindir}/mysqldumpslow +%attr(755, root, root) %{_bindir}/mysqlhotcopy +%attr(755, root, root) %{_bindir}/mysqltest +%attr(755, root, root) %{_bindir}/perror +%attr(755, root, root) %{_bindir}/replace +%attr(755, root, root) %{_bindir}/resolve_stack_dump +%attr(755, root, root) %{_bindir}/resolveip + +%attr(755, root, root) %{_sbindir}/mysqld +%attr(755, root, root) %{_sbindir}/mysqld-debug +%attr(755, root, root) %{_sbindir}/rcmysql +%attr(755, root, root) %{_libdir}/mysql/plugin/daemon_example.ini + +%if %{WITH_TCMALLOC} +%attr(755, root, root) %{_libdir}/mysql/%{malloc_lib_target} +%endif + +%attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql +%attr(755, root, root) %{_sysconfdir}/init.d/mysql +%attr(755, root, root) %{_datadir}/mysql/ +%dir %attr(755, mysql, mysql) /var/lib/mysql + +# ---------------------------------------------------------------------------- +%files -n MySQL-client%{product_suffix} +%defattr(-, root, root, 0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +%attr(755, root, root) %{_bindir}/msql2mysql +%attr(755, root, root) %{_bindir}/mysql +%attr(755, root, root) %{_bindir}/mysql_find_rows +%attr(755, root, root) %{_bindir}/mysql_waitpid +%attr(755, root, root) %{_bindir}/mysqlaccess +# XXX: This should be moved to %{_sysconfdir} +%attr(644, root, root) %{_bindir}/mysqlaccess.conf +%attr(755, root, root) %{_bindir}/mysqladmin +%attr(755, root, root) %{_bindir}/mysqlbinlog +%attr(755, root, root) %{_bindir}/mysqlcheck +%attr(755, root, root) %{_bindir}/mysqldump +%attr(755, root, root) %{_bindir}/mysqlimport +%attr(755, root, root) %{_bindir}/mysqlshow +%attr(755, root, root) %{_bindir}/mysqlslap +%attr(755, root, root) %{_bindir}/mysql_config_editor + +%doc %attr(644, root, man) %{_mandir}/man1/msql2mysql.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_find_rows.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_waitpid.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlaccess.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqladmin.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlbinlog.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlcheck.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqldump.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlimport.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlshow.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlslap.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_config_editor.1* + +# ---------------------------------------------------------------------------- +%files -n MySQL-devel%{product_suffix} -f optional-files-devel +%defattr(-, root, root, 0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +%doc %attr(644, root, man) %{_mandir}/man1/comp_err.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_config.1* +%attr(755, root, root) %{_bindir}/mysql_config +%dir %attr(755, root, root) %{_includedir}/mysql +%dir %attr(755, root, root) %{_libdir}/mysql +%{_includedir}/mysql/* +%{_datadir}/aclocal/mysql.m4 +%{_libdir}/mysql/libmysqlclient.a +%{_libdir}/mysql/libmysqlclient_r.a +%{_libdir}/mysql/libmysqlservices.a + +# ---------------------------------------------------------------------------- +%files -n MySQL-shared%{product_suffix} +%defattr(-, root, root, 0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +# Shared libraries (omit for architectures that don't support them) +%{_libdir}/libmysql*.so* + +%post -n MySQL-shared%{product_suffix} +/sbin/ldconfig + +%postun -n MySQL-shared%{product_suffix} +/sbin/ldconfig + +# ---------------------------------------------------------------------------- +%files -n MySQL-test%{product_suffix} +%defattr(-, root, root, 0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +%attr(-, root, root) %{_datadir}/mysql-test +%attr(755, root, root) %{_bindir}/mysql_client_test +%attr(755, root, root) %{_bindir}/mysql_client_test_embedded +%attr(755, root, root) %{_bindir}/mysqltest_embedded +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* + +# ---------------------------------------------------------------------------- +%files -n MySQL-embedded%{product_suffix} +%defattr(-, root, root, 0755) +%if %{defined license_files_server} +%doc %{license_files_server} +%endif +%attr(755, root, root) %{_bindir}/mysql_embedded +%attr(644, root, root) %{_libdir}/mysql/libmysqld.a +%attr(644, root, root) %{_libdir}/mysql/libmysqld-debug.a + +############################################################################## +# The spec file changelog only includes changes made to the spec file +# itself - note that they must be ordered by date (important when +# merging BK trees) +############################################################################## +%changelog +* Mon Oct 06 2014 Balasubramanian Kandasamy +- Add license info in each subpackage + +* Wed May 28 2014 Balasubramanian Kandasamy +- Updated usergroup to mysql on datadir + +* Wed Oct 30 2013 Balasubramanian Kandasamy +- Removed non gpl file docs/mysql.info from community packages + +* Mon Sep 09 2013 Balasubramanian Kandasamy +- Updated logic to get the correct count of PID files + +* Fri Aug 16 2013 Balasubramanian Kandasamy +- Added provides lowercase mysql tags + +* Wed Jun 26 2013 Balasubramanian Kandasamy +- Cleaned up spec file to resolve rpm dependencies. + +* Mon Nov 05 2012 Joerg Bruehe + +- Allow to override the default to use the bundled yaSSL by an option like + --define="with_ssl /path/to/ssl" + +* Wed Oct 10 2012 Bjorn Munch + +- Replace old my-*.cnf config file examples with template my-default.cnf + +* Fri Oct 05 2012 Joerg Bruehe + +- Let the installation use the new option "--random-passwords" of "mysql_install_db". + (Bug# 12794345 Ensure root password) +- Fix an inconsistency: "new install" vs "upgrade" are told from the (non)existence + of "$mysql_datadir/mysql" (holding table "mysql.user" and other system stuff). + +* Tue Jul 24 2012 Joerg Bruehe + +- Add a macro "runselftest": + if set to 1 (default), the test suite will be run during the RPM build; + this can be oveeridden via the command line by adding + --define "runselftest 0" + Failures of the test suite will NOT make the RPM build fail! + +* Mon Jul 16 2012 Joerg Bruehe + +- Add the man page for the "mysql_config_editor". + +* Mon Jun 11 2012 Joerg Bruehe + +- Make sure newly added "SPECIFIC-ULN/" directory does not disturb packaging. + +* Wed Feb 29 2012 Brajmohan Saxena + +- Removal all traces of the readline library from mysql (BUG 13738013) + +* Wed Sep 28 2011 Joerg Bruehe + +- Fix duplicate mentioning of "mysql_plugin" and its manual page, + it is better to keep alphabetic order in the files list (merging!). + +* Wed Sep 14 2011 Joerg Bruehe + +- Let the RPM capabilities ("obsoletes" etc) ensure that an upgrade may replace + the RPMs of any configuration (of the current or the preceding release series) + by the new ones. This is done by not using the implicitly generated capabilities + (which include the configuration name) and relying on more generic ones which + just list the function ("server", "client", ...). + The implicit generation cannot be prevented, so all these capabilities must be + explicitly listed in "Obsoletes:" + +* Tue Sep 13 2011 Jonathan Perkin + +- Add support for Oracle Linux 6 and Red Hat Enterprise Linux 6. Due to + changes in RPM behaviour ($RPM_BUILD_ROOT is removed prior to install) + this necessitated a move of the libmygcc.a installation to the install + phase, which is probably where it belonged in the first place. + +* Tue Sep 13 2011 Joerg Bruehe + +- "make_win_bin_dist" and its manual are dropped, cmake does it different. + +* Thu Sep 08 2011 Daniel Fischer + +- Add mysql_plugin man page. + +* Tue Aug 30 2011 Tor Didriksen + +- Set CXX=g++ by default to add a dependency on libgcc/libstdc++. + Also, remove the use of the -fno-exceptions and -fno-rtti flags. + TODO: update distro_buildreq/distro_requires + +* Tue Aug 30 2011 Joerg Bruehe + +- Add the manual page for "mysql_plugin" to the server package. + +* Fri Aug 19 2011 Joerg Bruehe + +- Null-upmerge the fix of bug#37165: This spec file is not affected. +- Replace "/var/lib/mysql" by the spec file variable "%%{mysqldatadir}". + +* Fri Aug 12 2011 Daniel Fischer + +- Source plugin library files list from cmake-generated file. + +* Mon Jul 25 2011 Chuck Bell + +- Added the mysql_plugin client - enables or disables plugins. + +* Thu Jul 21 2011 Sunanda Menon + +- Fix bug#12561297: Added the MySQL embedded binary + +* Thu Jul 07 2011 Joerg Bruehe + +- Fix bug#45415: "rpm upgrade recreates test database" + Let the creation of the "test" database happen only during a new installation, + not in an RPM upgrade. + This affects both the "mkdir" and the call of "mysql_install_db". + +* Wed Feb 09 2011 Joerg Bruehe + +- Fix bug#56581: If an installation deviates from the default file locations + ("datadir" and "pid-file"), the mechanism to detect a running server (on upgrade) + should still work, and use these locations. + The problem was that the fix for bug#27072 did not check for local settings. + +* Mon Jan 31 2011 Joerg Bruehe + +- Install the new "manifest" files: "INFO_SRC" and "INFO_BIN". + +* Tue Nov 23 2010 Jonathan Perkin + +- EXCEPTIONS-CLIENT has been deleted, remove it from here too +- Support MYSQL_BUILD_MAKE_JFLAG environment variable for passing + a '-j' argument to make. + +* Mon Nov 1 2010 Georgi Kodinov + +- Added test authentication (WL#1054) plugin binaries + +* Wed Oct 6 2010 Georgi Kodinov + +- Added example external authentication (WL#1054) plugin binaries + +* Wed Aug 11 2010 Joerg Bruehe + +- With a recent spec file cleanup, names have changed: A "-community" part was dropped. + Reflect that in the "Obsoletes" specifications. +- Add a "triggerpostun" to handle the uninstall of the "-community" server RPM. +- This fixes bug#55015 "MySQL server is not restarted properly after RPM upgrade". + +* Tue Jun 15 2010 Joerg Bruehe + +- Change the behaviour on installation and upgrade: + On installation, do not autostart the server. + *Iff* the server was stopped before the upgrade is started, this is taken as a + sign the administrator is handling that manually, and so the new server will + not be started automatically at the end of the upgrade. + The start/stop scripts will still be installed, so the server will be started + on the next machine boot. + This is the 5.5 version of fixing bug#27072 (RPM autostarting the server). + +* Tue Jun 1 2010 Jonathan Perkin + +- Implement SELinux checks from distribution-specific spec file. + +* Wed May 12 2010 Jonathan Perkin + +- Large number of changes to build using CMake +- Introduce distribution-specific RPMs +- Drop debuginfo, build all binaries with debug/symbols +- Remove __os_install_post, use native macro +- Remove _unpackaged_files_terminate_build, make it an error to have + unpackaged files +- Remove cluster RPMs + +* Wed Mar 24 2010 Joerg Bruehe + +- Add "--with-perfschema" to the configure options. + +* Mon Mar 22 2010 Joerg Bruehe + +- User "usr/lib*" to allow for both "usr/lib" and "usr/lib64", + mask "rmdir" return code 1. +- Remove "ha_example.*" files from the list, they aren't built. + +* Wed Mar 17 2010 Joerg Bruehe + +- Fix a wrong path name in handling the debug plugins. + +* Wed Mar 10 2010 Joerg Bruehe + +- Take the result of the debug plugin build and put it into the optimized tree, + so that it becomes part of the final installation; + include the files in the packlist. Part of the fixes for bug#49022. + +* Mon Mar 01 2010 Joerg Bruehe + +- Set "Oracle and/or its affiliates" as the vendor and copyright owner, + accept upgrading from packages showing MySQL or Sun as vendor. + +* Fri Feb 12 2010 Joerg Bruehe + +- Formatting changes: + Have a consistent structure of separator lines and of indentation + (8 leading blanks => tab). +- Introduce the variable "src_dir". +- Give the environment variables "MYSQL_BUILD_CC(CXX)" precedence + over "CC" ("CXX"). +- Drop the old "with_static" argument analysis, this is not supported + in 5.1 since ages. +- Introduce variables to control the handlers individually, as well + as other options. +- Use the new "--with-plugin" notation for the table handlers. +- Drop handling "/etc/rc.d/init.d/mysql", the switch to "/etc/init.d/mysql" + was done back in 2002 already. +- Make "--with-zlib-dir=bundled" the default, add an option to disable it. +- Add missing manual pages to the file list. +- Improve the runtime check for "libgcc.a", protect it against being tried + with the Intel compiler "icc". + +* Mon Jan 11 2010 Joerg Bruehe + +- Change RPM file naming: + - Suffix like "-m2", "-rc" becomes part of version as "_m2", "_rc". + - Release counts from 1, not 0. + +* Wed Dec 23 2009 Joerg Bruehe + +- The "semisync" plugin file name has lost its introductory "lib", + adapt the file lists for the subpackages. + This is a part missing from the fix for bug#48351. +- Remove the "fix_privilege_tables" manual, it does not exist in 5.5 + (and likely, the whole script will go, too). + +* Mon Nov 16 2009 Joerg Bruehe + +- Fix some problems with the directives around "tcmalloc" (experimental), + remove erroneous traces of the InnoDB plugin (that is 5.1 only). + +* Tue Oct 06 2009 Magnus Blaudd + +- Removed mysql_fix_privilege_tables + +* Fri Oct 02 2009 Alexander Nozdrin + +- "mysqlmanager" got removed from version 5.4, all references deleted. + +* Fri Aug 28 2009 Joerg Bruehe + +- Merge up from 5.1 to 5.4: Remove handling for the InnoDB plugin. + +* Thu Aug 27 2009 Joerg Bruehe + +- This version does not contain the "Instance manager", "mysqlmanager": + Remove it from the spec file so that packaging succeeds. + +* Mon Aug 24 2009 Jonathan Perkin + +- Add conditionals for bundled zlib and innodb plugin + +* Fri Aug 21 2009 Jonathan Perkin + +- Install plugin libraries in appropriate packages. +- Disable libdaemon_example and ftexample plugins. + +* Thu Aug 20 2009 Jonathan Perkin + +- Update variable used for mysql-test suite location to match source. + +* Fri Nov 07 2008 Joerg Bruehe + +- Correct yesterday's fix, so that it also works for the last flag, + and fix a wrong quoting: un-quoted quote marks must not be escaped. + +* Thu Nov 06 2008 Kent Boortz + +- Removed "mysql_upgrade_shell" +- Removed some copy/paste between debug and normal build + +* Thu Nov 06 2008 Joerg Bruehe + +- Modify CFLAGS and CXXFLAGS such that a debug build is not optimized. + This should cover both gcc and icc flags. Fixes bug#40546. + +* Fri Aug 29 2008 Kent Boortz + +- Removed the "Federated" storage engine option, and enabled in all + +* Tue Aug 26 2008 Joerg Bruehe + +- Get rid of the "warning: Installed (but unpackaged) file(s) found:" + Some generated files aren't needed in RPMs: + - the "sql-bench/" subdirectory + Some files were missing: + - /usr/share/aclocal/mysql.m4 ("devel" subpackage) + - Manual "mysqlbug" ("server" subpackage) + - Program "innochecksum" and its manual ("server" subpackage) + - Manual "mysql_find_rows" ("client" subpackage) + - Script "mysql_upgrade_shell" ("client" subpackage) + - Program "ndb_cpcd" and its manual ("ndb-extra" subpackage) + - Manuals "ndb_mgm" + "ndb_restore" ("ndb-tools" subpackage) + +* Mon Mar 31 2008 Kent Boortz + +- Made the "Federated" storage engine an option +- Made the "Cluster" storage engine and sub packages an option + +* Wed Mar 19 2008 Joerg Bruehe + +- Add the man pages for "ndbd" and "ndb_mgmd". + +* Mon Feb 18 2008 Timothy Smith + +- Require a manual upgrade if the alread-installed mysql-server is + from another vendor, or is of a different major version. + +* Wed May 02 2007 Joerg Bruehe + +- "ndb_size.tmpl" is not needed any more, + "man1/mysql_install_db.1" lacked the trailing '*'. + +* Sat Apr 07 2007 Kent Boortz + +- Removed man page for "mysql_create_system_tables" + +* Wed Mar 21 2007 Daniel Fischer + +- Add debug server. + +* Mon Mar 19 2007 Daniel Fischer + +- Remove Max RPMs; the server RPMs contain a mysqld compiled with all + features that previously only were built into Max. + +* Fri Mar 02 2007 Joerg Bruehe + +- Add several man pages for NDB which are now created. + +* Fri Jan 05 2007 Kent Boortz + +- Put back "libmygcc.a", found no real reason it was removed. + +- Add CFLAGS to gcc call with --print-libgcc-file, to make sure the + correct "libgcc.a" path is returned for the 32/64 bit architecture. + +* Mon Dec 18 2006 Joerg Bruehe + +- Fix the move of "mysqlmanager" to section 8: Directory name was wrong. + +* Thu Dec 14 2006 Joerg Bruehe + +- Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" + in the server RPM. +- The "mysqlmanager" man page got moved from section 1 to 8. + +* Thu Nov 30 2006 Joerg Bruehe + +- Call "make install" using "benchdir_root=%%{_datadir}", + because that is affecting the regression test suite as well. + +* Thu Nov 16 2006 Joerg Bruehe + +- Explicitly note that the "MySQL-shared" RPMs (as built by MySQL AB) + replace "mysql-shared" (as distributed by SuSE) to allow easy upgrading + (bug#22081). + +* Mon Nov 13 2006 Joerg Bruehe + +- Add "--with-partition" to all server builds. + +- Use "--report-features" in one test run per server build. + +* Tue Aug 15 2006 Joerg Bruehe + +- The "max" server is removed from packages, effective from 5.1.12-beta. + Delete all steps to build, package, or install it. + +* Mon Jul 10 2006 Joerg Bruehe + +- Fix a typing error in the "make" target for the Perl script to run the tests. + +* Tue Jul 04 2006 Joerg Bruehe + +- Use the Perl script to run the tests, because it will automatically check + whether the server is configured with SSL. + +* Tue Jun 27 2006 Joerg Bruehe + +- move "mysqldumpslow" from the client RPM to the server RPM (bug#20216) + +- Revert all previous attempts to call "mysql_upgrade" during RPM upgrade, + there are some more aspects which need to be solved before this is possible. + For now, just ensure the binary "mysql_upgrade" is delivered and installed. + +* Thu Jun 22 2006 Joerg Bruehe + +- Close a gap of the previous version by explicitly using + a newly created temporary directory for the socket to be used + in the "mysql_upgrade" operation, overriding any local setting. + +* Tue Jun 20 2006 Joerg Bruehe + +- To run "mysql_upgrade", we need a running server; + start it in isolation and skip password checks. + +* Sat May 20 2006 Kent Boortz + +- Always compile for PIC, position independent code. + +* Wed May 10 2006 Kent Boortz + +- Use character set "all" when compiling with Cluster, to make Cluster + nodes independent on the character set directory, and the problem + that two RPM sub packages both wants to install this directory. + +* Mon May 01 2006 Kent Boortz + +- Use "./libtool --mode=execute" instead of searching for the + executable in current directory and ".libs". + +* Fri Apr 28 2006 Kent Boortz + +- Install and run "mysql_upgrade" + +* Wed Apr 12 2006 Jim Winstead + +- Remove sql-bench, and MySQL-bench RPM (will be built as an independent + project from the mysql-bench repository) + +* Tue Apr 11 2006 Jim Winstead + +- Remove old mysqltestmanager and related programs +* Sat Apr 01 2006 Kent Boortz + +- Set $LDFLAGS from $MYSQL_BUILD_LDFLAGS + +* Tue Mar 07 2006 Kent Boortz + +- Changed product name from "Community Edition" to "Community Server" + +* Mon Mar 06 2006 Kent Boortz + +- Fast mutexes is now disabled by default, but should be + used in Linux builds. + +* Mon Feb 20 2006 Kent Boortz + +- Reintroduced a max build +- Limited testing of 'debug' and 'max' servers +- Berkeley DB only in 'max' + +* Mon Feb 13 2006 Joerg Bruehe + +- Use "-i" on "make test-force"; + this is essential for later evaluation of this log file. + +* Thu Feb 09 2006 Kent Boortz + +- Pass '-static' to libtool, link static with our own libraries, dynamic + with system libraries. Link with the bundled zlib. + +* Wed Feb 08 2006 Kristian Nielsen + +- Modified RPM spec to match new 5.1 debug+max combined community packaging. + +* Sun Dec 18 2005 Kent Boortz + +- Added "client/mysqlslap" + +* Mon Dec 12 2005 Rodrigo Novo + +- Added zlib to the list of (static) libraries installed +- Added check against libtool wierdness (WRT: sql/mysqld || sql/.libs/mysqld) +- Compile MySQL with bundled zlib +- Fixed %%packager name to "MySQL Production Engineering Team" + +* Mon Dec 05 2005 Joerg Bruehe + +- Avoid using the "bundled" zlib on "shared" builds: + As it is not installed (on the build system), this gives dependency + problems with "libtool" causing the build to fail. + (Change was done on Nov 11, but left uncommented.) + +* Tue Nov 22 2005 Joerg Bruehe + +- Extend the file existence check for "init.d/mysql" on un-install + to also guard the call to "insserv"/"chkconfig". + +* Thu Oct 27 2005 Lenz Grimmer + +- added more man pages + +* Wed Oct 19 2005 Kent Boortz + +- Made yaSSL support an option (off by default) + +* Wed Oct 19 2005 Kent Boortz + +- Enabled yaSSL support + +* Sat Oct 15 2005 Kent Boortz + +- Give mode arguments the same way in all places +- Moved copy of mysqld.a to "standard" build, but + disabled it as we don't do embedded yet in 5.0 + +* Fri Oct 14 2005 Kent Boortz + +- For 5.x, always compile with --with-big-tables +- Copy the config.log file to location outside + the build tree + +* Fri Oct 14 2005 Kent Boortz + +- Removed unneeded/obsolete configure options +- Added archive engine to standard server +- Removed the embedded server from experimental server +- Changed suffix "-Max" => "-max" +- Changed comment string "Max" => "Experimental" + +* Thu Oct 13 2005 Lenz Grimmer + +- added a usermod call to assign a potential existing mysql user to the + correct user group (BUG#12823) +- Save the perror binary built during Max build so it supports the NDB + error codes (BUG#13740) +- added a separate macro "mysqld_group" to be able to define the + user group of the mysql user seperately, if desired. + +* Thu Sep 29 2005 Lenz Grimmer + +- fixed the removing of the RPM_BUILD_ROOT in the %clean section (the + $RBR variable did not get expanded, thus leaving old build roots behind) + +* Thu Aug 04 2005 Lenz Grimmer + +- Fixed the creation of the mysql user group account in the postinstall + section (BUG 12348) +- Fixed enabling the Archive storage engine in the Max binary + +* Tue Aug 02 2005 Lenz Grimmer + +- Fixed the Requires: tag for the server RPM (BUG 12233) + +* Fri Jul 15 2005 Lenz Grimmer + +- create a "mysql" user group and assign the mysql user account to that group + in the server postinstall section. (BUG 10984) + +* Tue Jun 14 2005 Lenz Grimmer + +- Do not build statically on i386 by default, only when adding either "--with + static" or "--define '_with_static 1'" to the RPM build options. Static + linking really only makes sense when linking against the specially patched + glibc 2.2.5. + +* Mon Jun 06 2005 Lenz Grimmer + +- added mysql_client_test to the "bench" subpackage (BUG 10676) +- added the libndbclient static and shared libraries (BUG 10676) + +* Wed Jun 01 2005 Lenz Grimmer + +- use "mysqldatadir" variable instead of hard-coding the path multiple times +- use the "mysqld_user" variable on all occasions a user name is referenced +- removed (incomplete) Brazilian translations +- removed redundant release tags from the subpackage descriptions + +* Wed May 25 2005 Joerg Bruehe + +- Added a "make clean" between separate calls to "BuildMySQL". + +* Thu May 12 2005 Guilhem Bichot + +- Removed the mysql_tableinfo script made obsolete by the information schema + +* Wed Apr 20 2005 Lenz Grimmer + +- Enabled the "blackhole" storage engine for the Max RPM + +* Wed Apr 13 2005 Lenz Grimmer + +- removed the MySQL manual files (html/ps/texi) - they have been removed + from the MySQL sources and are now available seperately. + +* Mon Apr 4 2005 Petr Chardin + +- old mysqlmanager, mysqlmanagerc and mysqlmanager-pwger renamed into + mysqltestmanager, mysqltestmanager and mysqltestmanager-pwgen respectively + +* Fri Mar 18 2005 Lenz Grimmer + +- Disabled RAID in the Max binaries once and for all (it has finally been + removed from the source tree) + +* Sun Feb 20 2005 Petr Chardin + +- Install MySQL Instance Manager together with mysqld, touch mysqlmanager + password file + +* Mon Feb 14 2005 Lenz Grimmer + +- Fixed the compilation comments and moved them into the separate build sections + for Max and Standard + +* Mon Feb 7 2005 Tomas Ulin + +- enabled the "Ndbcluster" storage engine for the max binary +- added extra make install in ndb subdir after Max build to get ndb binaries +- added packages for ndbcluster storage engine + +* Fri Jan 14 2005 Lenz Grimmer + +- replaced obsoleted "BuildPrereq" with "BuildRequires" instead + +* Thu Jan 13 2005 Lenz Grimmer + +- enabled the "Federated" storage engine for the max binary + +* Tue Jan 04 2005 Petr Chardin + +- ISAM and merge storage engines were purged. As well as appropriate + tools and manpages (isamchk and isamlog) + +* Fri Dec 31 2004 Lenz Grimmer + +- enabled the "Archive" storage engine for the max binary +- enabled the "CSV" storage engine for the max binary +- enabled the "Example" storage engine for the max binary + +* Thu Aug 26 2004 Lenz Grimmer + +- MySQL-Max now requires MySQL-server instead of MySQL (BUG 3860) + +* Fri Aug 20 2004 Lenz Grimmer + +- do not link statically on IA64/AMD64 as these systems do not have + a patched glibc installed + +* Tue Aug 10 2004 Lenz Grimmer + +- Added libmygcc.a to the devel subpackage (required to link applications + against the the embedded server libmysqld.a) (BUG 4921) + +* Mon Aug 09 2004 Lenz Grimmer + +- Added EXCEPTIONS-CLIENT to the "devel" package + +* Thu Jul 29 2004 Lenz Grimmer + +- disabled OpenSSL in the Max binaries again (the RPM packages were the + only exception to this anyway) (BUG 1043) + +* Wed Jun 30 2004 Lenz Grimmer + +- fixed server postinstall (mysql_install_db was called with the wrong + parameter) + +* Thu Jun 24 2004 Lenz Grimmer + +- added mysql_tzinfo_to_sql to the server subpackage +- run "make clean" instead of "make distclean" + +* Mon Apr 05 2004 Lenz Grimmer + +- added ncurses-devel to the build prerequisites (BUG 3377) + +* Thu Feb 12 2004 Lenz Grimmer + +- when using gcc, _always_ use CXX=gcc +- replaced Copyright with License field (Copyright is obsolete) + +* Tue Feb 03 2004 Lenz Grimmer + +- added myisam_ftdump to the Server package + +* Tue Jan 13 2004 Lenz Grimmer + +- link the mysql client against libreadline instead of libedit (BUG 2289) + +* Mon Dec 22 2003 Lenz Grimmer + +- marked /etc/logrotate.d/mysql as a config file (BUG 2156) + +* Sat Dec 13 2003 Lenz Grimmer + +- fixed file permissions (BUG 1672) + +* Thu Dec 11 2003 Lenz Grimmer + +- made testing for gcc3 a bit more robust + +* Fri Dec 05 2003 Lenz Grimmer + +- added missing file mysql_create_system_tables to the server subpackage + +* Fri Nov 21 2003 Lenz Grimmer + +- removed dependency on MySQL-client from the MySQL-devel subpackage + as it is not really required. (BUG 1610) + +* Fri Aug 29 2003 Lenz Grimmer + +- Fixed BUG 1162 (removed macro names from the changelog) +- Really fixed BUG 998 (disable the checking for installed but + unpackaged files) + +* Tue Aug 05 2003 Lenz Grimmer + +- Fixed BUG 959 (libmysqld not being compiled properly) +- Fixed BUG 998 (RPM build errors): added missing files to the + distribution (mysql_fix_extensions, mysql_tableinfo, mysqldumpslow, + mysql_fix_privilege_tables.1), removed "-n" from install section. + +* Wed Jul 09 2003 Lenz Grimmer + +- removed the GIF Icon (file was not included in the sources anyway) +- removed unused variable shared_lib_version +- do not run automake before building the standard binary + (should not be necessary) +- add server suffix '-standard' to standard binary (to be in line + with the binary tarball distributions) +- Use more RPM macros (_exec_prefix, _sbindir, _libdir, _sysconfdir, + _datadir, _includedir) throughout the spec file. +- allow overriding CC and CXX (required when building with other compilers) + +* Fri May 16 2003 Lenz Grimmer + +- re-enabled RAID again + +* Wed Apr 30 2003 Lenz Grimmer + +- disabled MyISAM RAID (--with-raid) - it throws an assertion which + needs to be investigated first. + +* Mon Mar 10 2003 Lenz Grimmer + +- added missing file mysql_secure_installation to server subpackage + (BUG 141) + +* Tue Feb 11 2003 Lenz Grimmer + +- re-added missing pre- and post(un)install scripts to server subpackage +- added config file /etc/my.cnf to the file list (just for completeness) +- make sure to create the datadir with 755 permissions + +* Mon Jan 27 2003 Lenz Grimmer + +- removed unused CC and CXX variables +- CFLAGS and CXXFLAGS should honor RPM_OPT_FLAGS + +* Fri Jan 24 2003 Lenz Grimmer + +- renamed package "MySQL" to "MySQL-server" +- fixed Copyright tag +- added mysql_waitpid to client subpackage (required for mysql-test-run) + +* Wed Nov 27 2002 Lenz Grimmer + +- moved init script from /etc/rc.d/init.d to /etc/init.d (the majority of + Linux distributions now support this scheme as proposed by the LSB either + directly or via a compatibility symlink) +- Use new "restart" init script action instead of starting and stopping + separately +- Be more flexible in activating the automatic bootup - use insserv (on + older SuSE versions) or chkconfig (Red Hat, newer SuSE versions and + others) to create the respective symlinks + +* Wed Sep 25 2002 Lenz Grimmer + +- MySQL-Max now requires MySQL >= 4.0 to avoid version mismatches + (mixing 3.23 and 4.0 packages) + +* Fri Aug 09 2002 Lenz Grimmer + +- Turn off OpenSSL in MySQL-Max for now until it works properly again +- enable RAID for the Max binary instead +- added compatibility link: safe_mysqld -> mysqld_safe to ease the + transition from 3.23 + +* Thu Jul 18 2002 Lenz Grimmer + +- Reworked the build steps a little bit: the Max binary is supposed + to include OpenSSL, which cannot be linked statically, thus trying + to statically link against a special glibc is futile anyway +- because of this, it is not required to make yet another build run + just to compile the shared libs (saves a lot of time) +- updated package description of the Max subpackage +- clean up the BuildRoot directory afterwards + +* Mon Jul 15 2002 Lenz Grimmer + +- Updated Packager information +- Fixed the build options: the regular package is supposed to + include InnoDB and linked statically, while the Max package + should include BDB and SSL support + +* Fri May 03 2002 Lenz Grimmer + +- Use more RPM macros (e.g. infodir, mandir) to make the spec + file more portable +- reorganized the installation of documentation files: let RPM + take care of this +- reorganized the file list: actually install man pages along + with the binaries of the respective subpackage +- do not include libmysqld.a in the devel subpackage as well, if we + have a special "embedded" subpackage +- reworked the package descriptions + +* Mon Oct 8 2001 Monty + +- Added embedded server as a separate RPM + +* Fri Apr 13 2001 Monty + +- Added mysqld-max to the distribution + +* Tue Jan 2 2001 Monty + +- Added mysql-test to the bench package + +* Fri Aug 18 2000 Tim Smith + +- Added separate libmysql_r directory; now both a threaded + and non-threaded library is shipped. + +* Tue Sep 28 1999 David Axmark + +- Added the support-files/my-example.cnf to the docs directory. + +- Removed devel dependency on base since it is about client + development. + +* Wed Sep 8 1999 David Axmark + +- Cleaned up some for 3.23. + +* Thu Jul 1 1999 David Axmark + +- Added support for shared libraries in a separate sub + package. Original fix by David Fox (dsfox@cogsci.ucsd.edu) + +- The --enable-assembler switch is now automatically disables on + platforms there assembler code is unavailable. This should allow + building this RPM on non i386 systems. + +* Mon Feb 22 1999 David Axmark + +- Removed unportable cc switches from the spec file. The defaults can + now be overridden with environment variables. This feature is used + to compile the official RPM with optimal (but compiler version + specific) switches. + +- Removed the repetitive description parts for the sub rpms. Maybe add + again if RPM gets a multiline macro capability. + +- Added support for a pt_BR translation. Translation contributed by + Jorge Godoy . + +* Wed Nov 4 1998 David Axmark + +- A lot of changes in all the rpm and install scripts. This may even + be a working RPM :-) + +* Sun Aug 16 1998 David Axmark + +- A developers changelog for MySQL is available in the source RPM. And + there is a history of major user visible changed in the Reference + Manual. Only RPM specific changes will be documented here. diff -Nru mysql-5.6-5.6.27/support-files/mysql.server.sh mysql-5.6-5.6.33/support-files/mysql.server.sh --- mysql-5.6-5.6.27/support-files/mysql.server.sh 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/support-files/mysql.server.sh 2016-08-26 11:22:35.000000000 +0000 @@ -280,7 +280,7 @@ then # Give extra arguments to mysqld with the my.cnf file. This script # may be overwritten at next upgrade. - $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 & + $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null & wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$? # Make lock for RedHat / SuSE diff -Nru mysql-5.6-5.6.27/tests/mysql_client_fw.c mysql-5.6-5.6.33/tests/mysql_client_fw.c --- mysql-5.6-5.6.27/tests/mysql_client_fw.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/tests/mysql_client_fw.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights * reserved. This program is free software; you can redistribute it and/or modify @@ -1265,7 +1265,7 @@ static struct my_tests_st *my_testlist= 0; static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch (optid) { diff -Nru mysql-5.6-5.6.27/tests/mysql_client_test.c mysql-5.6-5.6.33/tests/mysql_client_test.c --- mysql-5.6-5.6.27/tests/mysql_client_test.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/tests/mysql_client_test.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19441,6 +19441,124 @@ } +/* + BUG#17883203: MYSQL EMBEDDED MYSQL_STMT_EXECUTE RETURN + "MALFORMED COMMUNICATION PACKET" ERROR +*/ +#define BUG17883203_STRING_SIZE 100 + +static void test_bug17883203() +{ + MYSQL_STMT *stmt; + MYSQL_BIND bind; + char str_data[BUG17883203_STRING_SIZE]; + my_bool is_null; + my_bool error; + unsigned long length; + const char stmt_text[] ="SELECT VERSION()"; + int rc; + + myheader("test_bug17883203"); + + stmt = mysql_stmt_init(mysql); + check_stmt(stmt); + rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); + check_execute(stmt, rc); + rc= mysql_stmt_execute(stmt); + check_execute(stmt, rc); + memset(&bind, 0, sizeof(bind)); + + bind.buffer_type= MYSQL_TYPE_STRING; + bind.buffer= (char *)str_data; + bind.buffer_length= BUG17883203_STRING_SIZE; + bind.is_null= &is_null; + bind.length= &length; + bind.error= &error; + + rc= mysql_stmt_bind_result(stmt, &bind); + check_execute(stmt, rc); + rc= mysql_stmt_fetch(stmt); + check_execute(stmt, rc); + + if (!opt_silent) + { + fprintf(stdout, "\n Version: %s", str_data); + } + mysql_stmt_close(stmt); +} + + +/* + Bug#22559575: "the statement (1) has no open cursor" pops + sometimes with prepared+query_cache +*/ + +static void bug22559575_base(unsigned long type) +{ + MYSQL_STMT *stmt; + int rc; + const char stmt_text[] ="SELECT a FROM t22559575"; + MYSQL_RES *prepare_meta = NULL; + MYSQL_BIND bind[1]; + short data; + unsigned long length; + + stmt = mysql_stmt_init(mysql); + check_stmt(stmt); + if (type == CURSOR_TYPE_READ_ONLY) + { + rc = mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*)&type); + check_execute(stmt, rc); + } + rc = mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); + check_execute(stmt, rc); + prepare_meta = mysql_stmt_result_metadata(stmt); + DIE_UNLESS(prepare_meta != NULL); + rc= mysql_stmt_execute(stmt); + check_execute(stmt, rc); + + memset(bind, 0, sizeof(bind)); + bind[0].buffer_type= MYSQL_TYPE_SHORT; + bind[0].buffer= (void *)&data; + bind[0].length= &length; + rc= mysql_stmt_bind_result(stmt, bind); + check_execute(stmt, rc); + + rc= mysql_stmt_store_result(stmt); + check_execute(stmt, rc); + + rc= mysql_stmt_fetch(stmt); + check_execute(stmt, rc); + DIE_UNLESS(data == 1); + + mysql_free_result(prepare_meta); + rc= mysql_stmt_close(stmt); + check_execute(stmt, rc); +} + +static void test_bug22559575() +{ + int rc; + + rc= mysql_query(mysql, "CREATE TABLE t22559575(a SMALLINT)"); + myquery(rc); + rc= mysql_query(mysql, "INSERT INTO t22559575 VALUES (1)"); + myquery(rc); + + /* Should not cache */ + bug22559575_base(CURSOR_TYPE_READ_ONLY); + bug22559575_base(CURSOR_TYPE_READ_ONLY); + /* Should save to cache */ + bug22559575_base(CURSOR_TYPE_NO_CURSOR); + /* Should use cache */ + bug22559575_base(CURSOR_TYPE_NO_CURSOR); + /* should not use cache */ + bug22559575_base(CURSOR_TYPE_READ_ONLY); + + rc= mysql_query(mysql, "DROP TABLE t22559575"); + myquery(rc); +} + static struct my_tests_st my_tests[]= { { "disable_query_logs", disable_query_logs }, { "test_view_sp_list_fields", test_view_sp_list_fields }, @@ -19717,6 +19835,8 @@ #endif { "test_bug17512527", test_bug17512527}, { "test_bug20810928", test_bug20810928 }, + { "test_bug17883203", test_bug17883203 }, + { "test_bug22559575", test_bug22559575 }, { 0, 0 } }; diff -Nru mysql-5.6-5.6.27/tests/thread_test.c mysql-5.6-5.6.33/tests/thread_test.c --- mysql-5.6-5.6.27/tests/thread_test.c 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/tests/thread_test.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,9 +29,9 @@ uint tcp_port; #ifndef __WIN__ -void *test_thread(void *arg __attribute__((unused))) +void *test_thread(void *arg MY_ATTRIBUTE((unused))) #else -unsigned __stdcall test_thread(void *arg __attribute__((unused))) +unsigned __stdcall test_thread(void *arg MY_ATTRIBUTE((unused))) #endif { MYSQL *mysql; @@ -134,7 +134,7 @@ static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), +get_one_option(int optid, const struct my_option *opt MY_ATTRIBUTE((unused)), char *argument) { switch (optid) { diff -Nru mysql-5.6-5.6.27/unittest/CMakeLists.txt mysql-5.6-5.6.33/unittest/CMakeLists.txt --- mysql-5.6-5.6.27/unittest/CMakeLists.txt 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,8 +13,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +ADD_SUBDIRECTORY(gunit) + ADD_CUSTOM_TARGET( test-unit - COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/unit.pl run . + COMMAND ctest WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) diff -Nru mysql-5.6-5.6.27/unittest/gunit/CMakeLists.txt mysql-5.6-5.6.33/unittest/gunit/CMakeLists.txt --- mysql-5.6-5.6.27/unittest/gunit/CMakeLists.txt 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/gunit/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -255,7 +255,6 @@ sql_list sql_plist sql_string - stdcxx strtoll thread_utils ) diff -Nru mysql-5.6-5.6.27/unittest/gunit/rpl_group_set-t.cc mysql-5.6-5.6.33/unittest/gunit/rpl_group_set-t.cc --- mysql-5.6-5.6.27/unittest/gunit/rpl_group_set-t.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/gunit/rpl_group_set-t.cc 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -472,9 +472,9 @@ push_errtext(); \ for (int method_i= 0, combination_i= 0; method_i < MAX_METHOD; method_i++) { \ for (int sid_map_i= 0; sid_map_i < MAX_SID_MAP; sid_map_i++, combination_i++) { \ - Gtid_set >id_set __attribute__((unused))= \ + Gtid_set >id_set MY_ATTRIBUTE((unused))= \ containers[combination_i]->gtid_set; \ - Sid_map *&sid_map __attribute__((unused))= \ + Sid_map *&sid_map MY_ATTRIBUTE((unused))= \ sid_maps[sid_map_i]; \ append_errtext(__LINE__, \ "sid_map_i=%d method_i=%d combination_i=%d", \ @@ -489,13 +489,13 @@ for (int end_i= 0; end_i < MAX_END; end_i++) { \ for (int empty_i= 0; empty_i < MAX_EMPTY; empty_i++) { \ for (int anon_i= 0; anon_i < MAX_ANON; anon_i++, combination_i++) { \ - Gtid_set >id_set __attribute__((unused))= \ + Gtid_set >id_set MY_ATTRIBUTE((unused))= \ containers[combination_i]->gtid_set; \ - Group_cache &stmt_cache __attribute__((unused))= \ + Group_cache &stmt_cache MY_ATTRIBUTE((unused))= \ containers[combination_i]->stmt_cache; \ - Group_cache &trx_cache __attribute__((unused))= \ + Group_cache &trx_cache MY_ATTRIBUTE((unused))= \ containers[combination_i]->trx_cache; \ - Group_log_state &group_log_state __attribute__((unused))= \ + Group_log_state &group_log_state MY_ATTRIBUTE((unused))= \ containers[combination_i]->group_log_state; \ append_errtext(__LINE__, \ "type_i=%d end_i=%d empty_i=%d " \ diff -Nru mysql-5.6-5.6.27/unittest/gunit/stdcxx-t.cc mysql-5.6-5.6.33/unittest/gunit/stdcxx-t.cc --- mysql-5.6-5.6.27/unittest/gunit/stdcxx-t.cc 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/gunit/stdcxx-t.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -// First include (the generated) my_config.h, to get correct platform defines. -#include "my_config.h" -#include - -#if defined(_LIBCPP_VERSION) -#include -#elif defined(__GNUC__) && __GNUC__ > 3 -#include -#elif defined(__WIN__) -#include -#elif defined(__SUNPRO_CC) -#include -#else -#error "Don't know how to implement hash_map" -#endif - - -template -struct MyHashMap -{ -#if defined(_LIBCPP_VERSION) - typedef std::unordered_map Type; -#elif defined(__GNUC__) && __GNUC__ > 3 - typedef std::tr1::unordered_map Type; -#elif defined(__WIN__) - typedef stdext::hash_map Type; -#elif defined(__SUNPRO_CC) - typedef std::hash_map Type; -#endif -}; - - -TEST(STDfeatures, HashMap) -{ - MyHashMap::Type intmap; - for (int ix= 0; ix < 10; ++ix) - { - intmap[ix]= ix * ix; - } - int t= intmap[0]; - EXPECT_EQ(0, t); - EXPECT_TRUE(0 == intmap.count(42)); - EXPECT_TRUE(intmap.end() == intmap.find(42)); -} diff -Nru mysql-5.6-5.6.27/unittest/gunit/yassl/CMakeLists.txt mysql-5.6-5.6.33/unittest/gunit/yassl/CMakeLists.txt --- mysql-5.6-5.6.27/unittest/gunit/yassl/CMakeLists.txt 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/gunit/yassl/CMakeLists.txt 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,3 +30,4 @@ ADD_EXECUTABLE(yassl-t yassl-t.cc) TARGET_LINK_LIBRARIES(yassl-t gunit_small sqlgunitlib strings dbug regex) TARGET_LINK_LIBRARIES(yassl-t ${LIBSOCKET}) +ADD_TEST(yassl yassl-t) diff -Nru mysql-5.6-5.6.27/unittest/mytap/tap.h mysql-5.6-5.6.33/unittest/mytap/tap.h --- mysql-5.6-5.6.27/unittest/mytap/tap.h 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/mytap/tap.h 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -126,7 +126,7 @@ */ void ok(int const pass, char const *fmt, ...) - __attribute__((format(printf,2,3))); + MY_ATTRIBUTE((format(printf,2,3))); /** @@ -169,7 +169,7 @@ */ void skip(int how_many, char const *reason, ...) - __attribute__((format(printf,2,3))); + MY_ATTRIBUTE((format(printf,2,3))); /** @@ -218,7 +218,7 @@ */ void diag(char const *fmt, ...) - __attribute__((format(printf,1,2))); + MY_ATTRIBUTE((format(printf,1,2))); /** @@ -240,7 +240,7 @@ */ void BAIL_OUT(char const *fmt, ...) - __attribute__((noreturn, format(printf,1,2))); + MY_ATTRIBUTE((noreturn, format(printf,1,2))); /** @@ -271,7 +271,7 @@ */ void skip_all(char const *reason, ...) - __attribute__((noreturn, format(printf, 1, 2))); + MY_ATTRIBUTE((noreturn, format(printf, 1, 2))); /** @@ -296,7 +296,7 @@ */ void todo_start(char const *message, ...) - __attribute__((format(printf, 1, 2))); + MY_ATTRIBUTE((format(printf, 1, 2))); /** diff -Nru mysql-5.6-5.6.27/unittest/README.txt mysql-5.6-5.6.33/unittest/README.txt --- mysql-5.6-5.6.27/unittest/README.txt 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/README.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - -Unit tests directory structure ------------------------------- - -This is the current structure of the unit tests. More directories -will be added over time. - -mytap Source for the MyTAP library -mysys Tests for mysys components - base64-t.c Unit test for base64 encoding functions -examples Example unit tests. - core-t.c Example of raising a signal in the middle of the test - THIS TEST WILL STOP ALL FURTHER TESTING! - simple-t.c Example of a standard TAP unit test - skip-t.c Example where some test points are skipped - skip_all-t.c Example of a test where the entire test is skipped - todo-t.c Example where test contain test points that are TODO - no_plan-t.c Example of a test with no plan (avoid this) - - -Executing unit tests --------------------- - -To make and execute all unit tests in the directory: - - make test - -Observe that the tests in the examples/ directory are just various -examples of tests and are not expected to pass. - - -Adding unit tests ------------------ - -Add a file with a name of the format "foo-t.c" to the appropriate -directory and add the following to the Makefile.am in that directory -(where ... denotes stuff already there): - - noinst_PROGRAMS = ... foo-t - -Note, it's important to have "-t" at the end of the filename, otherwise the -test won't be executed by 'make test' ! - - -Documentation -------------- - -The generated documentation is temporarily placed at: - - http://www.kindahl.net/mytap/doc/ - -I will move it to a better place once I figure out where and how. diff -Nru mysql-5.6-5.6.27/unittest/unit.pl mysql-5.6-5.6.33/unittest/unit.pl --- mysql-5.6-5.6.27/unittest/unit.pl 2015-09-18 14:24:43.000000000 +0000 +++ mysql-5.6-5.6.33/unittest/unit.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -#!/usr/bin/perl -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -use File::Find; -use Getopt::Long; - -use strict; - -sub run_cmd (@); - -my %dispatch = ( - "run" => \&run_cmd, -); - -=head1 NAME - -unit - Run unit tests in directory - -=head1 SYNOPSIS - - unit [--[no]big] [--[no]verbose] run [tests to run] - -=cut - -my $big= $ENV{'MYTAP_CONFIG'} eq 'big'; - -my $opt_verbose; -my $result = GetOptions ( - "big!" => \$big, - "verbose!" => \$opt_verbose, -); - -$ENV{'MYTAP_CONFIG'} = $big ? 'big' : ''; - -my $cmd = shift; - -if (defined $cmd && exists $dispatch{$cmd}) { - $dispatch{$cmd}->(@ARGV); -} else { - print "Unknown command", (defined $cmd ? " $cmd" : ""), ".\n"; - print "Available commands are: ", join(", ", keys %dispatch), "\n"; -} - -=head2 run - -Run all unit tests in the current directory and all subdirectories. - -=cut - -BEGIN { - # Test::Harness have been extensively rewritten in newer perl - # versions and is now just a backward compatibility wrapper - # (with a bug causing the HARNESS_PERL_SWITCHES to be mangled) - # Prefer to use TAP::Harness directly if available - if (eval "use TAP::Harness; 1") { - eval 'sub NEW_HARNESS { 1 }'; - warn "using TAP::Harness"; - } else { - eval "use Test::Harness; 1" or die "couldn't find Test::Harness!"; - eval 'sub NEW_HARNESS { 0 }'; - } -} - -sub _find_test_files (@) { - my @dirs = @_; - my @files; - find sub { - $File::Find::prune = 1 if /^SCCS$/; - $File::Find::prune = 1 if /^.libs$/; - push(@files, $File::Find::name) if -x _ && (/-t\z/ || /-t\.exe\z/); - }, @dirs; - return @files; -} - -sub run_cmd (@) { - my @files; - - # If no directories were supplied, we add all directories in the - # current directory except 'mytap' since it is not part of the - # test suite. - if (@_ == 0) { - # Ignore these directories - my @ignore = qw(mytap SCCS); - - # Build an expression from the directories above that tests if a - # directory should be included in the list or not. - my $ignore = join(' && ', map { '$_ ne ' . "'$_'"} @ignore); - - # Open and read the directory. Filter out all files, hidden - # directories, and directories named above. - opendir(DIR, ".") or die "Cannot open '.': $!\n"; - @_ = grep { -d $_ && $_ !~ /^\..*/ && eval $ignore } readdir(DIR); - closedir(DIR); - } - - print "Running tests: @_\n"; - - foreach my $name (@_) { - push(@files, _find_test_files $name) if -d $name; - push(@files, $name) if -f $name; - } - - if (@files > 0) { - # Removing the first './' from the file names - foreach (@files) { s!^\./!! } - - if (NEW_HARNESS()) - { - my %args = ( exec => [ ], verbosity => $opt_verbose ); - my $harness = TAP::Harness->new( \%args ); - my $aggreg= $harness->runtests(@files); - # Signal failure to calling scripts - exit(1) if $aggreg->get_status() ne 'PASS'; - } - else - { - $ENV{'HARNESS_VERBOSE'} = $opt_verbose; - $ENV{'HARNESS_PERL_SWITCHES'} .= ' -e "exec @ARGV"'; - runtests(@files); - } - } -} - diff -Nru mysql-5.6-5.6.27/VERSION mysql-5.6-5.6.33/VERSION --- mysql-5.6-5.6.27/VERSION 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/VERSION 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=6 -MYSQL_VERSION_PATCH=27 +MYSQL_VERSION_PATCH=33 MYSQL_VERSION_EXTRA= diff -Nru mysql-5.6-5.6.27/vio/test-sslclient.c mysql-5.6-5.6.33/vio/test-sslclient.c --- mysql-5.6-5.6.27/vio/test-sslclient.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/vio/test-sslclient.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ } int -main( int argc __attribute__((unused)), +main( int argc MY_ATTRIBUTE((unused)), char** argv) { char client_key[] = "../SSL/client-key.pem", client_cert[] = "../SSL/client-cert.pem"; diff -Nru mysql-5.6-5.6.27/vio/test-sslserver.c mysql-5.6-5.6.33/vio/test-sslserver.c --- mysql-5.6-5.6.27/vio/test-sslserver.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/vio/test-sslserver.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -75,7 +75,7 @@ } int -main(int argc __attribute__((unused)), char** argv) +main(int argc MY_ATTRIBUTE((unused)), char** argv) { char server_key[] = "../SSL/server-key.pem", server_cert[] = "../SSL/server-cert.pem"; diff -Nru mysql-5.6-5.6.27/vio/vio.c mysql-5.6-5.6.33/vio/vio.c --- mysql-5.6-5.6.27/vio/vio.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/vio/vio.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,16 +37,16 @@ @retval 1 The requested I/O event has occurred. */ -static int no_io_wait(Vio *vio __attribute__((unused)), - enum enum_vio_io_event event __attribute__((unused)), - int timeout __attribute__((unused))) +static int no_io_wait(Vio *vio MY_ATTRIBUTE((unused)), + enum enum_vio_io_event event MY_ATTRIBUTE((unused)), + int timeout MY_ATTRIBUTE((unused))) { return 1; } #endif -static my_bool has_no_data(Vio *vio __attribute__((unused))) +static my_bool has_no_data(Vio *vio MY_ATTRIBUTE((unused))) { return FALSE; } @@ -177,7 +177,7 @@ */ my_bool vio_reset(Vio* vio, enum enum_vio_type type, - my_socket sd, void *ssl __attribute__((unused)), uint flags) + my_socket sd, void *ssl MY_ATTRIBUTE((unused)), uint flags) { int ret= FALSE; Vio new_vio; @@ -201,10 +201,10 @@ such as the socket blocking mode. */ if (vio->read_timeout >= 0) - ret|= vio_timeout(&new_vio, 0, vio->read_timeout); + ret|= vio_timeout(&new_vio, 0, vio->read_timeout / 1000); if (vio->write_timeout >= 0) - ret|= vio_timeout(&new_vio, 1, vio->write_timeout); + ret|= vio_timeout(&new_vio, 1, vio->write_timeout / 1000); if (ret) { diff -Nru mysql-5.6-5.6.27/vio/viosocket.c mysql-5.6-5.6.33/vio/viosocket.c --- mysql-5.6-5.6.27/vio/viosocket.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/vio/viosocket.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -29,7 +29,7 @@ # include #endif -int vio_errno(Vio *vio __attribute__((unused))) +int vio_errno(Vio *vio MY_ATTRIBUTE((unused))) { /* These transport types are not Winsock based. */ #ifdef _WIN32 @@ -247,8 +247,8 @@ int vio_socket_timeout(Vio *vio, - uint which __attribute__((unused)), - my_bool old_mode __attribute__((unused))) + uint which MY_ATTRIBUTE((unused)), + my_bool old_mode MY_ATTRIBUTE((unused))) { int ret= 0; DBUG_ENTER("vio_socket_timeout"); @@ -314,7 +314,7 @@ } -int vio_fastsend(Vio * vio __attribute__((unused))) +int vio_fastsend(Vio * vio MY_ATTRIBUTE((unused))) { int r=0; DBUG_ENTER("vio_fastsend"); @@ -735,7 +735,7 @@ int vio_io_wait(Vio *vio, enum enum_vio_io_event event, int timeout) { int ret; - short revents __attribute__((unused)) = 0; + short revents MY_ATTRIBUTE((unused)) = 0; struct pollfd pfd; my_socket sd= mysql_socket_getfd(vio->mysql_socket); MYSQL_SOCKET_WAIT_VARIABLES(locker, state) /* no ';' */ diff -Nru mysql-5.6-5.6.27/vio/viosslfactories.c mysql-5.6-5.6.33/vio/viosslfactories.c --- mysql-5.6-5.6.27/vio/viosslfactories.c 2015-09-18 14:24:44.000000000 +0000 +++ mysql-5.6-5.6.33/vio/viosslfactories.c 2016-08-26 11:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -253,7 +253,7 @@ } /* Load certs from the trusted ca */ - if (SSL_CTX_load_verify_locations(ssl_fd->ssl_context, ca_file, ca_path) == 0) + if (SSL_CTX_load_verify_locations(ssl_fd->ssl_context, ca_file, ca_path) <= 0) { DBUG_PRINT("warning", ("SSL_CTX_load_verify_locations failed")); if (ca_file || ca_path)