mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge mysql-5.5 -> mysql-5.5-innodb
This commit is contained in:
2
VERSION
2
VERSION
@@ -1,4 +1,4 @@
|
|||||||
MYSQL_VERSION_MAJOR=5
|
MYSQL_VERSION_MAJOR=5
|
||||||
MYSQL_VERSION_MINOR=5
|
MYSQL_VERSION_MINOR=5
|
||||||
MYSQL_VERSION_PATCH=9
|
MYSQL_VERSION_PATCH=10
|
||||||
MYSQL_VERSION_EXTRA=
|
MYSQL_VERSION_EXTRA=
|
||||||
|
@@ -85,6 +85,7 @@ enum options_client
|
|||||||
OPT_WRITE_BINLOG, OPT_DUMP_DATE,
|
OPT_WRITE_BINLOG, OPT_DUMP_DATE,
|
||||||
OPT_INIT_COMMAND,
|
OPT_INIT_COMMAND,
|
||||||
OPT_PLUGIN_DIR,
|
OPT_PLUGIN_DIR,
|
||||||
|
OPT_DEFAULT_AUTH,
|
||||||
OPT_DEFAULT_PLUGIN,
|
OPT_DEFAULT_PLUGIN,
|
||||||
OPT_MAX_CLIENT_OPTION
|
OPT_MAX_CLIENT_OPTION
|
||||||
};
|
};
|
||||||
|
@@ -162,7 +162,7 @@ static int wait_time = 5;
|
|||||||
static STATUS status;
|
static STATUS status;
|
||||||
static ulong select_limit,max_join_size,opt_connect_timeout=0;
|
static ulong select_limit,max_join_size,opt_connect_timeout=0;
|
||||||
static char mysql_charsets_dir[FN_REFLEN+1];
|
static char mysql_charsets_dir[FN_REFLEN+1];
|
||||||
static char *opt_plugin_dir= 0, *opt_default_auth;
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
static const char *xmlmeta[] = {
|
static const char *xmlmeta[] = {
|
||||||
"&", "&",
|
"&", "&",
|
||||||
"<", "<",
|
"<", "<",
|
||||||
@@ -1564,7 +1564,7 @@ static struct my_option my_long_options[] =
|
|||||||
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"default_auth", OPT_PLUGIN_DIR,
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
"Default authentication client-side plugin to use.",
|
"Default authentication client-side plugin to use.",
|
||||||
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
@@ -45,6 +45,8 @@ static DYNAMIC_STRING ds_args;
|
|||||||
static DYNAMIC_STRING conn_args;
|
static DYNAMIC_STRING conn_args;
|
||||||
|
|
||||||
static char *opt_password= 0;
|
static char *opt_password= 0;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
static my_bool tty_password= 0;
|
static my_bool tty_password= 0;
|
||||||
|
|
||||||
static char opt_tmpdir[FN_REFLEN] = "";
|
static char opt_tmpdir[FN_REFLEN] = "";
|
||||||
@@ -88,6 +90,10 @@ static struct my_option my_long_options[]=
|
|||||||
{"default-character-set", OPT_DEFAULT_CHARSET,
|
{"default-character-set", OPT_DEFAULT_CHARSET,
|
||||||
"Set the default character set.", 0,
|
"Set the default character set.", 0,
|
||||||
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade "
|
{"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade "
|
||||||
"has already been executed for the current version of MySQL.",
|
"has already been executed for the current version of MySQL.",
|
||||||
&opt_force, &opt_force, 0,
|
&opt_force, &opt_force, 0,
|
||||||
@@ -102,6 +108,9 @@ static struct my_option my_long_options[]=
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0,
|
||||||
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
#if MYSQL_PORT_DEFAULT == 0
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
@@ -283,6 +292,8 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
case 'S': /* --socket */
|
case 'S': /* --socket */
|
||||||
case OPT_MYSQL_PROTOCOL: /* --protocol */
|
case OPT_MYSQL_PROTOCOL: /* --protocol */
|
||||||
case OPT_SHARED_MEMORY_BASE_NAME: /* --shared-memory-base-name */
|
case OPT_SHARED_MEMORY_BASE_NAME: /* --shared-memory-base-name */
|
||||||
|
case OPT_PLUGIN_DIR: /* --plugin-dir */
|
||||||
|
case OPT_DEFAULT_AUTH: /* --default-auth */
|
||||||
add_one_option(&conn_args, opt, argument);
|
add_one_option(&conn_args, opt, argument);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,9 +17,7 @@
|
|||||||
|
|
||||||
#include "client_priv.h"
|
#include "client_priv.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#ifdef THREAD
|
|
||||||
#include <my_pthread.h> /* because of signal() */
|
#include <my_pthread.h> /* because of signal() */
|
||||||
#endif
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
@@ -44,7 +42,7 @@ static uint tcp_port = 0, option_wait = 0, option_silent=0, nr_iterations;
|
|||||||
static uint opt_count_iterations= 0, my_end_arg;
|
static uint opt_count_iterations= 0, my_end_arg;
|
||||||
static ulong opt_connect_timeout, opt_shutdown_timeout;
|
static ulong opt_connect_timeout, opt_shutdown_timeout;
|
||||||
static char * unix_port=0;
|
static char * unix_port=0;
|
||||||
static char *opt_plugin_dir= 0, *opt_default_auth;
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
static char *shared_memory_base_name=0;
|
static char *shared_memory_base_name=0;
|
||||||
@@ -210,7 +208,7 @@ static struct my_option my_long_options[] =
|
|||||||
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"default_auth", OPT_PLUGIN_DIR,
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
"Default authentication client-side plugin to use.",
|
"Default authentication client-side plugin to use.",
|
||||||
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@@ -415,6 +413,9 @@ int main(int argc,char *argv[])
|
|||||||
|
|
||||||
if (interval) /* --sleep=interval given */
|
if (interval) /* --sleep=interval given */
|
||||||
{
|
{
|
||||||
|
if (opt_count_iterations && --nr_iterations == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If connection was dropped (unintentionally, or due to SHUTDOWN),
|
If connection was dropped (unintentionally, or due to SHUTDOWN),
|
||||||
re-establish it if --wait ("retry-connect") was given and user
|
re-establish it if --wait ("retry-connect") was given and user
|
||||||
|
@@ -79,6 +79,8 @@ static char* host = 0;
|
|||||||
static int port= 0;
|
static int port= 0;
|
||||||
static uint my_end_arg;
|
static uint my_end_arg;
|
||||||
static const char* sock= 0;
|
static const char* sock= 0;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
static char *shared_memory_base_name= 0;
|
static char *shared_memory_base_name= 0;
|
||||||
#endif
|
#endif
|
||||||
@@ -1039,6 +1041,10 @@ static struct my_option my_long_options[] =
|
|||||||
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
||||||
&debug_info_flag, &debug_info_flag,
|
&debug_info_flag, &debug_info_flag,
|
||||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"disable-log-bin", 'D', "Disable binary log. This is useful, if you "
|
{"disable-log-bin", 'D', "Disable binary log. This is useful, if you "
|
||||||
"enabled --to-last-log and are sending the output to the same MySQL server. "
|
"enabled --to-last-log and are sending the output to the same MySQL server. "
|
||||||
"This way you could avoid an endless loop. You would also like to use it "
|
"This way you could avoid an endless loop. You would also like to use it "
|
||||||
@@ -1064,6 +1070,9 @@ static struct my_option my_long_options[] =
|
|||||||
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"password", 'p', "Password to connect to remote server.",
|
{"password", 'p', "Password to connect to remote server.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
#if MYSQL_PORT_DEFAULT == 0
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
@@ -1381,6 +1390,12 @@ static Exit_status safe_connect()
|
|||||||
return ERROR_STOP;
|
return ERROR_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
if (opt_protocol)
|
if (opt_protocol)
|
||||||
mysql_options(mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
mysql_options(mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
|
@@ -40,6 +40,7 @@ static int my_end_arg;
|
|||||||
static char * opt_mysql_unix_port = 0;
|
static char * opt_mysql_unix_port = 0;
|
||||||
static char *opt_password = 0, *current_user = 0,
|
static char *opt_password = 0, *current_user = 0,
|
||||||
*default_charset= 0, *current_host= 0;
|
*default_charset= 0, *current_host= 0;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
static int first_error = 0;
|
static int first_error = 0;
|
||||||
DYNAMIC_ARRAY tables4repair;
|
DYNAMIC_ARRAY tables4repair;
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
@@ -99,6 +100,10 @@ static struct my_option my_long_options[] =
|
|||||||
{"default-character-set", OPT_DEFAULT_CHARSET,
|
{"default-character-set", OPT_DEFAULT_CHARSET,
|
||||||
"Set the default character set.", &default_charset,
|
"Set the default character set.", &default_charset,
|
||||||
&default_charset, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
&default_charset, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"fast",'F', "Check only tables that haven't been closed properly.",
|
{"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,
|
&opt_fast, &opt_fast, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
@@ -136,6 +141,9 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
#if MYSQL_PORT_DEFAULT == 0
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
@@ -796,6 +804,13 @@ static int dbConnect(char *host, char *user, char *passwd)
|
|||||||
if (shared_memory_base_name)
|
if (shared_memory_base_name)
|
||||||
mysql_options(&mysql_connection,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
mysql_options(&mysql_connection,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(&mysql_connection, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(&mysql_connection, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd,
|
if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd,
|
||||||
NULL, opt_mysql_port, opt_mysql_unix_port, 0)))
|
NULL, opt_mysql_port, opt_mysql_unix_port, 0)))
|
||||||
|
@@ -137,7 +137,7 @@ FILE *stderror_file=0;
|
|||||||
static char *shared_memory_base_name=0;
|
static char *shared_memory_base_name=0;
|
||||||
#endif
|
#endif
|
||||||
static uint opt_protocol= 0;
|
static uint opt_protocol= 0;
|
||||||
static char *opt_plugin_dir= 0, *opt_default_auth;
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Dynamic_string wrapper functions. In this file use these
|
Dynamic_string wrapper functions. In this file use these
|
||||||
@@ -503,7 +503,7 @@ static struct my_option my_long_options[] =
|
|||||||
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"default_auth", OPT_PLUGIN_DIR,
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
"Default authentication client-side plugin to use.",
|
"Default authentication client-side plugin to use.",
|
||||||
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@@ -2237,6 +2237,15 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
const char *insert_option;
|
const char *insert_option;
|
||||||
char name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3];
|
char name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3];
|
||||||
char table_buff2[NAME_LEN*2+3], query_buff[QUERY_LENGTH];
|
char table_buff2[NAME_LEN*2+3], query_buff[QUERY_LENGTH];
|
||||||
|
const char *show_fields_stmt= "SELECT `COLUMN_NAME` AS `Field`, "
|
||||||
|
"`COLUMN_TYPE` AS `Type`, "
|
||||||
|
"`IS_NULLABLE` AS `Null`, "
|
||||||
|
"`COLUMN_KEY` AS `Key`, "
|
||||||
|
"`COLUMN_DEFAULT` AS `Default`, "
|
||||||
|
"`EXTRA` AS `Extra`, "
|
||||||
|
"`COLUMN_COMMENT` AS `Comment` "
|
||||||
|
"FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE "
|
||||||
|
"TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s'";
|
||||||
FILE *sql_file= md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
int len;
|
int len;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
@@ -2504,8 +2513,8 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
verbose_msg("%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
|
verbose_msg("%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
|
||||||
my_progname, mysql_error(mysql));
|
my_progname, mysql_error(mysql));
|
||||||
|
|
||||||
my_snprintf(query_buff, sizeof(query_buff), "show fields from %s",
|
my_snprintf(query_buff, sizeof(query_buff), show_fields_stmt, db, table);
|
||||||
result_table);
|
|
||||||
if (mysql_query_with_error_report(mysql, &result, query_buff))
|
if (mysql_query_with_error_report(mysql, &result, query_buff))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
|
@@ -60,6 +60,7 @@ static char *opt_password=0, *current_user=0,
|
|||||||
*default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME;
|
*default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME;
|
||||||
static uint opt_mysql_port= 0, opt_protocol= 0;
|
static uint opt_mysql_port= 0, opt_protocol= 0;
|
||||||
static char * opt_mysql_unix_port=0;
|
static char * opt_mysql_unix_port=0;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
static longlong opt_ignore_lines= -1;
|
static longlong opt_ignore_lines= -1;
|
||||||
#include <sslopt-vars.h>
|
#include <sslopt-vars.h>
|
||||||
|
|
||||||
@@ -90,6 +91,10 @@ static struct my_option my_long_options[] =
|
|||||||
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
||||||
&debug_info_flag, &debug_info_flag,
|
&debug_info_flag, &debug_info_flag,
|
||||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"delete", 'd', "First delete all rows from table.", &opt_delete,
|
{"delete", 'd', "First delete all rows from table.", &opt_delete,
|
||||||
&opt_delete, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
&opt_delete, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"fields-terminated-by", OPT_FTB,
|
{"fields-terminated-by", OPT_FTB,
|
||||||
@@ -139,6 +144,9 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
#if MYSQL_PORT_DEFAULT == 0
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
@@ -429,6 +437,13 @@ static MYSQL *db_connect(char *host, char *database,
|
|||||||
if (shared_memory_base_name)
|
if (shared_memory_base_name)
|
||||||
mysql_options(mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
mysql_options(mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
if (!(mysql_real_connect(mysql,host,user,passwd,
|
if (!(mysql_real_connect(mysql,host,user,passwd,
|
||||||
database,opt_mysql_port,opt_mysql_unix_port,
|
database,opt_mysql_port,opt_mysql_unix_port,
|
||||||
|
@@ -34,6 +34,7 @@ static my_bool debug_info_flag= 0, debug_check_flag= 0;
|
|||||||
static uint my_end_arg= 0;
|
static uint my_end_arg= 0;
|
||||||
static uint opt_verbose=0;
|
static uint opt_verbose=0;
|
||||||
static char *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME;
|
static char *default_charset= (char*) MYSQL_AUTODETECT_CHARSET_NAME;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
static char *shared_memory_base_name=0;
|
static char *shared_memory_base_name=0;
|
||||||
@@ -124,6 +125,12 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
|
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(&mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
if (!(mysql_real_connect(&mysql,host,user,opt_password,
|
if (!(mysql_real_connect(&mysql,host,user,opt_password,
|
||||||
(first_argument_uses_wildcards) ? "" :
|
(first_argument_uses_wildcards) ? "" :
|
||||||
argv[0],opt_mysql_port,opt_mysql_unix_port,
|
argv[0],opt_mysql_port,opt_mysql_unix_port,
|
||||||
@@ -182,6 +189,10 @@ static struct my_option my_long_options[] =
|
|||||||
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.",
|
||||||
&debug_info_flag, &debug_info_flag,
|
&debug_info_flag, &debug_info_flag,
|
||||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG,
|
{"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
{"host", 'h', "Connect to host.", &host, &host, 0, GET_STR,
|
{"host", 'h', "Connect to host.", &host, &host, 0, GET_STR,
|
||||||
@@ -195,6 +206,9 @@ static struct my_option my_long_options[] =
|
|||||||
"Password to use when connecting to server. If password is not given, it's "
|
"Password to use when connecting to server. If password is not given, it's "
|
||||||
"solicited on the tty.",
|
"solicited on the tty.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
{"port", 'P', "Port number to use for connection or 0 for default to, in "
|
||||||
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
|
||||||
#if MYSQL_PORT_DEFAULT == 0
|
#if MYSQL_PORT_DEFAULT == 0
|
||||||
|
@@ -122,6 +122,7 @@ static char *host= NULL, *opt_password= NULL, *user= NULL,
|
|||||||
*pre_system= NULL,
|
*pre_system= NULL,
|
||||||
*post_system= NULL,
|
*post_system= NULL,
|
||||||
*opt_mysql_unix_port= NULL;
|
*opt_mysql_unix_port= NULL;
|
||||||
|
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||||
|
|
||||||
const char *delimiter= "\n";
|
const char *delimiter= "\n";
|
||||||
|
|
||||||
@@ -338,6 +339,12 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
|
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(&mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
if (!opt_only_print)
|
if (!opt_only_print)
|
||||||
{
|
{
|
||||||
if (!(mysql_real_connect(&mysql, host, user, opt_password,
|
if (!(mysql_real_connect(&mysql, host, user, opt_password,
|
||||||
@@ -581,6 +588,10 @@ static struct my_option my_long_options[] =
|
|||||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"debug-info", 'T', "Print some debug info at exit.", &debug_info_flag,
|
{"debug-info", 'T', "Print some debug info at exit.", &debug_info_flag,
|
||||||
&debug_info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
&debug_info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"default_auth", OPT_DEFAULT_AUTH,
|
||||||
|
"Default authentication client-side plugin to use.",
|
||||||
|
(uchar**) &opt_default_auth, (uchar**) &opt_default_auth, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"delimiter", 'F',
|
{"delimiter", 'F',
|
||||||
"Delimiter to use in SQL statements supplied in file or command line.",
|
"Delimiter to use in SQL statements supplied in file or command line.",
|
||||||
&delimiter, &delimiter, 0, GET_STR, REQUIRED_ARG,
|
&delimiter, &delimiter, 0, GET_STR, REQUIRED_ARG,
|
||||||
@@ -620,6 +631,9 @@ static struct my_option my_long_options[] =
|
|||||||
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
{"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
|
{"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
|
||||||
|
(uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
|
||||||
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Port number to use for connection.", &opt_mysql_port,
|
{"port", 'P', "Port number to use for connection.", &opt_mysql_port,
|
||||||
&opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0,
|
&opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
@@ -1507,7 +1521,12 @@ generate_primary_key_list(MYSQL *mysql, option_string *engine_stmt)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
result= mysql_store_result(mysql);
|
if (!(result= mysql_store_result(mysql)))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Error when storing result: %d %s\n",
|
||||||
|
my_progname, mysql_errno(mysql), mysql_error(mysql));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
primary_keys_number_of= mysql_num_rows(result);
|
primary_keys_number_of= mysql_num_rows(result);
|
||||||
|
|
||||||
/* So why check this? Blackhole :) */
|
/* So why check this? Blackhole :) */
|
||||||
@@ -1879,10 +1898,15 @@ limit_not_met:
|
|||||||
{
|
{
|
||||||
if (mysql_field_count(mysql))
|
if (mysql_field_count(mysql))
|
||||||
{
|
{
|
||||||
result= mysql_store_result(mysql);
|
if (!(result= mysql_store_result(mysql)))
|
||||||
while ((row = mysql_fetch_row(result)))
|
fprintf(stderr, "%s: Error when storing result: %d %s\n",
|
||||||
counter++;
|
my_progname, mysql_errno(mysql), mysql_error(mysql));
|
||||||
mysql_free_result(result);
|
else
|
||||||
|
{
|
||||||
|
while ((row= mysql_fetch_row(result)))
|
||||||
|
counter++;
|
||||||
|
mysql_free_result(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while(mysql_next_result(mysql) == 0);
|
} while(mysql_next_result(mysql) == 0);
|
||||||
queries++;
|
queries++;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
mysqltest
|
mysqltest
|
||||||
@@ -468,6 +468,8 @@ TYPELIB command_typelib= {array_elements(command_names),"",
|
|||||||
command_names, 0};
|
command_names, 0};
|
||||||
|
|
||||||
DYNAMIC_STRING ds_res;
|
DYNAMIC_STRING ds_res;
|
||||||
|
/* Points to ds_warning in run_query, so it can be freed */
|
||||||
|
DYNAMIC_STRING *ds_warn= 0;
|
||||||
|
|
||||||
char builtin_echo[FN_REFLEN];
|
char builtin_echo[FN_REFLEN];
|
||||||
|
|
||||||
@@ -488,7 +490,7 @@ VAR* var_init(VAR* v, const char *name, int name_len, const char *val,
|
|||||||
VAR* var_get(const char *var_name, const char** var_name_end,
|
VAR* var_get(const char *var_name, const char** var_name_end,
|
||||||
my_bool raw, my_bool ignore_not_existing);
|
my_bool raw, my_bool ignore_not_existing);
|
||||||
void eval_expr(VAR* v, const char *p, const char** p_end,
|
void eval_expr(VAR* v, const char *p, const char** p_end,
|
||||||
bool open_end=false, bool backtick=true);
|
bool open_end=false, bool do_eval=true);
|
||||||
my_bool match_delimiter(int c, const char *delim, uint length);
|
my_bool match_delimiter(int c, const char *delim, uint length);
|
||||||
void dump_result_to_reject_file(char *buf, int size);
|
void dump_result_to_reject_file(char *buf, int size);
|
||||||
void dump_warning_messages();
|
void dump_warning_messages();
|
||||||
@@ -1275,6 +1277,8 @@ void free_used_memory()
|
|||||||
my_free(embedded_server_args[--embedded_server_arg_count]);
|
my_free(embedded_server_args[--embedded_server_arg_count]);
|
||||||
delete_dynamic(&q_lines);
|
delete_dynamic(&q_lines);
|
||||||
dynstr_free(&ds_res);
|
dynstr_free(&ds_res);
|
||||||
|
if (ds_warn)
|
||||||
|
dynstr_free(ds_warn);
|
||||||
free_all_replace();
|
free_all_replace();
|
||||||
my_free(opt_pass);
|
my_free(opt_pass);
|
||||||
free_defaults(default_argv);
|
free_defaults(default_argv);
|
||||||
@@ -1318,6 +1322,17 @@ static void cleanup_and_exit(int exit_code)
|
|||||||
exit(exit_code);
|
exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_file_stack()
|
||||||
|
{
|
||||||
|
for (struct st_test_file* err_file= cur_file;
|
||||||
|
err_file != file_stack;
|
||||||
|
err_file--)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "included from %s at line %d:\n",
|
||||||
|
err_file->file_name, err_file->lineno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void die(const char *fmt, ...)
|
void die(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static int dying= 0;
|
static int dying= 0;
|
||||||
@@ -1337,8 +1352,12 @@ void die(const char *fmt, ...)
|
|||||||
/* Print the error message */
|
/* Print the error message */
|
||||||
fprintf(stderr, "mysqltest: ");
|
fprintf(stderr, "mysqltest: ");
|
||||||
if (cur_file && cur_file != file_stack)
|
if (cur_file && cur_file != file_stack)
|
||||||
fprintf(stderr, "In included file \"%s\": ",
|
{
|
||||||
|
fprintf(stderr, "In included file \"%s\": \n",
|
||||||
cur_file->file_name);
|
cur_file->file_name);
|
||||||
|
print_file_stack();
|
||||||
|
}
|
||||||
|
|
||||||
if (start_lineno > 0)
|
if (start_lineno > 0)
|
||||||
fprintf(stderr, "At line %u: ", start_lineno);
|
fprintf(stderr, "At line %u: ", start_lineno);
|
||||||
if (fmt)
|
if (fmt)
|
||||||
@@ -1368,20 +1387,14 @@ void die(const char *fmt, ...)
|
|||||||
void abort_not_supported_test(const char *fmt, ...)
|
void abort_not_supported_test(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
struct st_test_file* err_file= cur_file;
|
|
||||||
DBUG_ENTER("abort_not_supported_test");
|
DBUG_ENTER("abort_not_supported_test");
|
||||||
|
|
||||||
/* Print include filestack */
|
/* Print include filestack */
|
||||||
fprintf(stderr, "The test '%s' is not supported by this installation\n",
|
fprintf(stderr, "The test '%s' is not supported by this installation\n",
|
||||||
file_stack->file_name);
|
file_stack->file_name);
|
||||||
fprintf(stderr, "Detected in file %s at line %d\n",
|
fprintf(stderr, "Detected in file %s at line %d\n",
|
||||||
err_file->file_name, err_file->lineno);
|
cur_file->file_name, cur_file->lineno);
|
||||||
while (err_file != file_stack)
|
print_file_stack();
|
||||||
{
|
|
||||||
err_file--;
|
|
||||||
fprintf(stderr, "included from %s at line %d\n",
|
|
||||||
err_file->file_name, err_file->lineno);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print error message */
|
/* Print error message */
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@@ -2519,7 +2532,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
eval_expr(var, value, 0);
|
eval_expr(var, value, 0, false, false);
|
||||||
}
|
}
|
||||||
dynstr_free(&ds_query);
|
dynstr_free(&ds_query);
|
||||||
mysql_free_result(res);
|
mysql_free_result(res);
|
||||||
@@ -2551,12 +2564,16 @@ void var_copy(VAR *dest, VAR *src)
|
|||||||
|
|
||||||
|
|
||||||
void eval_expr(VAR *v, const char *p, const char **p_end,
|
void eval_expr(VAR *v, const char *p, const char **p_end,
|
||||||
bool open_end, bool backtick)
|
bool open_end, bool do_eval)
|
||||||
{
|
{
|
||||||
|
|
||||||
DBUG_ENTER("eval_expr");
|
DBUG_ENTER("eval_expr");
|
||||||
DBUG_PRINT("enter", ("p: '%s'", p));
|
DBUG_PRINT("enter", ("p: '%s'", p));
|
||||||
|
|
||||||
|
/* Skip to treat as pure string if no evaluation */
|
||||||
|
if (! do_eval)
|
||||||
|
goto NO_EVAL;
|
||||||
|
|
||||||
if (*p == '$')
|
if (*p == '$')
|
||||||
{
|
{
|
||||||
VAR *vp;
|
VAR *vp;
|
||||||
@@ -2576,7 +2593,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end,
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*p == '`' && backtick)
|
if (*p == '`')
|
||||||
{
|
{
|
||||||
var_query_set(v, p, p_end);
|
var_query_set(v, p, p_end);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@@ -2599,6 +2616,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NO_EVAL:
|
||||||
{
|
{
|
||||||
int new_val_len = (p_end && *p_end) ?
|
int new_val_len = (p_end && *p_end) ?
|
||||||
(int) (*p_end - p) : (int) strlen(p);
|
(int) (*p_end - p) : (int) strlen(p);
|
||||||
@@ -7679,6 +7697,8 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
die ("Cannot reap on a connection without pending send");
|
die ("Cannot reap on a connection without pending send");
|
||||||
|
|
||||||
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
||||||
|
ds_warn= &ds_warnings;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Evaluate query if this is an eval command
|
Evaluate query if this is an eval command
|
||||||
*/
|
*/
|
||||||
@@ -7836,6 +7856,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
ds, &ds_warnings);
|
ds, &ds_warnings);
|
||||||
|
|
||||||
dynstr_free(&ds_warnings);
|
dynstr_free(&ds_warnings);
|
||||||
|
ds_warn= 0;
|
||||||
if (command->type == Q_EVAL || command->type == Q_SEND_EVAL)
|
if (command->type == Q_EVAL || command->type == Q_SEND_EVAL)
|
||||||
dynstr_free(&eval_query);
|
dynstr_free(&eval_query);
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 2009 Sun Microsystems, Inc
|
# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -13,17 +13,19 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#Charsets and collations
|
# Charsets and collations
|
||||||
IF(NOT DEFAULT_CHARSET)
|
IF(NOT DEFAULT_CHARSET)
|
||||||
SET(DEFAULT_CHARSET "latin1")
|
SET(DEFAULT_CHARSET "latin1")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT DEFAULT_COLLATIONS)
|
IF(NOT DEFAULT_COLLATION)
|
||||||
SET(DEFAULT_COLLATION "latin1_swedish_ci")
|
SET(DEFAULT_COLLATION "latin1_swedish_ci")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(CHARSETS ${DEFAULT_CHARSET} latin1 utf8 utf8mb4)
|
SET(CHARSETS ${DEFAULT_CHARSET} latin1 utf8 utf8mb4)
|
||||||
SET(CHARSETS_COMPLEX big5 cp1250 cp932 eucjpms euckr gb2312 gbk latin1 latin2 sjis tis620 ucs2 ujis utf8 utf8mb4 utf16 utf32)
|
SET(CHARSETS_COMPLEX
|
||||||
|
big5 cp1250 cp932 eucjpms euckr gb2312 gbk latin1 latin2
|
||||||
|
sjis tis620 ucs2 ujis utf8 utf8mb4 utf16 utf32)
|
||||||
|
|
||||||
SET(CHARSETS_AVAILABLE
|
SET(CHARSETS_AVAILABLE
|
||||||
binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257
|
binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||||
${CMAKE_SOURCE_DIR}/cmd-line-utils)
|
${CMAKE_SOURCE_DIR}/cmd-line-utils)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DHAVE_CONFIG_H -DNO_KILL_INTR -DMYSQL_CLIENT_NO_THREADS)
|
ADD_DEFINITIONS(-DHAVE_CONFIG_H -DNO_KILL_INTR)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CURSES_INCLUDE_PATH})
|
INCLUDE_DIRECTORIES(${CURSES_INCLUDE_PATH})
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2009 Sun Microsystems, Inc
|
/* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -470,9 +470,6 @@
|
|||||||
|
|
||||||
#cmakedefine STACK_DIRECTION @STACK_DIRECTION@
|
#cmakedefine STACK_DIRECTION @STACK_DIRECTION@
|
||||||
|
|
||||||
#define THREAD 1
|
|
||||||
#define THREAD_SAFE_CLIENT 1
|
|
||||||
|
|
||||||
#define SYSTEM_TYPE "@SYSTEM_TYPE@"
|
#define SYSTEM_TYPE "@SYSTEM_TYPE@"
|
||||||
#define MACHINE_TYPE "@CMAKE_SYSTEM_PROCESSOR@"
|
#define MACHINE_TYPE "@CMAKE_SYSTEM_PROCESSOR@"
|
||||||
#cmakedefine HAVE_DTRACE 1
|
#cmakedefine HAVE_DTRACE 1
|
||||||
@@ -518,8 +515,8 @@
|
|||||||
#cmakedefine CYBOZU 1
|
#cmakedefine CYBOZU 1
|
||||||
|
|
||||||
/* Character sets and collations */
|
/* Character sets and collations */
|
||||||
#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "latin1"
|
#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "@MYSQL_DEFAULT_CHARSET_NAME@"
|
||||||
#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci"
|
#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "@MYSQL_DEFAULT_COLLATION_NAME@"
|
||||||
|
|
||||||
#cmakedefine USE_MB 1
|
#cmakedefine USE_MB 1
|
||||||
#cmakedefine USE_MB_IDENT 1
|
#cmakedefine USE_MB_IDENT 1
|
||||||
|
231
dbug/dbug.c
231
dbug/dbug.c
@@ -319,15 +319,6 @@ static void DbugExit(const char *why);
|
|||||||
static const char *DbugStrTok(const char *s);
|
static const char *DbugStrTok(const char *s);
|
||||||
static void DbugVfprintf(FILE *stream, const char* format, va_list args);
|
static void DbugVfprintf(FILE *stream, const char* format, va_list args);
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
/* Open profile output stream */
|
|
||||||
static FILE *OpenProfile(CODE_STATE *cs, const char *name);
|
|
||||||
/* Profile if asked for it */
|
|
||||||
static BOOLEAN DoProfile(CODE_STATE *);
|
|
||||||
/* Return current user time (ms) */
|
|
||||||
static unsigned long Clock(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Miscellaneous printf format strings.
|
* Miscellaneous printf format strings.
|
||||||
*/
|
*/
|
||||||
@@ -355,7 +346,6 @@ static unsigned long Clock(void);
|
|||||||
** Macros to allow dbugging with threads
|
** Macros to allow dbugging with threads
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef THREAD
|
|
||||||
#include <my_pthread.h>
|
#include <my_pthread.h>
|
||||||
static pthread_mutex_t THR_LOCK_dbug;
|
static pthread_mutex_t THR_LOCK_dbug;
|
||||||
|
|
||||||
@@ -394,30 +384,6 @@ static CODE_STATE *code_state(void)
|
|||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !THREAD */
|
|
||||||
|
|
||||||
static CODE_STATE static_code_state=
|
|
||||||
{
|
|
||||||
"dbug", "?func", "?file", NULL, &init_settings,
|
|
||||||
NullS, NullS, 0,0,0,0,0,NullS
|
|
||||||
};
|
|
||||||
|
|
||||||
static CODE_STATE *code_state(void)
|
|
||||||
{
|
|
||||||
if (!init_done)
|
|
||||||
{
|
|
||||||
bzero(&init_settings, sizeof(init_settings));
|
|
||||||
init_settings.out_file=stderr;
|
|
||||||
init_settings.flags=OPEN_APPEND;
|
|
||||||
init_done=TRUE;
|
|
||||||
}
|
|
||||||
return &static_code_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define pthread_mutex_lock(A) {}
|
|
||||||
#define pthread_mutex_unlock(A) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Translate some calls among different systems.
|
* Translate some calls among different systems.
|
||||||
*/
|
*/
|
||||||
@@ -601,15 +567,6 @@ int DbugParse(CODE_STATE *cs, const char *control)
|
|||||||
else
|
else
|
||||||
stack->flags |= PID_ON;
|
stack->flags |= PID_ON;
|
||||||
break;
|
break;
|
||||||
#ifndef THREAD
|
|
||||||
case 'g':
|
|
||||||
if (OpenProfile(cs, PROF_FILE))
|
|
||||||
{
|
|
||||||
stack->flags |= PROFILE_ON;
|
|
||||||
stack->p_functions= ListAdd(stack->p_functions, control, end);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case 'L':
|
case 'L':
|
||||||
if (sign < 0)
|
if (sign < 0)
|
||||||
stack->flags &= ~LINE_ON;
|
stack->flags &= ~LINE_ON;
|
||||||
@@ -1154,23 +1111,7 @@ void _db_enter_(const char *_func_, const char *_file_,
|
|||||||
_stack_frame_->prev= cs->framep;
|
_stack_frame_->prev= cs->framep;
|
||||||
_stack_frame_->level= ++cs->level | framep_trace_flag(cs, cs->framep);
|
_stack_frame_->level= ++cs->level | framep_trace_flag(cs, cs->framep);
|
||||||
cs->framep= _stack_frame_;
|
cs->framep= _stack_frame_;
|
||||||
#ifndef THREAD
|
|
||||||
if (DoProfile(cs))
|
|
||||||
{
|
|
||||||
long stackused;
|
|
||||||
if (cs->framep->prev == NULL)
|
|
||||||
stackused= 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
stackused= (char*)(cs->framep->prev) - (char*)(cs->framep);
|
|
||||||
stackused= stackused > 0 ? stackused : -stackused;
|
|
||||||
}
|
|
||||||
(void) fprintf(cs->stack->prof_file, PROF_EFMT , Clock(), cs->func);
|
|
||||||
(void) fprintf(cs->stack->prof_file, PROF_SFMT, (ulong) cs->framep, stackused,
|
|
||||||
AUTOS_REVERSE ? _stack_frame_->func : cs->func);
|
|
||||||
(void) fflush(cs->stack->prof_file);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
switch (DoTrace(cs)) {
|
switch (DoTrace(cs)) {
|
||||||
case ENABLE_TRACE:
|
case ENABLE_TRACE:
|
||||||
cs->framep->level|= TRACE_ON;
|
cs->framep->level|= TRACE_ON;
|
||||||
@@ -1229,10 +1170,7 @@ void _db_return_(uint _line_, struct _db_stack_frame_ *_stack_frame_)
|
|||||||
my_snprintf(buf, sizeof(buf), ERR_MISSING_RETURN, cs->func);
|
my_snprintf(buf, sizeof(buf), ERR_MISSING_RETURN, cs->func);
|
||||||
DbugExit(buf);
|
DbugExit(buf);
|
||||||
}
|
}
|
||||||
#ifndef THREAD
|
|
||||||
if (DoProfile(cs))
|
|
||||||
(void) fprintf(cs->stack->prof_file, PROF_XFMT, Clock(), cs->func);
|
|
||||||
#endif
|
|
||||||
if (DoTrace(cs) & DO_TRACE)
|
if (DoTrace(cs) & DO_TRACE)
|
||||||
{
|
{
|
||||||
if (TRACING)
|
if (TRACING)
|
||||||
@@ -1744,36 +1682,6 @@ static int DoTrace(CODE_STATE *cs)
|
|||||||
return DONT_TRACE;
|
return DONT_TRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FUNCTION
|
|
||||||
*
|
|
||||||
* DoProfile check to see if profiling is current enabled
|
|
||||||
*
|
|
||||||
* SYNOPSIS
|
|
||||||
*
|
|
||||||
* static BOOLEAN DoProfile()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Checks to see if profiling is enabled based on whether the
|
|
||||||
* user has specified profiling, the maximum trace depth has
|
|
||||||
* not yet been reached, the current function is selected,
|
|
||||||
* and the current process is selected. Returns TRUE if
|
|
||||||
* profiling is enabled, FALSE otherwise.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
static BOOLEAN DoProfile(CODE_STATE *cs)
|
|
||||||
{
|
|
||||||
return PROFILING &&
|
|
||||||
cs->level <= cs->stack->maxdepth &&
|
|
||||||
InList(cs->stack->p_functions, cs->func) & (INCLUDE|MATCHED) &&
|
|
||||||
InList(cs->stack->processes, cs->process) & (INCLUDE|MATCHED);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
FILE *_db_fp_(void)
|
FILE *_db_fp_(void)
|
||||||
{
|
{
|
||||||
CODE_STATE *cs;
|
CODE_STATE *cs;
|
||||||
@@ -1900,11 +1808,7 @@ static void DoPrefix(CODE_STATE *cs, uint _line_)
|
|||||||
cs->lineno++;
|
cs->lineno++;
|
||||||
if (cs->stack->flags & PID_ON)
|
if (cs->stack->flags & PID_ON)
|
||||||
{
|
{
|
||||||
#ifdef THREAD
|
|
||||||
(void) fprintf(cs->stack->out_file, "%-7s: ", my_thread_name());
|
(void) fprintf(cs->stack->out_file, "%-7s: ", my_thread_name());
|
||||||
#else
|
|
||||||
(void) fprintf(cs->stack->out_file, "%5d: ", (int) getpid());
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
if (cs->stack->flags & NUMBER_ON)
|
if (cs->stack->flags & NUMBER_ON)
|
||||||
(void) fprintf(cs->stack->out_file, "%5d: ", cs->lineno);
|
(void) fprintf(cs->stack->out_file, "%5d: ", cs->lineno);
|
||||||
@@ -2014,63 +1918,6 @@ static void DBUGOpenFile(CODE_STATE *cs,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FUNCTION
|
|
||||||
*
|
|
||||||
* OpenProfile open new output stream for profiler output
|
|
||||||
*
|
|
||||||
* SYNOPSIS
|
|
||||||
*
|
|
||||||
* static FILE *OpenProfile(name)
|
|
||||||
* char *name;
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Given name of a new file, opens the file
|
|
||||||
* and sets the profiler output stream to the new file.
|
|
||||||
*
|
|
||||||
* It is currently unclear whether the prefered behavior is
|
|
||||||
* to truncate any existing file, or simply append to it.
|
|
||||||
* The latter behavior would be desirable for collecting
|
|
||||||
* accumulated runtime history over a number of separate
|
|
||||||
* runs. It might take some changes to the analyzer program
|
|
||||||
* though, and the notes that Binayak sent with the profiling
|
|
||||||
* diffs indicated that append was the normal mode, but this
|
|
||||||
* does not appear to agree with the actual code. I haven't
|
|
||||||
* investigated at this time [fnf; 24-Jul-87].
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
static FILE *OpenProfile(CODE_STATE *cs, const char *name)
|
|
||||||
{
|
|
||||||
REGISTER FILE *fp;
|
|
||||||
REGISTER BOOLEAN newfile;
|
|
||||||
|
|
||||||
fp=0;
|
|
||||||
if (!Writable(name))
|
|
||||||
{
|
|
||||||
(void) fprintf(cs->stack->out_file, ERR_OPEN, cs->process, name);
|
|
||||||
perror("");
|
|
||||||
(void) Delay(cs->stack->delay);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newfile= !EXISTS(name);
|
|
||||||
if (!(fp= fopen(name, "w")))
|
|
||||||
{
|
|
||||||
(void) fprintf(cs->stack->out_file, ERR_OPEN, cs->process, name);
|
|
||||||
perror("");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cs->stack->prof_file= fp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION
|
* FUNCTION
|
||||||
*
|
*
|
||||||
@@ -2419,80 +2266,6 @@ const char* _db_get_func_(void)
|
|||||||
return cs->func;
|
return cs->func;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Here we need the definitions of the clock routine. Add your
|
|
||||||
* own for whatever system that you have.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
#if defined(HAVE_GETRUSAGE)
|
|
||||||
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/resource.h>
|
|
||||||
|
|
||||||
/* extern int getrusage(int, struct rusage *); */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the user time in milliseconds used by this process so
|
|
||||||
* far.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static unsigned long Clock()
|
|
||||||
{
|
|
||||||
struct rusage ru;
|
|
||||||
|
|
||||||
(void) getrusage(RUSAGE_SELF, &ru);
|
|
||||||
return ru.ru_utime.tv_sec*1000 + ru.ru_utime.tv_usec/1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(__WIN__)
|
|
||||||
|
|
||||||
static ulong Clock()
|
|
||||||
{
|
|
||||||
return clock()*(1000/CLOCKS_PER_SEC);
|
|
||||||
}
|
|
||||||
#elif defined(amiga)
|
|
||||||
|
|
||||||
struct DateStamp { /* Yes, this is a hack, but doing it right */
|
|
||||||
long ds_Days; /* is incredibly ugly without splitting this */
|
|
||||||
long ds_Minute; /* off into a separate file */
|
|
||||||
long ds_Tick;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int first_clock= TRUE;
|
|
||||||
static struct DateStamp begin;
|
|
||||||
static struct DateStamp elapsed;
|
|
||||||
|
|
||||||
static unsigned long Clock()
|
|
||||||
{
|
|
||||||
register struct DateStamp *now;
|
|
||||||
register unsigned long millisec= 0;
|
|
||||||
extern VOID *AllocMem();
|
|
||||||
|
|
||||||
now= (struct DateStamp *) AllocMem((long) sizeof(struct DateStamp), 0L);
|
|
||||||
if (now != NULL)
|
|
||||||
{
|
|
||||||
if (first_clock == TRUE)
|
|
||||||
{
|
|
||||||
first_clock= FALSE;
|
|
||||||
(void) DateStamp(now);
|
|
||||||
begin= *now;
|
|
||||||
}
|
|
||||||
(void) DateStamp(now);
|
|
||||||
millisec= 24 * 3600 * (1000 / HZ) * (now->ds_Days - begin.ds_Days);
|
|
||||||
millisec += 60 * (1000 / HZ) * (now->ds_Minute - begin.ds_Minute);
|
|
||||||
millisec += (1000 / HZ) * (now->ds_Tick - begin.ds_Tick);
|
|
||||||
(void) FreeMem(now, (long) sizeof(struct DateStamp));
|
|
||||||
}
|
|
||||||
return millisec;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static unsigned long Clock()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* RUSAGE */
|
|
||||||
#endif /* THREADS */
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@@ -571,12 +571,10 @@ int main (int argc, char **argv)
|
|||||||
FILE *infile;
|
FILE *infile;
|
||||||
FILE *outfile = {stdout};
|
FILE *outfile = {stdout};
|
||||||
|
|
||||||
#ifdef THREAD
|
|
||||||
#if defined(HAVE_PTHREAD_INIT)
|
#if defined(HAVE_PTHREAD_INIT)
|
||||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||||
#endif
|
#endif
|
||||||
my_thread_global_init();
|
my_thread_global_init();
|
||||||
#endif /* THREAD */
|
|
||||||
{
|
{
|
||||||
DBUG_ENTER ("main");
|
DBUG_ENTER ("main");
|
||||||
DBUG_PROCESS (argv[0]);
|
DBUG_PROCESS (argv[0]);
|
||||||
|
@@ -16,12 +16,11 @@ char *argv[];
|
|||||||
{
|
{
|
||||||
register int result, ix;
|
register int result, ix;
|
||||||
extern int factorial(int);
|
extern int factorial(int);
|
||||||
#if defined(HAVE_PTHREAD_INIT) && defined(THREAD)
|
#if defined(HAVE_PTHREAD_INIT)
|
||||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||||
#endif
|
#endif
|
||||||
#ifdef THREAD
|
|
||||||
my_thread_global_init();
|
my_thread_global_init();
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
DBUG_ENTER ("main");
|
DBUG_ENTER ("main");
|
||||||
DBUG_PROCESS (argv[0]);
|
DBUG_PROCESS (argv[0]);
|
||||||
|
@@ -44,12 +44,11 @@ int main (int argc, char *argv[])
|
|||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#if defined(HAVE_PTHREAD_INIT) && defined(THREAD)
|
#if defined(HAVE_PTHREAD_INIT)
|
||||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||||
#endif
|
#endif
|
||||||
#ifdef THREAD
|
|
||||||
my_thread_global_init();
|
my_thread_global_init();
|
||||||
#endif
|
|
||||||
dup2(1, 2);
|
dup2(1, 2);
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
|
@@ -193,7 +193,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (argument= arguments+1 ; *argument ; argument++)
|
for (argument= arguments+1 ; *argument ; argument++)
|
||||||
if (*argument != args_separator) /* skip arguments separator */
|
if (!my_getopt_is_args_separator(*argument)) /* skip arguments separator */
|
||||||
puts(*argument);
|
puts(*argument);
|
||||||
my_free(load_default_groups);
|
my_free(load_default_groups);
|
||||||
free_defaults(arguments);
|
free_defaults(arguments);
|
||||||
|
@@ -40,7 +40,6 @@ SET(HEADERS
|
|||||||
my_xml.h
|
my_xml.h
|
||||||
mysql_embed.h
|
mysql_embed.h
|
||||||
my_pthread.h
|
my_pthread.h
|
||||||
my_no_pthread.h
|
|
||||||
decimal.h
|
decimal.h
|
||||||
errmsg.h
|
errmsg.h
|
||||||
my_global.h
|
my_global.h
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
/* Copyright (C) 2000-2004 MySQL AB, 2009 Sun Microsystems, Inc
|
/* Copyright (C) 2000, 2011, Oracle and/or its affiliates. All rights
|
||||||
|
reserved
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -25,10 +26,9 @@ extern "C" {
|
|||||||
#ifndef _my_base_h
|
#ifndef _my_base_h
|
||||||
#include <my_base.h>
|
#include <my_base.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef THREAD
|
|
||||||
#include <my_pthread.h>
|
#include <my_pthread.h>
|
||||||
#include <thr_lock.h>
|
#include <thr_lock.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "my_handler.h"
|
#include "my_handler.h"
|
||||||
#include "my_tree.h"
|
#include "my_tree.h"
|
||||||
@@ -146,10 +146,8 @@ typedef struct st_heap_share
|
|||||||
uint open_count;
|
uint open_count;
|
||||||
uchar *del_link; /* Link to next block with del. rec */
|
uchar *del_link; /* Link to next block with del. rec */
|
||||||
char * name; /* Name of "memory-file" */
|
char * name; /* Name of "memory-file" */
|
||||||
#ifdef THREAD
|
|
||||||
THR_LOCK lock;
|
THR_LOCK lock;
|
||||||
mysql_mutex_t intern_lock; /* Locking for use with _locking */
|
mysql_mutex_t intern_lock; /* Locking for use with _locking */
|
||||||
#endif
|
|
||||||
my_bool delete_on_close;
|
my_bool delete_on_close;
|
||||||
LIST open_list;
|
LIST open_list;
|
||||||
uint auto_key;
|
uint auto_key;
|
||||||
@@ -175,9 +173,7 @@ typedef struct st_heap_info
|
|||||||
TREE_ELEMENT **last_pos;
|
TREE_ELEMENT **last_pos;
|
||||||
uint lastkey_len;
|
uint lastkey_len;
|
||||||
my_bool implicit_emptied;
|
my_bool implicit_emptied;
|
||||||
#ifdef THREAD
|
|
||||||
THR_LOCK_DATA lock;
|
THR_LOCK_DATA lock;
|
||||||
#endif
|
|
||||||
LIST open_list;
|
LIST open_list;
|
||||||
} HP_INFO;
|
} HP_INFO;
|
||||||
|
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (C) 2000, 2011, Oracle and/or its affiliates. All rights
|
||||||
|
reserved
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -30,9 +31,6 @@
|
|||||||
#define EOVERFLOW 84
|
#define EOVERFLOW 84
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(USE_MY_FUNC) && !defined(THREAD)
|
|
||||||
#include <my_nosys.h> /* For faster code, after test */
|
|
||||||
#endif /* USE_MY_FUNC */
|
|
||||||
#endif /* stdin */
|
#endif /* stdin */
|
||||||
#include <my_list.h>
|
#include <my_list.h>
|
||||||
|
|
||||||
|
@@ -33,9 +33,7 @@ typedef struct st_bitmap
|
|||||||
thread_safe flag in bitmap_init was set. Otherwise, we optimize by not
|
thread_safe flag in bitmap_init was set. Otherwise, we optimize by not
|
||||||
acquiring the mutex
|
acquiring the mutex
|
||||||
*/
|
*/
|
||||||
#ifdef THREAD
|
|
||||||
mysql_mutex_t *mutex;
|
mysql_mutex_t *mutex;
|
||||||
#endif
|
|
||||||
} MY_BITMAP;
|
} MY_BITMAP;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -212,13 +212,6 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The client defines this to avoid all thread code */
|
|
||||||
#if defined(MYSQL_CLIENT_NO_THREADS) || defined(UNDEF_THREADS_HACK)
|
|
||||||
#undef THREAD
|
|
||||||
#undef HAVE_LINUXTHREADS
|
|
||||||
#undef HAVE_NPTL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_THREADS_WITHOUT_SOCKETS
|
#ifdef HAVE_THREADS_WITHOUT_SOCKETS
|
||||||
/* MIT pthreads does not work with unix sockets */
|
/* MIT pthreads does not work with unix sockets */
|
||||||
#undef HAVE_SYS_UN_H
|
#undef HAVE_SYS_UN_H
|
||||||
@@ -261,7 +254,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(THREAD) && !defined(__WIN__)
|
#if !defined(__WIN__)
|
||||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */
|
#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */
|
||||||
#endif
|
#endif
|
||||||
@@ -282,7 +275,7 @@ C_MODE_END
|
|||||||
#if !defined(SCO) && !defined(_REENTRANT)
|
#if !defined(SCO) && !defined(_REENTRANT)
|
||||||
#define _REENTRANT 1 /* Threads requires reentrant code */
|
#define _REENTRANT 1 /* Threads requires reentrant code */
|
||||||
#endif
|
#endif
|
||||||
#endif /* THREAD */
|
#endif /* !defined(__WIN__) */
|
||||||
|
|
||||||
/* Go around some bugs in different OS and compilers */
|
/* Go around some bugs in different OS and compilers */
|
||||||
#ifdef _AIX /* By soren@t.dk */
|
#ifdef _AIX /* By soren@t.dk */
|
||||||
@@ -415,7 +408,7 @@ C_MODE_END
|
|||||||
#include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
|
#include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
|
||||||
#define HAVE_ULONG
|
#define HAVE_ULONG
|
||||||
#endif
|
#endif
|
||||||
#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) && defined(THREAD)
|
#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE)
|
||||||
/* Fix bug in setrlimit */
|
/* Fix bug in setrlimit */
|
||||||
#undef setrlimit
|
#undef setrlimit
|
||||||
#define setrlimit cma_setrlimit64
|
#define setrlimit cma_setrlimit64
|
||||||
@@ -1342,17 +1335,6 @@ do { doubleget_union _tmp; \
|
|||||||
|
|
||||||
#endif /* WORDS_BIGENDIAN */
|
#endif /* WORDS_BIGENDIAN */
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
#define thread_safe_increment(V,L) (V)++
|
|
||||||
#define thread_safe_decrement(V,L) (V)--
|
|
||||||
#define thread_safe_add(V,C,L) (V)+=(C)
|
|
||||||
#define thread_safe_sub(V,C,L) (V)-=(C)
|
|
||||||
#define statistic_increment(V,L) (V)++
|
|
||||||
#define statistic_decrement(V,L) (V)--
|
|
||||||
#define statistic_add(V,C,L) (V)+=(C)
|
|
||||||
#define statistic_sub(V,C,L) (V)-=(C)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_utf8
|
#ifdef HAVE_CHARSET_utf8
|
||||||
#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8"
|
#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8"
|
||||||
#else
|
#else
|
||||||
|
@@ -1,72 +0,0 @@
|
|||||||
#ifndef MY_NO_PTHREAD_INCLUDED
|
|
||||||
#define MY_NO_PTHREAD_INCLUDED
|
|
||||||
|
|
||||||
/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, 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
|
|
||||||
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
|
|
||||||
/*
|
|
||||||
This block is to access some thread-related type definitions
|
|
||||||
even in builds which do not need thread functions,
|
|
||||||
as some variables (based on these types) are declared
|
|
||||||
even in non-threaded builds.
|
|
||||||
Case in point: 'mf_keycache.c'
|
|
||||||
*/
|
|
||||||
#if defined(__WIN__)
|
|
||||||
#else /* Normal threads */
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
#endif /* defined(__WIN__) */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
This undefs some pthread mutex locks when one isn't using threads
|
|
||||||
to make thread safe code, that should also work in single thread
|
|
||||||
environment, easier to use.
|
|
||||||
*/
|
|
||||||
#define pthread_mutex_init(A,B)
|
|
||||||
#define pthread_mutex_lock(A)
|
|
||||||
#define pthread_mutex_unlock(A)
|
|
||||||
#define pthread_mutex_destroy(A)
|
|
||||||
#define my_rwlock_init(A,B)
|
|
||||||
#define rw_rdlock(A)
|
|
||||||
#define rw_wrlock(A)
|
|
||||||
#define rw_unlock(A)
|
|
||||||
#define rwlock_destroy(A)
|
|
||||||
#define safe_mutex_assert_owner(mp)
|
|
||||||
|
|
||||||
#define mysql_mutex_init(A, B, C) do {} while (0)
|
|
||||||
#define mysql_mutex_lock(A) do {} while (0)
|
|
||||||
#define mysql_mutex_unlock(A) do {} while (0)
|
|
||||||
#define mysql_mutex_destroy(A) do {} while (0)
|
|
||||||
|
|
||||||
#define mysql_rwlock_init(A, B, C) do {} while (0)
|
|
||||||
#define mysql_rwlock_rdlock(A) do {} while (0)
|
|
||||||
#define mysql_rwlock_wrlock(A) do {} while (0)
|
|
||||||
#define mysql_rwlock_unlock(A) do {} while (0)
|
|
||||||
#define mysql_rwlock_destroy(A) do {} while (0)
|
|
||||||
|
|
||||||
typedef int my_pthread_once_t;
|
|
||||||
#define MY_PTHREAD_ONCE_INIT 0
|
|
||||||
#define MY_PTHREAD_ONCE_DONE 1
|
|
||||||
|
|
||||||
#define my_pthread_once(C,F) do { \
|
|
||||||
if (*(C) != MY_PTHREAD_ONCE_DONE) { F(); *(C)= MY_PTHREAD_ONCE_DONE; } \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif /* MY_NO_PTHREAD_INCLUDED */
|
|
@@ -881,12 +881,6 @@ extern uint thd_lib_detected;
|
|||||||
to use my_atomic operations instead.
|
to use my_atomic operations instead.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
Warning:
|
|
||||||
When compiling without threads, this file is not included.
|
|
||||||
See the *other* declarations of thread_safe_xxx in include/my_global.h
|
|
||||||
*/
|
|
||||||
#ifdef THREAD
|
|
||||||
#ifndef thread_safe_increment
|
#ifndef thread_safe_increment
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V))
|
#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V))
|
||||||
@@ -910,7 +904,7 @@ extern uint thd_lib_detected;
|
|||||||
(mysql_mutex_lock((L)), (V)-=(C), mysql_mutex_unlock((L)))
|
(mysql_mutex_lock((L)), (V)-=(C), mysql_mutex_unlock((L)))
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
statistics_xxx functions are for non critical statistic,
|
statistics_xxx functions are for non critical statistic,
|
||||||
|
@@ -41,11 +41,7 @@ typedef struct my_aio_result {
|
|||||||
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
||||||
#endif /* HAVE_VALGRIND */
|
#endif /* HAVE_VALGRIND */
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
extern int my_errno; /* Last error in mysys */
|
|
||||||
#else
|
|
||||||
#include <my_pthread.h>
|
#include <my_pthread.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <m_ctype.h> /* for CHARSET_INFO */
|
#include <m_ctype.h> /* for CHARSET_INFO */
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -314,7 +310,7 @@ struct st_my_file_info
|
|||||||
int oflag; /* open flags, e.g O_APPEND */
|
int oflag; /* open flags, e.g O_APPEND */
|
||||||
#endif
|
#endif
|
||||||
enum file_type type;
|
enum file_type type;
|
||||||
#if defined(THREAD) && !defined(HAVE_PREAD) && !defined(_WIN32)
|
#if !defined(HAVE_PREAD) && !defined(_WIN32)
|
||||||
mysql_mutex_t mutex;
|
mysql_mutex_t mutex;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@@ -334,9 +330,7 @@ typedef struct st_my_tmpdir
|
|||||||
DYNAMIC_ARRAY full_list;
|
DYNAMIC_ARRAY full_list;
|
||||||
char **list;
|
char **list;
|
||||||
uint cur, max;
|
uint cur, max;
|
||||||
#ifdef THREAD
|
|
||||||
mysql_mutex_t mutex;
|
mysql_mutex_t mutex;
|
||||||
#endif
|
|
||||||
} MY_TMPDIR;
|
} MY_TMPDIR;
|
||||||
|
|
||||||
typedef struct st_dynamic_string
|
typedef struct st_dynamic_string
|
||||||
@@ -348,7 +342,6 @@ typedef struct st_dynamic_string
|
|||||||
struct st_io_cache;
|
struct st_io_cache;
|
||||||
typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*);
|
typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*);
|
||||||
|
|
||||||
#ifdef THREAD
|
|
||||||
typedef struct st_io_cache_share
|
typedef struct st_io_cache_share
|
||||||
{
|
{
|
||||||
mysql_mutex_t mutex; /* To sync on reads into buffer. */
|
mysql_mutex_t mutex; /* To sync on reads into buffer. */
|
||||||
@@ -368,7 +361,6 @@ typedef struct st_io_cache_share
|
|||||||
my_bool alloced;
|
my_bool alloced;
|
||||||
#endif
|
#endif
|
||||||
} IO_CACHE_SHARE;
|
} IO_CACHE_SHARE;
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct st_io_cache /* Used when cacheing files */
|
typedef struct st_io_cache /* Used when cacheing files */
|
||||||
{
|
{
|
||||||
@@ -409,7 +401,7 @@ typedef struct st_io_cache /* Used when cacheing files */
|
|||||||
WRITE_CACHE, and &read_pos and &read_end respectively otherwise
|
WRITE_CACHE, and &read_pos and &read_end respectively otherwise
|
||||||
*/
|
*/
|
||||||
uchar **current_pos, **current_end;
|
uchar **current_pos, **current_end;
|
||||||
#ifdef THREAD
|
|
||||||
/*
|
/*
|
||||||
The lock is for append buffer used in SEQ_READ_APPEND cache
|
The lock is for append buffer used in SEQ_READ_APPEND cache
|
||||||
need mutex copying from append buffer to read buffer.
|
need mutex copying from append buffer to read buffer.
|
||||||
@@ -423,7 +415,7 @@ typedef struct st_io_cache /* Used when cacheing files */
|
|||||||
READ_CACHE mode is supported.
|
READ_CACHE mode is supported.
|
||||||
*/
|
*/
|
||||||
IO_CACHE_SHARE *share;
|
IO_CACHE_SHARE *share;
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
A caller will use my_b_read() macro to read from the cache
|
A caller will use my_b_read() macro to read from the cache
|
||||||
if the data is already in cache, it will be simply copied with
|
if the data is already in cache, it will be simply copied with
|
||||||
@@ -631,6 +623,7 @@ extern const char** get_global_errmsgs();
|
|||||||
extern void wait_for_free_space(const char *filename, int errors);
|
extern void wait_for_free_space(const char *filename, int errors);
|
||||||
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
|
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
|
||||||
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
|
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
|
||||||
|
extern FILE *my_freopen(const char *path, const char *mode, FILE *stream);
|
||||||
extern int my_fclose(FILE *fd,myf MyFlags);
|
extern int my_fclose(FILE *fd,myf MyFlags);
|
||||||
extern File my_fileno(FILE *fd);
|
extern File my_fileno(FILE *fd);
|
||||||
extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
|
extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
|
||||||
@@ -655,14 +648,6 @@ extern int my_redel(const char *from, const char *to, int MyFlags);
|
|||||||
extern int my_copystat(const char *from, const char *to, int MyFlags);
|
extern int my_copystat(const char *from, const char *to, int MyFlags);
|
||||||
extern char * my_filename(File fd);
|
extern char * my_filename(File fd);
|
||||||
|
|
||||||
#ifndef THREAD
|
|
||||||
extern void dont_break(void);
|
|
||||||
extern void allow_break(void);
|
|
||||||
#else
|
|
||||||
#define dont_break()
|
|
||||||
#define allow_break()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EXTRA_DEBUG
|
#ifdef EXTRA_DEBUG
|
||||||
void my_print_open_files(void);
|
void my_print_open_files(void);
|
||||||
#else
|
#else
|
||||||
@@ -735,12 +720,10 @@ extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
|
|||||||
pbool clear_cache);
|
pbool clear_cache);
|
||||||
extern void setup_io_cache(IO_CACHE* info);
|
extern void setup_io_cache(IO_CACHE* info);
|
||||||
extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
||||||
#ifdef THREAD
|
|
||||||
extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count);
|
extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count);
|
||||||
extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare,
|
extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare,
|
||||||
IO_CACHE *write_cache, uint num_threads);
|
IO_CACHE *write_cache, uint num_threads);
|
||||||
extern void remove_io_thread(IO_CACHE *info);
|
extern void remove_io_thread(IO_CACHE *info);
|
||||||
#endif
|
|
||||||
extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
||||||
extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count);
|
||||||
extern int _my_b_get(IO_CACHE *info);
|
extern int _my_b_get(IO_CACHE *info);
|
||||||
@@ -834,7 +817,8 @@ extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len);
|
|||||||
extern int get_defaults_options(int argc, char **argv,
|
extern int get_defaults_options(int argc, char **argv,
|
||||||
char **defaults, char **extra_defaults,
|
char **defaults, char **extra_defaults,
|
||||||
char **group_suffix);
|
char **group_suffix);
|
||||||
extern const char *args_separator;
|
extern my_bool my_getopt_use_args_separator;
|
||||||
|
extern my_bool my_getopt_is_args_separator(const char* arg);
|
||||||
extern int my_load_defaults(const char *conf_file, const char **groups,
|
extern int my_load_defaults(const char *conf_file, const char **groups,
|
||||||
int *argc, char ***argv, const char ***);
|
int *argc, char ***argv, const char ***);
|
||||||
extern int load_defaults(const char *conf_file, const char **groups,
|
extern int load_defaults(const char *conf_file, const char **groups,
|
||||||
|
@@ -433,10 +433,8 @@ typedef struct st_mi_check_param
|
|||||||
const char *db_name, *table_name;
|
const char *db_name, *table_name;
|
||||||
const char *op_name;
|
const char *op_name;
|
||||||
enum_mi_stats_method stats_method;
|
enum_mi_stats_method stats_method;
|
||||||
#ifdef THREAD
|
|
||||||
mysql_mutex_t print_msg_mutex;
|
mysql_mutex_t print_msg_mutex;
|
||||||
my_bool need_print_msg_lock;
|
my_bool need_print_msg_lock;
|
||||||
#endif
|
|
||||||
} MI_CHECK;
|
} MI_CHECK;
|
||||||
|
|
||||||
typedef struct st_sort_ft_buf
|
typedef struct st_sort_ft_buf
|
||||||
@@ -460,10 +458,8 @@ typedef struct st_sort_info
|
|||||||
SORT_FT_BUF *ft_buf;
|
SORT_FT_BUF *ft_buf;
|
||||||
/* sync things */
|
/* sync things */
|
||||||
uint got_error, threads_running;
|
uint got_error, threads_running;
|
||||||
#ifdef THREAD
|
|
||||||
mysql_mutex_t mutex;
|
mysql_mutex_t mutex;
|
||||||
mysql_cond_t cond;
|
mysql_cond_t cond;
|
||||||
#endif
|
|
||||||
} SORT_INFO;
|
} SORT_INFO;
|
||||||
|
|
||||||
/* functions in mi_check */
|
/* functions in mi_check */
|
||||||
|
@@ -41,7 +41,7 @@ typedef struct st_alarm_info
|
|||||||
|
|
||||||
void thr_alarm_info(ALARM_INFO *info);
|
void thr_alarm_info(ALARM_INFO *info);
|
||||||
|
|
||||||
#if defined(DONT_USE_THR_ALARM) || !defined(THREAD)
|
#if defined(DONT_USE_THR_ALARM)
|
||||||
|
|
||||||
#define USE_ALARM_THREAD
|
#define USE_ALARM_THREAD
|
||||||
#undef USE_ONE_SIGNAL_HAND
|
#undef USE_ONE_SIGNAL_HAND
|
||||||
|
@@ -35,21 +35,6 @@ sig_handler my_pipe_sig_handler(int sig);
|
|||||||
void read_user_name(char *name);
|
void read_user_name(char *name);
|
||||||
my_bool handle_local_infile(MYSQL *mysql, const char *net_filename);
|
my_bool handle_local_infile(MYSQL *mysql, const char *net_filename);
|
||||||
|
|
||||||
/*
|
|
||||||
Let the user specify that we don't want SIGPIPE; This doesn't however work
|
|
||||||
with threaded applications as we can have multiple read in progress.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(__WIN__) && defined(SIGPIPE) && !defined(THREAD)
|
|
||||||
#define init_sigpipe_variables sig_return old_signal_handler=(sig_return) 0;
|
|
||||||
#define set_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) old_signal_handler=signal(SIGPIPE, my_pipe_sig_handler)
|
|
||||||
#define reset_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) signal(SIGPIPE,old_signal_handler);
|
|
||||||
#else
|
|
||||||
#define init_sigpipe_variables
|
|
||||||
#define set_sigpipe(mysql)
|
|
||||||
#define reset_sigpipe(mysql)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void mysql_read_default_options(struct st_mysql_options *options,
|
void mysql_read_default_options(struct st_mysql_options *options,
|
||||||
const char *filename,const char *group);
|
const char *filename,const char *group);
|
||||||
void mysql_detach_stmt_list(LIST **stmt_list, const char *func_name);
|
void mysql_detach_stmt_list(LIST **stmt_list, const char *func_name);
|
||||||
|
@@ -51,7 +51,7 @@
|
|||||||
#ifdef HAVE_SYS_UN_H
|
#ifdef HAVE_SYS_UN_H
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(THREAD) && !defined(__WIN__)
|
#if !defined(__WIN__)
|
||||||
#include <my_pthread.h> /* because of signal() */
|
#include <my_pthread.h> /* because of signal() */
|
||||||
#endif
|
#endif
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
@@ -172,10 +172,8 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
|
|||||||
result= init_embedded_server(argc, argv, groups);
|
result= init_embedded_server(argc, argv, groups);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef THREAD
|
|
||||||
else
|
else
|
||||||
result= (int)my_thread_init(); /* Init if new thread */
|
result= (int)my_thread_init(); /* Init if new thread */
|
||||||
#endif
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,18 +227,12 @@ MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void)
|
|||||||
|
|
||||||
my_bool STDCALL mysql_thread_init()
|
my_bool STDCALL mysql_thread_init()
|
||||||
{
|
{
|
||||||
#ifdef THREAD
|
|
||||||
return my_thread_init();
|
return my_thread_init();
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void STDCALL mysql_thread_end()
|
void STDCALL mysql_thread_end()
|
||||||
{
|
{
|
||||||
#ifdef THREAD
|
|
||||||
my_thread_end();
|
my_thread_end();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1092,11 +1084,7 @@ void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo)
|
|||||||
|
|
||||||
uint STDCALL mysql_thread_safe(void)
|
uint STDCALL mysql_thread_safe(void)
|
||||||
{
|
{
|
||||||
#ifdef THREAD
|
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -15,9 +15,13 @@ The syntax is as follows:
|
|||||||
and any subsequent characters are ignored.
|
and any subsequent characters are ignored.
|
||||||
|
|
||||||
4) The full test case name including the suite and execution mode
|
4) The full test case name including the suite and execution mode
|
||||||
must be specified, for example:
|
may be specified, for example:
|
||||||
main.alias 'row' # bug#00000
|
main.alias 'row' # bug#00000
|
||||||
|
|
||||||
|
4b) Now, combinations will also be covered if only the test name is
|
||||||
|
specified, for example:
|
||||||
|
rpl.rpl_ps # Covers 'row', 'mix' and 'stmt'
|
||||||
|
|
||||||
5) As an exception to item 4, the last character of the test case
|
5) As an exception to item 4, the last character of the test case
|
||||||
specification may be an asterisk (*). In that case, all test cases that
|
specification may be an asterisk (*). In that case, all test cases that
|
||||||
start with the same characters up to the last letter before the asterisk
|
start with the same characters up to the last letter before the asterisk
|
||||||
|
@@ -10,12 +10,8 @@ innodb.innodb_information_schema # Bug#48883 2010-05-11 alik Test "innod
|
|||||||
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
||||||
main.gis # Bug#52208 2010-11-24 alik gis fails on some platforms (Solaris, HP-UX, Linux)
|
main.gis # Bug#52208 2010-11-24 alik gis fails on some platforms (Solaris, HP-UX, Linux)
|
||||||
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||||
main.information_schema # Bug#47449 2009-09-19 alik main.information_schema and innodb.innodb_information_schema fail sporadically
|
|
||||||
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
||||||
main.lock_multi_bug38691 @solaris # Bug#47792 2009-10-02 alik main.lock_multi_bug38691 times out sporadically on Solaris 10
|
|
||||||
main.lowercase_table2 @darwin # Bug#55509 2010-07-26 alik main.lowercase_table2 fails on Mac OSX (again)
|
|
||||||
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
||||||
main.show_check # Bug#58414 2010-11-24 alik Race condition in show_check.test
|
|
||||||
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
main.type_float @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
main.type_float @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||||
@@ -23,7 +19,7 @@ main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeou
|
|||||||
|
|
||||||
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
||||||
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
||||||
rpl.rpl_innodb_bug28430* # Bug#46029
|
rpl.rpl_innodb_bug28430 # Bug#46029
|
||||||
|
|
||||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
sys_vars.plugin_dir_basic # Bug#52223 2010-11-24 alik Test "plugin_dir_basic" does not support RPM build (test) directory structure
|
sys_vars.plugin_dir_basic # Bug#52223 2010-11-24 alik Test "plugin_dir_basic" does not support RPM build (test) directory structure
|
||||||
|
17
mysql-test/extra/rpl_tests/rpl_show_binlog_events.inc
Normal file
17
mysql-test/extra/rpl_tests/rpl_show_binlog_events.inc
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Include file for rpl_show_relaylog_events.inc
|
||||||
|
|
||||||
|
--let $log_type= BINLOG
|
||||||
|
if ($is_relay_log) {
|
||||||
|
--let $log_type= RELAYLOG
|
||||||
|
}
|
||||||
|
--let $args=
|
||||||
|
if ($binlog_file != '') {
|
||||||
|
--let $args= IN <FILE>
|
||||||
|
}
|
||||||
|
if ($binlog_limit) {
|
||||||
|
--let $args= $args LIMIT $binlog_limit
|
||||||
|
}
|
||||||
|
--echo ******** [$CURRENT_CONNECTION] SHOW $log_type EVENTS $args ********
|
||||||
|
--source include/show_events.inc
|
||||||
|
|
||||||
|
|
@@ -0,0 +1,11 @@
|
|||||||
|
# Include file for rpl_show_log_events.inc
|
||||||
|
|
||||||
|
--let $binlog_limit=
|
||||||
|
--source extra/rpl_tests/rpl_show_binlog_events.inc
|
||||||
|
--let $binlog_limit= 1
|
||||||
|
--source extra/rpl_tests/rpl_show_binlog_events.inc
|
||||||
|
--let $binlog_limit= 1,3
|
||||||
|
--source extra/rpl_tests/rpl_show_binlog_events.inc
|
||||||
|
--let $binlog_limit=
|
||||||
|
--let $binlog_file=
|
||||||
|
--source extra/rpl_tests/rpl_show_binlog_events.inc
|
@@ -1,103 +1,62 @@
|
|||||||
|
-- connection master
|
||||||
|
-- source include/rpl_reset.inc
|
||||||
|
|
||||||
-- connection master
|
-- connection master
|
||||||
|
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT);
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
INSERT INTO t1 VALUES (2);
|
INSERT INTO t1 VALUES (2);
|
||||||
INSERT INTO t1 VALUES (3);
|
INSERT INTO t1 VALUES (3);
|
||||||
INSERT INTO t1 VALUES (4);
|
|
||||||
INSERT INTO t1 VALUES (5);
|
|
||||||
INSERT INTO t1 VALUES (6);
|
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
# PART I
|
||||||
-- source include/show_binlog_events.inc
|
#
|
||||||
|
# SHOWs contents of binary logs on the master and both, binary and
|
||||||
|
# relay logs, on the slave.
|
||||||
|
#
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS *********
|
--let $is_relay_log= 0
|
||||||
let $binlog_file= ;
|
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
-- source include/show_binlog_events.inc
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
--sync_slave_with_master
|
||||||
let $binlog_limit= 3;
|
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
-- source include/show_binlog_events.inc
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
--let $is_relay_log= 1
|
||||||
let $binlog_limit= 1,4;
|
--let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1)
|
||||||
-- source include/show_binlog_events.inc
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
# clear show_binlog_event/show_relaylog_events parameters
|
#
|
||||||
let $binlog_limit= ;
|
# PART II
|
||||||
|
#
|
||||||
-- sync_slave_with_master
|
# Although this second part of the test may seem redudant it is
|
||||||
|
# actually needed to assert that SHOW RELAYLOG EVENTS works properly
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
# with respect to the ordering of the relay log in relay-log.index.
|
||||||
-- source include/show_binlog_events.inc
|
#
|
||||||
|
# If no file is specified with "IN" then first relay log file in
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS *********
|
# relay-log.index (ie, the oldest one) should be picked and its
|
||||||
let $binlog_file= ;
|
# contents displayed. The same happens for SHOW BINLOG EVENTS, so we
|
||||||
-- source include/show_binlog_events.inc
|
# show them both. All in all, this is the reason for re-assert after
|
||||||
|
# MASTER and SLAVE's FLUSH LOGS operations.
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
#
|
||||||
let $binlog_limit= 3;
|
|
||||||
-- source include/show_binlog_events.inc
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
|
||||||
let $binlog_limit= 1,4;
|
|
||||||
-- source include/show_binlog_events.inc
|
|
||||||
|
|
||||||
# clear show_binlog_event/show_relaylog_events parameters
|
|
||||||
let $binlog_limit= ;
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
|
||||||
let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS *********
|
|
||||||
let $binlog_file= ;
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT rows *********
|
|
||||||
let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
|
|
||||||
let $binlog_limit= 3;
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT offset,rows *********
|
|
||||||
let $binlog_limit= 1,3;
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
|
|
||||||
|
|
||||||
-- connection master
|
-- connection master
|
||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# clear show_binlog_event/show_relaylog_events parameters
|
--let $is_relay_log= 0
|
||||||
let $binlog_file= ;
|
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
let $binlog_limit= ;
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
--sync_slave_with_master
|
||||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
-- source include/show_binlog_events.inc
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
-- echo [MASTER] ********* SOW BINLOG EVENTS *********
|
--let $is_relay_log= 1
|
||||||
let $binlog_file= ;
|
--let $binlog_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1)
|
||||||
-- source include/show_binlog_events.inc
|
--source extra/rpl_tests/rpl_show_log_events_with_varying_options.inc
|
||||||
|
|
||||||
-- sync_slave_with_master
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
|
||||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
|
||||||
-- source include/show_binlog_events.inc
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS *********
|
|
||||||
let $binlog_file= ;
|
|
||||||
-- source include/show_binlog_events.inc
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS *********
|
|
||||||
let $binlog_file= ;
|
|
||||||
-- source include/show_relaylog_events.inc
|
|
||||||
|
|
||||||
# clear show_binlog_event/show_relaylog_events parameters
|
# clear show_binlog_event/show_relaylog_events parameters
|
||||||
let $binlog_file= ;
|
let $binlog_file= ;
|
||||||
|
41
mysql-test/include/plugin.defs
Normal file
41
mysql-test/include/plugin.defs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Definition file for plugins.
|
||||||
|
#
|
||||||
|
# <lib name> <directory> <variable> [<plugin name>,...]
|
||||||
|
#
|
||||||
|
# The following variables will be set for a plugin, where PLUGVAR
|
||||||
|
# represents the variable name given as the 3rd item
|
||||||
|
#
|
||||||
|
# PLUGVAR: name of plugin file including extension .so or .dll
|
||||||
|
# PLUGVAR_DIR: name of directory where plugin was found
|
||||||
|
# PLUGVAR_OPT: mysqld option --plugin_dir=....
|
||||||
|
# PLUGVAR_LOAD: option --plugin_load=.... if the 4th element is present
|
||||||
|
#
|
||||||
|
# If a listed plugin is not found, the corresponding variables will be
|
||||||
|
# set to empty, they will not be unset.
|
||||||
|
#
|
||||||
|
# The PLUGVAR variable is not quoted, so you must remember to quote it
|
||||||
|
# when using it in an INSTALL PLUGIN command.
|
||||||
|
#
|
||||||
|
# The envorinment variables can be used in tests. If adding a new plugin,
|
||||||
|
# you are free to pick your variable name, but please keep it upper
|
||||||
|
# case for consistency.
|
||||||
|
#
|
||||||
|
# The _LOAD variable will have a form
|
||||||
|
#
|
||||||
|
# --plugin_load=<name1>=<lib_name>;<name2>=<lib_name>.....
|
||||||
|
#
|
||||||
|
# with name1, name2 etc from the comma separated list of plugin names
|
||||||
|
# in the optional 4th argument.
|
||||||
|
|
||||||
|
auth_test_plugin plugin/auth PLUGIN_AUTH test_plugin_server
|
||||||
|
qa_auth_interface plugin/auth PLUGIN_AUTH_INTERFACE qa_auth_interface
|
||||||
|
qa_auth_server plugin/auth PLUGIN_AUTH_SERVER qa_auth_server
|
||||||
|
qa_auth_client plugin/auth PLUGIN_AUTH_CLIENT qa_auth_client
|
||||||
|
udf_example sql UDF_EXAMPLE_LIB
|
||||||
|
ha_example storage/example EXAMPLE_PLUGIN EXAMPLE
|
||||||
|
semisync_master plugin/semisync SEMISYNC_MASTER_PLUGIN
|
||||||
|
semisync_slave plugin/semisync SEMISYNC_SLAVE_PLUGIN
|
||||||
|
ha_archive storage/archive ARCHIVE_PLUGIN
|
||||||
|
ha_blackhole storage/blackhole BLACKHOLE_PLUGIN
|
||||||
|
ha_federated storage/federated FEDERATED_PLUGIN
|
||||||
|
mypluglib plugin/fulltext SIMPLE_PARSER
|
43
mysql-test/include/restart_slave_sql.inc
Normal file
43
mysql-test/include/restart_slave_sql.inc
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# ==== Purpose ====
|
||||||
|
#
|
||||||
|
# Provide a earier way to restart SQL thread when you want to stop sql thread
|
||||||
|
# and then start it immediately.
|
||||||
|
#
|
||||||
|
# Sources stop_slave_sql.inc to stop SQL thread on the current connection.
|
||||||
|
# Then issues START SLAVE SQL_THREAD and then waits until
|
||||||
|
# the SQL threads have started, or until a timeout is reached.
|
||||||
|
#
|
||||||
|
# Please use this instead of 'STOP|START SLAVE SQL_THREAD', to reduce the risk of
|
||||||
|
# test case bugs.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# ==== Usage ====
|
||||||
|
#
|
||||||
|
# [--let $slave_timeout= NUMBER]
|
||||||
|
# [--let $rpl_debug= 1]
|
||||||
|
# --source include/restart_slave_sql.inc
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# $slave_timeout
|
||||||
|
# See include/wait_for_slave_param.inc
|
||||||
|
#
|
||||||
|
# $rpl_debug
|
||||||
|
# See include/rpl_init.inc
|
||||||
|
|
||||||
|
|
||||||
|
--let $include_filename= restart_slave.inc
|
||||||
|
--source include/begin_include_file.inc
|
||||||
|
|
||||||
|
|
||||||
|
if (!$rpl_debug)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
source include/stop_slave_sql.inc;
|
||||||
|
START SLAVE SQL_THREAD;
|
||||||
|
source include/wait_for_slave_sql_to_start.inc;
|
||||||
|
|
||||||
|
|
||||||
|
--let $include_filename= restart_slave.inc
|
||||||
|
--source include/end_include_file.inc
|
2
mysql-test/include/rpl_connection_master.inc
Normal file
2
mysql-test/include/rpl_connection_master.inc
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= master;
|
||||||
|
source include/rpl_connection.inc;
|
2
mysql-test/include/rpl_connection_slave.inc
Normal file
2
mysql-test/include/rpl_connection_slave.inc
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= slave;
|
||||||
|
source include/rpl_connection.inc;
|
2
mysql-test/include/rpl_connection_slave1.inc
Normal file
2
mysql-test/include/rpl_connection_slave1.inc
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= slave1;
|
||||||
|
source include/rpl_connection.inc;
|
@@ -74,6 +74,7 @@ let $_fake_relay_index= $_fake_datadir/$_fake_filename.index;
|
|||||||
let $_fake_relay_log_purge= `SELECT @@global.relay_log_purge`;
|
let $_fake_relay_log_purge= `SELECT @@global.relay_log_purge`;
|
||||||
|
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
|
let $_orphan_relay_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
|
||||||
|
|
||||||
# Create relay log file.
|
# Create relay log file.
|
||||||
--copy_file $fake_relay_log $_fake_relay_log
|
--copy_file $fake_relay_log $_fake_relay_log
|
||||||
@@ -102,6 +103,8 @@ RESET SLAVE;
|
|||||||
# Setup replication from existing relay log.
|
# Setup replication from existing relay log.
|
||||||
eval CHANGE MASTER TO MASTER_HOST='dummy.localdomain', RELAY_LOG_FILE='$_fake_filename-fake.000001', RELAY_LOG_POS=4;
|
eval CHANGE MASTER TO MASTER_HOST='dummy.localdomain', RELAY_LOG_FILE='$_fake_filename-fake.000001', RELAY_LOG_POS=4;
|
||||||
|
|
||||||
|
# remove the orphan log file (became spurious)
|
||||||
|
-- remove_file $_fake_datadir/$_orphan_relay_file
|
||||||
|
|
||||||
--let $include_filename= setup_fake_relay_log.inc
|
--let $include_filename= setup_fake_relay_log.inc
|
||||||
--source include/end_include_file.inc
|
--source include/end_include_file.inc
|
||||||
|
@@ -50,8 +50,23 @@ if (!$_status_var_comparsion)
|
|||||||
let $_status_var_comparsion= =;
|
let $_status_var_comparsion= =;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Get type of variable
|
||||||
|
let $_is_number= 0;
|
||||||
|
if (`SELECT '$status_var_value' REGEXP '^[\+\-]*[0-9]+(\.[0-9]+)*\$'`)
|
||||||
|
{
|
||||||
|
let $_is_number= 1;
|
||||||
|
}
|
||||||
|
|
||||||
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
||||||
while (`SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_value')`)
|
|
||||||
|
# Set way of comparing
|
||||||
|
let $_query= SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_value');
|
||||||
|
if ($is_number)
|
||||||
|
{
|
||||||
|
let $_query= SELECT NOT($_show_status_value $_status_var_comparsion $status_var_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (`$_query`)
|
||||||
{
|
{
|
||||||
if (!$_status_timeout_counter)
|
if (!$_status_timeout_counter)
|
||||||
{
|
{
|
||||||
@@ -65,4 +80,9 @@ while (`SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_va
|
|||||||
dec $_status_timeout_counter;
|
dec $_status_timeout_counter;
|
||||||
sleep 0.1;
|
sleep 0.1;
|
||||||
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
||||||
|
let $_query= SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_value');
|
||||||
|
if ($is_number)
|
||||||
|
{
|
||||||
|
let $_query= SELECT NOT($_show_status_value $_status_var_comparsion $status_var_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,20 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
|
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU Library 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
|
||||||
|
# Library 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
|
||||||
|
|
||||||
package My::ConfigFactory;
|
package My::ConfigFactory;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,4 +1,19 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
|
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, 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
|
||||||
|
# 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
|
||||||
|
|
||||||
package My::File::Path;
|
package My::File::Path;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,14 +1,15 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or
|
||||||
# it under the terms of the GNU General Public License as published by
|
# modify it under the terms of the GNU Library General Public
|
||||||
# the Free Software Foundation; version 2 of the License.
|
# 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,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU General Public License for more details.
|
# Library General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2004 MySQL AB
|
/* Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2008 MySQL AB
|
/* Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2004 MySQL AB
|
/* Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2008 MySQL AB
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,4 +1,18 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
|
# Copyright (C) 2008 MySQL AB
|
||||||
|
#
|
||||||
|
# This 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
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -229,8 +229,11 @@ sub collect_test_cases ($$$$) {
|
|||||||
sub split_testname {
|
sub split_testname {
|
||||||
my ($test_name)= @_;
|
my ($test_name)= @_;
|
||||||
|
|
||||||
# Get rid of directory part and split name on .'s
|
# If .test file name is used, get rid of directory part
|
||||||
my @parts= split(/\./, basename($test_name));
|
$test_name= basename($test_name) if $test_name =~ /\.test$/;
|
||||||
|
|
||||||
|
# Now split name on .'s
|
||||||
|
my @parts= split(/\./, $test_name);
|
||||||
|
|
||||||
if (@parts == 1){
|
if (@parts == 1){
|
||||||
# Only testname given, ex: alias
|
# Only testname given, ex: alias
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004, 2006 MySQL AB
|
# Copyright (C) 2004, 2006 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004 MySQL AB
|
# Copyright (C) 2004 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2004-2007 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (C) 2004-2008 MySQL AB
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,15 +1,16 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2004-2006 MySQL AB
|
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or
|
||||||
# it under the terms of the GNU General Public License as published by
|
# modify it under the terms of the GNU Library General Public
|
||||||
# the Free Software Foundation; version 2 of the License.
|
# 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,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU General Public License for more details.
|
# Library General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright 2004-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -129,7 +129,8 @@ sub mtr_report_test ($) {
|
|||||||
# Find out if this test case is an experimental one, so we can treat
|
# Find out if this test case is an experimental one, so we can treat
|
||||||
# the failure as an expected failure instead of a regression.
|
# the failure as an expected failure instead of a regression.
|
||||||
for my $exp ( @$::experimental_test_cases ) {
|
for my $exp ( @$::experimental_test_cases ) {
|
||||||
if ( $exp ne $test_name ) {
|
# Include pattern match for combinations
|
||||||
|
if ( $exp ne $test_name && $test_name !~ /^$exp / ) {
|
||||||
# if the expression is not the name of this test case, but has
|
# if the expression is not the name of this test case, but has
|
||||||
# an asterisk at the end, determine if the characters up to
|
# an asterisk at the end, determine if the characters up to
|
||||||
# but excluding the asterisk are the same
|
# but excluding the asterisk are the same
|
||||||
@@ -395,7 +396,7 @@ sub mtr_report_stats ($$;$) {
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
sub mtr_print_line () {
|
sub mtr_print_line () {
|
||||||
print '-' x 60 . "\n";
|
print '-' x 74 . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -405,13 +406,18 @@ sub mtr_print_thick_line {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub mtr_print_header () {
|
sub mtr_print_header ($) {
|
||||||
|
my ($wid) = @_;
|
||||||
print "\n";
|
print "\n";
|
||||||
printf "TEST";
|
printf "TEST";
|
||||||
print " " x 38;
|
if ($wid) {
|
||||||
|
print " " x 34 . "WORKER ";
|
||||||
|
} else {
|
||||||
|
print " " x 38;
|
||||||
|
}
|
||||||
print "RESULT ";
|
print "RESULT ";
|
||||||
print "TIME (ms)" if $timer;
|
print "TIME (ms) or " if $timer;
|
||||||
print "\n";
|
print "COMMENT\n";
|
||||||
mtr_print_line();
|
mtr_print_line();
|
||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2006 MySQL AB
|
# Copyright (C) 2004-2007 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
# Copyright (C) 2006 MySQL AB
|
# Copyright (C) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
|
||||||
# Copyright (C) 2005, 2006 MySQL AB
|
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Library General Public
|
# modify it under the terms of the GNU Library General Public
|
||||||
@@ -12,10 +12,9 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# Library General Public License for more details.
|
# Library General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Library General Public
|
# You should have received a copy of the GNU General Public License
|
||||||
# License along with this library; if not, write to the Free
|
# along with this program; if not, write to the Free Software
|
||||||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
# MA 02111-1307, USA
|
|
||||||
|
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
# MySQL server stress test system
|
# MySQL server stress test system
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
|
|
||||||
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -131,10 +131,6 @@ my $opt_start_dirty;
|
|||||||
my $opt_start_exit;
|
my $opt_start_exit;
|
||||||
my $start_only;
|
my $start_only;
|
||||||
|
|
||||||
my $auth_interface_fn; # the name of qa_auth_interface plugin
|
|
||||||
my $auth_server_fn; # the name of qa_auth_server plugin
|
|
||||||
my $auth_client_fn; # the name of qa_auth_client plugin
|
|
||||||
my $auth_filename; # the name of the authentication test plugin
|
|
||||||
my $auth_plugin; # the path to the authentication test plugin
|
my $auth_plugin; # the path to the authentication test plugin
|
||||||
|
|
||||||
END {
|
END {
|
||||||
@@ -295,8 +291,10 @@ our $opt_include_ndbcluster= 0;
|
|||||||
our $opt_skip_ndbcluster= 1;
|
our $opt_skip_ndbcluster= 1;
|
||||||
|
|
||||||
my $exe_ndbd;
|
my $exe_ndbd;
|
||||||
|
my $exe_ndbmtd;
|
||||||
my $exe_ndb_mgmd;
|
my $exe_ndb_mgmd;
|
||||||
my $exe_ndb_waiter;
|
my $exe_ndb_waiter;
|
||||||
|
my $exe_ndb_mgm;
|
||||||
|
|
||||||
our $debug_compiled_binaries;
|
our $debug_compiled_binaries;
|
||||||
|
|
||||||
@@ -442,7 +440,7 @@ sub main {
|
|||||||
|
|
||||||
mtr_report();
|
mtr_report();
|
||||||
mtr_print_thick_line();
|
mtr_print_thick_line();
|
||||||
mtr_print_header();
|
mtr_print_header($opt_parallel > 1);
|
||||||
|
|
||||||
mark_time_used('init');
|
mark_time_used('init');
|
||||||
|
|
||||||
@@ -509,8 +507,8 @@ sub run_test_server ($$$) {
|
|||||||
my $num_failed_test= 0; # Number of tests failed so far
|
my $num_failed_test= 0; # Number of tests failed so far
|
||||||
|
|
||||||
# Scheduler variables
|
# Scheduler variables
|
||||||
my $max_ndb= $childs / 2;
|
my $max_ndb= $ENV{MTR_MAX_NDB} || $childs / 2;
|
||||||
$max_ndb = 4 if $max_ndb > 4;
|
$max_ndb = $childs if $max_ndb > $childs;
|
||||||
$max_ndb = 1 if $max_ndb < 1;
|
$max_ndb = 1 if $max_ndb < 1;
|
||||||
my $num_ndb_tests= 0;
|
my $num_ndb_tests= 0;
|
||||||
|
|
||||||
@@ -1124,27 +1122,7 @@ sub command_line_setup {
|
|||||||
"$basedir/sql/share/charsets",
|
"$basedir/sql/share/charsets",
|
||||||
"$basedir/share/charsets");
|
"$basedir/share/charsets");
|
||||||
|
|
||||||
# Look for auth test plugins
|
($auth_plugin)= find_plugin("auth_test_plugin", "plugin/auth");
|
||||||
if (IS_WINDOWS)
|
|
||||||
{
|
|
||||||
$auth_filename = "auth_test_plugin.dll";
|
|
||||||
$auth_interface_fn = "qa_auth_interface.dll";
|
|
||||||
$auth_server_fn = "qa_auth_server.dll";
|
|
||||||
$auth_client_fn = "qa_auth_client.dll";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$auth_filename = "auth_test_plugin.so";
|
|
||||||
$auth_interface_fn = "qa_auth_interface.so";
|
|
||||||
$auth_server_fn = "qa_auth_server.so";
|
|
||||||
$auth_client_fn = "qa_auth_client.so";
|
|
||||||
}
|
|
||||||
$auth_plugin=
|
|
||||||
mtr_file_exists(vs_config_dirs('plugin/auth/',$auth_filename),
|
|
||||||
"$basedir/plugin/auth/.libs/" . $auth_filename,
|
|
||||||
"$basedir/lib/mysql/plugin/" . $auth_filename,
|
|
||||||
"$basedir/lib/plugin/" . $auth_filename);
|
|
||||||
|
|
||||||
|
|
||||||
if (using_extern())
|
if (using_extern())
|
||||||
{
|
{
|
||||||
@@ -1831,16 +1809,42 @@ sub executable_setup () {
|
|||||||
|
|
||||||
if ( ! $opt_skip_ndbcluster )
|
if ( ! $opt_skip_ndbcluster )
|
||||||
{
|
{
|
||||||
|
# Look for single threaded NDB
|
||||||
$exe_ndbd=
|
$exe_ndbd=
|
||||||
my_find_bin($bindir,
|
my_find_bin($bindir,
|
||||||
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
||||||
"ndbd");
|
"ndbd");
|
||||||
|
|
||||||
|
# Look for multi threaded NDB
|
||||||
|
$exe_ndbmtd=
|
||||||
|
my_find_bin($bindir,
|
||||||
|
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
||||||
|
"ndbmtd", NOT_REQUIRED);
|
||||||
|
if ($exe_ndbmtd)
|
||||||
|
{
|
||||||
|
my $mtr_ndbmtd = $ENV{MTR_NDBMTD};
|
||||||
|
if ($mtr_ndbmtd)
|
||||||
|
{
|
||||||
|
mtr_report(" - multi threaded ndbd found, will be used always");
|
||||||
|
$exe_ndbd = $exe_ndbmtd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtr_report(" - multi threaded ndbd found, will be ".
|
||||||
|
"used \"round robin\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$exe_ndb_mgmd=
|
$exe_ndb_mgmd=
|
||||||
my_find_bin($bindir,
|
my_find_bin($bindir,
|
||||||
["storage/ndb/src/mgmsrv", "libexec", "sbin", "bin"],
|
["storage/ndb/src/mgmsrv", "libexec", "sbin", "bin"],
|
||||||
"ndb_mgmd");
|
"ndb_mgmd");
|
||||||
|
|
||||||
|
$exe_ndb_mgm=
|
||||||
|
my_find_bin($bindir,
|
||||||
|
["storage/ndb/src/mgmclient", "bin"],
|
||||||
|
"ndb_mgm");
|
||||||
|
|
||||||
$exe_ndb_waiter=
|
$exe_ndb_waiter=
|
||||||
my_find_bin($bindir,
|
my_find_bin($bindir,
|
||||||
["storage/ndb/tools/", "bin"],
|
["storage/ndb/tools/", "bin"],
|
||||||
@@ -1983,6 +1987,53 @@ sub find_plugin($$)
|
|||||||
return $lib_example_plugin;
|
return $lib_example_plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Read plugin defintions file
|
||||||
|
#
|
||||||
|
|
||||||
|
sub read_plugin_defs($)
|
||||||
|
{
|
||||||
|
my ($defs_file)= @_;
|
||||||
|
|
||||||
|
open(PLUGDEF, '<', $defs_file)
|
||||||
|
or mtr_error("Can't read plugin defintions file $defs_file");
|
||||||
|
|
||||||
|
while (<PLUGDEF>) {
|
||||||
|
next if /^#/;
|
||||||
|
my ($plug_file, $plug_loc, $plug_var, $plug_names)= split;
|
||||||
|
# Allow empty lines
|
||||||
|
next unless $plug_file;
|
||||||
|
mtr_error("Lines in $defs_file must have 3 or 4 items") unless $plug_var;
|
||||||
|
|
||||||
|
my ($plugin)= find_plugin($plug_file, $plug_loc);
|
||||||
|
|
||||||
|
# Set env. variables that tests may use, set to empty if plugin
|
||||||
|
# listed in def. file but not found.
|
||||||
|
|
||||||
|
if ($plugin) {
|
||||||
|
$ENV{$plug_var}= basename($plugin);
|
||||||
|
$ENV{$plug_var.'_DIR'}= dirname($plugin);
|
||||||
|
$ENV{$plug_var.'_OPT'}= "--plugin-dir=".dirname($plugin);
|
||||||
|
if ($plug_names) {
|
||||||
|
my $lib_name= basename($plugin);
|
||||||
|
my $load_var= "--plugin_load=";
|
||||||
|
my $semi= '';
|
||||||
|
foreach my $plug_name (split (',', $plug_names)) {
|
||||||
|
$load_var .= $semi . "$plug_name=$lib_name";
|
||||||
|
$semi= ';';
|
||||||
|
}
|
||||||
|
$ENV{$plug_var.'_LOAD'}= $load_var;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$ENV{$plug_var}= "";
|
||||||
|
$ENV{$plug_var.'_DIR'}= "";
|
||||||
|
$ENV{$plug_var.'_OPT'}= "";
|
||||||
|
$ENV{$plug_var.'_LOAD'}= "" if $plug_names;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close PLUGDEF;
|
||||||
|
}
|
||||||
|
|
||||||
sub environment_setup {
|
sub environment_setup {
|
||||||
|
|
||||||
umask(022);
|
umask(022);
|
||||||
@@ -2019,127 +2070,16 @@ sub environment_setup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Add the path where mysqld will find udf_example.so
|
# Read definitions from include/plugin.defs
|
||||||
|
#
|
||||||
|
# Plugin settings should no longer be added here, instead
|
||||||
|
# place definitions in include/plugin.defs.
|
||||||
|
# See comment in that file for details.
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
my $udf_example_filename;
|
read_plugin_defs("include/plugin.defs");
|
||||||
if (IS_WINDOWS)
|
|
||||||
{
|
|
||||||
$udf_example_filename = "udf_example.dll";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$udf_example_filename = "udf_example.so";
|
|
||||||
}
|
|
||||||
my $lib_udf_example=
|
|
||||||
mtr_file_exists(vs_config_dirs('sql', $udf_example_filename),
|
|
||||||
"$basedir/sql/.libs/$udf_example_filename",);
|
|
||||||
|
|
||||||
if ( $lib_udf_example )
|
# Simplify reference to semisync plugins
|
||||||
{
|
$ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'};
|
||||||
push(@ld_library_paths, dirname($lib_udf_example));
|
|
||||||
}
|
|
||||||
|
|
||||||
$ENV{'UDF_EXAMPLE_LIB'}=
|
|
||||||
($lib_udf_example ? basename($lib_udf_example) : "");
|
|
||||||
$ENV{'UDF_EXAMPLE_LIB_OPT'}= "--plugin-dir=".
|
|
||||||
($lib_udf_example ? dirname($lib_udf_example) : "");
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
# Add the path where mysqld will find the auth test plugin (dialog.so/dll)
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
if ($auth_plugin)
|
|
||||||
{
|
|
||||||
$ENV{'PLUGIN_AUTH'}= basename($auth_plugin);
|
|
||||||
$ENV{'PLUGIN_AUTH_OPT'}= "--plugin-dir=".dirname($auth_plugin);
|
|
||||||
|
|
||||||
$ENV{'PLUGIN_AUTH_LOAD'}="--plugin_load=test_plugin_server=".$auth_filename;
|
|
||||||
$ENV{'PLUGIN_AUTH_INTERFACE'}="--plugin_load=qa_auth_interface=".$auth_interface_fn;
|
|
||||||
$ENV{'PLUGIN_AUTH_SERVER'}="--plugin_load=qa_auth_server=".$auth_server_fn;
|
|
||||||
$ENV{'PLUGIN_AUTH_CLIENT'}="--plugin_load=qa_auth_client=".$auth_client_fn;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$ENV{'PLUGIN_AUTH'}= "";
|
|
||||||
$ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir=";
|
|
||||||
$ENV{'PLUGIN_AUTH_LOAD'}="";
|
|
||||||
$ENV{'PLUGIN_AUTH_INTERFACE'}="";
|
|
||||||
$ENV{'PLUGIN_AUTH_SERVER'}="";
|
|
||||||
$ENV{'PLUGIN_AUTH_CLIENT'}="";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
# Add the path where mysqld will find ha_example.so
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
if ($mysql_version_id >= 50100) {
|
|
||||||
my ($lib_example_plugin) = find_plugin("ha_example", "storage/example");
|
|
||||||
|
|
||||||
if($lib_example_plugin)
|
|
||||||
{
|
|
||||||
$ENV{'EXAMPLE_PLUGIN'}=
|
|
||||||
($lib_example_plugin ? basename($lib_example_plugin) : "");
|
|
||||||
$ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
|
|
||||||
($lib_example_plugin ? dirname($lib_example_plugin) : "");
|
|
||||||
|
|
||||||
$ENV{'HA_EXAMPLE_SO'}="'".basename($lib_example_plugin)."'";
|
|
||||||
$ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".basename($lib_example_plugin);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
# Some ".opt" files use some of these variables, so they must be defined
|
|
||||||
$ENV{'EXAMPLE_PLUGIN'}= "";
|
|
||||||
$ENV{'EXAMPLE_PLUGIN_OPT'}= "";
|
|
||||||
$ENV{'HA_EXAMPLE_SO'}= "";
|
|
||||||
$ENV{'EXAMPLE_PLUGIN_LOAD'}= "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
# Add the path where mysqld will find semisync plugins
|
|
||||||
# --------------------------------------------------------------------------
|
|
||||||
if (!$opt_embedded_server) {
|
|
||||||
|
|
||||||
|
|
||||||
my ($lib_semisync_master_plugin) = find_plugin("semisync_master", "plugin/semisync");
|
|
||||||
my ($lib_semisync_slave_plugin) = find_plugin("semisync_slave", "plugin/semisync");
|
|
||||||
|
|
||||||
|
|
||||||
if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin)
|
|
||||||
{
|
|
||||||
$ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin);
|
|
||||||
$ENV{'SEMISYNC_SLAVE_PLUGIN'}= basename($lib_semisync_slave_plugin);
|
|
||||||
$ENV{'SEMISYNC_PLUGIN_OPT'}= "--plugin-dir=".dirname($lib_semisync_master_plugin);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$ENV{'SEMISYNC_MASTER_PLUGIN'}= "";
|
|
||||||
$ENV{'SEMISYNC_SLAVE_PLUGIN'}= "";
|
|
||||||
$ENV{'SEMISYNC_PLUGIN_OPT'}="--plugin-dir=";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Add the paths where mysqld will find archive/blackhole/federated plugins.
|
|
||||||
# ----------------------------------------------------
|
|
||||||
$ENV{'ARCHIVE_PLUGIN_DIR'} =
|
|
||||||
dirname(find_plugin("ha_archive", "storage/archive"));
|
|
||||||
$ENV{'BLACKHOLE_PLUGIN_DIR'} =
|
|
||||||
dirname(find_plugin("ha_blackhole", "storage/blackhole"));
|
|
||||||
$ENV{'FEDERATED_PLUGIN_DIR'} =
|
|
||||||
dirname(find_plugin("ha_federated", "storage/federated"));
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Add the path where mysqld will find mypluglib.so
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
my ($lib_simple_parser) = find_plugin("mypluglib", "plugin/fulltext");
|
|
||||||
|
|
||||||
$ENV{'MYPLUGLIB_SO'}="'".basename($lib_simple_parser)."'";
|
|
||||||
$ENV{'SIMPLE_PARSER'}=
|
|
||||||
($lib_simple_parser ? basename($lib_simple_parser) : "");
|
|
||||||
$ENV{'SIMPLE_PARSER_OPT'}= "--plugin-dir=".
|
|
||||||
($lib_simple_parser ? dirname($lib_simple_parser) : "");
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Valgrind need to be run with debug libraries otherwise it's almost
|
# Valgrind need to be run with debug libraries otherwise it's almost
|
||||||
@@ -2710,6 +2650,27 @@ sub ndb_mgmd_wait_started($) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ndb_mgmd_stop{
|
||||||
|
my $ndb_mgmd= shift or die "usage: ndb_mgmd_stop(<ndb_mgmd>)";
|
||||||
|
|
||||||
|
my $host=$ndb_mgmd->value('HostName');
|
||||||
|
my $port=$ndb_mgmd->value('PortNumber');
|
||||||
|
mtr_verbose("Stopping cluster '$host:$port'");
|
||||||
|
|
||||||
|
my $args;
|
||||||
|
mtr_init_args(\$args);
|
||||||
|
mtr_add_arg($args, "--ndb-connectstring=%s:%s", $host,$port);
|
||||||
|
mtr_add_arg($args, "-e");
|
||||||
|
mtr_add_arg($args, "shutdown");
|
||||||
|
|
||||||
|
My::SafeProcess->run
|
||||||
|
(
|
||||||
|
name => "ndb_mgm shutdown $host:$port",
|
||||||
|
path => $exe_ndb_mgm,
|
||||||
|
args => \$args,
|
||||||
|
output => "/dev/null",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
sub ndb_mgmd_start ($$) {
|
sub ndb_mgmd_start ($$) {
|
||||||
my ($cluster, $ndb_mgmd)= @_;
|
my ($cluster, $ndb_mgmd)= @_;
|
||||||
@@ -2737,6 +2698,7 @@ sub ndb_mgmd_start ($$) {
|
|||||||
error => $path_ndb_mgmd_log,
|
error => $path_ndb_mgmd_log,
|
||||||
append => 1,
|
append => 1,
|
||||||
verbose => $opt_verbose,
|
verbose => $opt_verbose,
|
||||||
|
shutdown => sub { ndb_mgmd_stop($ndb_mgmd) },
|
||||||
);
|
);
|
||||||
mtr_verbose("Started $ndb_mgmd->{proc}");
|
mtr_verbose("Started $ndb_mgmd->{proc}");
|
||||||
|
|
||||||
@@ -2752,6 +2714,12 @@ sub ndb_mgmd_start ($$) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ndbd_stop {
|
||||||
|
# Intentionally left empty, ndbd nodes will be shutdown
|
||||||
|
# by sending "shutdown" to ndb_mgmd
|
||||||
|
}
|
||||||
|
|
||||||
|
my $exe_ndbmtd_counter= 0;
|
||||||
|
|
||||||
sub ndbd_start {
|
sub ndbd_start {
|
||||||
my ($cluster, $ndbd)= @_;
|
my ($cluster, $ndbd)= @_;
|
||||||
@@ -2769,17 +2737,24 @@ sub ndbd_start {
|
|||||||
|
|
||||||
# > 5.0 { 'character-sets-dir' => \&fix_charset_dir },
|
# > 5.0 { 'character-sets-dir' => \&fix_charset_dir },
|
||||||
|
|
||||||
|
my $exe= $exe_ndbd;
|
||||||
|
if ($exe_ndbmtd and ($exe_ndbmtd_counter++ % 2) == 0)
|
||||||
|
{
|
||||||
|
# Use ndbmtd every other time
|
||||||
|
$exe= $exe_ndbmtd;
|
||||||
|
}
|
||||||
|
|
||||||
my $path_ndbd_log= "$dir/ndbd.log";
|
my $path_ndbd_log= "$dir/ndbd.log";
|
||||||
my $proc= My::SafeProcess->new
|
my $proc= My::SafeProcess->new
|
||||||
(
|
(
|
||||||
name => $ndbd->after('cluster_config.'),
|
name => $ndbd->after('cluster_config.'),
|
||||||
path => $exe_ndbd,
|
path => $exe,
|
||||||
args => \$args,
|
args => \$args,
|
||||||
output => $path_ndbd_log,
|
output => $path_ndbd_log,
|
||||||
error => $path_ndbd_log,
|
error => $path_ndbd_log,
|
||||||
append => 1,
|
append => 1,
|
||||||
verbose => $opt_verbose,
|
verbose => $opt_verbose,
|
||||||
|
shutdown => sub { ndbd_stop($ndbd) },
|
||||||
);
|
);
|
||||||
mtr_verbose("Started $proc");
|
mtr_verbose("Started $proc");
|
||||||
|
|
||||||
|
@@ -21,9 +21,9 @@ insert into t1 values (1, 2, 'a&b a<b a>b');
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="test">
|
<database name="test">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a&b" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a&b" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
<field Field="a<b" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a<b" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
<field Field="a>b" Type="text" Null="YES" Key="" Extra="" />
|
<field Field="a>b" Type="text" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_data name="t1">
|
<table_data name="t1">
|
||||||
<row>
|
<row>
|
||||||
|
@@ -1684,6 +1684,21 @@ ARMENIAN CAPIT ECH 2
|
|||||||
ARMENIAN CAPIT ZA 2
|
ARMENIAN CAPIT ZA 2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Start of 5.1 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
DO CONVERT(CAST(SUBSTRING_INDEX(FORMAT(1,'1111'), FORMAT('','Zpq'),1)
|
||||||
|
AS BINARY(0)) USING utf8);
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'Zpq'
|
||||||
|
Warning 1292 Truncated incorrect BINARY(0) value: '1.'
|
||||||
|
#
|
||||||
|
# End of 5.1 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# Start of 5.5 tests
|
# Start of 5.5 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@@ -182,4 +182,9 @@ INSERT INTO t2 VALUES (1), (2), (3);
|
|||||||
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
||||||
1
|
1
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#59149 valgrind warnings with "like .. escape .." function
|
||||||
|
#
|
||||||
|
SELECT '' LIKE '1' ESCAPE COUNT(1);
|
||||||
|
ERROR HY000: Incorrect arguments to ESCAPE
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@@ -641,3 +641,18 @@ INSERT INTO t1 (SELECT -pi());
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1265 Data truncated for column 'a' at row 1
|
Warning 1265 Data truncated for column 'a' at row 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #59241 invalid memory read
|
||||||
|
# in do_div_mod with doubly assigned variables
|
||||||
|
#
|
||||||
|
SELECT ((@a:=@b:=1.0) div (@b:=@a:=get_format(datetime, 'usa')));
|
||||||
|
((@a:=@b:=1.0) div (@b:=@a:=get_format(datetime, 'usa')))
|
||||||
|
NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1366 Incorrect decimal value: '' for column '' at row -1
|
||||||
|
#
|
||||||
|
# Bug #59498 div function broken in mysql-trunk
|
||||||
|
#
|
||||||
|
SELECT 1 div null;
|
||||||
|
1 div null
|
||||||
|
NULL
|
||||||
|
@@ -2615,6 +2615,22 @@ CONVERT(('' IN (REVERSE(CAST(('') AS DECIMAL)), '')), CHAR(3))
|
|||||||
1
|
1
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect DECIMAL value: ''
|
Warning 1292 Truncated incorrect DECIMAL value: ''
|
||||||
|
#
|
||||||
|
# Bug#58165: "my_empty_string" gets modified and causes LOAD DATA to fail
|
||||||
|
# and other crashes
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( a TEXT );
|
||||||
|
SELECT 'aaaaaaaaaaaaaa' INTO OUTFILE 'bug58165.txt';
|
||||||
|
SELECT insert( substring_index( 'a', 'a', 'b' ), 1, 0, 'x' );
|
||||||
|
insert( substring_index( 'a', 'a', 'b' ), 1, 0, 'x' )
|
||||||
|
x
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'b'
|
||||||
|
LOAD DATA INFILE 'bug58165.txt' INTO TABLE t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
aaaaaaaaaaaaaa
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
Start of 5.4 tests
|
Start of 5.4 tests
|
||||||
SELECT format(12345678901234567890.123, 3);
|
SELECT format(12345678901234567890.123, 3);
|
||||||
|
@@ -1014,6 +1014,14 @@ SET @a=0x00000000030000000100000000000000000000000000144000000000000014400000000
|
|||||||
SET @a=POLYFROMWKB(@a);
|
SET @a=POLYFROMWKB(@a);
|
||||||
SET @a=0x00000000030000000000000000000000000000000000144000000000000014400000000000001840000000000000184000000000000014400000000000001440;
|
SET @a=0x00000000030000000000000000000000000000000000144000000000000014400000000000001840000000000000184000000000000014400000000000001440;
|
||||||
SET @a=POLYFROMWKB(@a);
|
SET @a=POLYFROMWKB(@a);
|
||||||
|
create table t1(a polygon NOT NULL)engine=myisam;
|
||||||
|
insert into t1 values (geomfromtext("point(0 1)"));
|
||||||
|
insert into t1 values (geomfromtext("point(1 0)"));
|
||||||
|
select * from (select polygon(t1.a) as p from t1 order by t1.a) d;
|
||||||
|
p
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
drop table t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
CREATE TABLE t1(
|
CREATE TABLE t1(
|
||||||
col0 BINARY NOT NULL,
|
col0 BINARY NOT NULL,
|
||||||
|
@@ -66,3 +66,27 @@ SELECT ((@id := id) - id) FROM t2;
|
|||||||
KILL @id;
|
KILL @id;
|
||||||
SET DEBUG_SYNC= "now SIGNAL killed";
|
SET DEBUG_SYNC= "now SIGNAL killed";
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
SET DEBUG_SYNC= "RESET";
|
||||||
|
#
|
||||||
|
# Bug#58933 Assertion `thd- >is_error()' fails on shutdown with ongoing
|
||||||
|
# OPTIMIZE TABLE
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
# Connection con1
|
||||||
|
SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL waiting WAIT_FOR killed';
|
||||||
|
# Sending:
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
# Connection default
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR waiting';
|
||||||
|
KILL QUERY ID;
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL killed';
|
||||||
|
# Connection con1
|
||||||
|
# Reaping: OPTIMIZE TABLE t1
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||||
|
test.t1 optimize status Operation failed
|
||||||
|
# Connection default
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
@@ -1432,4 +1432,74 @@ WHERE t1.f1 = 4 AND t2.f1 IS NOT NULL AND t2.f2 IS NOT NULL
|
|||||||
GROUP BY t2.f1, t2.f2;
|
GROUP BY t2.f1, t2.f2;
|
||||||
f1 f1 f2
|
f1 f1 f2
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug#57034 incorrect OUTER JOIN result when joined on unique key
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY,
|
||||||
|
col_int INT,
|
||||||
|
col_int_unique INT UNIQUE KEY);
|
||||||
|
INSERT INTO t1 VALUES (1,NULL,2), (2,0,0);
|
||||||
|
CREATE TABLE t2 (pk INT PRIMARY KEY,
|
||||||
|
col_int INT,
|
||||||
|
col_int_unique INT UNIQUE KEY);
|
||||||
|
INSERT INTO t2 VALUES (1,0,1), (2,0,2);
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2
|
||||||
|
ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
|
||||||
|
WHERE t1.pk=1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1
|
||||||
|
1 SIMPLE t2 const col_int_unique col_int_unique 5 const 1
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2
|
||||||
|
ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
|
||||||
|
WHERE t1.pk=1;
|
||||||
|
pk col_int col_int_unique pk col_int col_int_unique
|
||||||
|
1 NULL 2 NULL NULL NULL
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug#48046 Server incorrectly processing JOINs on NULL values
|
||||||
|
#
|
||||||
|
CREATE TABLE `BB` (
|
||||||
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time_key` time DEFAULT NULL,
|
||||||
|
`varchar_key` varchar(1) DEFAULT NULL,
|
||||||
|
`varchar_nokey` varchar(1) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`pk`),
|
||||||
|
KEY `time_key` (`time_key`),
|
||||||
|
KEY `varchar_key` (`varchar_key`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO `BB` VALUES (10,'18:27:58',NULL,NULL);
|
||||||
|
SELECT table1.time_key AS field1, table2.pk
|
||||||
|
FROM BB table1 LEFT JOIN BB table2
|
||||||
|
ON table2.varchar_nokey = table1.varchar_key
|
||||||
|
HAVING field1;
|
||||||
|
field1 pk
|
||||||
|
18:27:58 NULL
|
||||||
|
DROP TABLE BB;
|
||||||
|
#
|
||||||
|
# Bug#49600 Server incorrectly processing RIGHT JOIN with
|
||||||
|
# constant WHERE clause and no index
|
||||||
|
#
|
||||||
|
CREATE TABLE `BB` (
|
||||||
|
`col_datetime_key` datetime DEFAULT NULL,
|
||||||
|
`col_varchar_key` varchar(1) DEFAULT NULL,
|
||||||
|
`col_varchar_nokey` varchar(1) DEFAULT NULL,
|
||||||
|
KEY `col_datetime_key` (`col_datetime_key`),
|
||||||
|
KEY `col_varchar_key` (`col_varchar_key`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO `BB` VALUES ('1900-01-01 00:00:00',NULL,NULL);
|
||||||
|
SELECT table1.col_datetime_key
|
||||||
|
FROM BB table1 RIGHT JOIN BB table2
|
||||||
|
ON table2 .col_varchar_nokey = table1.col_varchar_key
|
||||||
|
WHERE 7;
|
||||||
|
col_datetime_key
|
||||||
|
NULL
|
||||||
|
ALTER TABLE BB DISABLE KEYS;
|
||||||
|
SELECT table1.col_datetime_key
|
||||||
|
FROM BB table1 RIGHT JOIN BB table2
|
||||||
|
ON table2 .col_varchar_nokey = table1.col_varchar_key
|
||||||
|
WHERE 7;
|
||||||
|
col_datetime_key
|
||||||
|
NULL
|
||||||
|
DROP TABLE BB;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@@ -2,3 +2,11 @@ mysqld is alive
|
|||||||
mysqladmin: unknown variable 'database=db1'
|
mysqladmin: unknown variable 'database=db1'
|
||||||
Warning: mysqladmin: unknown variable 'loose-database=db2'
|
Warning: mysqladmin: unknown variable 'loose-database=db2'
|
||||||
mysqld is alive
|
mysqld is alive
|
||||||
|
#
|
||||||
|
# Bug#58221 : mysqladmin --sleep=x --count=x keeps looping
|
||||||
|
#
|
||||||
|
# Executing mysqladmin with --sleep=1 and --count=2.
|
||||||
|
# Done.
|
||||||
|
# Displaying the output :
|
||||||
|
mysqld is alive
|
||||||
|
mysqld is alive
|
||||||
|
@@ -36,8 +36,8 @@ c1 LONGTEXT
|
|||||||
#
|
#
|
||||||
# Insert some big rows.
|
# Insert some big rows.
|
||||||
#
|
#
|
||||||
256MB
|
64MB
|
||||||
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 16777216));
|
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 4194304));
|
||||||
affected rows: 1
|
affected rows: 1
|
||||||
32MB
|
32MB
|
||||||
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 2097152));
|
INSERT INTO t1 VALUES (REPEAT('ManyMegaByteBlck', 2097152));
|
||||||
@@ -53,7 +53,7 @@ affected rows: 1
|
|||||||
# Do not display the column value itself, just its length.
|
# Do not display the column value itself, just its length.
|
||||||
#
|
#
|
||||||
SELECT LENGTH(c1) FROM t1;
|
SELECT LENGTH(c1) FROM t1;
|
||||||
LENGTH(c1) 268435456
|
LENGTH(c1) 67108864
|
||||||
LENGTH(c1) 33554432
|
LENGTH(c1) 33554432
|
||||||
LENGTH(c1) 4194304
|
LENGTH(c1) 4194304
|
||||||
LENGTH(c1) 524288
|
LENGTH(c1) 524288
|
||||||
@@ -69,7 +69,7 @@ info: Rows matched: 4 Changed: 4 Warnings: 0
|
|||||||
# Do not display the column value itself, just its length.
|
# Do not display the column value itself, just its length.
|
||||||
#
|
#
|
||||||
SELECT LENGTH(c1) FROM t1;
|
SELECT LENGTH(c1) FROM t1;
|
||||||
LENGTH(c1) 536870912
|
LENGTH(c1) 134217728
|
||||||
LENGTH(c1) 1048576
|
LENGTH(c1) 1048576
|
||||||
LENGTH(c1) 67108864
|
LENGTH(c1) 67108864
|
||||||
LENGTH(c1) 8388608
|
LENGTH(c1) 8388608
|
||||||
|
@@ -20,6 +20,7 @@ The following options may be given as the first argument:
|
|||||||
Offset added to Auto-increment columns. Used when
|
Offset added to Auto-increment columns. Used when
|
||||||
auto-increment-increment != 1
|
auto-increment-increment != 1
|
||||||
--autocommit Set default value for autocommit (0 or 1)
|
--autocommit Set default value for autocommit (0 or 1)
|
||||||
|
(Defaults to on; use --skip-autocommit to disable.)
|
||||||
--automatic-sp-privileges
|
--automatic-sp-privileges
|
||||||
Creating and dropping stored procedures alters ACLs
|
Creating and dropping stored procedures alters ACLs
|
||||||
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
||||||
@@ -732,6 +733,7 @@ abort-slave-event-count 0
|
|||||||
allow-suspicious-udfs FALSE
|
allow-suspicious-udfs FALSE
|
||||||
auto-increment-increment 1
|
auto-increment-increment 1
|
||||||
auto-increment-offset 1
|
auto-increment-offset 1
|
||||||
|
autocommit TRUE
|
||||||
automatic-sp-privileges TRUE
|
automatic-sp-privileges TRUE
|
||||||
back-log 50
|
back-log 50
|
||||||
big-tables FALSE
|
big-tables FALSE
|
||||||
|
@@ -20,6 +20,7 @@ The following options may be given as the first argument:
|
|||||||
Offset added to Auto-increment columns. Used when
|
Offset added to Auto-increment columns. Used when
|
||||||
auto-increment-increment != 1
|
auto-increment-increment != 1
|
||||||
--autocommit Set default value for autocommit (0 or 1)
|
--autocommit Set default value for autocommit (0 or 1)
|
||||||
|
(Defaults to on; use --skip-autocommit to disable.)
|
||||||
--automatic-sp-privileges
|
--automatic-sp-privileges
|
||||||
Creating and dropping stored procedures alters ACLs
|
Creating and dropping stored procedures alters ACLs
|
||||||
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
||||||
@@ -736,6 +737,7 @@ abort-slave-event-count 0
|
|||||||
allow-suspicious-udfs FALSE
|
allow-suspicious-udfs FALSE
|
||||||
auto-increment-increment 1
|
auto-increment-increment 1
|
||||||
auto-increment-offset 1
|
auto-increment-offset 1
|
||||||
|
autocommit TRUE
|
||||||
automatic-sp-privileges TRUE
|
automatic-sp-privileges TRUE
|
||||||
back-log 50
|
back-log 50
|
||||||
big-tables FALSE
|
big-tables FALSE
|
||||||
|
@@ -14,7 +14,7 @@ INSERT INTO t1 VALUES (1), (2);
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="test">
|
<database name="test">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="MUL" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="MUL" Extra="" Comment="" />
|
||||||
<key Table="t1" Non_unique="1" Key_name="a" Seq_in_index="1" Column_name="a" Collation="A" Null="YES" Index_type="BTREE" Comment="" Index_comment="" />
|
<key Table="t1" Non_unique="1" Key_name="a" Seq_in_index="1" Column_name="a" Collation="A" Null="YES" Index_type="BTREE" Comment="" Index_comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_data name="t1">
|
<table_data name="t1">
|
||||||
@@ -150,9 +150,9 @@ INSERT INTO t1 VALUES (1, "test", "tes"), (2, "TEST", "TES");
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="test">
|
<database name="test">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
<field Field="b" Type="text" Null="YES" Key="" Extra="" />
|
<field Field="b" Type="text" Null="YES" Key="" Extra="" Comment="" />
|
||||||
<field Field="c" Type="varchar(3)" Null="YES" Key="" Extra="" />
|
<field Field="c" Type="varchar(3)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_data name="t1">
|
<table_data name="t1">
|
||||||
<row>
|
<row>
|
||||||
@@ -178,7 +178,7 @@ INSERT INTO t1 VALUES ("1\""), ("\"2");
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="test">
|
<database name="test">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a"b"" Type="char(2)" Null="YES" Key="" Extra="" />
|
<field Field="a"b"" Type="char(2)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_data name="t1">
|
<table_data name="t1">
|
||||||
<row>
|
<row>
|
||||||
@@ -1612,10 +1612,10 @@ CREATE TABLE `t2` (
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="mysqldump_test_db">
|
<database name="mysqldump_test_db">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_structure name="t2">
|
<table_structure name="t2">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
</database>
|
</database>
|
||||||
</mysqldump>
|
</mysqldump>
|
||||||
@@ -1623,10 +1623,10 @@ CREATE TABLE `t2` (
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="mysqldump_test_db">
|
<database name="mysqldump_test_db">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_structure name="t2">
|
<table_structure name="t2">
|
||||||
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" />
|
<field Field="a" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
</database>
|
</database>
|
||||||
</mysqldump>
|
</mysqldump>
|
||||||
@@ -3644,8 +3644,8 @@ INSERT INTO t1 VALUES(1,0xff00fef0);
|
|||||||
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<database name="test">
|
<database name="test">
|
||||||
<table_structure name="t1">
|
<table_structure name="t1">
|
||||||
<field Field="f1" Type="int(10)" Null="YES" Key="" Extra="" />
|
<field Field="f1" Type="int(10)" Null="YES" Key="" Extra="" Comment="" />
|
||||||
<field Field="data" Type="mediumblob" Null="YES" Key="" Extra="" />
|
<field Field="data" Type="mediumblob" Null="YES" Key="" Extra="" Comment="" />
|
||||||
</table_structure>
|
</table_structure>
|
||||||
<table_data name="t1">
|
<table_data name="t1">
|
||||||
<row>
|
<row>
|
||||||
@@ -4576,5 +4576,20 @@ LENGTH(a)
|
|||||||
800
|
800
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug #13618 : mysqldump --xml ommit comment on table field
|
||||||
|
#
|
||||||
|
CREATE TABLE `comment_table` (i INT COMMENT 'FIELD COMMENT') COMMENT = 'TABLE COMMENT';
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<database name="test">
|
||||||
|
<table_structure name="comment_table">
|
||||||
|
<field Field="i" Type="int(11)" Null="YES" Key="" Extra="" Comment="FIELD COMMENT" />
|
||||||
|
</table_structure>
|
||||||
|
<table_data name="comment_table">
|
||||||
|
</table_data>
|
||||||
|
</database>
|
||||||
|
</mysqldump>
|
||||||
|
DROP TABLE `comment_table`;
|
||||||
|
#
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
#
|
#
|
||||||
|
@@ -311,12 +311,33 @@ failing query in let
|
|||||||
create table t1 (a varchar(100));
|
create table t1 (a varchar(100));
|
||||||
insert into t1 values ('`select 42`');
|
insert into t1 values ('`select 42`');
|
||||||
`select 42`
|
`select 42`
|
||||||
|
insert into t1 values ('$dollar');
|
||||||
|
$dollar
|
||||||
|
`select 42`
|
||||||
drop table t1;
|
drop table t1;
|
||||||
mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1
|
mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1
|
||||||
mysqltest: At line 1: Missing required argument 'filename' to command 'source'
|
mysqltest: At line 1: Missing required argument 'filename' to command 'source'
|
||||||
mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2
|
mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql":
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/error.sql": At line 1: query 'garbage ' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
|
||||||
|
At line 1: Source directives are nesting too deep
|
||||||
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/error.sql":
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/error.sql at line 1:
|
||||||
|
At line 1: query 'garbage ' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1
|
||||||
|
|
||||||
2 = outer loop variable after while
|
2 = outer loop variable after while
|
||||||
here is the sourced script
|
here is the sourced script
|
||||||
@@ -444,7 +465,9 @@ counter is 6
|
|||||||
counter is 7
|
counter is 7
|
||||||
1
|
1
|
||||||
Testing while with not
|
Testing while with not
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest_while.inc": At line 64: Nesting too deeply
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest_while.inc":
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/mysqltest_while.inc at line 65:
|
||||||
|
At line 64: Nesting too deeply
|
||||||
mysqltest: At line 1: missing '(' in while
|
mysqltest: At line 1: missing '(' in while
|
||||||
mysqltest: At line 1: missing ')' in while
|
mysqltest: At line 1: missing ')' in while
|
||||||
mysqltest: At line 1: Missing '{' after while. Found "dec $i"
|
mysqltest: At line 1: Missing '{' after while. Found "dec $i"
|
||||||
@@ -493,8 +516,12 @@ mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1
|
|||||||
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
||||||
mysqltest: At line 1: Illegal option to connect: SMTP
|
mysqltest: At line 1: Illegal option to connect: SMTP
|
||||||
200 connects succeeded
|
200 connects succeeded
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql":
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists
|
included from MYSQLTEST_VARDIR/tmp/mysqltest.sql at line 3:
|
||||||
|
At line 3: connection 'test_con1' not found in connection pool
|
||||||
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql":
|
||||||
|
included from MYSQLTEST_VARDIR/tmp/mysqltest.sql at line 2:
|
||||||
|
At line 2: Connection test_con1 already exists
|
||||||
show tables;
|
show tables;
|
||||||
ERROR 3D000: No database selected
|
ERROR 3D000: No database selected
|
||||||
connect con1,localhost,root,,;
|
connect con1,localhost,root,,;
|
||||||
|
@@ -7,13 +7,13 @@ slave_skip_errors OFF
|
|||||||
#
|
#
|
||||||
# FLUSH PRIVILEGES should not implicitly unlock locked tables.
|
# FLUSH PRIVILEGES should not implicitly unlock locked tables.
|
||||||
#
|
#
|
||||||
drop table if exists t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
create table t1 (c1 int);
|
CREATE TABLE t1 (c1 INT);
|
||||||
lock tables t1 read;
|
LOCK TABLES t1 READ;
|
||||||
flush privileges;
|
FLUSH PRIVILEGES;
|
||||||
ERROR HY000: Table 'host' was not locked with LOCK TABLES
|
ERROR HY000: Table 'host' was not locked with LOCK TABLES
|
||||||
unlock tables;
|
UNLOCK TABLES;
|
||||||
drop table t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug#54812: assert in Diagnostics_area::set_ok_status during EXPLAIN
|
# Bug#54812: assert in Diagnostics_area::set_ok_status during EXPLAIN
|
||||||
#
|
#
|
||||||
@@ -28,7 +28,7 @@ CREATE FUNCTION f() RETURNS INT RETURN 1;
|
|||||||
GRANT FILE ON *.* TO 'nopriv_user'@'localhost';
|
GRANT FILE ON *.* TO 'nopriv_user'@'localhost';
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
connection: con1
|
connection: con1
|
||||||
SELECT MAX(key1) FROM t1 WHERE f() < 1 INTO OUTFILE 'mytest';
|
SELECT MAX(key1) FROM t1 WHERE f() < 1 INTO OUTFILE '<outfile>';
|
||||||
ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f'
|
ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f'
|
||||||
INSERT INTO t2 SELECT MAX(key1) FROM t1 WHERE f() < 1;
|
INSERT INTO t2 SELECT MAX(key1) FROM t1 WHERE f() < 1;
|
||||||
ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f'
|
ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f'
|
||||||
|
@@ -1901,7 +1901,7 @@ c1 bigint,
|
|||||||
c2 set('sweet'),
|
c2 set('sweet'),
|
||||||
key (c2,c1,c0),
|
key (c2,c1,c0),
|
||||||
key(c0)
|
key(c0)
|
||||||
) engine=myisam partition by hash (month(c0)) partitions 5;
|
) engine=myisam partition by hash (c0) partitions 5;
|
||||||
insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
|
insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
|
||||||
insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
|
insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
|
||||||
select c1 from t1 group by (select c0 from t1 limit 1);
|
select c1 from t1 group by (select c0 from t1 limit 1);
|
||||||
|
@@ -1,5 +1,655 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug#54483: valgrind errors when making warnings for multiline inserts
|
||||||
|
# into partition
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a VARBINARY(10))
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a CHAR(10))
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIMESTAMP)
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
INSERT INTO t1 VALUES ('test'),('a'),('5');
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 1
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 2
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 3
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 1
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 2
|
||||||
|
Warning 1265 Data truncated for column 'a' at row 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
INSERT INTO t1 VALUES ('test'),('a'),('5');
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 3
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY RANGE (DAYOFWEEK(a))
|
||||||
|
(PARTITION a1 VALUES LESS THAN (60));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1486 Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (TO_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (TO_DAYS(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (TO_DAYS(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (TO_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (TO_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (DAYOFMONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (DAYOFMONTH(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (DAYOFMONTH(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (DAYOFMONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (DAYOFMONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (MONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (MONTH(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (MONTH(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (MONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (MONTH(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (DAYOFYEAR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (DAYOFYEAR(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (DAYOFYEAR(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (DAYOFYEAR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (DAYOFYEAR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (HOUR(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (HOUR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (HOUR(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (HOUR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (HOUR(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (MINUTE(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (MINUTE(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (MINUTE(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (MINUTE(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (MINUTE(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (QUARTER(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (QUARTER(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (QUARTER(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (QUARTER(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (QUARTER(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (SECOND(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (SECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (SECOND(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (SECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (SECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (YEARWEEK(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (YEARWEEK(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (YEARWEEK(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (YEARWEEK(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (YEARWEEK(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (WEEKDAY(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (WEEKDAY(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (WEEKDAY(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (WEEKDAY(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (WEEKDAY(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
# TO_SECONDS() is added in 5.5.
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (TO_SECONDS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (TO_SECONDS(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (TO_SECONDS(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (TO_SECONDS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (TO_SECONDS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (FROM_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (FROM_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (FROM_DAYS(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (TO_DAYS(FROM_DAYS(a)));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (FROM_DAYS(a));
|
||||||
|
ERROR HY000: The PARTITION function returns the wrong type
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (TO_DAYS(FROM_DAYS(a)));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (FROM_DAYS(a));
|
||||||
|
ERROR HY000: The PARTITION function returns the wrong type
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (MICROSECOND(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (MICROSECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (MICROSECOND(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (MICROSECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (MICROSECOND(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
# Bug#57071
|
||||||
|
CREATE TABLE t1
|
||||||
|
(`date` date,
|
||||||
|
`extracted_week` int,
|
||||||
|
`yearweek` int,
|
||||||
|
`week` int,
|
||||||
|
`default_week_format` int)
|
||||||
|
PARTITION BY LIST (EXTRACT(WEEK FROM date) % 3)
|
||||||
|
(PARTITION p0 VALUES IN (0),
|
||||||
|
PARTITION p1 VALUES IN (1),
|
||||||
|
PARTITION p2 VALUES IN (2));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1
|
||||||
|
(`date` date,
|
||||||
|
`extracted_week` int,
|
||||||
|
`yearweek` int,
|
||||||
|
`week` int,
|
||||||
|
`default_week_format` int);
|
||||||
|
SET @old_default_week_format := @@default_week_format;
|
||||||
|
SET default_week_format = 0;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 1;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 2;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 3;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 4;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 5;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 6;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SET default_week_format = 7;
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01', EXTRACT(WEEK FROM '2000-01-01'), YEARWEEK('2000-01-01'), WEEK('2000-01-01'), @@default_week_format);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
date extracted_week yearweek week default_week_format
|
||||||
|
2000-01-01 0 199952 0 0
|
||||||
|
2000-01-01 0 199952 0 1
|
||||||
|
2000-01-01 52 199952 52 2
|
||||||
|
2000-01-01 52 199952 52 3
|
||||||
|
2000-01-01 0 199952 0 4
|
||||||
|
2000-01-01 0 199952 0 5
|
||||||
|
2000-01-01 52 199952 52 6
|
||||||
|
2000-01-01 52 199952 52 7
|
||||||
|
SET default_week_format = @old_default_week_format;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR_MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR_MONTH FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR_MONTH FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR_MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(YEAR_MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(QUARTER FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(QUARTER FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(QUARTER FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(QUARTER FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(QUARTER FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(MONTH FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MONTH FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(MONTH FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
# EXTRACT(WEEK...) is disallowed, see bug#57071.
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(WEEK FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(WEEK FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(WEEK FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(WEEK FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(WEEK FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_HOUR FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MINUTE FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MINUTE FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MINUTE FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(DAY_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(HOUR_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(MINUTE_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND_MICROSECOND FROM a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (EXTRACT(SECOND_MICROSECOND FROM a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME, b DATE)
|
||||||
|
PARTITION BY HASH (DATEDIFF(a, b));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATE, b DATETIME)
|
||||||
|
PARTITION BY HASH (DATEDIFF(a, b));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME, b DATE)
|
||||||
|
PARTITION BY HASH (DATEDIFF(a, b));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE, b VARCHAR(10))
|
||||||
|
PARTITION BY HASH (DATEDIFF(a, b));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT, b DATETIME)
|
||||||
|
PARTITION BY HASH (DATEDIFF(a, b));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a DATETIME)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10))
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
PARTITION BY HASH (TIME_TO_SEC(a));
|
||||||
|
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||||
|
#
|
||||||
# Bug#50036: Inconsistent errors when using TIMESTAMP
|
# Bug#50036: Inconsistent errors when using TIMESTAMP
|
||||||
# columns/expressions
|
# columns/expressions
|
||||||
# 1. correct and appropriate errors in light of
|
# 1. correct and appropriate errors in light of
|
||||||
|
@@ -13,16 +13,16 @@ EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10, 100, 3) GROUP BY a;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range a a 5 NULL 4 Using where; Using index
|
1 SIMPLE t1 range a a 5 NULL 4 Using where; Using index
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
create table t1 (a int)
|
create table t1 (a DATETIME)
|
||||||
partition by range (a)
|
partition by range (TO_DAYS(a))
|
||||||
subpartition by hash(to_seconds(a))
|
subpartition by hash(to_seconds(a))
|
||||||
(partition p0 values less than (1));
|
(partition p0 values less than (1));
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) DEFAULT NULL
|
`a` datetime DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50500 PARTITION BY RANGE (a)
|
/*!50500 PARTITION BY RANGE (TO_DAYS(a))
|
||||||
SUBPARTITION BY HASH (to_seconds(a))
|
SUBPARTITION BY HASH (to_seconds(a))
|
||||||
(PARTITION p0 VALUES LESS THAN (1) ENGINE = MyISAM) */
|
(PARTITION p0 VALUES LESS THAN (1) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@@ -319,7 +319,7 @@ Proxied_user
|
|||||||
With_grant 1
|
With_grant 1
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
#
|
#
|
||||||
# Bug#58139 : default-auth option not recognized in MySQL standardi
|
# Bug#58139 : default-auth option not recognized in MySQL standard
|
||||||
# command line clients
|
# command line clients
|
||||||
#
|
#
|
||||||
# Executing 'mysql'
|
# Executing 'mysql'
|
||||||
@@ -328,4 +328,6 @@ FLUSH PRIVILEGES;
|
|||||||
# Executing 'mysqladmin'
|
# Executing 'mysqladmin'
|
||||||
mysqld is alive
|
mysqld is alive
|
||||||
# Executing 'mysqldump'
|
# Executing 'mysqldump'
|
||||||
|
# Executing 'mysql_upgrade'
|
||||||
|
The --upgrade-system-tables option was used, databases won't be touched.
|
||||||
End of 5.5 tests
|
End of 5.5 tests
|
||||||
|
@@ -4867,6 +4867,70 @@ SELECT 1 FROM t1 ORDER BY a COLLATE latin1_german2_ci;
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #58422: Incorrect result when OUTER JOIN'ing
|
||||||
|
# with an empty table
|
||||||
|
#
|
||||||
|
CREATE TABLE t_empty(pk INT PRIMARY KEY, i INT) ENGINE = MYISAM;
|
||||||
|
CREATE TABLE t1(pk INT PRIMARY KEY, i INT) ENGINE = MYISAM;
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||||
|
CREATE TABLE t2(pk INT PRIMARY KEY, i INT) ENGINE = MYISAM;
|
||||||
|
INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
|
||||||
|
EXPLAIN
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 INNER JOIN t_empty ON TRUE)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 INNER JOIN t_empty ON TRUE)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
pk i pk i pk i
|
||||||
|
EXPLAIN
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 CROSS JOIN t_empty)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 CROSS JOIN t_empty)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
pk i pk i pk i
|
||||||
|
EXPLAIN
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 INNER JOIN t_empty ON t_empty.i=t2.i)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
t1
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(t2 INNER JOIN t_empty ON t_empty.i=t2.i)
|
||||||
|
ON t1.pk=t2.pk
|
||||||
|
WHERE t2.pk <> 2;
|
||||||
|
pk i pk i pk i
|
||||||
|
DROP TABLE t1,t2,t_empty;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Bug#54515: Crash in opt_range.cc::get_best_group_min_max on
|
# Bug#54515: Crash in opt_range.cc::get_best_group_min_max on
|
||||||
|
@@ -1325,6 +1325,17 @@ Tables_in_test Table_type
|
|||||||
été BASE TABLE
|
été BASE TABLE
|
||||||
drop table `été`;
|
drop table `été`;
|
||||||
set names latin1;
|
set names latin1;
|
||||||
|
#
|
||||||
|
# Bug#4374 SHOW TABLE STATUS FROM ignores collation_connection
|
||||||
|
# Character set: Latin-1 (ISO-8859-1)
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE DATABASE `<60>`;
|
||||||
|
CREATE TABLE `<60>`.`<60>` (a int) ENGINE=Memory;
|
||||||
|
SHOW TABLE STATUS FROM `<60>` LIKE '<27>';
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
<EFBFBD> MEMORY 10 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
DROP DATABASE `<60>`;
|
||||||
show columns from `#mysql50#????????`;
|
show columns from `#mysql50#????????`;
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
@@ -5004,6 +5004,58 @@ ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
|||||||
SELECT * FROM t2 UNION SELECT * FROM t2
|
SELECT * FROM t2 UNION SELECT * FROM t2
|
||||||
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug #58818: Incorrect result for IN/ANY subquery
|
||||||
|
# with HAVING condition
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(i INT);
|
||||||
|
INSERT INTO t1 VALUES (1), (2), (3);
|
||||||
|
CREATE TABLE t1s(i INT);
|
||||||
|
INSERT INTO t1s VALUES (10), (20), (30);
|
||||||
|
CREATE TABLE t2s(i INT);
|
||||||
|
INSERT INTO t2s VALUES (100), (200), (300);
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE t1.i NOT IN
|
||||||
|
(
|
||||||
|
SELECT STRAIGHT_JOIN t2s.i
|
||||||
|
FROM
|
||||||
|
t1s LEFT OUTER JOIN t2s ON t2s.i = t1s.i
|
||||||
|
HAVING t2s.i = 999
|
||||||
|
);
|
||||||
|
i
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE t1.I IN
|
||||||
|
(
|
||||||
|
SELECT STRAIGHT_JOIN t2s.i
|
||||||
|
FROM
|
||||||
|
t1s LEFT OUTER JOIN t2s ON t2s.i = t1s.i
|
||||||
|
HAVING t2s.i = 999
|
||||||
|
) IS UNKNOWN;
|
||||||
|
i
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE NOT t1.I = ANY
|
||||||
|
(
|
||||||
|
SELECT STRAIGHT_JOIN t2s.i
|
||||||
|
FROM
|
||||||
|
t1s LEFT OUTER JOIN t2s ON t2s.i = t1s.i
|
||||||
|
HAVING t2s.i = 999
|
||||||
|
);
|
||||||
|
i
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE t1.i = ANY (
|
||||||
|
SELECT STRAIGHT_JOIN t2s.i
|
||||||
|
FROM
|
||||||
|
t1s LEFT OUTER JOIN t2s ON t2s.i = t1s.i
|
||||||
|
HAVING t2s.i = 999
|
||||||
|
) IS UNKNOWN;
|
||||||
|
i
|
||||||
|
DROP TABLE t1,t1s,t2s;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Bug #57704: Cleanup code dies with void TABLE::set_keyread(bool):
|
# Bug #57704: Cleanup code dies with void TABLE::set_keyread(bool):
|
||||||
|
@@ -164,6 +164,17 @@ a b
|
|||||||
2 NULL
|
2 NULL
|
||||||
DROP TABLE t1, t2, t3, t4, t5;
|
DROP TABLE t1, t2, t3, t4, t5;
|
||||||
#
|
#
|
||||||
|
# Bug#58207: invalid memory reads when using default column value and
|
||||||
|
# tmptable needed
|
||||||
|
#
|
||||||
|
CREATE TABLE t(a VARCHAR(245) DEFAULT
|
||||||
|
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||||
|
INSERT INTO t VALUES (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),('');
|
||||||
|
SELECT * FROM (SELECT default(a) FROM t GROUP BY a) d;
|
||||||
|
default(a)
|
||||||
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
DROP TABLE t;
|
||||||
|
#
|
||||||
# End of 5.1 tests.
|
# End of 5.1 tests.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@@ -637,6 +637,17 @@ CAST(CAST('2008-07-29T10:42:51.1234567' AS DateTime) AS DECIMAL(30,7))
|
|||||||
20080729104251.1234560
|
20080729104251.1234560
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect datetime value: '2008-07-29T10:42:51.1234567'
|
Warning 1292 Truncated incorrect datetime value: '2008-07-29T10:42:51.1234567'
|
||||||
|
#
|
||||||
|
# Bug#59173: Failure to handle DATE(TIME) values where Year, Month or
|
||||||
|
# Day is ZERO
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (dt1 DATETIME);
|
||||||
|
INSERT INTO t1 (dt1) VALUES ('0000-00-01 00:00:01');
|
||||||
|
DELETE FROM t1 WHERE dt1 = '0000-00-01 00:00:01';
|
||||||
|
# Should be empty
|
||||||
|
SELECT * FROM t1;
|
||||||
|
dt1
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Start of 5.5 tests
|
# Start of 5.5 tests
|
||||||
|
@@ -540,3 +540,32 @@ a
|
|||||||
2010-03-05 11:08:02
|
2010-03-05 11:08:02
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of Bug#50888
|
End of Bug#50888
|
||||||
|
#
|
||||||
|
# Bug59330: Incorrect result when comparing an aggregate
|
||||||
|
# function with TIMESTAMP
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (dt DATETIME, ts TIMESTAMP);
|
||||||
|
INSERT INTO t1 VALUES('2011-01-06 12:34:30', '2011-01-06 12:34:30');
|
||||||
|
SELECT MAX(dt), MAX(ts) FROM t1;
|
||||||
|
MAX(dt) MAX(ts)
|
||||||
|
2011-01-06 12:34:30 2011-01-06 12:34:30
|
||||||
|
SELECT MAX(ts) < '2010-01-01 00:00:00' FROM t1;
|
||||||
|
MAX(ts) < '2010-01-01 00:00:00'
|
||||||
|
0
|
||||||
|
SELECT MAX(dt) < '2010-01-01 00:00:00' FROM t1;
|
||||||
|
MAX(dt) < '2010-01-01 00:00:00'
|
||||||
|
0
|
||||||
|
SELECT MAX(ts) > '2010-01-01 00:00:00' FROM t1;
|
||||||
|
MAX(ts) > '2010-01-01 00:00:00'
|
||||||
|
1
|
||||||
|
SELECT MAX(dt) > '2010-01-01 00:00:00' FROM t1;
|
||||||
|
MAX(dt) > '2010-01-01 00:00:00'
|
||||||
|
1
|
||||||
|
SELECT MAX(ts) = '2011-01-06 12:34:30' FROM t1;
|
||||||
|
MAX(ts) = '2011-01-06 12:34:30'
|
||||||
|
1
|
||||||
|
SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1;
|
||||||
|
MAX(dt) = '2011-01-06 12:34:30'
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.5 tests
|
||||||
|
@@ -1644,3 +1644,128 @@ b
|
|||||||
2
|
2
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug#57986 ORDER BY clause is not used after a UNION,
|
||||||
|
# if embedded in a SELECT
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c1 VARCHAR(10) NOT NULL, c2 INT NOT NULL);
|
||||||
|
CREATE TABLE t2 (c1 VARCHAR(10) NOT NULL, c2 INT NOT NULL);
|
||||||
|
INSERT INTO t1 (c1, c2) VALUES ('t1a', 1), ('t1a', 2), ('t1a', 3), ('t1b', 2), ('t1b', 1);
|
||||||
|
INSERT INTO t2 (c1, c2) VALUES ('t2a', 1), ('t2a', 2), ('t2a', 3), ('t2b', 2), ('t2b', 1);
|
||||||
|
SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY c2, c1;
|
||||||
|
c1 c2
|
||||||
|
t1a 1
|
||||||
|
t1b 1
|
||||||
|
t2a 1
|
||||||
|
t2b 1
|
||||||
|
t1a 2
|
||||||
|
t1b 2
|
||||||
|
t2a 2
|
||||||
|
t2b 2
|
||||||
|
t1a 3
|
||||||
|
t2a 3
|
||||||
|
SELECT * FROM t1 UNION (SELECT * FROM t2) ORDER BY c2, c1;
|
||||||
|
c1 c2
|
||||||
|
t1a 1
|
||||||
|
t1b 1
|
||||||
|
t2a 1
|
||||||
|
t2b 1
|
||||||
|
t1a 2
|
||||||
|
t1b 2
|
||||||
|
t2a 2
|
||||||
|
t2b 2
|
||||||
|
t1a 3
|
||||||
|
t2a 3
|
||||||
|
SELECT * FROM t1 UNION (SELECT * FROM t2 ORDER BY c2, c1);
|
||||||
|
c1 c2
|
||||||
|
t1a 1
|
||||||
|
t1a 2
|
||||||
|
t1a 3
|
||||||
|
t1b 2
|
||||||
|
t1b 1
|
||||||
|
t2a 1
|
||||||
|
t2a 2
|
||||||
|
t2a 3
|
||||||
|
t2b 2
|
||||||
|
t2b 1
|
||||||
|
SELECT c1, c2 FROM (
|
||||||
|
SELECT c1, c2 FROM t1
|
||||||
|
UNION
|
||||||
|
(SELECT c1, c2 FROM t2)
|
||||||
|
ORDER BY c2, c1
|
||||||
|
) AS res;
|
||||||
|
c1 c2
|
||||||
|
t1a 1
|
||||||
|
t1b 1
|
||||||
|
t2a 1
|
||||||
|
t2b 1
|
||||||
|
t1a 2
|
||||||
|
t1b 2
|
||||||
|
t2a 2
|
||||||
|
t2b 2
|
||||||
|
t1a 3
|
||||||
|
t2a 3
|
||||||
|
SELECT c1, c2 FROM (
|
||||||
|
SELECT c1, c2 FROM t1
|
||||||
|
UNION
|
||||||
|
(SELECT c1, c2 FROM t2)
|
||||||
|
ORDER BY c2 DESC, c1 LIMIT 1
|
||||||
|
) AS res;
|
||||||
|
c1 c2
|
||||||
|
t1a 3
|
||||||
|
SELECT c1, c2 FROM (
|
||||||
|
SELECT c1, c2 FROM t1
|
||||||
|
UNION
|
||||||
|
(SELECT c1, c2 FROM t2 ORDER BY c2 DESC, c1 LIMIT 1)
|
||||||
|
) AS res;
|
||||||
|
c1 c2
|
||||||
|
t1a 1
|
||||||
|
t1a 2
|
||||||
|
t1a 3
|
||||||
|
t1b 2
|
||||||
|
t1b 1
|
||||||
|
t2a 3
|
||||||
|
SELECT c1, c2 FROM (
|
||||||
|
SELECT c1, c2 FROM t1
|
||||||
|
UNION
|
||||||
|
SELECT c1, c2 FROM t2
|
||||||
|
ORDER BY c2 DESC, c1 DESC LIMIT 1
|
||||||
|
) AS res;
|
||||||
|
c1 c2
|
||||||
|
t2a 3
|
||||||
|
SELECT c1, c2 FROM (
|
||||||
|
(
|
||||||
|
(SELECT c1, c2 FROM t1)
|
||||||
|
UNION
|
||||||
|
(SELECT c1, c2 FROM t2)
|
||||||
|
)
|
||||||
|
ORDER BY c2 DESC, c1 ASC LIMIT 1
|
||||||
|
) AS res;
|
||||||
|
c1 c2
|
||||||
|
t1a 3
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug #58970 Problem Subquery (without referencing a table)
|
||||||
|
# and Order By
|
||||||
|
#
|
||||||
|
SELECT(SELECT 0 AS a UNION SELECT 1 AS a ORDER BY a ASC LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
0
|
||||||
|
SELECT(SELECT 0 AS a UNION SELECT 1 AS a ORDER BY a DESC LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
1
|
||||||
|
SELECT(SELECT 0 AS a FROM dual UNION SELECT 1 AS a FROM dual ORDER BY a ASC LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
0
|
||||||
|
SELECT(SELECT 0 AS a FROM dual UNION SELECT 1 AS a FROM dual ORDER BY a DESC LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
1
|
||||||
|
SELECT(SELECT 1 AS a ORDER BY a) AS dev;
|
||||||
|
dev
|
||||||
|
1
|
||||||
|
SELECT(SELECT 1 AS a LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
1
|
||||||
|
SELECT(SELECT 1 AS a FROM dual ORDER BY a DESC LIMIT 1) AS dev;
|
||||||
|
dev
|
||||||
|
1
|
||||||
|
@@ -1248,3 +1248,129 @@ Note 1449 The user specified as a definer ('unknown'@'unknown') does not exist
|
|||||||
LOCK TABLES v1 READ;
|
LOCK TABLES v1 READ;
|
||||||
ERROR HY000: The user specified as a definer ('unknown'@'unknown') does not exist
|
ERROR HY000: The user specified as a definer ('unknown'@'unknown') does not exist
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
#
|
||||||
|
# Bug #58499 "DEFINER-security view selecting from INVOKER-security view
|
||||||
|
# access check wrong".
|
||||||
|
#
|
||||||
|
# Check that we correctly handle privileges for various combinations
|
||||||
|
# of INVOKER and DEFINER-security views using each other.
|
||||||
|
DROP DATABASE IF EXISTS mysqltest1;
|
||||||
|
CREATE DATABASE mysqltest1;
|
||||||
|
USE mysqltest1;
|
||||||
|
CREATE TABLE t1 (i INT);
|
||||||
|
CREATE TABLE t2 (j INT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
INSERT INTO t2 VALUES (2);
|
||||||
|
#
|
||||||
|
# 1) DEFINER-security view uses INVOKER-security view (covers
|
||||||
|
# scenario originally described in the bug report).
|
||||||
|
CREATE SQL SECURITY INVOKER VIEW v1_uses_t1 AS SELECT * FROM t1;
|
||||||
|
CREATE SQL SECURITY INVOKER VIEW v1_uses_t2 AS SELECT * FROM t2;
|
||||||
|
CREATE USER 'mysqluser1'@'%';
|
||||||
|
GRANT CREATE VIEW ON mysqltest1.* TO 'mysqluser1'@'%';
|
||||||
|
GRANT SELECT ON t1 TO 'mysqluser1'@'%';
|
||||||
|
# To be able create 'v2_uses_t2' we also need select on t2.
|
||||||
|
GRANT SELECT ON t2 TO 'mysqluser1'@'%';
|
||||||
|
GRANT SELECT ON v1_uses_t1 TO 'mysqluser1'@'%';
|
||||||
|
GRANT SELECT ON v1_uses_t2 TO 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser1'.
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v2_uses_t1 AS SELECT * FROM v1_uses_t1;
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v2_uses_t2 AS SELECT * FROM v1_uses_t2;
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
CREATE USER 'mysqluser2'@'%';
|
||||||
|
GRANT SELECT ON v2_uses_t1 TO 'mysqluser2'@'%';
|
||||||
|
GRANT SELECT ON v2_uses_t2 TO 'mysqluser2'@'%';
|
||||||
|
GRANT SELECT ON t2 TO 'mysqluser2'@'%';
|
||||||
|
GRANT CREATE VIEW ON mysqltest1.* TO 'mysqluser2'@'%';
|
||||||
|
# Make 'mysqluser1' unable to access t2.
|
||||||
|
REVOKE SELECT ON t2 FROM 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser2'.
|
||||||
|
# The below statement should succeed thanks to suid nature of v2_uses_t1.
|
||||||
|
SELECT * FROM v2_uses_t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
# The below statement should fail due to suid nature of v2_uses_t2.
|
||||||
|
SELECT * FROM v2_uses_t2;
|
||||||
|
ERROR HY000: View 'mysqltest1.v2_uses_t2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
#
|
||||||
|
# 2) INVOKER-security view uses INVOKER-security view.
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
DROP VIEW v2_uses_t1, v2_uses_t2;
|
||||||
|
CREATE SQL SECURITY INVOKER VIEW v2_uses_t1 AS SELECT * FROM v1_uses_t1;
|
||||||
|
CREATE SQL SECURITY INVOKER VIEW v2_uses_t2 AS SELECT * FROM v1_uses_t2;
|
||||||
|
GRANT SELECT ON v2_uses_t1 TO 'mysqluser1'@'%';
|
||||||
|
GRANT SELECT ON v2_uses_t2 TO 'mysqluser1'@'%';
|
||||||
|
GRANT SELECT ON v1_uses_t1 TO 'mysqluser2'@'%';
|
||||||
|
GRANT SELECT ON v1_uses_t2 TO 'mysqluser2'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser1'.
|
||||||
|
# For both versions of 'v2' 'mysqluser1' privileges should be used.
|
||||||
|
SELECT * FROM v2_uses_t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
SELECT * FROM v2_uses_t2;
|
||||||
|
ERROR HY000: View 'mysqltest1.v2_uses_t2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser2'.
|
||||||
|
# And now for both versions of 'v2' 'mysqluser2' privileges should
|
||||||
|
# be used.
|
||||||
|
SELECT * FROM v2_uses_t1;
|
||||||
|
ERROR HY000: View 'mysqltest1.v2_uses_t1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
SELECT * FROM v2_uses_t2;
|
||||||
|
j
|
||||||
|
2
|
||||||
|
#
|
||||||
|
# 3) INVOKER-security view uses DEFINER-security view.
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
DROP VIEW v1_uses_t1, v1_uses_t2;
|
||||||
|
# To be able create 'v1_uses_t2' we also need select on t2.
|
||||||
|
GRANT SELECT ON t2 TO 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser1'.
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v1_uses_t1 AS SELECT * FROM t1;
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v1_uses_t2 AS SELECT * FROM t2;
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
# Make 'mysqluser1' unable to access t2.
|
||||||
|
REVOKE SELECT ON t2 FROM 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser2'.
|
||||||
|
# Due to suid nature of v1_uses_t1 and v1_uses_t2 the first
|
||||||
|
# select should succeed and the second select should fail.
|
||||||
|
SELECT * FROM v2_uses_t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
SELECT * FROM v2_uses_t2;
|
||||||
|
ERROR HY000: View 'mysqltest1.v2_uses_t2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
#
|
||||||
|
# 4) DEFINER-security view uses DEFINER-security view.
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
DROP VIEW v2_uses_t1, v2_uses_t2;
|
||||||
|
# To be able create 'v2_uses_t2' we also need select on t2.
|
||||||
|
GRANT SELECT ON t2 TO 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser2'.
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v2_uses_t1 AS SELECT * FROM v1_uses_t1;
|
||||||
|
CREATE SQL SECURITY DEFINER VIEW v2_uses_t2 AS SELECT * FROM v1_uses_t2;
|
||||||
|
#
|
||||||
|
# Connection 'default'.
|
||||||
|
# Make 'mysqluser1' unable to access t2.
|
||||||
|
REVOKE SELECT ON t2 FROM 'mysqluser1'@'%';
|
||||||
|
#
|
||||||
|
# Connection 'mysqluser2'.
|
||||||
|
# Again privileges of creator of innermost views should apply.
|
||||||
|
SELECT * FROM v2_uses_t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
SELECT * FROM v2_uses_t2;
|
||||||
|
ERROR HY000: View 'mysqltest1.v2_uses_t2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
USE test;
|
||||||
|
DROP DATABASE mysqltest1;
|
||||||
|
DROP USER 'mysqluser1'@'%';
|
||||||
|
DROP USER 'mysqluser2'@'%';
|
||||||
|
@@ -1113,6 +1113,17 @@ SELECT UPDATEXML(NULL, (LPAD(0.1111E-15, '2011', 1)), 1);
|
|||||||
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
||||||
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
||||||
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
||||||
|
#
|
||||||
|
# Bug #44332 my_xml_scan reads behind the end of buffer
|
||||||
|
#
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
||||||
|
UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1')
|
||||||
|
NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT unexpected (ident or '/' wanted)'
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||||
|
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
|
||||||
|
NULL
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Start of 5.5 tests
|
# Start of 5.5 tests
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# switched directory after starting the server and am using a relative
|
# switched directory after starting the server and am using a relative
|
||||||
# --defaults-file.
|
# --defaults-file.
|
||||||
--replace_regex /\.dll/.so/
|
--replace_regex /\.dll/.so/
|
||||||
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO;
|
eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
|
||||||
|
|
||||||
--query_vertical SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile
|
--query_vertical SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile
|
||||||
|
|
||||||
|
@@ -13,13 +13,14 @@ set global innodb_lock_wait_timeout=347;
|
|||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
@@innodb_lock_wait_timeout
|
@@innodb_lock_wait_timeout
|
||||||
42
|
42
|
||||||
set innodb_lock_wait_timeout=1;
|
set innodb_lock_wait_timeout=10;
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
@@innodb_lock_wait_timeout
|
@@innodb_lock_wait_timeout
|
||||||
1
|
10
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
@@innodb_lock_wait_timeout
|
@@innodb_lock_wait_timeout
|
||||||
347
|
347
|
||||||
|
SET @connection_b_id = <connection_b_id>;
|
||||||
create table t1(a int primary key)engine=innodb;
|
create table t1(a int primary key)engine=innodb;
|
||||||
begin;
|
begin;
|
||||||
insert into t1 values(1),(2),(3);
|
insert into t1 values(1),(2),(3);
|
||||||
@@ -31,8 +32,9 @@ a
|
|||||||
3
|
3
|
||||||
begin;
|
begin;
|
||||||
insert into t1 values(4);
|
insert into t1 values(4);
|
||||||
|
set innodb_lock_wait_timeout=3;
|
||||||
select * from t1 for update;
|
select * from t1 for update;
|
||||||
commit;
|
commit;
|
||||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set global innodb_lock_wait_timeout=50;
|
set global innodb_lock_wait_timeout=<initial_timeout>;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
|
|
||||||
let $timeout=`select @@innodb_lock_wait_timeout`;
|
let $initial_timeout=`select @@innodb_lock_wait_timeout`;
|
||||||
set global innodb_lock_wait_timeout=42;
|
set global innodb_lock_wait_timeout=42;
|
||||||
|
|
||||||
connect (a,localhost,root,,);
|
connect (a,localhost,root,,);
|
||||||
@@ -12,19 +12,24 @@ set innodb_lock_wait_timeout=1;
|
|||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
|
|
||||||
connection b;
|
connection b;
|
||||||
|
let $connection_b_id=`SELECT CONNECTION_ID()`;
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
set global innodb_lock_wait_timeout=347;
|
set global innodb_lock_wait_timeout=347;
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
set innodb_lock_wait_timeout=1;
|
set innodb_lock_wait_timeout=10;
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
|
|
||||||
connect (c,localhost,root,,);
|
connect (c,localhost,root,,);
|
||||||
connection c;
|
connection c;
|
||||||
|
|
||||||
select @@innodb_lock_wait_timeout;
|
select @@innodb_lock_wait_timeout;
|
||||||
connection default;
|
|
||||||
disconnect c;
|
disconnect c;
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
connection a;
|
connection a;
|
||||||
|
--replace_result $connection_b_id <connection_b_id>
|
||||||
|
eval SET @connection_b_id = $connection_b_id;
|
||||||
create table t1(a int primary key)engine=innodb;
|
create table t1(a int primary key)engine=innodb;
|
||||||
begin;
|
begin;
|
||||||
insert into t1 values(1),(2),(3);
|
insert into t1 values(1),(2),(3);
|
||||||
@@ -33,7 +38,37 @@ connection b;
|
|||||||
--send
|
--send
|
||||||
select * from t1 for update;
|
select * from t1 for update;
|
||||||
|
|
||||||
|
# Observation on information_schema.processlist (2010-12 mysql-5.5)
|
||||||
|
# -----------------------------------------------------------------
|
||||||
|
# As soon as the server started the execution of the
|
||||||
|
# connection a: --send select ... for update
|
||||||
|
# High parallel load could delay this up to two seconds.
|
||||||
|
# and before either
|
||||||
|
# - the innodb_lock_wait_timeout was exceeded
|
||||||
|
# -> connection b reap gets ER_LOCK_WAIT_TIMEOUT
|
||||||
|
# or
|
||||||
|
# - connection a commits, the lock disappears and the statement
|
||||||
|
# of connection b finishes
|
||||||
|
# -> connection b reap gets success + result set
|
||||||
|
# we see within information_schema.processlist for connection b a row
|
||||||
|
# command state info
|
||||||
|
# Query Sending data select * from t1 for update
|
||||||
|
# The highest time value seen was @@innodb_lock_wait_timeout + 1.
|
||||||
|
# Please note that there is unfortunately nothing which says
|
||||||
|
# that we are just waiting for a lock.
|
||||||
|
|
||||||
connection a;
|
connection a;
|
||||||
|
# In order to ensure that the execution of
|
||||||
|
# connection b: select * from t1 for update
|
||||||
|
# has really started and is most probably waiting for the lock now we poll on
|
||||||
|
# information_schema.processlist.
|
||||||
|
# Also our current session innodb_lock_wait_timeout of 10 seconds should big
|
||||||
|
# enough to prevent that connection b ends up with getting ER_LOCK_WAIT_TIMEOUT.
|
||||||
|
#
|
||||||
|
let $wait_timeout= 10;
|
||||||
|
let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||||
|
WHERE id = @connection_b_id AND INFO = 'select * from t1 for update';
|
||||||
|
--source include/wait_condition.inc
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
connection b;
|
connection b;
|
||||||
@@ -44,21 +79,39 @@ begin;
|
|||||||
insert into t1 values(4);
|
insert into t1 values(4);
|
||||||
|
|
||||||
connection b;
|
connection b;
|
||||||
|
set innodb_lock_wait_timeout=3;
|
||||||
|
# 3 seconds should be big enough that the wait routine of connection a will
|
||||||
|
# hit the time span where our next statement is visible within the
|
||||||
|
# information_schema.processlist.
|
||||||
--send
|
--send
|
||||||
select * from t1 for update;
|
select * from t1 for update;
|
||||||
|
|
||||||
connection a;
|
connection a;
|
||||||
sleep 2;
|
# Wait till the execution of the connection b statement was started.
|
||||||
|
let $wait_timeout= 10;
|
||||||
|
let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||||
|
WHERE id = @connection_b_id AND INFO = 'select * from t1 for update';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
# Wait till the execution of the connection b statement has ended.
|
||||||
|
let $wait_timeout= 10;
|
||||||
|
let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||||
|
WHERE id = @connection_b_id AND INFO IS NULL;
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
# Give "commit" though this must be too late for the statement of connection b.
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
connection b;
|
connection b;
|
||||||
--error ER_LOCK_WAIT_TIMEOUT
|
--error ER_LOCK_WAIT_TIMEOUT
|
||||||
reap;
|
reap;
|
||||||
drop table t1;
|
|
||||||
|
disconnect b;
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
|
connection a;
|
||||||
|
disconnect a;
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
connection default;
|
connection default;
|
||||||
|
drop table t1;
|
||||||
disconnect a;
|
--replace_result $initial_timeout <initial_timeout>
|
||||||
disconnect b;
|
eval set global innodb_lock_wait_timeout=$initial_timeout;
|
||||||
|
|
||||||
eval set global innodb_lock_wait_timeout=$timeout;
|
|
||||||
|
@@ -88,8 +88,9 @@ let $val2 = '2006-01-17';
|
|||||||
let $val3 = '2006-02-25';
|
let $val3 = '2006-02-25';
|
||||||
let $val4 = '2006-02-05';
|
let $val4 = '2006-02-05';
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
let $coltype = char(30);
|
# Disabled after fixing bug#54483.
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
#let $coltype = char(30);
|
||||||
|
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
|
|
||||||
let $sqlfunc = extract(month from col1);
|
let $sqlfunc = extract(month from col1);
|
||||||
let $valsqlfunc = extract(year from '1998-11-23');
|
let $valsqlfunc = extract(year from '1998-11-23');
|
||||||
@@ -139,8 +140,9 @@ let $val2 = '14:30:20';
|
|||||||
let $val3 = '21:59:22';
|
let $val3 = '21:59:22';
|
||||||
let $val4 = '10:22:33';
|
let $val4 = '10:22:33';
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
let $coltype = char(30);
|
# second(non_time_col) is disabled after bug#54483.
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
#let $coltype = char(30);
|
||||||
|
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
|
|
||||||
let $sqlfunc = month(col1);
|
let $sqlfunc = month(col1);
|
||||||
let $valsqlfunc = month('2006-10-14');
|
let $valsqlfunc = month('2006-10-14');
|
||||||
@@ -172,26 +174,28 @@ let $val3 = '21:59:22';
|
|||||||
let $val4 = '10:33:11';
|
let $val4 = '10:33:11';
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
|
|
||||||
let $sqlfunc = to_days(col1)-to_days('2006-01-01');
|
# to_days(non_date_col) is disabled after bug#54483.
|
||||||
let $valsqlfunc = to_days('2006-02-02')-to_days('2006-01-01');
|
#let $sqlfunc = to_days(col1)-to_days('2006-01-01');
|
||||||
let $coltype = date;
|
#let $valsqlfunc = to_days('2006-02-02')-to_days('2006-01-01');
|
||||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
#let $coltype = date;
|
||||||
let $val1 = '2006-02-03';
|
#let $infile = part_supported_sql_funcs_int_date.inc;
|
||||||
let $val2 = '2006-01-17';
|
#let $val1 = '2006-02-03';
|
||||||
let $val3 = '2006-01-25';
|
#let $val2 = '2006-01-17';
|
||||||
let $val4 = '2006-02-06';
|
#let $val3 = '2006-01-25';
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
#let $val4 = '2006-02-06';
|
||||||
|
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
|
|
||||||
|
# to_days(non_date_col) is disabled after bug#54483.
|
||||||
# DATEDIFF() is implemented as (TO_DAYS(d1) - TO_DAYS(d2))
|
# DATEDIFF() is implemented as (TO_DAYS(d1) - TO_DAYS(d2))
|
||||||
let $sqlfunc = datediff(col1, '2006-01-01');
|
#let $sqlfunc = datediff(col1, '2006-01-01');
|
||||||
let $valsqlfunc = datediff('2006-02-02', '2006-01-01');
|
#let $valsqlfunc = datediff('2006-02-02', '2006-01-01');
|
||||||
let $coltype = date;
|
#let $coltype = date;
|
||||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
#let $infile = part_supported_sql_funcs_int_date.inc;
|
||||||
let $val1 = '2006-02-03';
|
#let $val1 = '2006-02-03';
|
||||||
let $val2 = '2006-01-17';
|
#let $val2 = '2006-01-17';
|
||||||
let $val3 = '2006-01-25';
|
#let $val3 = '2006-01-25';
|
||||||
let $val4 = '2006-02-06';
|
#let $val4 = '2006-02-06';
|
||||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||||
|
|
||||||
let $sqlfunc = weekday(col1);
|
let $sqlfunc = weekday(col1);
|
||||||
let $valsqlfunc = weekday('2006-10-14');
|
let $valsqlfunc = weekday('2006-10-14');
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user