10.0-base -> 10.0-monty
This commit is contained in:
commit
e1f681c99b
@ -1096,7 +1096,6 @@ CPackSourceConfig.cmake
|
|||||||
Docs/INFO_BIN
|
Docs/INFO_BIN
|
||||||
Docs/INFO_SRC
|
Docs/INFO_SRC
|
||||||
tags
|
tags
|
||||||
sql/.empty
|
|
||||||
Testing
|
Testing
|
||||||
info_macros.cmake
|
info_macros.cmake
|
||||||
VERSION.dep
|
VERSION.dep
|
||||||
@ -1136,6 +1135,7 @@ plugin/handler_socket/perl-Net-HandlerSocket/Makefile.PL
|
|||||||
libmysqld/libmysqld_exports_file.cc
|
libmysqld/libmysqld_exports_file.cc
|
||||||
libmysqld/gcalc_slicescan.cc
|
libmysqld/gcalc_slicescan.cc
|
||||||
libmysqld/gcalc_tools.cc
|
libmysqld/gcalc_tools.cc
|
||||||
|
libmysqld/my_apc.cc
|
||||||
sql/share/errmsg.sys
|
sql/share/errmsg.sys
|
||||||
sql/share/mysql
|
sql/share/mysql
|
||||||
install_manifest.txt
|
install_manifest.txt
|
||||||
|
@ -21,6 +21,12 @@ extra_configs="$extra_configs $local_infile_configs $EXTRA_CONFIGS"
|
|||||||
|
|
||||||
configure="./configure $base_configs $extra_configs"
|
configure="./configure $base_configs $extra_configs"
|
||||||
|
|
||||||
|
if test "$just_print" = "1" -a "$just_configure" = "1"
|
||||||
|
then
|
||||||
|
just_print=""
|
||||||
|
configure="$configure --print"
|
||||||
|
fi
|
||||||
|
|
||||||
commands="\
|
commands="\
|
||||||
/bin/rm -rf configure;
|
/bin/rm -rf configure;
|
||||||
/bin/rm -rf CMakeCache.txt CMakeFiles/
|
/bin/rm -rf CMakeCache.txt CMakeFiles/
|
||||||
|
@ -139,7 +139,7 @@ else
|
|||||||
# C warnings
|
# C warnings
|
||||||
c_warnings="$warnings"
|
c_warnings="$warnings"
|
||||||
# C++ warnings
|
# C++ warnings
|
||||||
cxx_warnings="$warnings -Wno-unused-parameter"
|
cxx_warnings="$warnings -Wno-unused-parameter -Wno-invalid-offsetof"
|
||||||
# cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo"
|
# cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo"
|
||||||
cxx_warnings="$cxx_warnings -Wnon-virtual-dtor"
|
cxx_warnings="$cxx_warnings -Wnon-virtual-dtor"
|
||||||
debug_extra_cflags="-O0 -g3 -gdwarf-2"
|
debug_extra_cflags="-O0 -g3 -gdwarf-2"
|
||||||
|
@ -285,6 +285,7 @@ IF(WITH_UNIT_TESTS)
|
|||||||
ADD_SUBDIRECTORY(unittest/strings)
|
ADD_SUBDIRECTORY(unittest/strings)
|
||||||
ADD_SUBDIRECTORY(unittest/examples)
|
ADD_SUBDIRECTORY(unittest/examples)
|
||||||
ADD_SUBDIRECTORY(unittest/mysys)
|
ADD_SUBDIRECTORY(unittest/mysys)
|
||||||
|
ADD_SUBDIRECTORY(unittest/sql)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT WITHOUT_SERVER)
|
IF(NOT WITHOUT_SERVER)
|
||||||
@ -300,14 +301,16 @@ ADD_SUBDIRECTORY(vio)
|
|||||||
ADD_SUBDIRECTORY(regex)
|
ADD_SUBDIRECTORY(regex)
|
||||||
ADD_SUBDIRECTORY(mysys)
|
ADD_SUBDIRECTORY(mysys)
|
||||||
ADD_SUBDIRECTORY(libmysql)
|
ADD_SUBDIRECTORY(libmysql)
|
||||||
|
ADD_SUBDIRECTORY(client)
|
||||||
ADD_SUBDIRECTORY(extra)
|
ADD_SUBDIRECTORY(extra)
|
||||||
|
ADD_SUBDIRECTORY(libservices)
|
||||||
|
ADD_SUBDIRECTORY(scripts)
|
||||||
|
ADD_SUBDIRECTORY(sql/share)
|
||||||
|
ADD_SUBDIRECTORY(support-files)
|
||||||
|
|
||||||
IF(NOT WITHOUT_SERVER)
|
IF(NOT WITHOUT_SERVER)
|
||||||
ADD_SUBDIRECTORY(tests)
|
ADD_SUBDIRECTORY(tests)
|
||||||
ADD_SUBDIRECTORY(client)
|
|
||||||
ADD_SUBDIRECTORY(sql)
|
ADD_SUBDIRECTORY(sql)
|
||||||
ADD_SUBDIRECTORY(sql/share)
|
|
||||||
ADD_SUBDIRECTORY(libservices)
|
|
||||||
OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
|
OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
|
||||||
IF(WITH_EMBEDDED_SERVER)
|
IF(WITH_EMBEDDED_SERVER)
|
||||||
ADD_SUBDIRECTORY(libmysqld)
|
ADD_SUBDIRECTORY(libmysqld)
|
||||||
@ -316,12 +319,11 @@ IF(NOT WITHOUT_SERVER)
|
|||||||
|
|
||||||
ADD_SUBDIRECTORY(mysql-test)
|
ADD_SUBDIRECTORY(mysql-test)
|
||||||
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
||||||
ADD_SUBDIRECTORY(support-files)
|
|
||||||
ADD_SUBDIRECTORY(scripts)
|
|
||||||
ADD_SUBDIRECTORY(sql-bench)
|
ADD_SUBDIRECTORY(sql-bench)
|
||||||
IF(UNIX)
|
ENDIF()
|
||||||
ADD_SUBDIRECTORY(man)
|
|
||||||
ENDIF()
|
IF(UNIX)
|
||||||
|
ADD_SUBDIRECTORY(man)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
INCLUDE(cmake/abi_check.cmake)
|
INCLUDE(cmake/abi_check.cmake)
|
||||||
|
@ -23,10 +23,6 @@
|
|||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE)
|
|
||||||
#undef HAVE_GETPASS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPASS
|
#ifdef HAVE_GETPASS
|
||||||
#ifdef HAVE_PWD_H
|
#ifdef HAVE_PWD_H
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
@ -897,6 +897,7 @@ static COMMANDS commands[] = {
|
|||||||
{ "LAST_INSERT_ID", 0, 0, 0, ""},
|
{ "LAST_INSERT_ID", 0, 0, 0, ""},
|
||||||
{ "ISSIMPLE", 0, 0, 0, ""},
|
{ "ISSIMPLE", 0, 0, 0, ""},
|
||||||
{ "LAST_DAY", 0, 0, 0, ""},
|
{ "LAST_DAY", 0, 0, 0, ""},
|
||||||
|
{ "LAST_VALUE", 0, 0, 0, ""},
|
||||||
{ "LCASE", 0, 0, 0, ""},
|
{ "LCASE", 0, 0, 0, ""},
|
||||||
{ "LEAST", 0, 0, 0, ""},
|
{ "LEAST", 0, 0, 0, ""},
|
||||||
{ "LENGTH", 0, 0, 0, ""},
|
{ "LENGTH", 0, 0, 0, ""},
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
|
|
||||||
#define ADMIN_VERSION "9.0"
|
#define ADMIN_VERSION "9.1"
|
||||||
#define MAX_MYSQL_VAR 512
|
#define MAX_MYSQL_VAR 512
|
||||||
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
|
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
|
||||||
#define MAX_TRUNC_LENGTH 3
|
#define MAX_TRUNC_LENGTH 3
|
||||||
@ -97,6 +97,7 @@ enum commands {
|
|||||||
ADMIN_FLUSH_HOSTS, ADMIN_FLUSH_TABLES, ADMIN_PASSWORD,
|
ADMIN_FLUSH_HOSTS, ADMIN_FLUSH_TABLES, ADMIN_PASSWORD,
|
||||||
ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS,
|
ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS,
|
||||||
ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE,
|
ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE,
|
||||||
|
ADMIN_START_ALL_SLAVES, ADMIN_STOP_ALL_SLAVES,
|
||||||
ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD, ADMIN_FLUSH_SLOW_LOG,
|
ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD, ADMIN_FLUSH_SLOW_LOG,
|
||||||
ADMIN_FLUSH_TABLE_STATISTICS, ADMIN_FLUSH_INDEX_STATISTICS,
|
ADMIN_FLUSH_TABLE_STATISTICS, ADMIN_FLUSH_INDEX_STATISTICS,
|
||||||
ADMIN_FLUSH_USER_STATISTICS, ADMIN_FLUSH_CLIENT_STATISTICS,
|
ADMIN_FLUSH_USER_STATISTICS, ADMIN_FLUSH_CLIENT_STATISTICS,
|
||||||
@ -110,6 +111,7 @@ static const char *command_names[]= {
|
|||||||
"flush-hosts", "flush-tables", "password",
|
"flush-hosts", "flush-tables", "password",
|
||||||
"ping", "extended-status", "flush-status",
|
"ping", "extended-status", "flush-status",
|
||||||
"flush-privileges", "start-slave", "stop-slave",
|
"flush-privileges", "start-slave", "stop-slave",
|
||||||
|
"start-all-slaves", "stop-all-slaves",
|
||||||
"flush-threads", "old-password", "flush-slow-log",
|
"flush-threads", "old-password", "flush-slow-log",
|
||||||
"flush-table-statistics", "flush-index-statistics",
|
"flush-table-statistics", "flush-index-statistics",
|
||||||
"flush-user-statistics", "flush-client-statistics",
|
"flush-user-statistics", "flush-client-statistics",
|
||||||
@ -1117,26 +1119,67 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case ADMIN_START_SLAVE:
|
case ADMIN_START_SLAVE:
|
||||||
if (mysql_query(mysql, "START SLAVE"))
|
case ADMIN_START_ALL_SLAVES:
|
||||||
|
{
|
||||||
|
my_bool many_slaves= 0;
|
||||||
|
const char *query= "START SLAVE";
|
||||||
|
if (command == ADMIN_START_ALL_SLAVES && mariadb_connection(mysql) &&
|
||||||
|
mysql_get_server_version(mysql) >= 100000)
|
||||||
|
{
|
||||||
|
query="START ALL SLAVES";
|
||||||
|
many_slaves= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mysql_query(mysql, query))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "Error starting slave: %s", error_flags,
|
my_printf_error(0, "Error starting slave: %s", error_flags,
|
||||||
mysql_error(mysql));
|
mysql_error(mysql));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else if (!many_slaves || mysql_warning_count(mysql) > 0)
|
||||||
|
{
|
||||||
|
if (!option_silent)
|
||||||
|
puts("Slave('s) started");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
puts("Slave started");
|
{
|
||||||
|
if (!option_silent)
|
||||||
|
puts("No slaves to start");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ADMIN_STOP_SLAVE:
|
case ADMIN_STOP_SLAVE:
|
||||||
if (mysql_query(mysql, "STOP SLAVE"))
|
case ADMIN_STOP_ALL_SLAVES:
|
||||||
|
{
|
||||||
|
const char *query= "STOP SLAVE";
|
||||||
|
my_bool many_slaves= 0;
|
||||||
|
|
||||||
|
if (command == ADMIN_STOP_ALL_SLAVES && mariadb_connection(mysql) &&
|
||||||
|
mysql_get_server_version(mysql) >= 100000)
|
||||||
|
{
|
||||||
|
query="STOP ALL SLAVES";
|
||||||
|
many_slaves= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mysql_query(mysql, query))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "Error stopping slave: %s", error_flags,
|
my_printf_error(0, "Error stopping slave: %s", error_flags,
|
||||||
mysql_error(mysql));
|
mysql_error(mysql));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else if (!many_slaves || mysql_warning_count(mysql) > 0)
|
||||||
|
{
|
||||||
|
/* We can't detect if there was any slaves to stop with STOP SLAVE */
|
||||||
|
if (many_slaves && !option_silent)
|
||||||
|
puts("Slave('s) stopped");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
puts("Slave stopped");
|
{
|
||||||
|
if (!option_silent)
|
||||||
|
puts("All slaves was already stopped");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ADMIN_PING:
|
case ADMIN_PING:
|
||||||
mysql->reconnect=0; /* We want to know of reconnects */
|
mysql->reconnect=0; /* We want to know of reconnects */
|
||||||
if (!mysql_ping(mysql))
|
if (!mysql_ping(mysql))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2011, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2012, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2012, Monty Program Ab
|
Copyright (c) 2009, 2012, Monty Program 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
|
||||||
@ -743,7 +743,7 @@ print_use_stmt(PRINT_EVENT_INFO* pinfo, const Query_log_event *ev)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// In case of rewrite rule print USE statement for db_to
|
// In case of rewrite rule print USE statement for db_to
|
||||||
fprintf(result_file, "use %s%s\n", db_to, pinfo->delimiter);
|
my_fprintf(result_file, "use %`s%s\n", db_to, pinfo->delimiter);
|
||||||
|
|
||||||
// Copy the *original* db to pinfo to suppress emiting
|
// Copy the *original* db to pinfo to suppress emiting
|
||||||
// of USE stmts by log_event print-functions.
|
// of USE stmts by log_event print-functions.
|
||||||
@ -844,6 +844,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
DBUG_ENTER("process_event");
|
DBUG_ENTER("process_event");
|
||||||
print_event_info->short_form= short_form;
|
print_event_info->short_form= short_form;
|
||||||
Exit_status retval= OK_CONTINUE;
|
Exit_status retval= OK_CONTINUE;
|
||||||
|
IO_CACHE *const head= &print_event_info->head_cache;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Format events are not concerned by --offset and such, we always need to
|
Format events are not concerned by --offset and such, we always need to
|
||||||
@ -923,6 +924,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
print_skip_replication_statement(print_event_info, ev);
|
print_skip_replication_statement(print_event_info, ev);
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
}
|
}
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -955,8 +958,9 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
{
|
{
|
||||||
print_skip_replication_statement(print_event_info, ev);
|
print_skip_replication_statement(print_event_info, ev);
|
||||||
ce->print(result_file, print_event_info, TRUE);
|
ce->print(result_file, print_event_info, TRUE);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this binlog is not 3.23 ; why this test??
|
// If this binlog is not 3.23 ; why this test??
|
||||||
if (glob_description_event->binlog_version >= 3)
|
if (glob_description_event->binlog_version >= 3)
|
||||||
{
|
{
|
||||||
@ -978,6 +982,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
output of Append_block_log_event::print is only a comment.
|
output of Append_block_log_event::print is only a comment.
|
||||||
*/
|
*/
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
if ((retval= load_processor.process((Append_block_log_event*) ev)) !=
|
if ((retval= load_processor.process((Append_block_log_event*) ev)) !=
|
||||||
OK_CONTINUE)
|
OK_CONTINUE)
|
||||||
goto end;
|
goto end;
|
||||||
@ -986,6 +992,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
case EXEC_LOAD_EVENT:
|
case EXEC_LOAD_EVENT:
|
||||||
{
|
{
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
Execute_load_log_event *exv= (Execute_load_log_event*)ev;
|
Execute_load_log_event *exv= (Execute_load_log_event*)ev;
|
||||||
Create_file_log_event *ce= load_processor.grab_event(exv->file_id);
|
Create_file_log_event *ce= load_processor.grab_event(exv->file_id);
|
||||||
/*
|
/*
|
||||||
@ -1003,6 +1011,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
ce->print(result_file, print_event_info, TRUE);
|
ce->print(result_file, print_event_info, TRUE);
|
||||||
my_free((void*)ce->fname);
|
my_free((void*)ce->fname);
|
||||||
delete ce;
|
delete ce;
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning("Ignoring Execute_load_log_event as there is no "
|
warning("Ignoring Execute_load_log_event as there is no "
|
||||||
@ -1015,6 +1025,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
print_event_info->common_header_len=
|
print_event_info->common_header_len=
|
||||||
glob_description_event->common_header_len;
|
glob_description_event->common_header_len;
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
if (!remote_opt)
|
if (!remote_opt)
|
||||||
{
|
{
|
||||||
ev->free_temp_buf(); // free memory allocated in dump_local_log_entries
|
ev->free_temp_buf(); // free memory allocated in dump_local_log_entries
|
||||||
@ -1044,6 +1056,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
break;
|
break;
|
||||||
case BEGIN_LOAD_QUERY_EVENT:
|
case BEGIN_LOAD_QUERY_EVENT:
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
if ((retval= load_processor.process((Begin_load_query_log_event*) ev)) !=
|
if ((retval= load_processor.process((Begin_load_query_log_event*) ev)) !=
|
||||||
OK_CONTINUE)
|
OK_CONTINUE)
|
||||||
goto end;
|
goto end;
|
||||||
@ -1061,6 +1075,12 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
convert_path_to_forward_slashes(fname);
|
convert_path_to_forward_slashes(fname);
|
||||||
print_skip_replication_statement(print_event_info, ev);
|
print_skip_replication_statement(print_event_info, ev);
|
||||||
exlq->print(result_file, print_event_info, fname);
|
exlq->print(result_file, print_event_info, fname);
|
||||||
|
if (head->error == -1)
|
||||||
|
{
|
||||||
|
if (fname)
|
||||||
|
my_free(fname);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning("Ignoring Execute_load_query since there is no "
|
warning("Ignoring Execute_load_query since there is no "
|
||||||
@ -1191,6 +1211,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
default:
|
default:
|
||||||
print_skip_replication_statement(print_event_info, ev);
|
print_skip_replication_statement(print_event_info, ev);
|
||||||
ev->print(result_file, print_event_info);
|
ev->print(result_file, print_event_info);
|
||||||
|
if (head->error == -1)
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1354,7 +1376,7 @@ static struct my_option my_options[] =
|
|||||||
"Stop reading the binlog at position N. Applies to the last binlog "
|
"Stop reading the binlog at position N. Applies to the last binlog "
|
||||||
"passed on the command line.",
|
"passed on the command line.",
|
||||||
&stop_position, &stop_position, 0, GET_ULL,
|
&stop_position, &stop_position, 0, GET_ULL,
|
||||||
REQUIRED_ARG, (ulonglong)(~(my_off_t)0), BIN_LOG_HEADER_SIZE,
|
REQUIRED_ARG, (longlong)(~(my_off_t)0), BIN_LOG_HEADER_SIZE,
|
||||||
(ulonglong)(~(my_off_t)0), 0, 0, 0},
|
(ulonglong)(~(my_off_t)0), 0, 0, 0},
|
||||||
{"to-last-log", 't', "Requires -R. Will not stop at the end of the \
|
{"to-last-log", 't', "Requires -R. Will not stop at the end of the \
|
||||||
requested binlog but rather continue printing until the end of the last \
|
requested binlog but rather continue printing until the end of the last \
|
||||||
@ -1785,6 +1807,19 @@ static Exit_status check_master_version()
|
|||||||
"Master returned '%s'", mysql_error(mysql));
|
"Master returned '%s'", mysql_error(mysql));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Announce our capabilities to the server, so it will send us all the events
|
||||||
|
that we know about.
|
||||||
|
*/
|
||||||
|
if (mysql_query(mysql, "SET @mariadb_slave_capability="
|
||||||
|
STRINGIFY_ARG(MARIA_SLAVE_CAPABILITY_MINE)))
|
||||||
|
{
|
||||||
|
error("Could not inform master about capability. Master returned '%s'",
|
||||||
|
mysql_error(mysql));
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
delete glob_description_event;
|
delete glob_description_event;
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 3:
|
case 3:
|
||||||
@ -2324,7 +2359,13 @@ err:
|
|||||||
end:
|
end:
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
my_close(fd, MYF(MY_WME));
|
my_close(fd, MYF(MY_WME));
|
||||||
end_io_cache(file);
|
/*
|
||||||
|
Since the end_io_cache() writes to the
|
||||||
|
file errors may happen.
|
||||||
|
*/
|
||||||
|
if (end_io_cache(file))
|
||||||
|
retval= ERROR_STOP;
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2615,6 +2615,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
if (strcmp(field->name, "View") == 0)
|
if (strcmp(field->name, "View") == 0)
|
||||||
{
|
{
|
||||||
char *scv_buff= NULL;
|
char *scv_buff= NULL;
|
||||||
|
my_ulonglong n_cols;
|
||||||
|
|
||||||
verbose_msg("-- It's a view, create dummy table for view\n");
|
verbose_msg("-- It's a view, create dummy table for view\n");
|
||||||
|
|
||||||
@ -2629,8 +2630,8 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
the same name in order to satisfy views that depend on this view.
|
the same name in order to satisfy views that depend on this view.
|
||||||
The table will be removed when the actual view is created.
|
The table will be removed when the actual view is created.
|
||||||
|
|
||||||
The properties of each column, aside from the data type, are not
|
The properties of each column, are not preserved in this temporary
|
||||||
preserved in this temporary table, because they are not necessary.
|
table, because they are not necessary.
|
||||||
|
|
||||||
This will not be necessary once we can determine dependencies
|
This will not be necessary once we can determine dependencies
|
||||||
between views and can simply dump them in the appropriate order.
|
between views and can simply dump them in the appropriate order.
|
||||||
@ -2657,8 +2658,23 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
else
|
else
|
||||||
my_free(scv_buff);
|
my_free(scv_buff);
|
||||||
|
|
||||||
if (mysql_num_rows(result))
|
n_cols= mysql_num_rows(result);
|
||||||
|
if (0 != n_cols)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
The actual formula is based on the column names and how the .FRM
|
||||||
|
files are stored and is too volatile to be repeated here.
|
||||||
|
Thus we simply warn the user if the columns exceed a limit we
|
||||||
|
know works most of the time.
|
||||||
|
*/
|
||||||
|
if (n_cols >= 1000)
|
||||||
|
fprintf(stderr,
|
||||||
|
"-- Warning: Creating a stand-in table for view %s may"
|
||||||
|
" fail when replaying the dump file produced because "
|
||||||
|
"of the number of columns exceeding 1000. Exercise "
|
||||||
|
"caution when replaying the produced dump file.\n",
|
||||||
|
table);
|
||||||
if (opt_drop)
|
if (opt_drop)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -2685,14 +2701,19 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
|
|
||||||
row= mysql_fetch_row(result);
|
row= mysql_fetch_row(result);
|
||||||
|
|
||||||
fprintf(sql_file, " %s %s", quote_name(row[0], name_buff, 0),
|
/*
|
||||||
row[1]);
|
The actual column type doesn't matter anyway, since the table will
|
||||||
|
be dropped at run time.
|
||||||
|
We do tinyint to avoid hitting the row size limit.
|
||||||
|
*/
|
||||||
|
fprintf(sql_file, " %s tinyint NOT NULL",
|
||||||
|
quote_name(row[0], name_buff, 0));
|
||||||
|
|
||||||
while((row= mysql_fetch_row(result)))
|
while((row= mysql_fetch_row(result)))
|
||||||
{
|
{
|
||||||
/* col name, col type */
|
/* col name, col type */
|
||||||
fprintf(sql_file, ",\n %s %s",
|
fprintf(sql_file, ",\n %s tinyint NOT NULL",
|
||||||
quote_name(row[0], name_buff, 0), row[1]);
|
quote_name(row[0], name_buff, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4164,6 +4185,7 @@ static int dump_all_databases()
|
|||||||
if (dump_all_tables_in_db(row[0]))
|
if (dump_all_tables_in_db(row[0]))
|
||||||
result=1;
|
result=1;
|
||||||
}
|
}
|
||||||
|
mysql_free_result(tableres);
|
||||||
if (seen_views)
|
if (seen_views)
|
||||||
{
|
{
|
||||||
if (mysql_query(mysql, "SHOW DATABASES") ||
|
if (mysql_query(mysql, "SHOW DATABASES") ||
|
||||||
@ -4186,6 +4208,7 @@ static int dump_all_databases()
|
|||||||
if (dump_all_views_in_db(row[0]))
|
if (dump_all_views_in_db(row[0]))
|
||||||
result=1;
|
result=1;
|
||||||
}
|
}
|
||||||
|
mysql_free_result(tableres);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -4314,8 +4337,6 @@ static int init_dumping(char *database, int init_func(char*))
|
|||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (extended_insert)
|
|
||||||
init_dynamic_string_checked(&extended_row, "", 1024, 1024);
|
|
||||||
return 0;
|
return 0;
|
||||||
} /* init_dumping */
|
} /* init_dumping */
|
||||||
|
|
||||||
@ -5592,6 +5613,9 @@ int main(int argc, char **argv)
|
|||||||
if (opt_alltspcs)
|
if (opt_alltspcs)
|
||||||
dump_all_tablespaces();
|
dump_all_tablespaces();
|
||||||
|
|
||||||
|
if (extended_insert)
|
||||||
|
init_dynamic_string_checked(&extended_row, "", 1024, 1024);
|
||||||
|
|
||||||
if (opt_alldbs)
|
if (opt_alldbs)
|
||||||
{
|
{
|
||||||
if (!opt_alltspcs && !opt_notspcs)
|
if (!opt_alltspcs && !opt_notspcs)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009-2012 Monty Program Ab.
|
Copyright (c) 2009, 2012, Monty Program 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
|
||||||
@ -84,6 +84,8 @@ static my_bool non_blocking_api_enabled= 0;
|
|||||||
#define QUERY_SEND_FLAG 1
|
#define QUERY_SEND_FLAG 1
|
||||||
#define QUERY_REAP_FLAG 2
|
#define QUERY_REAP_FLAG 2
|
||||||
|
|
||||||
|
#define QUERY_PRINT_ORIGINAL_FLAG 4
|
||||||
|
|
||||||
#ifndef HAVE_SETENV
|
#ifndef HAVE_SETENV
|
||||||
static int setenv(const char *name, const char *value, int overwrite);
|
static int setenv(const char *name, const char *value, int overwrite);
|
||||||
#endif
|
#endif
|
||||||
@ -253,6 +255,8 @@ static void init_re(void);
|
|||||||
static int match_re(my_regex_t *, char *);
|
static int match_re(my_regex_t *, char *);
|
||||||
static void free_re(void);
|
static void free_re(void);
|
||||||
|
|
||||||
|
static char *get_string(char **to_ptr, char **from_ptr,
|
||||||
|
struct st_command *command);
|
||||||
static int replace(DYNAMIC_STRING *ds_str,
|
static int replace(DYNAMIC_STRING *ds_str,
|
||||||
const char *search_str, ulong search_len,
|
const char *search_str, ulong search_len,
|
||||||
const char *replace_str, ulong replace_len);
|
const char *replace_str, ulong replace_len);
|
||||||
@ -342,7 +346,8 @@ enum enum_commands {
|
|||||||
Q_ERROR,
|
Q_ERROR,
|
||||||
Q_SEND, Q_REAP,
|
Q_SEND, Q_REAP,
|
||||||
Q_DIRTY_CLOSE, Q_REPLACE, Q_REPLACE_COLUMN,
|
Q_DIRTY_CLOSE, Q_REPLACE, Q_REPLACE_COLUMN,
|
||||||
Q_PING, Q_EVAL,
|
Q_PING, Q_EVAL,
|
||||||
|
Q_EVALP,
|
||||||
Q_EVAL_RESULT,
|
Q_EVAL_RESULT,
|
||||||
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
|
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
|
||||||
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
||||||
@ -408,6 +413,7 @@ const char *command_names[]=
|
|||||||
"replace_column",
|
"replace_column",
|
||||||
"ping",
|
"ping",
|
||||||
"eval",
|
"eval",
|
||||||
|
"evalp",
|
||||||
"eval_result",
|
"eval_result",
|
||||||
/* Enable/disable that the _query_ is logged to result file */
|
/* Enable/disable that the _query_ is logged to result file */
|
||||||
"enable_query_log",
|
"enable_query_log",
|
||||||
@ -621,6 +627,8 @@ void free_all_replace(){
|
|||||||
free_replace_column();
|
free_replace_column();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void var_set_int(const char* name, int value);
|
||||||
|
|
||||||
|
|
||||||
class LogFile {
|
class LogFile {
|
||||||
FILE* m_file;
|
FILE* m_file;
|
||||||
@ -1275,6 +1283,8 @@ void handle_command_error(struct st_command *command, uint error,
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("handle_command_error");
|
DBUG_ENTER("handle_command_error");
|
||||||
DBUG_PRINT("enter", ("error: %d", error));
|
DBUG_PRINT("enter", ("error: %d", error));
|
||||||
|
var_set_int("$sys_errno",sys_errno);
|
||||||
|
var_set_int("$errno",error);
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -1285,7 +1295,7 @@ void handle_command_error(struct st_command *command, uint error,
|
|||||||
"errno: %d",
|
"errno: %d",
|
||||||
command->first_word_len, command->query, error, my_errno,
|
command->first_word_len, command->query, error, my_errno,
|
||||||
sys_errno);
|
sys_errno);
|
||||||
return;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
i= match_expected_error(command, error, NULL);
|
i= match_expected_error(command, error, NULL);
|
||||||
@ -4576,7 +4586,8 @@ void do_wait_for_slave_to_stop(struct st_command *c __attribute__((unused)))
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void do_sync_with_master2(struct st_command *command, long offset)
|
void do_sync_with_master2(struct st_command *command, long offset,
|
||||||
|
const char *connection_name)
|
||||||
{
|
{
|
||||||
MYSQL_RES *res;
|
MYSQL_RES *res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
@ -4587,8 +4598,9 @@ void do_sync_with_master2(struct st_command *command, long offset)
|
|||||||
if (!master_pos.file[0])
|
if (!master_pos.file[0])
|
||||||
die("Calling 'sync_with_master' without calling 'save_master_pos'");
|
die("Calling 'sync_with_master' without calling 'save_master_pos'");
|
||||||
|
|
||||||
sprintf(query_buf, "select master_pos_wait('%s', %ld, %d)",
|
sprintf(query_buf, "select master_pos_wait('%s', %ld, %d, '%s')",
|
||||||
master_pos.file, master_pos.pos + offset, timeout);
|
master_pos.file, master_pos.pos + offset, timeout,
|
||||||
|
connection_name);
|
||||||
|
|
||||||
if (mysql_query(mysql, query_buf))
|
if (mysql_query(mysql, query_buf))
|
||||||
die("failed in '%s': %d: %s", query_buf, mysql_errno(mysql),
|
die("failed in '%s': %d: %s", query_buf, mysql_errno(mysql),
|
||||||
@ -4648,16 +4660,32 @@ void do_sync_with_master(struct st_command *command)
|
|||||||
long offset= 0;
|
long offset= 0;
|
||||||
char *p= command->first_argument;
|
char *p= command->first_argument;
|
||||||
const char *offset_start= p;
|
const char *offset_start= p;
|
||||||
|
char *start, *buff= 0;
|
||||||
|
start= (char*) "";
|
||||||
|
|
||||||
if (*offset_start)
|
if (*offset_start)
|
||||||
{
|
{
|
||||||
for (; my_isdigit(charset_info, *p); p++)
|
for (; my_isdigit(charset_info, *p); p++)
|
||||||
offset = offset * 10 + *p - '0';
|
offset = offset * 10 + *p - '0';
|
||||||
|
|
||||||
if(*p && !my_isspace(charset_info, *p))
|
if (*p && !my_isspace(charset_info, *p) && *p != ',')
|
||||||
die("Invalid integer argument \"%s\"", offset_start);
|
die("Invalid integer argument \"%s\"", offset_start);
|
||||||
|
|
||||||
|
while (*p && my_isspace(charset_info, *p))
|
||||||
|
p++;
|
||||||
|
if (*p == ',')
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
while (*p && my_isspace(charset_info, *p))
|
||||||
|
p++;
|
||||||
|
start= buff= (char*)my_malloc(strlen(p)+1,MYF(MY_WME | MY_FAE));
|
||||||
|
get_string(&buff, &p, command);
|
||||||
|
}
|
||||||
command->last_argument= p;
|
command->last_argument= p;
|
||||||
}
|
}
|
||||||
do_sync_with_master2(command, offset);
|
do_sync_with_master2(command, offset, start);
|
||||||
|
if (buff)
|
||||||
|
my_free(start);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5144,7 +5172,7 @@ typedef struct
|
|||||||
|
|
||||||
static st_error global_error_names[] =
|
static st_error global_error_names[] =
|
||||||
{
|
{
|
||||||
{ "<No error>", (uint) -1, "" },
|
{ "<No error>", -1U, "" },
|
||||||
#include <mysqld_ername.h>
|
#include <mysqld_ername.h>
|
||||||
{ 0, 0, 0 }
|
{ 0, 0, 0 }
|
||||||
};
|
};
|
||||||
@ -5201,15 +5229,32 @@ const char *get_errname_from_code (uint error_code)
|
|||||||
void do_get_errcodes(struct st_command *command)
|
void do_get_errcodes(struct st_command *command)
|
||||||
{
|
{
|
||||||
struct st_match_err *to= saved_expected_errors.err;
|
struct st_match_err *to= saved_expected_errors.err;
|
||||||
char *p= command->first_argument;
|
|
||||||
uint count= 0;
|
|
||||||
char *next;
|
|
||||||
|
|
||||||
DBUG_ENTER("do_get_errcodes");
|
DBUG_ENTER("do_get_errcodes");
|
||||||
|
|
||||||
if (!*p)
|
if (!*command->first_argument)
|
||||||
die("Missing argument(s) to 'error'");
|
die("Missing argument(s) to 'error'");
|
||||||
|
|
||||||
|
/* TODO: Potentially, there is a possibility of variables
|
||||||
|
being expanded twice, e.g.
|
||||||
|
|
||||||
|
let $errcodes = 1,\$a;
|
||||||
|
let $a = 1051;
|
||||||
|
error $errcodes;
|
||||||
|
DROP TABLE unknown_table;
|
||||||
|
...
|
||||||
|
Got one of the listed errors
|
||||||
|
|
||||||
|
But since it requires manual escaping, it does not seem
|
||||||
|
particularly dangerous or error-prone.
|
||||||
|
*/
|
||||||
|
DYNAMIC_STRING ds;
|
||||||
|
init_dynamic_string(&ds, 0, command->query_len + 64, 256);
|
||||||
|
do_eval(&ds, command->first_argument, command->end, !is_windows);
|
||||||
|
char *p= ds.str;
|
||||||
|
|
||||||
|
uint count= 0;
|
||||||
|
char *next;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
@ -5265,7 +5310,7 @@ void do_get_errcodes(struct st_command *command)
|
|||||||
{
|
{
|
||||||
die("The sqlstate definition must start with an uppercase S");
|
die("The sqlstate definition must start with an uppercase S");
|
||||||
}
|
}
|
||||||
else if (*p == 'E')
|
else if (*p == 'E' || *p == 'W')
|
||||||
{
|
{
|
||||||
/* Error name string */
|
/* Error name string */
|
||||||
|
|
||||||
@ -5274,9 +5319,9 @@ void do_get_errcodes(struct st_command *command)
|
|||||||
to->type= ERR_ERRNO;
|
to->type= ERR_ERRNO;
|
||||||
DBUG_PRINT("info", ("ERR_ERRNO: %d", to->code.errnum));
|
DBUG_PRINT("info", ("ERR_ERRNO: %d", to->code.errnum));
|
||||||
}
|
}
|
||||||
else if (*p == 'e')
|
else if (*p == 'e' || *p == 'w')
|
||||||
{
|
{
|
||||||
die("The error name definition must start with an uppercase E");
|
die("The error name definition must start with an uppercase E or W");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5319,11 +5364,15 @@ void do_get_errcodes(struct st_command *command)
|
|||||||
|
|
||||||
} while (*p);
|
} while (*p);
|
||||||
|
|
||||||
command->last_argument= p;
|
command->last_argument= command->first_argument;
|
||||||
|
while (*command->last_argument)
|
||||||
|
command->last_argument++;
|
||||||
|
|
||||||
to->type= ERR_EMPTY; /* End of data */
|
to->type= ERR_EMPTY; /* End of data */
|
||||||
|
|
||||||
DBUG_PRINT("info", ("Expected errors: %d", count));
|
DBUG_PRINT("info", ("Expected errors: %d", count));
|
||||||
saved_expected_errors.count= count;
|
saved_expected_errors.count= count;
|
||||||
|
dynstr_free(&ds);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5335,8 +5384,8 @@ void do_get_errcodes(struct st_command *command)
|
|||||||
If string is a '$variable', return the value of the variable.
|
If string is a '$variable', return the value of the variable.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *get_string(char **to_ptr, char **from_ptr,
|
static char *get_string(char **to_ptr, char **from_ptr,
|
||||||
struct st_command *command)
|
struct st_command *command)
|
||||||
{
|
{
|
||||||
char c, sep;
|
char c, sep;
|
||||||
char *to= *to_ptr, *from= *from_ptr, *start=to;
|
char *to= *to_ptr, *from= *from_ptr, *start=to;
|
||||||
@ -7687,6 +7736,8 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
|||||||
*/
|
*/
|
||||||
if ((counter==0) && do_read_query_result(cn))
|
if ((counter==0) && do_read_query_result(cn))
|
||||||
{
|
{
|
||||||
|
/* we've failed to collect the result set */
|
||||||
|
cn->pending= TRUE;
|
||||||
handle_error(command, mysql_errno(mysql), mysql_error(mysql),
|
handle_error(command, mysql_errno(mysql), mysql_error(mysql),
|
||||||
mysql_sqlstate(mysql), ds);
|
mysql_sqlstate(mysql), ds);
|
||||||
goto end;
|
goto end;
|
||||||
@ -8271,7 +8322,8 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
/*
|
/*
|
||||||
Evaluate query if this is an eval command
|
Evaluate query if this is an eval command
|
||||||
*/
|
*/
|
||||||
if (command->type == Q_EVAL || command->type == Q_SEND_EVAL)
|
if (command->type == Q_EVAL || command->type == Q_SEND_EVAL ||
|
||||||
|
command->type == Q_EVALP)
|
||||||
{
|
{
|
||||||
init_dynamic_string(&eval_query, "", command->query_len+256, 1024);
|
init_dynamic_string(&eval_query, "", command->query_len+256, 1024);
|
||||||
do_eval(&eval_query, command->query, command->end, FALSE);
|
do_eval(&eval_query, command->query, command->end, FALSE);
|
||||||
@ -8303,10 +8355,20 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
*/
|
*/
|
||||||
if (!disable_query_log && (flags & QUERY_SEND_FLAG))
|
if (!disable_query_log && (flags & QUERY_SEND_FLAG))
|
||||||
{
|
{
|
||||||
replace_dynstr_append_mem(ds, query, query_len);
|
char *print_query= query;
|
||||||
|
int print_len= query_len;
|
||||||
|
if (flags & QUERY_PRINT_ORIGINAL_FLAG)
|
||||||
|
{
|
||||||
|
print_query= command->query;
|
||||||
|
print_len= command->end - command->query;
|
||||||
|
}
|
||||||
|
replace_dynstr_append_mem(ds, print_query, print_len);
|
||||||
dynstr_append_mem(ds, delimiter, delimiter_length);
|
dynstr_append_mem(ds, delimiter, delimiter_length);
|
||||||
dynstr_append_mem(ds, "\n", 1);
|
dynstr_append_mem(ds, "\n", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We're done with this flag */
|
||||||
|
flags &= ~QUERY_PRINT_ORIGINAL_FLAG;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Write the command to the result file before we execute the query
|
Write the command to the result file before we execute the query
|
||||||
@ -9169,6 +9231,7 @@ int main(int argc, char **argv)
|
|||||||
case Q_EVAL_RESULT:
|
case Q_EVAL_RESULT:
|
||||||
die("'eval_result' command is deprecated");
|
die("'eval_result' command is deprecated");
|
||||||
case Q_EVAL:
|
case Q_EVAL:
|
||||||
|
case Q_EVALP:
|
||||||
case Q_QUERY_VERTICAL:
|
case Q_QUERY_VERTICAL:
|
||||||
case Q_QUERY_HORIZONTAL:
|
case Q_QUERY_HORIZONTAL:
|
||||||
if (command->query == command->query_buf)
|
if (command->query == command->query_buf)
|
||||||
@ -9196,6 +9259,9 @@ int main(int argc, char **argv)
|
|||||||
flags= QUERY_REAP_FLAG;
|
flags= QUERY_REAP_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (command->type == Q_EVALP)
|
||||||
|
flags |= QUERY_PRINT_ORIGINAL_FLAG;
|
||||||
|
|
||||||
/* Check for special property for this query */
|
/* Check for special property for this query */
|
||||||
display_result_vertically|= (command->type == Q_QUERY_VERTICAL);
|
display_result_vertically|= (command->type == Q_QUERY_VERTICAL);
|
||||||
|
|
||||||
@ -9265,7 +9331,7 @@ int main(int argc, char **argv)
|
|||||||
select_connection(command);
|
select_connection(command);
|
||||||
else
|
else
|
||||||
select_connection_name("slave");
|
select_connection_name("slave");
|
||||||
do_sync_with_master2(command, 0);
|
do_sync_with_master2(command, 0, "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Q_COMMENT:
|
case Q_COMMENT:
|
||||||
|
@ -25,6 +25,7 @@ my $cmakeargs = "";
|
|||||||
# Assume this script is in <srcroot>/cmake
|
# Assume this script is in <srcroot>/cmake
|
||||||
my $srcdir = dirname(dirname(abs_path($0)));
|
my $srcdir = dirname(dirname(abs_path($0)));
|
||||||
my $cmake_install_prefix="";
|
my $cmake_install_prefix="";
|
||||||
|
my $just_print= 0;
|
||||||
|
|
||||||
# Sets installation directory, bindir, libdir, libexecdir etc
|
# Sets installation directory, bindir, libdir, libexecdir etc
|
||||||
# the equivalent CMake variables are given without prefix
|
# the equivalent CMake variables are given without prefix
|
||||||
@ -113,6 +114,11 @@ foreach my $option (@ARGV)
|
|||||||
system("cmake ${srcdir} -LH");
|
system("cmake ${srcdir} -LH");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
if ($option =~ /print/)
|
||||||
|
{
|
||||||
|
$just_print=1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
if($option =~ /with-plugins=/)
|
if($option =~ /with-plugins=/)
|
||||||
{
|
{
|
||||||
my @plugins= split(/,/, substr($option,13));
|
my @plugins= split(/,/, substr($option,13));
|
||||||
@ -223,6 +229,7 @@ foreach my $option (@ARGV)
|
|||||||
}
|
}
|
||||||
|
|
||||||
print("configure.pl : calling cmake $srcdir $cmakeargs\n");
|
print("configure.pl : calling cmake $srcdir $cmakeargs\n");
|
||||||
|
exit(0) if ($just_print);
|
||||||
unlink("CMakeCache.txt");
|
unlink("CMakeCache.txt");
|
||||||
my $rc = system("cmake $srcdir $cmakeargs");
|
my $rc = system("cmake $srcdir $cmakeargs");
|
||||||
exit($rc);
|
exit($rc);
|
||||||
|
@ -65,6 +65,7 @@ SET(CPACK_RPM_SPEC_MORE_DEFINE "${CPACK_RPM_SPEC_MORE_DEFINE}
|
|||||||
SET(CPACK_RPM_PACKAGE_REQUIRES "MariaDB-common")
|
SET(CPACK_RPM_PACKAGE_REQUIRES "MariaDB-common")
|
||||||
|
|
||||||
SET(CPACK_RPM_server_USER_FILELIST "%ignore /etc" "%ignore /etc/init.d")
|
SET(CPACK_RPM_server_USER_FILELIST "%ignore /etc" "%ignore /etc/init.d")
|
||||||
|
SET(CPACK_RPM_common_USER_FILELIST "%config(noreplace) /etc/my.cnf")
|
||||||
|
|
||||||
SET(CPACK_RPM_client_PACKAGE_OBSOLETES "mysql-client MySQL-client MySQL-OurDelta-client")
|
SET(CPACK_RPM_client_PACKAGE_OBSOLETES "mysql-client MySQL-client MySQL-OurDelta-client")
|
||||||
SET(CPACK_RPM_client_PACKAGE_PROVIDES "MariaDB-client MySQL-client mysql-client")
|
SET(CPACK_RPM_client_PACKAGE_PROVIDES "MariaDB-client MySQL-client mysql-client")
|
||||||
|
@ -18,7 +18,7 @@ INCLUDE(CheckCCompilerFlag)
|
|||||||
# Setup GCC (GNU C compiler) warning options.
|
# Setup GCC (GNU C compiler) warning options.
|
||||||
MACRO(SET_MYSQL_MAINTAINER_GNU_C_OPTIONS)
|
MACRO(SET_MYSQL_MAINTAINER_GNU_C_OPTIONS)
|
||||||
SET(MY_MAINTAINER_WARNINGS
|
SET(MY_MAINTAINER_WARNINGS
|
||||||
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -DFORCE_INIT_OF_VARS")
|
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Wno-invalid-offsetof -DFORCE_INIT_OF_VARS")
|
||||||
|
|
||||||
CHECK_C_COMPILER_FLAG("-Wno-missing-field-initializers"
|
CHECK_C_COMPILER_FLAG("-Wno-missing-field-initializers"
|
||||||
HAVE_NO_MISSING_FIELD_INITIALIZERS)
|
HAVE_NO_MISSING_FIELD_INITIALIZERS)
|
||||||
|
@ -364,4 +364,7 @@ SET(HAVE_SOCKADDR_IN_SIN_LEN CACHE INTERNAL "")
|
|||||||
SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "")
|
SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "")
|
||||||
SET(HAVE_VALGRIND CACHE INTERNAL "")
|
SET(HAVE_VALGRIND CACHE INTERNAL "")
|
||||||
SET(HAVE_EVENT_H CACHE INTERNAL "")
|
SET(HAVE_EVENT_H CACHE INTERNAL "")
|
||||||
|
SET(HAVE_LINUX_UNISTD_H CACHE INTERNAL "")
|
||||||
|
SET(HAVE_SYS_UTSNAME_H CACHE INTERNAL "")
|
||||||
|
SET(HAVE_PTHREAD_ATTR_GETGUARDSIZE CACHE INTERNAL "")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -109,6 +109,8 @@ MACRO (FIND_CURSES)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} setupterm "" HAVE_SETUPTERM)
|
||||||
|
CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} vidattr "" HAVE_VIDATTR)
|
||||||
ENDMACRO()
|
ENDMACRO()
|
||||||
|
|
||||||
MACRO (MYSQL_USE_BUNDLED_READLINE)
|
MACRO (MYSQL_USE_BUNDLED_READLINE)
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#cmakedefine HAVE_IEEEFP_H 1
|
#cmakedefine HAVE_IEEEFP_H 1
|
||||||
#cmakedefine HAVE_INTTYPES_H 1
|
#cmakedefine HAVE_INTTYPES_H 1
|
||||||
#cmakedefine HAVE_LIMITS_H 1
|
#cmakedefine HAVE_LIMITS_H 1
|
||||||
|
#cmakedefine HAVE_LINUX_UNISTD_H 1
|
||||||
#cmakedefine HAVE_LOCALE_H 1
|
#cmakedefine HAVE_LOCALE_H 1
|
||||||
#cmakedefine HAVE_MALLOC_H 1
|
#cmakedefine HAVE_MALLOC_H 1
|
||||||
#cmakedefine HAVE_MEMORY_H 1
|
#cmakedefine HAVE_MEMORY_H 1
|
||||||
@ -83,6 +84,7 @@
|
|||||||
#cmakedefine HAVE_SYS_SHM_H 1
|
#cmakedefine HAVE_SYS_SHM_H 1
|
||||||
#cmakedefine HAVE_SYS_SOCKET_H 1
|
#cmakedefine HAVE_SYS_SOCKET_H 1
|
||||||
#cmakedefine HAVE_SYS_SOCKIO_H 1
|
#cmakedefine HAVE_SYS_SOCKIO_H 1
|
||||||
|
#cmakedefine HAVE_SYS_UTSNAME_H 1
|
||||||
#cmakedefine HAVE_SYS_STAT_H 1
|
#cmakedefine HAVE_SYS_STAT_H 1
|
||||||
#cmakedefine HAVE_SYS_STREAM_H 1
|
#cmakedefine HAVE_SYS_STREAM_H 1
|
||||||
#cmakedefine HAVE_SYS_TERMCAP_H 1
|
#cmakedefine HAVE_SYS_TERMCAP_H 1
|
||||||
@ -130,6 +132,7 @@
|
|||||||
#cmakedefine FIONREAD_IN_SYS_FILIO 1
|
#cmakedefine FIONREAD_IN_SYS_FILIO 1
|
||||||
|
|
||||||
/* Functions we may want to use. */
|
/* Functions we may want to use. */
|
||||||
|
#cmakedefine HAVE_ACCESS 1
|
||||||
#cmakedefine HAVE_AIOWAIT 1
|
#cmakedefine HAVE_AIOWAIT 1
|
||||||
#cmakedefine HAVE_ALARM 1
|
#cmakedefine HAVE_ALARM 1
|
||||||
#cmakedefine HAVE_ALLOCA 1
|
#cmakedefine HAVE_ALLOCA 1
|
||||||
@ -151,6 +154,7 @@
|
|||||||
#cmakedefine HAVE_FCONVERT 1
|
#cmakedefine HAVE_FCONVERT 1
|
||||||
#cmakedefine HAVE_FDATASYNC 1
|
#cmakedefine HAVE_FDATASYNC 1
|
||||||
#cmakedefine HAVE_DECL_FDATASYNC 1
|
#cmakedefine HAVE_DECL_FDATASYNC 1
|
||||||
|
#cmakedefine HAVE_FEDISABLEEXCEPT 1
|
||||||
#cmakedefine HAVE_FESETROUND 1
|
#cmakedefine HAVE_FESETROUND 1
|
||||||
#cmakedefine HAVE_FINITE 1
|
#cmakedefine HAVE_FINITE 1
|
||||||
#cmakedefine HAVE_FP_EXCEPT 1
|
#cmakedefine HAVE_FP_EXCEPT 1
|
||||||
@ -175,6 +179,7 @@
|
|||||||
#cmakedefine HAVE_GETWD 1
|
#cmakedefine HAVE_GETWD 1
|
||||||
#cmakedefine HAVE_GMTIME_R 1
|
#cmakedefine HAVE_GMTIME_R 1
|
||||||
#cmakedefine gmtime_r @gmtime_r@
|
#cmakedefine gmtime_r @gmtime_r@
|
||||||
|
#cmakedefine HAVE_IN_ADDR_T 1
|
||||||
#cmakedefine HAVE_INITGROUPS 1
|
#cmakedefine HAVE_INITGROUPS 1
|
||||||
#cmakedefine HAVE_ISSETUGID 1
|
#cmakedefine HAVE_ISSETUGID 1
|
||||||
#cmakedefine HAVE_GETUID 1
|
#cmakedefine HAVE_GETUID 1
|
||||||
@ -215,6 +220,7 @@
|
|||||||
#cmakedefine HAVE_RDTSCLL 1
|
#cmakedefine HAVE_RDTSCLL 1
|
||||||
#cmakedefine HAVE_READ_REAL_TIME 1
|
#cmakedefine HAVE_READ_REAL_TIME 1
|
||||||
#cmakedefine HAVE_PTHREAD_ATTR_CREATE 1
|
#cmakedefine HAVE_PTHREAD_ATTR_CREATE 1
|
||||||
|
#cmakedefine HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
|
||||||
#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1
|
#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1
|
||||||
#cmakedefine HAVE_PTHREAD_ATTR_SETPRIO 1
|
#cmakedefine HAVE_PTHREAD_ATTR_SETPRIO 1
|
||||||
#cmakedefine HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1
|
#cmakedefine HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1
|
||||||
@ -247,6 +253,7 @@
|
|||||||
#cmakedefine HAVE_SETFD 1
|
#cmakedefine HAVE_SETFD 1
|
||||||
#cmakedefine HAVE_SETENV 1
|
#cmakedefine HAVE_SETENV 1
|
||||||
#cmakedefine HAVE_SETLOCALE 1
|
#cmakedefine HAVE_SETLOCALE 1
|
||||||
|
#cmakedefine HAVE_SETUPTERM 1
|
||||||
#cmakedefine HAVE_SIGADDSET 1
|
#cmakedefine HAVE_SIGADDSET 1
|
||||||
#cmakedefine HAVE_SIGEMPTYSET 1
|
#cmakedefine HAVE_SIGEMPTYSET 1
|
||||||
#cmakedefine HAVE_SIGHOLD 1
|
#cmakedefine HAVE_SIGHOLD 1
|
||||||
@ -284,6 +291,7 @@
|
|||||||
#cmakedefine HAVE_TIME 1
|
#cmakedefine HAVE_TIME 1
|
||||||
#cmakedefine HAVE_TIMES 1
|
#cmakedefine HAVE_TIMES 1
|
||||||
#cmakedefine HAVE_VALLOC 1
|
#cmakedefine HAVE_VALLOC 1
|
||||||
|
#cmakedefine HAVE_VIDATTR 1
|
||||||
#define HAVE_VIO_READ_BUFF 1
|
#define HAVE_VIO_READ_BUFF 1
|
||||||
#cmakedefine HAVE_VASPRINTF 1
|
#cmakedefine HAVE_VASPRINTF 1
|
||||||
#cmakedefine HAVE_VPRINTF 1
|
#cmakedefine HAVE_VPRINTF 1
|
||||||
|
@ -56,10 +56,10 @@ ENDIF()
|
|||||||
|
|
||||||
# Always enable -Wall for gnu C/C++
|
# Always enable -Wall for gnu C/C++
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_FLAGS MATCHES ".*-Wall.*")
|
IF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_FLAGS MATCHES ".*-Wall.*")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-parameter")
|
SET(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS} -Wall -Wno-unused-parameter")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_C_FLAGS MATCHES ".*-Wall.*")
|
IF(CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_C_FLAGS MATCHES ".*-Wall.*")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
SET(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS} -Wall")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
@ -195,6 +195,7 @@ CHECK_INCLUDE_FILES (grp.h HAVE_GRP_H)
|
|||||||
CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H)
|
CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H)
|
||||||
CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
|
CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
|
||||||
CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H)
|
CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H)
|
||||||
|
CHECK_INCLUDE_FILES (linux/unistd.h HAVE_LINUX_UNISTD_H)
|
||||||
CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H)
|
CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H)
|
||||||
CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H)
|
CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H)
|
||||||
CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H)
|
CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H)
|
||||||
@ -254,6 +255,7 @@ CHECK_INCLUDE_FILES (vis.h HAVE_VIS_H)
|
|||||||
CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H)
|
CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H)
|
||||||
CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H)
|
CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H)
|
||||||
CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H)
|
CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H)
|
||||||
|
CHECK_INCLUDE_FILES (sys/utsname.h HAVE_SYS_UTSNAME_H)
|
||||||
|
|
||||||
IF(BFD_H_EXISTS)
|
IF(BFD_H_EXISTS)
|
||||||
IF(NOT_FOR_DISTRIBUTION)
|
IF(NOT_FOR_DISTRIBUTION)
|
||||||
@ -319,6 +321,7 @@ ENDIF()
|
|||||||
#
|
#
|
||||||
# Tests for functions
|
# Tests for functions
|
||||||
#
|
#
|
||||||
|
CHECK_FUNCTION_EXISTS (access HAVE_ACCESS)
|
||||||
#CHECK_FUNCTION_EXISTS (aiowait HAVE_AIOWAIT)
|
#CHECK_FUNCTION_EXISTS (aiowait HAVE_AIOWAIT)
|
||||||
CHECK_FUNCTION_EXISTS (aio_read HAVE_AIO_READ)
|
CHECK_FUNCTION_EXISTS (aio_read HAVE_AIO_READ)
|
||||||
CHECK_FUNCTION_EXISTS (alarm HAVE_ALARM)
|
CHECK_FUNCTION_EXISTS (alarm HAVE_ALARM)
|
||||||
@ -547,6 +550,10 @@ IF(NOT SIZEOF_MODE_T)
|
|||||||
SET(mode_t int)
|
SET(mode_t int)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF(HAVE_NETINET_IN_H)
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES netinet/in.h)
|
||||||
|
MY_CHECK_TYPE_SIZE(in_addr_t IN_ADDR_T)
|
||||||
|
ENDIF(HAVE_NETINET_IN_H)
|
||||||
|
|
||||||
IF(HAVE_STDINT_H)
|
IF(HAVE_STDINT_H)
|
||||||
SET(CMAKE_EXTRA_INCLUDE_FILES stdint.h)
|
SET(CMAKE_EXTRA_INCLUDE_FILES stdint.h)
|
||||||
|
@ -284,9 +284,6 @@ static int DoTrace(CODE_STATE *cs);
|
|||||||
/* Test to see if file is writable */
|
/* Test to see if file is writable */
|
||||||
#if defined(HAVE_ACCESS)
|
#if defined(HAVE_ACCESS)
|
||||||
static BOOLEAN Writable(const char *pathname);
|
static BOOLEAN Writable(const char *pathname);
|
||||||
/* Change file owner and group */
|
|
||||||
static void ChangeOwner(CODE_STATE *cs, char *pathname);
|
|
||||||
/* Allocate memory for runtime support */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void DoPrefix(CODE_STATE *cs, uint line);
|
static void DoPrefix(CODE_STATE *cs, uint line);
|
||||||
|
@ -1,14 +1,3 @@
|
|||||||
#ifdef DBUG_OFF /* We are testing dbug */
|
|
||||||
|
|
||||||
int factorial(register int value) {
|
|
||||||
if(value > 1) {
|
|
||||||
value *= factorial(value-1);
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
|
|
||||||
int factorial (
|
int factorial (
|
||||||
@ -22,6 +11,3 @@ register int value)
|
|||||||
DBUG_PRINT ("result", ("result is %d", value));
|
DBUG_PRINT ("result", ("result is %d", value));
|
||||||
DBUG_RETURN (value);
|
DBUG_RETURN (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
2
debian/additions/my.cnf
vendored
2
debian/additions/my.cnf
vendored
@ -65,7 +65,7 @@ max_heap_table_size = 32M
|
|||||||
myisam_recover = BACKUP
|
myisam_recover = BACKUP
|
||||||
key_buffer_size = 128M
|
key_buffer_size = 128M
|
||||||
#open-files-limit = 2000
|
#open-files-limit = 2000
|
||||||
table_cache = 400
|
table_open_cache = 400
|
||||||
myisam_sort_buffer_size = 512M
|
myisam_sort_buffer_size = 512M
|
||||||
concurrent_insert = 2
|
concurrent_insert = 2
|
||||||
read_buffer_size = 2M
|
read_buffer_size = 2M
|
||||||
|
9
debian/autobake-deb.sh
vendored
9
debian/autobake-deb.sh
vendored
@ -37,6 +37,11 @@ case "${CODENAME}" in
|
|||||||
*) LIBREADLINE_DEV=libreadline-gplv2-dev ;;
|
*) LIBREADLINE_DEV=libreadline-gplv2-dev ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case "${CODENAME}" in
|
||||||
|
etch|lenny|hardy|intrepid|jaunty|karmic) CMAKE_DEP='' ;;
|
||||||
|
*) CMAKE_DEP='cmake (>= 2.7), ' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Clean up build file symlinks that are distro-specific. First remove all, then set
|
# Clean up build file symlinks that are distro-specific. First remove all, then set
|
||||||
# new links.
|
# new links.
|
||||||
DISTRODIRS="$(ls ./debian/dist)"
|
DISTRODIRS="$(ls ./debian/dist)"
|
||||||
@ -53,7 +58,9 @@ echo "Copying distribution specific build files for ${DISTRO}"
|
|||||||
DISTROFILES="$(ls ./debian/dist/${DISTRO})"
|
DISTROFILES="$(ls ./debian/dist/${DISTRO})"
|
||||||
for distrofile in ${DISTROFILES}; do
|
for distrofile in ${DISTROFILES}; do
|
||||||
rm -f "./debian/${distrofile}"
|
rm -f "./debian/${distrofile}"
|
||||||
sed -e "s/\\\${LIBREADLINE_DEV}/${LIBREADLINE_DEV}/g" < "./debian/dist/${DISTRO}/${distrofile}" > "./debian/${distrofile}"
|
sed -e "s/\\\${LIBREADLINE_DEV}/${LIBREADLINE_DEV}/g" \
|
||||||
|
-e "s/\\\${CMAKE_DEP}/${CMAKE_DEP}/g" \
|
||||||
|
< "./debian/dist/${DISTRO}/${distrofile}" > "./debian/${distrofile}"
|
||||||
chmod --reference="./debian/dist/${DISTRO}/${distrofile}" "./debian/${distrofile}"
|
chmod --reference="./debian/dist/${DISTRO}/${distrofile}" "./debian/${distrofile}"
|
||||||
done;
|
done;
|
||||||
|
|
||||||
|
2
debian/dist/Debian/control
vendored
2
debian/dist/Debian/control
vendored
@ -4,7 +4,7 @@ Priority: optional
|
|||||||
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||||
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
||||||
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||||
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libevent-dev, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper
|
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libevent-dev, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper, ${CMAKE_DEP}libaio-dev
|
||||||
Standards-Version: 3.8.3
|
Standards-Version: 3.8.3
|
||||||
Homepage: http://mariadb.org/
|
Homepage: http://mariadb.org/
|
||||||
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/5.5/files
|
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/5.5/files
|
||||||
|
@ -21,7 +21,7 @@ invoke() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
MYSQL_BOOTSTRAP="/usr/sbin/mysqld --bootstrap --user=mysql --skip-grant-tables --loose-innodb=OFF --loose-pbxt=OFF --default-storage-engine=myisam"
|
MYSQL_BOOTSTRAP="/usr/sbin/mysqld --bootstrap --user=mysql --skip-grant-tables --loose-innodb=OFF --default-storage-engine=myisam"
|
||||||
|
|
||||||
test_mysql_access() {
|
test_mysql_access() {
|
||||||
mysql --no-defaults -u root -h localhost </dev/null >/dev/null 2>&1
|
mysql --no-defaults -u root -h localhost </dev/null >/dev/null 2>&1
|
||||||
@ -212,7 +212,7 @@ EOF
|
|||||||
# admin might already have chosen to remove one or more plugins. Newlines are necessary.
|
# admin might already have chosen to remove one or more plugins. Newlines are necessary.
|
||||||
install_plugins=`/bin/echo -e \
|
install_plugins=`/bin/echo -e \
|
||||||
"USE mysql;\n" \
|
"USE mysql;\n" \
|
||||||
"CREATE TABLE plugin (name char(64) COLLATE utf8_bin NOT NULL DEFAULT '', " \
|
"CREATE TABLE IF NOT EXISTS plugin (name char(64) COLLATE utf8_bin NOT NULL DEFAULT '', " \
|
||||||
" dl char(128) COLLATE utf8_bin NOT NULL DEFAULT '', " \
|
" dl char(128) COLLATE utf8_bin NOT NULL DEFAULT '', " \
|
||||||
" PRIMARY KEY (name)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='MySQL plugins';" `
|
" PRIMARY KEY (name)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='MySQL plugins';" `
|
||||||
|
|
||||||
|
2
debian/dist/Ubuntu/control
vendored
2
debian/dist/Ubuntu/control
vendored
@ -4,7 +4,7 @@ Priority: optional
|
|||||||
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
Maintainer: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||||
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
XSBC-Original-Maintainer: Maria Developers <maria-developers@lists.launchpad.net>
|
||||||
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
Uploaders: MariaDB Developers <maria-developers@lists.launchpad.net>
|
||||||
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libevent-dev, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper
|
Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper, file (>= 3.28), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), ${LIBREADLINE_DEV}, libevent-dev, libssl-dev, libpam0g-dev, psmisc, po-debconf, chrpath, automake1.9, doxygen, texlive-latex-base, ghostscript | gs-gpl, dpatch, gawk, bison, lsb-release, hardening-wrapper, ${CMAKE_DEP}libaio-dev
|
||||||
Standards-Version: 3.8.2
|
Standards-Version: 3.8.2
|
||||||
Homepage: http://mariadb.org/
|
Homepage: http://mariadb.org/
|
||||||
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/5.5/files
|
Vcs-Browser: http://bazaar.launchpad.net/~maria-captains/maria/5.5/files
|
||||||
|
@ -21,7 +21,7 @@ invoke() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
MYSQL_BOOTSTRAP="/usr/sbin/mysqld --bootstrap --user=mysql --skip-grant-tables --loose-innodb=OFF --loose-pbxt=OFF --default-storage-engine=myisam"
|
MYSQL_BOOTSTRAP="/usr/sbin/mysqld --bootstrap --user=mysql --skip-grant-tables --loose-innodb=OFF --default-storage-engine=myisam"
|
||||||
|
|
||||||
test_mysql_access() {
|
test_mysql_access() {
|
||||||
mysql --no-defaults -u root -h localhost </dev/null >/dev/null 2>&1
|
mysql --no-defaults -u root -h localhost </dev/null >/dev/null 2>&1
|
||||||
|
1
debian/mariadb-client-5.5.files
vendored
1
debian/mariadb-client-5.5.files
vendored
@ -11,6 +11,7 @@ usr/bin/mysqlimport
|
|||||||
usr/bin/mysqlreport
|
usr/bin/mysqlreport
|
||||||
usr/bin/mysqlshow
|
usr/bin/mysqlshow
|
||||||
usr/bin/mysqlslap
|
usr/bin/mysqlslap
|
||||||
|
usr/bin/mytop
|
||||||
usr/bin/mysql_waitpid
|
usr/bin/mysql_waitpid
|
||||||
usr/share/lintian/overrides/mariadb-client-5.5
|
usr/share/lintian/overrides/mariadb-client-5.5
|
||||||
usr/share/man/man1/innotop.1
|
usr/share/man/man1/innotop.1
|
||||||
|
4
debian/mariadb-server-5.5.mysql.init
vendored
4
debian/mariadb-server-5.5.mysql.init
vendored
@ -109,7 +109,7 @@ case "${1:-''}" in
|
|||||||
/usr/bin/mysqld_safe > /dev/null 2>&1 &
|
/usr/bin/mysqld_safe > /dev/null 2>&1 &
|
||||||
|
|
||||||
# 6s was reported in #352070 to be too few when using ndbcluster
|
# 6s was reported in #352070 to be too few when using ndbcluster
|
||||||
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-14}"); do
|
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
|
||||||
sleep 1
|
sleep 1
|
||||||
if mysqld_status check_alive nowarn ; then break; fi
|
if mysqld_status check_alive nowarn ; then break; fi
|
||||||
log_progress_msg "."
|
log_progress_msg "."
|
||||||
@ -142,7 +142,7 @@ case "${1:-''}" in
|
|||||||
log_daemon_msg "Killing MariaDB database server by signal" "mysqld"
|
log_daemon_msg "Killing MariaDB database server by signal" "mysqld"
|
||||||
killall -15 mysqld
|
killall -15 mysqld
|
||||||
server_down=
|
server_down=
|
||||||
for i in 1 2 3 4 5 6 7 8 9 10; do
|
for i in 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10; do
|
||||||
sleep 1
|
sleep 1
|
||||||
if mysqld_status check_dead nowarn; then server_down=1; break; fi
|
if mysqld_status check_dead nowarn; then server_down=1; break; fi
|
||||||
done
|
done
|
||||||
|
@ -25,9 +25,7 @@
|
|||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <sys/socket.h>
|
# include <sys/socket.h>
|
||||||
# ifndef HAVE_BROKEN_NETINET_INCLUDES
|
# include <netinet/in.h>
|
||||||
# include <netinet/in.h>
|
|
||||||
# endif
|
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
# include <netdb.h>
|
# include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -766,6 +766,10 @@ void CertDecoder::GetName(NameType nt)
|
|||||||
|
|
||||||
while (source_.get_index() < length) {
|
while (source_.get_index() < length) {
|
||||||
GetSet();
|
GetSet();
|
||||||
|
if (source_.GetError().What() == SET_E) {
|
||||||
|
source_.SetError(NO_ERROR_E); // extensions may only have sequence
|
||||||
|
source_.prev();
|
||||||
|
}
|
||||||
GetSequence();
|
GetSequence();
|
||||||
|
|
||||||
byte b = source_.next();
|
byte b = source_.next();
|
||||||
|
@ -184,7 +184,7 @@ word32 DSA_Signer::Sign(const byte* sha_digest, byte* sig,
|
|||||||
s_ = (kInv * (H + x*r_)) % q;
|
s_ = (kInv * (H + x*r_)) % q;
|
||||||
|
|
||||||
if (!(!!r_ && !!s_))
|
if (!(!!r_ && !!s_))
|
||||||
return -1;
|
return (word32) -1;
|
||||||
|
|
||||||
int rSz = r_.ByteCount();
|
int rSz = r_.ByteCount();
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ SET(HEADERS
|
|||||||
m_ctype.h
|
m_ctype.h
|
||||||
my_attribute.h
|
my_attribute.h
|
||||||
my_compiler.h
|
my_compiler.h
|
||||||
|
handler_state.h
|
||||||
)
|
)
|
||||||
|
|
||||||
INSTALL(FILES ${HEADERS} DESTINATION ${INSTALL_INCLUDEDIR} COMPONENT Development)
|
INSTALL(FILES ${HEADERS} DESTINATION ${INSTALL_INCLUDEDIR} COMPONENT Development)
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
choose the Solaris implementation on Solaris (mainly for SunStudio
|
choose the Solaris implementation on Solaris (mainly for SunStudio
|
||||||
compilers).
|
compilers).
|
||||||
*/
|
*/
|
||||||
# if defined(_MSV_VER)
|
# if defined(_MSC_VER)
|
||||||
# include "generic-msvc.h"
|
# include "generic-msvc.h"
|
||||||
# elif __GNUC__
|
# elif __GNUC__
|
||||||
# if defined(HAVE_SOLARIS_ATOMIC)
|
# if defined(HAVE_SOLARIS_ATOMIC)
|
||||||
|
21
include/handler_state.h
Normal file
21
include/handler_state.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Map handler error message to sql states. Note that this list MUST be in
|
||||||
|
increasing order!
|
||||||
|
See sql_state.c for usage
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ HA_ERR_KEY_NOT_FOUND, "02000", "" },
|
||||||
|
{ HA_ERR_FOUND_DUPP_KEY, "23000", "" },
|
||||||
|
{ HA_ERR_WRONG_COMMAND, "0A000", "" },
|
||||||
|
{ HA_ERR_UNSUPPORTED, "0A000", "" },
|
||||||
|
{ HA_WRONG_CREATE_OPTION, "0A000", "" },
|
||||||
|
{ HA_ERR_FOUND_DUPP_UNIQUE, "23000", "" },
|
||||||
|
{ HA_ERR_UNKNOWN_CHARSET, "0A000", "" },
|
||||||
|
{ HA_ERR_READ_ONLY_TRANSACTION, "25000", "" },
|
||||||
|
{ HA_ERR_LOCK_DEADLOCK, "40001", "" },
|
||||||
|
{ HA_ERR_NO_REFERENCED_ROW, "23000", "" },
|
||||||
|
{ HA_ERR_ROW_IS_REFERENCED, "23000", "" },
|
||||||
|
{ HA_ERR_TABLE_EXIST, "42S01", "" },
|
||||||
|
{ HA_ERR_FOREIGN_DUPLICATE_KEY, "23000", "" },
|
||||||
|
{ HA_ERR_TABLE_READONLY, "25000", "" },
|
||||||
|
{ HA_ERR_AUTOINC_ERANGE, "22003", "" },
|
@ -95,7 +95,7 @@ nolock_wrap(lf_dynarray_iterate, int,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LF_PINBOX_PINS 4
|
#define LF_PINBOX_PINS 4
|
||||||
#define LF_PURGATORY_SIZE 10
|
#define LF_PURGATORY_SIZE 100
|
||||||
|
|
||||||
typedef void lf_pinbox_free_func(void *, void *, void*);
|
typedef void lf_pinbox_free_func(void *, void *, void*);
|
||||||
|
|
||||||
|
@ -62,13 +62,9 @@
|
|||||||
|
|
||||||
# define bmove_align(A,B,C) memcpy((A),(B),(C))
|
# define bmove_align(A,B,C) memcpy((A),(B),(C))
|
||||||
|
|
||||||
#if !defined(HAVE_BCMP)
|
|
||||||
# define bcmp(A,B,C) memcmp((A),(B),(C))
|
# define bcmp(A,B,C) memcmp((A),(B),(C))
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(bzero) && (!defined(HAVE_BZERO) || !HAVE_DECL_BZERO || defined(_AIX))
|
#if !defined(bzero)
|
||||||
/* See autoconf doku: "HAVE_DECL_symbol" will be defined after configure, to 0 or 1 */
|
|
||||||
/* AIX has bzero() as a function, but the declaration prototype is strangely hidden */
|
|
||||||
# define bzero(A,B) memset((A),0,(B))
|
# define bzero(A,B) memset((A),0,(B))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2002, 2011, Oracle and/or its affiliates.
|
Copyright (c) 2002, 2012, Oracle and/or its affiliates.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -79,7 +79,7 @@ struct my_option
|
|||||||
enum get_opt_arg_type arg_type; /**< e.g. REQUIRED_ARG or OPT_ARG */
|
enum get_opt_arg_type arg_type; /**< e.g. REQUIRED_ARG or OPT_ARG */
|
||||||
longlong def_value; /**< Default value */
|
longlong def_value; /**< Default value */
|
||||||
longlong min_value; /**< Min allowed value (for numbers) */
|
longlong min_value; /**< Min allowed value (for numbers) */
|
||||||
longlong max_value; /**< Max allowed value (for numbers) */
|
ulonglong max_value; /**< Max allowed value (for numbers) */
|
||||||
longlong sub_size; /**< Unused */
|
longlong sub_size; /**< Unused */
|
||||||
long block_size; /**< Value should be a mult. of this (for numbers) */
|
long block_size; /**< Value should be a mult. of this (for numbers) */
|
||||||
void *app_type; /**< To be used by an application */
|
void *app_type; /**< To be used by an application */
|
||||||
|
@ -218,11 +218,6 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_THREADS_WITHOUT_SOCKETS
|
|
||||||
/* MIT pthreads does not work with unix sockets */
|
|
||||||
#undef HAVE_SYS_UN_H
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define __EXTENSIONS__ 1 /* We want some extension */
|
#define __EXTENSIONS__ 1 /* We want some extension */
|
||||||
#ifndef __STDC_EXT__
|
#ifndef __STDC_EXT__
|
||||||
#define __STDC_EXT__ 1 /* To get large file support on hpux */
|
#define __STDC_EXT__ 1 /* To get large file support on hpux */
|
||||||
@ -295,18 +290,6 @@ inline double my_ulonglong2double(unsigned long long A) { return (double A); }
|
|||||||
C_MODE_END
|
C_MODE_END
|
||||||
#endif /* _AIX */
|
#endif /* _AIX */
|
||||||
|
|
||||||
#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */
|
|
||||||
#undef HAVE_SNPRINTF
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_BROKEN_PREAD
|
|
||||||
/*
|
|
||||||
pread()/pwrite() are not 64 bit safe on HP-UX 11.0 without
|
|
||||||
installing the kernel patch PHKL_20349 or greater
|
|
||||||
*/
|
|
||||||
#undef HAVE_PREAD
|
|
||||||
#undef HAVE_PWRITE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */
|
#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */
|
||||||
#undef HAVE_INITGROUPS
|
#undef HAVE_INITGROUPS
|
||||||
#endif
|
#endif
|
||||||
@ -812,18 +795,7 @@ inline unsigned long long my_double2ulonglong(double d)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ISINF
|
#ifdef HAVE_ISINF
|
||||||
/* Check if C compiler is affected by GCC bug #39228 */
|
|
||||||
#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF)
|
|
||||||
/* Force store/reload of the argument to/from a 64-bit double */
|
|
||||||
static inline double my_isinf(double x)
|
|
||||||
{
|
|
||||||
volatile double t= x;
|
|
||||||
return isinf(t);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* System-provided isinf() is available and safe to use */
|
|
||||||
#define my_isinf(X) isinf(X)
|
#define my_isinf(X) isinf(X)
|
||||||
#endif
|
|
||||||
#else /* !HAVE_ISINF */
|
#else /* !HAVE_ISINF */
|
||||||
#define my_isinf(X) (!finite(X) && !isnan(X))
|
#define my_isinf(X) (!finite(X) && !isnan(X))
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,7 +43,7 @@ C_MODE_START
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES)
|
#if !defined(__WIN__)
|
||||||
#include <netinet/in_systm.h>
|
#include <netinet/in_systm.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
|
@ -201,28 +201,13 @@ extern int my_pthread_create_detached;
|
|||||||
int sigwait(sigset_t *set, int *sig);
|
int sigwait(sigset_t *set, int *sig);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_NONPOSIX_SIGWAIT
|
|
||||||
#define my_sigwait(A,B) sigwait((A),(B))
|
#define my_sigwait(A,B) sigwait((A),(B))
|
||||||
#else
|
|
||||||
int my_sigwait(const sigset_t *set,int *sig);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT
|
|
||||||
#ifndef SAFE_MUTEX
|
|
||||||
#define pthread_mutex_init(a,b) my_pthread_mutex_noposix_init((a),(b))
|
|
||||||
extern int my_pthread_mutex_noposix_init(pthread_mutex_t *mp,
|
|
||||||
const pthread_mutexattr_t *attr);
|
|
||||||
#endif /* SAFE_MUTEX */
|
|
||||||
#define pthread_cond_init(a,b) my_pthread_cond_noposix_init((a),(b))
|
|
||||||
extern int my_pthread_cond_noposix_init(pthread_cond_t *mp,
|
|
||||||
const pthread_condattr_t *attr);
|
|
||||||
#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */
|
|
||||||
|
|
||||||
#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK)
|
#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK)
|
||||||
#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C))
|
#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
|
#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(_AIX)
|
||||||
int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -248,24 +233,12 @@ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
|||||||
#define my_sigset(A,B) signal((A),(B))
|
#define my_sigset(A,B) signal((A),(B))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS)
|
#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE)
|
||||||
#define pthread_attr_setscope(A,B)
|
#define pthread_attr_setscope(A,B)
|
||||||
#undef HAVE_GETHOSTBYADDR_R /* No definition */
|
#undef HAVE_GETHOSTBYADDR_R /* No definition */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX)
|
|
||||||
extern int my_pthread_cond_timedwait(pthread_cond_t *cond,
|
|
||||||
pthread_mutex_t *mutex,
|
|
||||||
struct timespec *abstime);
|
|
||||||
#define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC)
|
|
||||||
#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B))
|
#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B))
|
||||||
#else
|
|
||||||
#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B))
|
|
||||||
void *my_pthread_getspecific_imp(pthread_key_t key);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_LOCALTIME_R
|
#ifndef HAVE_LOCALTIME_R
|
||||||
struct tm *localtime_r(const time_t *clock, struct tm *res);
|
struct tm *localtime_r(const time_t *clock, struct tm *res);
|
||||||
@ -286,34 +259,7 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res);
|
|||||||
#define pthread_key_delete(A) pthread_dummy(0)
|
#define pthread_key_delete(A) pthread_dummy(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */
|
#if defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)
|
||||||
#define pthread_cond_destroy(A) pthread_dummy(0)
|
|
||||||
#define pthread_mutex_destroy(A) pthread_dummy(0)
|
|
||||||
#define pthread_attr_delete(A) pthread_dummy(0)
|
|
||||||
#define pthread_condattr_delete(A) pthread_dummy(0)
|
|
||||||
#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
|
|
||||||
#define pthread_equal(A,B) ((A) == (B))
|
|
||||||
#define pthread_cond_timedwait(a,b,c) pthread_cond_wait((a),(b))
|
|
||||||
#define pthread_attr_init(A) pthread_attr_create(A)
|
|
||||||
#define pthread_attr_destroy(A) pthread_attr_delete(A)
|
|
||||||
#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
|
|
||||||
#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D))
|
|
||||||
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
|
||||||
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
|
||||||
#undef pthread_detach_this_thread
|
|
||||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_DARWIN5_THREADS
|
|
||||||
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
|
||||||
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
|
||||||
#define pthread_condattr_init(A) pthread_dummy(0)
|
|
||||||
#define pthread_condattr_destroy(A) pthread_dummy(0)
|
|
||||||
#undef pthread_detach_this_thread
|
|
||||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
|
|
||||||
/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */
|
/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */
|
||||||
#define pthread_key_create(A,B) \
|
#define pthread_key_create(A,B) \
|
||||||
pthread_keycreate(A,(B) ?\
|
pthread_keycreate(A,(B) ?\
|
||||||
@ -353,7 +299,7 @@ void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size);
|
|||||||
int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_PTHREAD_YIELD_ONE_ARG) && !defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
|
#if !defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
|
||||||
/* no pthread_yield() available */
|
/* no pthread_yield() available */
|
||||||
#ifdef HAVE_SCHED_YIELD
|
#ifdef HAVE_SCHED_YIELD
|
||||||
#define pthread_yield() sched_yield()
|
#define pthread_yield() sched_yield()
|
||||||
@ -514,12 +460,6 @@ int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp);
|
|||||||
|
|
||||||
/* READ-WRITE thread locking */
|
/* READ-WRITE thread locking */
|
||||||
|
|
||||||
#ifdef HAVE_BROKEN_RWLOCK /* For OpenUnix */
|
|
||||||
#undef HAVE_PTHREAD_RWLOCK_RDLOCK
|
|
||||||
#undef HAVE_RWLOCK_INIT
|
|
||||||
#undef HAVE_RWLOCK_T
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS)
|
#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS)
|
||||||
/* use these defs for simple mutex locking */
|
/* use these defs for simple mutex locking */
|
||||||
#define rw_lock_t pthread_mutex_t
|
#define rw_lock_t pthread_mutex_t
|
||||||
|
@ -85,6 +85,7 @@ typedef struct my_aio_result {
|
|||||||
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
|
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
|
||||||
#define MY_SYNC 4096 /* my_copy(): sync dst file */
|
#define MY_SYNC 4096 /* my_copy(): sync dst file */
|
||||||
#define MY_SYNC_DIR 32768 /* my_create/delete/rename: sync directory */
|
#define MY_SYNC_DIR 32768 /* my_create/delete/rename: sync directory */
|
||||||
|
#define MY_SYNC_FILESIZE 65536 /* my_sync(): safe sync when file is extended */
|
||||||
|
|
||||||
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
|
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
|
||||||
#define MY_GIVE_INFO 2 /* Give time info about process*/
|
#define MY_GIVE_INFO 2 /* Give time info about process*/
|
||||||
@ -634,6 +635,7 @@ 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 int my_vfprintf(FILE *stream, const char* format, va_list args);
|
extern int my_vfprintf(FILE *stream, const char* format, va_list args);
|
||||||
extern void my_strerror(char *buf, size_t len, int nr);
|
extern void my_strerror(char *buf, size_t len, int nr);
|
||||||
|
extern int my_fprintf(FILE *stream, const char* format, ...);
|
||||||
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);
|
||||||
extern int my_chmod(const char *name, mode_t mode, myf my_flags);
|
extern int my_chmod(const char *name, mode_t mode, myf my_flags);
|
||||||
@ -682,6 +684,7 @@ extern my_bool has_path(const char *name);
|
|||||||
extern char *convert_dirname(char *to, const char *from, const char *from_end);
|
extern char *convert_dirname(char *to, const char *from, const char *from_end);
|
||||||
extern void to_unix_path(char * name);
|
extern void to_unix_path(char * name);
|
||||||
extern char * fn_ext(const char *name);
|
extern char * fn_ext(const char *name);
|
||||||
|
extern char * fn_ext2(const char *name);
|
||||||
extern char * fn_same(char * toname,const char *name,int flag);
|
extern char * fn_same(char * toname,const char *name,int flag);
|
||||||
extern char * fn_format(char * to,const char *name,const char *dir,
|
extern char * fn_format(char * to,const char *name,const char *dir,
|
||||||
const char *form, uint flag);
|
const char *form, uint flag);
|
||||||
@ -717,6 +720,7 @@ extern int flush_write_cache(RECORD_CACHE *info);
|
|||||||
extern void handle_recived_signals(void);
|
extern void handle_recived_signals(void);
|
||||||
|
|
||||||
extern sig_handler my_set_alarm_variable(int signo);
|
extern sig_handler my_set_alarm_variable(int signo);
|
||||||
|
extern my_bool radixsort_is_appliccable(uint n_items, size_t size_of_element);
|
||||||
extern void my_string_ptr_sort(uchar *base,uint items,size_t size);
|
extern void my_string_ptr_sort(uchar *base,uint items,size_t size);
|
||||||
extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
|
extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
|
||||||
size_t size_of_element,uchar *buffer[]);
|
size_t size_of_element,uchar *buffer[]);
|
||||||
@ -758,6 +762,8 @@ extern size_t my_b_fill(IO_CACHE *info);
|
|||||||
extern void my_b_seek(IO_CACHE *info,my_off_t pos);
|
extern void my_b_seek(IO_CACHE *info,my_off_t pos);
|
||||||
extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length);
|
extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length);
|
||||||
extern my_off_t my_b_filelength(IO_CACHE *info);
|
extern my_off_t my_b_filelength(IO_CACHE *info);
|
||||||
|
extern size_t my_b_write_backtick_quote(IO_CACHE *info, const char *str,
|
||||||
|
size_t len);
|
||||||
extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...);
|
extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...);
|
||||||
extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap);
|
extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap);
|
||||||
extern my_bool open_cached_file(IO_CACHE *cache,const char *dir,
|
extern my_bool open_cached_file(IO_CACHE *cache,const char *dir,
|
||||||
|
@ -167,7 +167,7 @@ enum enum_mysql_show_type
|
|||||||
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
||||||
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
||||||
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
||||||
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG,
|
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC,
|
||||||
SHOW_always_last
|
SHOW_always_last
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ enum enum_mysql_show_type
|
|||||||
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
||||||
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
||||||
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
||||||
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG,
|
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC,
|
||||||
SHOW_always_last
|
SHOW_always_last
|
||||||
};
|
};
|
||||||
struct st_mysql_show_var {
|
struct st_mysql_show_var {
|
||||||
|
@ -94,7 +94,7 @@ enum enum_mysql_show_type
|
|||||||
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
||||||
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
||||||
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
||||||
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG,
|
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC,
|
||||||
SHOW_always_last
|
SHOW_always_last
|
||||||
};
|
};
|
||||||
struct st_mysql_show_var {
|
struct st_mysql_show_var {
|
||||||
|
@ -94,7 +94,7 @@ enum enum_mysql_show_type
|
|||||||
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG,
|
||||||
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
||||||
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
||||||
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG,
|
SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC,
|
||||||
SHOW_always_last
|
SHOW_always_last
|
||||||
};
|
};
|
||||||
struct st_mysql_show_var {
|
struct st_mysql_show_var {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef SQL_COMMON_INCLUDED
|
#ifndef SQL_COMMON_INCLUDED
|
||||||
#define SQL_COMMON_INCLUDED
|
#define SQL_COMMON_INCLUDED
|
||||||
/* Copyright (c) 2003, 2010, Oracle and/or its affiliates.
|
/* Copyright (c) 2003, 2012, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2011, Monty Program Ab
|
Copyright (c) 2010, 2012, Monty Program 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
|
||||||
@ -82,8 +82,9 @@ typedef struct st_mysql_methods
|
|||||||
0, arg, length, 1, stmt)
|
0, arg, length, 1, stmt)
|
||||||
|
|
||||||
extern CHARSET_INFO *default_client_charset_info;
|
extern CHARSET_INFO *default_client_charset_info;
|
||||||
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
MYSQL_FIELD *unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,
|
||||||
my_bool default_value, uint server_capabilities);
|
uint fields, my_bool default_value,
|
||||||
|
uint server_capabilities);
|
||||||
void free_rows(MYSQL_DATA *cur);
|
void free_rows(MYSQL_DATA *cur);
|
||||||
void free_old_query(MYSQL *mysql);
|
void free_old_query(MYSQL *mysql);
|
||||||
void end_server(MYSQL *mysql);
|
void end_server(MYSQL *mysql);
|
||||||
|
@ -17,7 +17,6 @@ INCLUDE_DIRECTORIES(
|
|||||||
${CMAKE_SOURCE_DIR}/include
|
${CMAKE_SOURCE_DIR}/include
|
||||||
${CMAKE_SOURCE_DIR}/libmysql
|
${CMAKE_SOURCE_DIR}/libmysql
|
||||||
${CMAKE_SOURCE_DIR}/regex
|
${CMAKE_SOURCE_DIR}/regex
|
||||||
${CMAKE_SOURCE_DIR}/sql
|
|
||||||
${CMAKE_SOURCE_DIR}/strings
|
${CMAKE_SOURCE_DIR}/strings
|
||||||
${SSL_INCLUDE_DIRS}
|
${SSL_INCLUDE_DIRS}
|
||||||
${SSL_INTERNAL_INCLUDE_DIRS}
|
${SSL_INTERNAL_INCLUDE_DIRS}
|
||||||
|
@ -26,10 +26,6 @@
|
|||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE)
|
|
||||||
#undef HAVE_GETPASS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPASS
|
#ifdef HAVE_GETPASS
|
||||||
#ifdef HAVE_PWD_H
|
#ifdef HAVE_PWD_H
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates
|
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates
|
||||||
|
Copyright (c) 2009, 2012, Monty Program 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
|
||||||
@ -811,7 +812,7 @@ MYSQL_FIELD *cli_list_fields(MYSQL *mysql)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mysql->field_count= (uint) query->rows;
|
mysql->field_count= (uint) query->rows;
|
||||||
return unpack_fields(query,&mysql->field_alloc,
|
return unpack_fields(mysql, query,&mysql->field_alloc,
|
||||||
mysql->field_count, 1, mysql->server_capabilities);
|
mysql->field_count, 1, mysql->server_capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -871,7 +872,7 @@ mysql_list_processes(MYSQL *mysql)
|
|||||||
if (!(fields = (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*) 0,
|
if (!(fields = (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*) 0,
|
||||||
protocol_41(mysql) ? 7 : 5)))
|
protocol_41(mysql) ? 7 : 5)))
|
||||||
DBUG_RETURN(NULL);
|
DBUG_RETURN(NULL);
|
||||||
if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,field_count,0,
|
if (!(mysql->fields=unpack_fields(mysql, fields,&mysql->field_alloc,field_count,0,
|
||||||
mysql->server_capabilities)))
|
mysql->server_capabilities)))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
mysql->status=MYSQL_STATUS_GET_RESULT;
|
mysql->status=MYSQL_STATUS_GET_RESULT;
|
||||||
@ -1456,7 +1457,7 @@ my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
|
|||||||
|
|
||||||
if (!(fields_data= (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*)0,7)))
|
if (!(fields_data= (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*)0,7)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
if (!(stmt->fields= unpack_fields(fields_data,&stmt->mem_root,
|
if (!(stmt->fields= unpack_fields(mysql, fields_data,&stmt->mem_root,
|
||||||
field_count,0,
|
field_count,0,
|
||||||
mysql->server_capabilities)))
|
mysql->server_capabilities)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
@ -44,6 +44,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||||||
../sql-common/client_plugin.c ../sql-common/mysql_async.c
|
../sql-common/client_plugin.c ../sql-common/mysql_async.c
|
||||||
../sql/password.c ../sql/discover.cc ../sql/derror.cc
|
../sql/password.c ../sql/discover.cc ../sql/derror.cc
|
||||||
../sql/field.cc ../sql/field_conv.cc
|
../sql/field.cc ../sql/field_conv.cc
|
||||||
|
../sql/filesort_utils.cc
|
||||||
../sql/filesort.cc ../sql/gstream.cc ../sql/slave.cc
|
../sql/filesort.cc ../sql/gstream.cc ../sql/slave.cc
|
||||||
../sql/signal_handler.cc
|
../sql/signal_handler.cc
|
||||||
../sql/handler.cc ../sql/hash_filo.cc ../sql/hostname.cc
|
../sql/handler.cc ../sql/hash_filo.cc ../sql/hostname.cc
|
||||||
@ -96,6 +97,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||||||
../sql/create_options.cc ../sql/rpl_utility.cc
|
../sql/create_options.cc ../sql/rpl_utility.cc
|
||||||
../sql/rpl_reporting.cc
|
../sql/rpl_reporting.cc
|
||||||
../sql/sql_expression_cache.cc
|
../sql/sql_expression_cache.cc
|
||||||
|
../sql/my_apc.cc ../sql/my_apc.h
|
||||||
${GEN_SOURCES}
|
${GEN_SOURCES}
|
||||||
${MYSYS_LIBWRAP_SOURCE}
|
${MYSYS_LIBWRAP_SOURCE}
|
||||||
)
|
)
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||||
${CMAKE_SOURCE_DIR}/libmysqld/include
|
${CMAKE_SOURCE_DIR}/libmysqld/include
|
||||||
${CMAKE_SOURCE_DIR}/regex
|
${CMAKE_SOURCE_DIR}/regex
|
||||||
${CMAKE_SOURCE_DIR}/sql
|
${CMAKE_SOURCE_DIR}/sql
|
||||||
${MY_READLINE_INCLUDE_DIR}
|
${MY_READLINE_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ SET(MAN1_SERVER innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1
|
|||||||
mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysql_zap.1
|
mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysql_zap.1
|
||||||
mysqld_multi.1 mysqld_safe.1 mysqldumpslow.1 mysqlhotcopy.1
|
mysqld_multi.1 mysqld_safe.1 mysqldumpslow.1 mysqlhotcopy.1
|
||||||
mysqlman.1 mysqltest.1 perror.1 replace.1 resolve_stack_dump.1
|
mysqlman.1 mysqltest.1 perror.1 replace.1 resolve_stack_dump.1
|
||||||
resolveip.1)
|
resolveip.1 mysqlbug.1)
|
||||||
SET(MAN8_SERVER mysqld.8 mysqlmanager.8)
|
SET(MAN8_SERVER mysqld.8 mysqlmanager.8)
|
||||||
SET(MAN1_CLIENT msql2mysql.1 mysql.1 mysql_find_rows.1 mysql_waitpid.1
|
SET(MAN1_CLIENT msql2mysql.1 mysql.1 mysql_find_rows.1 mysql_waitpid.1
|
||||||
mysqlaccess.1 mysqladmin.1 mysqlbinlog.1 mysqlcheck.1
|
mysqlaccess.1 mysqladmin.1 mysqlbinlog.1 mysqlcheck.1
|
||||||
|
@ -205,16 +205,55 @@ DROP PROCEDURE p4;
|
|||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
# Test of a too big SET INSERT_ID: see if the truncated value goes
|
# Test of a too big SET INSERT_ID.
|
||||||
# into binlog (right), or the too big value (wrong); we look at the
|
# This should generate an error and should not be put in binlog
|
||||||
# binlog further down with SHOW BINLOG EVENTS.
|
# We look at the binlog further down with SHOW BINLOG EVENTS.
|
||||||
|
|
||||||
reset master;
|
reset master;
|
||||||
create table t1 (id tinyint auto_increment primary key);
|
create table t1 (id tinyint auto_increment primary key);
|
||||||
|
insert into t1 values(5);
|
||||||
set insert_id=128;
|
set insert_id=128;
|
||||||
insert into t1 values(null);
|
--error 167
|
||||||
|
insert into t1 values(null) /* Not binlogged */;
|
||||||
|
|
||||||
|
# The followin insert ignore will be put in binlog
|
||||||
|
set insert_id=128;
|
||||||
|
insert ignore into t1 values(null) /* Insert 128 */;
|
||||||
|
|
||||||
|
# Insert with duplicate key error should not go into binglo
|
||||||
|
set insert_id=5;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t1 values(null) /* Not binlogged */;
|
||||||
|
|
||||||
|
# Insert with autogenerated key + duplicate key error should go into binlog
|
||||||
|
set insert_id=5;
|
||||||
|
insert ignore into t1 values(null) /* Insert 5 */;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
# Same tests but with 2 rows inserted at a time
|
||||||
|
|
||||||
|
create table t1 (id tinyint auto_increment primary key) engine=myisam;
|
||||||
|
set insert_id=128;
|
||||||
|
--error 167
|
||||||
|
insert into t1 values(5),(null) /* Insert_id 128 */;
|
||||||
|
|
||||||
|
# The followin insert ignore will be put in binlog
|
||||||
|
set insert_id=128;
|
||||||
|
insert ignore into t1 values (4),(null) /* Insert_id 128 */;
|
||||||
|
|
||||||
|
# Insert with duplicate key error should not go into binglo
|
||||||
|
set insert_id=5;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t1 values(3),(null) /* Insert_id 5 */;
|
||||||
|
|
||||||
|
# Insert with autogenerated key + duplicate key error should go into binlog
|
||||||
|
set insert_id=5;
|
||||||
|
insert ignore into t1 values(2),(null) /* Insert_id 5 */;
|
||||||
|
select * from t1 order by id;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
# bug#22027
|
# bug#22027
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
create table if not exists t2 select * from t1;
|
create table if not exists t2 select * from t1;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
# BUG#20627: INSERT DELAYED does not honour auto_increment_* variables
|
# BUG#20627: INSERT DELAYED does not honour auto_increment_* variables
|
||||||
# Bug in this test: BUG#38068: binlog_stm_binlog fails sporadically in pushbuild
|
# Bug in this test: BUG#38068: binlog_stm_binlog fails sporadically in pushbuild
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
|
||||||
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
||||||
|
|
||||||
|
@ -318,8 +318,8 @@ connection con4;
|
|||||||
select get_lock("a",10); # wait for rollback to finish
|
select get_lock("a",10); # wait for rollback to finish
|
||||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
||||||
{
|
{
|
||||||
--let $binlog_rollback= query_get_value(SHOW BINLOG EVENTS, Pos, 7)
|
--let $binlog_rollback= query_get_value(SHOW BINLOG EVENTS, Pos, 8)
|
||||||
--let $binlog_query= query_get_value(SHOW BINLOG EVENTS, Info, 7)
|
--let $binlog_query= query_get_value(SHOW BINLOG EVENTS, Info, 8)
|
||||||
if ($binlog_query != ROLLBACK) {
|
if ($binlog_query != ROLLBACK) {
|
||||||
--echo Wrong query from SHOW BINLOG EVENTS. Expected ROLLBACK, got '$binlog_query'
|
--echo Wrong query from SHOW BINLOG EVENTS. Expected ROLLBACK, got '$binlog_query'
|
||||||
--source include/show_rpl_debug_info.inc
|
--source include/show_rpl_debug_info.inc
|
||||||
|
@ -325,7 +325,8 @@ if ($CRC_RET_stmt_sidef) {
|
|||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS;
|
||||||
--die Wrong number of warnings.
|
--die Wrong number of warnings.
|
||||||
}
|
}
|
||||||
--let $binlog_event= query_get_value(SHOW BINLOG EVENTS, Event_type, 2)
|
# There should be no events after format description and binlog checkpoint.
|
||||||
|
--let $binlog_event= query_get_value(SHOW BINLOG EVENTS, Event_type, 3)
|
||||||
if ($binlog_event != No such row) {
|
if ($binlog_event != No such row) {
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
--echo ******** Failure! Something was written to the binlog despite SQL_LOG_BIN=0 ********
|
--echo ******** Failure! Something was written to the binlog despite SQL_LOG_BIN=0 ********
|
||||||
@ -345,23 +346,23 @@ if ($CRC_RET_stmt_sidef) {
|
|||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS;
|
||||||
--die Warnings printed
|
--die Warnings printed
|
||||||
}
|
}
|
||||||
--let $event_type= query_get_value(SHOW BINLOG EVENTS, Event_type, 3)
|
--let $event_type= query_get_value(SHOW BINLOG EVENTS, Event_type, 4)
|
||||||
# The first event is format_description, the second is
|
# The first event is format_description, the second is Binlog_checkpoint,
|
||||||
# Query_event('BEGIN'), and the third should be our Query
|
# the third Query_event('BEGIN'), and the fourth should be our Query
|
||||||
# for 'INSERT DELAYED' unsafe_type 3, which is safe after
|
# for 'INSERT DELAYED' unsafe_type 3, which is safe after
|
||||||
# the fix of bug#54579.
|
# the fix of bug#54579.
|
||||||
if (`SELECT $unsafe_type = 3 AND '$event_type' != 'Query'`) {
|
if (`SELECT $unsafe_type = 3 AND '$event_type' != 'Query'`) {
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
--echo ******** Failure! Event number 3 was a '$event_type', not a 'Query'. ********
|
--echo ******** Failure! Event number 4 was a '$event_type', not a 'Query'. ********
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS;
|
||||||
--die Wrong events in binlog.
|
--die Wrong events in binlog.
|
||||||
}
|
}
|
||||||
# The first event is format_description, the second is
|
# The first event is format_description, the second is Binlog_checkpoint,
|
||||||
# Query_event('BEGIN'), and the third should be our Table_map
|
# the third is Query_event('BEGIN'), and the fourth should be our Table_map
|
||||||
# for unsafe statement.
|
# for unsafe statement.
|
||||||
if (`SELECT $unsafe_type != 3 AND '$event_type' != 'Table_map'`) {
|
if (`SELECT $unsafe_type != 3 AND '$event_type' != 'Table_map'`) {
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
--echo ******** Failure! Event number 3 was a '$event_type', not a 'Table_map'. ********
|
--echo ******** Failure! Event number 4 was a '$event_type', not a 'Table_map'. ********
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS;
|
||||||
--die Wrong events in binlog.
|
--die Wrong events in binlog.
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ set auto_increment_increment=11;
|
|||||||
set auto_increment_offset=4;
|
set auto_increment_offset=4;
|
||||||
insert into t1 values(null);
|
insert into t1 values(null);
|
||||||
insert into t1 values(null);
|
insert into t1 values(null);
|
||||||
--error ER_DUP_ENTRY
|
--error 167
|
||||||
insert into t1 values(null);
|
insert into t1 values(null);
|
||||||
select a, mod(a-@@auto_increment_offset,@@auto_increment_increment) from t1 order by a;
|
select a, mod(a-@@auto_increment_offset,@@auto_increment_increment) from t1 order by a;
|
||||||
|
|
||||||
@ -120,6 +120,8 @@ create table t2 (a tinyint unsigned not null auto_increment primary key) engine=
|
|||||||
set auto_increment_increment=10;
|
set auto_increment_increment=10;
|
||||||
set auto_increment_offset=1;
|
set auto_increment_offset=1;
|
||||||
set insert_id=1000;
|
set insert_id=1000;
|
||||||
|
insert into t2 values(10);
|
||||||
|
--error 167
|
||||||
insert into t2 values(null);
|
insert into t2 values(null);
|
||||||
select a, mod(a-@@auto_increment_offset,@@auto_increment_increment) from t2 order by a;
|
select a, mod(a-@@auto_increment_offset,@@auto_increment_increment) from t2 order by a;
|
||||||
|
|
||||||
@ -127,6 +129,7 @@ select a, mod(a-@@auto_increment_offset,@@auto_increment_increment) from t2 orde
|
|||||||
create table t3 like t1;
|
create table t3 like t1;
|
||||||
set auto_increment_increment=1000;
|
set auto_increment_increment=1000;
|
||||||
set auto_increment_offset=700;
|
set auto_increment_offset=700;
|
||||||
|
--error 167
|
||||||
insert into t3 values(null);
|
insert into t3 values(null);
|
||||||
select * from t3 order by a;
|
select * from t3 order by a;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
@ -34,7 +34,7 @@ INSERT INTO t3 VALUES (3);
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
# Save BEGIN event into variable
|
# Save BEGIN event into variable
|
||||||
let $master_pos_begin= query_get_value(SHOW BINLOG EVENTS, Pos, 5);
|
let $master_pos_begin= query_get_value(SHOW BINLOG EVENTS, Pos, 6);
|
||||||
--echo
|
--echo
|
||||||
|
|
||||||
# 1) Test deadlock
|
# 1) Test deadlock
|
||||||
|
@ -102,7 +102,9 @@ CREATE TABLE t1(a int, UNIQUE(a));
|
|||||||
--let $_start= query_get_value(SHOW MASTER STATUS, Position, 1)
|
--let $_start= query_get_value(SHOW MASTER STATUS, Position, 1)
|
||||||
|
|
||||||
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
||||||
|
--disable_warnings
|
||||||
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
||||||
|
--enable_warnings
|
||||||
flush table t1; # to wait for INSERT DELAYED to be done
|
flush table t1; # to wait for INSERT DELAYED to be done
|
||||||
if (`SELECT @@global.binlog_format = 'STATEMENT'`)
|
if (`SELECT @@global.binlog_format = 'STATEMENT'`)
|
||||||
{
|
{
|
||||||
@ -133,7 +135,7 @@ if (`SELECT @@global.binlog_format = 'STATEMENT'`)
|
|||||||
{
|
{
|
||||||
#must show two INSERT DELAYED
|
#must show two INSERT DELAYED
|
||||||
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||||
--let $binlog_limit= 1,6
|
--let $binlog_limit= 2,6
|
||||||
--source include/show_binlog_events.inc
|
--source include/show_binlog_events.inc
|
||||||
}
|
}
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
@ -34,7 +34,7 @@ reset slave;
|
|||||||
--echo # Test 1
|
--echo # Test 1
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
set @my_max_binlog_size= @@global.max_binlog_size;
|
set @my_max_binlog_size= @@global.max_binlog_size, @my_max_relay_log_size=@@global.max_relay_log_size;
|
||||||
set global max_binlog_size=8192;
|
set global max_binlog_size=8192;
|
||||||
set global max_relay_log_size=8192-1; # mapped to 4096
|
set global max_relay_log_size=8192-1; # mapped to 4096
|
||||||
select @@global.max_relay_log_size;
|
select @@global.max_relay_log_size;
|
||||||
@ -110,6 +110,7 @@ source include/show_master_status.inc;
|
|||||||
# Restore max_binlog_size
|
# Restore max_binlog_size
|
||||||
connection slave;
|
connection slave;
|
||||||
set global max_binlog_size= @my_max_binlog_size;
|
set global max_binlog_size= @my_max_binlog_size;
|
||||||
|
set global max_relay_log_size= @my_max_relay_log_size;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 4.1 tests
|
--echo # End of 4.1 tests
|
||||||
|
@ -15,14 +15,14 @@
|
|||||||
# 1 /* Checksum algorithm */ +
|
# 1 /* Checksum algorithm */ +
|
||||||
# 4 /* CRC32 length */
|
# 4 /* CRC32 length */
|
||||||
#
|
#
|
||||||
# With current number of events = 160,
|
# With current number of events = 161,
|
||||||
#
|
#
|
||||||
# binlog_start_pos = 4 + 19 + 57 + 160 + 1 + 4 = 245.
|
# binlog_start_pos = 4 + 19 + 57 + 161 + 1 + 4 = 246.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
let $binlog_start_pos=245;
|
let $binlog_start_pos=246;
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
SET @binlog_start_pos=245;
|
SET @binlog_start_pos=246;
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
@ -343,6 +343,7 @@ alter table t1 add index i3(key3);
|
|||||||
update t1 set key2=key1,key3=key1;
|
update t1 set key2=key1,key3=key1;
|
||||||
|
|
||||||
# to test the bug, the following must use "sort_union":
|
# to test the bug, the following must use "sort_union":
|
||||||
|
--replace_column 9 REF
|
||||||
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
||||||
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -225,6 +225,8 @@ INSERT INTO global_suppressions VALUES
|
|||||||
("Slave I/O: The slave I/O thread stops because a fatal error is encountered when it tried to SET @master_binlog_checksum on master.*"),
|
("Slave I/O: The slave I/O thread stops because a fatal error is encountered when it tried to SET @master_binlog_checksum on master.*"),
|
||||||
("Slave I/O: Get master BINLOG_CHECKSUM failed with error.*"),
|
("Slave I/O: Get master BINLOG_CHECKSUM failed with error.*"),
|
||||||
("Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error.*"),
|
("Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error.*"),
|
||||||
|
("Slave I/O: Setting master-side filtering of @@skip_replication failed with error:.*"),
|
||||||
|
("Slave I/O: Setting @mariadb_slave_capability failed with error:.*"),
|
||||||
("THE_LAST_SUPPRESSION")||
|
("THE_LAST_SUPPRESSION")||
|
||||||
|
|
||||||
|
|
||||||
|
34
mysql-test/include/mysqlbinlog_have_debug.inc
Normal file
34
mysql-test/include/mysqlbinlog_have_debug.inc
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#############################################
|
||||||
|
# checks if mysqlbinlog is debug compiled
|
||||||
|
# this "cannot" be done simply by using
|
||||||
|
# have_debug.inc
|
||||||
|
#############################################
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--let $temp_out_help_file=$MYSQL_TMP_DIR/mysqlbinlog_help.tmp
|
||||||
|
--exec $MYSQL_BINLOG --help>$temp_out_help_file
|
||||||
|
let log_tmp=$temp_out_help_file;
|
||||||
|
--let $temp_inc=$MYSQL_TMP_DIR/temp.inc
|
||||||
|
let inc_tmp=$temp_inc;
|
||||||
|
|
||||||
|
--perl
|
||||||
|
use strict;
|
||||||
|
my $tmp_file= $ENV{'log_tmp'} or die "log_tmp not set";
|
||||||
|
open(FILE, "$tmp_file") or die("Unable to open $tmp_file: $!\n");
|
||||||
|
my $count = () = grep(/Output debug log/g,<FILE>);
|
||||||
|
close FILE;
|
||||||
|
|
||||||
|
my $temp_inc= $ENV{'inc_tmp'} or die "temp_inc not set";
|
||||||
|
open(FILE_INC,">", "$temp_inc") or die("can't open file \"$temp_inc\": $!");
|
||||||
|
print FILE_INC '--let $is_debug= '.$count;
|
||||||
|
close FILE_INC;
|
||||||
|
EOF
|
||||||
|
--source $temp_inc
|
||||||
|
|
||||||
|
if (!$is_debug)
|
||||||
|
{
|
||||||
|
--skip mysqlbinlog needs to be debug compiled
|
||||||
|
}
|
||||||
|
--remove_file $temp_out_help_file
|
||||||
|
--remove_file $temp_inc
|
||||||
|
--enable_query_log
|
126
mysql-test/include/query_cache_partitions.inc
Normal file
126
mysql-test/include/query_cache_partitions.inc
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
# include/query_cache_partitions.inc
|
||||||
|
#
|
||||||
|
# The variables
|
||||||
|
# $engine_type -- storage engine to be tested
|
||||||
|
# have to be set before sourcing this script.
|
||||||
|
|
||||||
|
eval SET SESSION STORAGE_ENGINE = $engine_type;
|
||||||
|
|
||||||
|
# Initialise
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
set @save_query_cache_size = @@global.query_cache_size;
|
||||||
|
|
||||||
|
--echo # Test that partitions works with query cache
|
||||||
|
|
||||||
|
flush query cache;
|
||||||
|
|
||||||
|
SET GLOBAL query_cache_size=1024*1024*512;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`id` int(11) NOT NULL ,
|
||||||
|
`created_at` datetime NOT NULL,
|
||||||
|
`cool` tinyint default 0
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE t1 PARTITION BY RANGE (TO_DAYS(created_at)) (
|
||||||
|
PARTITION month_2010_4 VALUES LESS THAN (734258),
|
||||||
|
PARTITION month_2010_5 VALUES LESS THAN (734289),
|
||||||
|
PARTITION month_max VALUES LESS THAN MAXVALUE
|
||||||
|
);
|
||||||
|
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, now(), 0);
|
||||||
|
|
||||||
|
flush status;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo # Test that sub-partitions works with query cache
|
||||||
|
|
||||||
|
flush query cache;
|
||||||
|
|
||||||
|
SET GLOBAL query_cache_size=1024*1024*512;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`id` int(11) NOT NULL ,
|
||||||
|
`created_at` datetime NOT NULL,
|
||||||
|
`cool` tinyint default 0
|
||||||
|
)
|
||||||
|
PARTITION BY RANGE (TO_DAYS(created_at))
|
||||||
|
subpartition by hash(cool) subpartitions 3 (
|
||||||
|
PARTITION month_2010_4 VALUES LESS THAN (734258),
|
||||||
|
PARTITION month_2010_5 VALUES LESS THAN (734289),
|
||||||
|
PARTITION month_max VALUES LESS THAN MAXVALUE
|
||||||
|
);
|
||||||
|
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, now(), 0);
|
||||||
|
|
||||||
|
flush status;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MySQL bug#53775 Query on partitioned table returns cached result
|
||||||
|
--echo # from previous transaction
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
flush query cache;
|
||||||
|
flush status;
|
||||||
|
|
||||||
|
SET GLOBAL query_cache_size=1024*1024*512;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`id` int(11) NOT NULL ,
|
||||||
|
`created_at` datetime NOT NULL,
|
||||||
|
`cool` tinyint default 0
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE t1 PARTITION BY RANGE (TO_DAYS(created_at)) (
|
||||||
|
PARTITION month_2010_4 VALUES LESS THAN (734258),
|
||||||
|
PARTITION month_2010_5 VALUES LESS THAN (734289),
|
||||||
|
PARTITION month_max VALUES LESS THAN MAXVALUE
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, now(), 0);
|
||||||
|
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE `t1` SET `cool` = 1 WHERE `id` = 1;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
BEGIN;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT cool FROM `t1` WHERE (`t1`.id = 1) LIMIT 1;
|
||||||
|
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
set @@global.query_cache_size = @save_query_cache_size;
|
@ -74,7 +74,6 @@ 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
|
||||||
@ -103,8 +102,5 @@ let $_orphan_relay_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
|
|||||||
# 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
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#
|
#
|
||||||
# $binlog_start
|
# $binlog_start
|
||||||
# Position for the 'FROM' clause of SHOW BINLOG EVENTS. If none
|
# Position for the 'FROM' clause of SHOW BINLOG EVENTS. If none
|
||||||
# given, starts right after the Format_description_log_event.
|
# given, starts right after the Binlog_checkpoint_log_even.
|
||||||
#
|
#
|
||||||
# $binlog_limit
|
# $binlog_limit
|
||||||
# Limit for the 'LIMIT' clause of SHOW BINLOG EVENTS, i.e.:
|
# Limit for the 'LIMIT' clause of SHOW BINLOG EVENTS, i.e.:
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
--let $binlog_start=245
|
if ($binlog_start)
|
||||||
--replace_result $binlog_start <binlog_start>
|
{
|
||||||
|
--let $_binlog_start=$binlog_start
|
||||||
|
}
|
||||||
|
if (!$binlog_start)
|
||||||
|
{
|
||||||
|
--let $_binlog_start=246
|
||||||
|
}
|
||||||
|
if ($binlog_file)
|
||||||
|
{
|
||||||
|
--let $_in_binlog_file=in '$binlog_file'
|
||||||
|
}
|
||||||
|
--replace_result $_binlog_start <binlog_start>
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/
|
||||||
--eval show binlog events from $binlog_start
|
--eval show binlog events $_in_binlog_file from $_binlog_start
|
||||||
|
@ -10,13 +10,28 @@
|
|||||||
--let $include_filename= show_events.inc
|
--let $include_filename= show_events.inc
|
||||||
--source include/begin_include_file.inc
|
--source include/begin_include_file.inc
|
||||||
|
|
||||||
|
# Do not modify $binlog_start - if we did, it could wrongly persist until a
|
||||||
|
# later call of show_events.inc.
|
||||||
|
if ($binlog_start)
|
||||||
|
{
|
||||||
|
--let $_binlog_start= $binlog_start
|
||||||
|
}
|
||||||
if (!$binlog_start)
|
if (!$binlog_start)
|
||||||
{
|
{
|
||||||
# If $binlog_start is not set, we will set it as the second event's
|
# If $binlog_start is not set, we will set it as the third event's
|
||||||
# position. The first event(Description Event) is always ignored. For
|
# position (second in relay log which has not Binlog Checkpoing event).
|
||||||
# description event's length might be changed because of adding new events,
|
# The first two events (Description Event and Binlog Checkpoint
|
||||||
# 'SHOW BINLOG EVENTS LIMIT 1' is used to get the right value.
|
# event) are always ignored. For description event's length might be changed
|
||||||
--let $binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 1, End_log_pos, 1)
|
# because of adding new events, 'SHOW BINLOG EVENTS LIMIT 2' is used to get
|
||||||
|
# the right value.
|
||||||
|
if ($is_relay_log)
|
||||||
|
{
|
||||||
|
--let $_binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 1, End_log_pos, 1)
|
||||||
|
}
|
||||||
|
if (!$is_relay_log)
|
||||||
|
{
|
||||||
|
--let $_binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 2, End_log_pos, 2)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
--let $_se_old_statement= $statement
|
--let $_se_old_statement= $statement
|
||||||
@ -44,7 +59,7 @@ if ($binlog_file)
|
|||||||
--let $statement= $statement in '$_binlog_file'
|
--let $statement= $statement in '$_binlog_file'
|
||||||
}
|
}
|
||||||
|
|
||||||
--let $statement= $statement from $binlog_start
|
--let $statement= $statement from $_binlog_start
|
||||||
|
|
||||||
if ($binlog_limit != '')
|
if ($binlog_limit != '')
|
||||||
{
|
{
|
||||||
|
@ -19,11 +19,12 @@ select count(*) from t1;
|
|||||||
|
|
||||||
set auto_increment_increment=1000;
|
set auto_increment_increment=1000;
|
||||||
set auto_increment_offset=700;
|
set auto_increment_offset=700;
|
||||||
--error ER_WARN_DATA_OUT_OF_RANGE
|
--error 167
|
||||||
insert into t1 values(null);
|
insert into t1 values(null);
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
|
|
||||||
set @@sql_mode=@org_mode;
|
set @@sql_mode=@org_mode;
|
||||||
|
--error 167
|
||||||
insert into t1 values(null);
|
insert into t1 values(null);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
||||||
|
@ -472,11 +472,13 @@ sub process_suite {
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
my @combs;
|
my @combs;
|
||||||
@combs = combinations_from_file($parent, "$suitedir/combinations")
|
my $from = "$suitedir/combinations";
|
||||||
unless $suite->{skip};
|
@combs = combinations_from_file($parent, $from) unless $suite->{skip};
|
||||||
$suite->{combinations} = [ @combs ];
|
$suite->{combinations} = [ @combs ];
|
||||||
# in overlays it's a union of parent's and overlay's files.
|
# in overlays it's a union of parent's and overlay's files.
|
||||||
unshift @{$suite->{combinations}}, @{$parent->{combinations}} if $parent;
|
unshift @{$suite->{combinations}},
|
||||||
|
grep { not $skip_combinations{"$from => $_->{name}"} }
|
||||||
|
@{$parent->{combinations}} if $parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
# suite.opt
|
# suite.opt
|
||||||
@ -1039,8 +1041,11 @@ sub get_tags_from_file($$) {
|
|||||||
$suite = load_suite_for_file($comb_file) if $prefix[0] eq '';
|
$suite = load_suite_for_file($comb_file) if $prefix[0] eq '';
|
||||||
my @comb;
|
my @comb;
|
||||||
unless ($suite->{skip}) {
|
unless ($suite->{skip}) {
|
||||||
@comb = combinations_from_file($over, "$prefix[0]$comb_file");
|
my $from = "$prefix[0]$comb_file";
|
||||||
push @comb, combinations_from_file(undef, "$prefix[1]$comb_file") if $over;
|
@comb = combinations_from_file($over, $from);
|
||||||
|
push @comb,
|
||||||
|
grep { not $skip_combinations{"$from => $_->{name}"} }
|
||||||
|
combinations_from_file(undef, "$prefix[1]$comb_file") if $over;
|
||||||
}
|
}
|
||||||
push @combinations, [ @comb ];
|
push @combinations, [ @comb ];
|
||||||
|
|
||||||
|
@ -174,6 +174,7 @@ my $DEFAULT_SUITES= join(',', map { "$_-" } qw(
|
|||||||
heap
|
heap
|
||||||
innodb
|
innodb
|
||||||
maria
|
maria
|
||||||
|
multi_source
|
||||||
optimizer_unfixed_bugs
|
optimizer_unfixed_bugs
|
||||||
oqgraph
|
oqgraph
|
||||||
parts
|
parts
|
||||||
@ -1147,7 +1148,6 @@ sub command_line_setup {
|
|||||||
'start-from=s' => \&collect_option,
|
'start-from=s' => \&collect_option,
|
||||||
'big-test+' => \$opt_big_test,
|
'big-test+' => \$opt_big_test,
|
||||||
'combination=s' => \@opt_combinations,
|
'combination=s' => \@opt_combinations,
|
||||||
'skip-combinations' => \&collect_option,
|
|
||||||
'experimental=s' => \@opt_experimentals,
|
'experimental=s' => \@opt_experimentals,
|
||||||
# skip-im is deprecated and silently ignored
|
# skip-im is deprecated and silently ignored
|
||||||
'skip-im' => \&ignore_option,
|
'skip-im' => \&ignore_option,
|
||||||
@ -6265,7 +6265,6 @@ Options to control what engine/variation to run
|
|||||||
all generated configs
|
all generated configs
|
||||||
combination=<opt> Use at least twice to run tests with specified
|
combination=<opt> Use at least twice to run tests with specified
|
||||||
options to mysqld
|
options to mysqld
|
||||||
skip-combinations Ignore combination file (or options)
|
|
||||||
|
|
||||||
Options to control directories to use
|
Options to control directories to use
|
||||||
tmpdir=DIR The directory where temporary files are stored
|
tmpdir=DIR The directory where temporary files are stored
|
||||||
|
10
mysql-test/r/adddate_454.result
Normal file
10
mysql-test/r/adddate_454.result
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
create table t1 (d date);
|
||||||
|
insert into t1 values ('2012-00-00');
|
||||||
|
select * from t1;
|
||||||
|
d
|
||||||
|
2012-00-00
|
||||||
|
update t1 set d = adddate(d, interval 1 day);
|
||||||
|
select * from t1;
|
||||||
|
d
|
||||||
|
NULL
|
||||||
|
drop table t1;
|
@ -150,7 +150,7 @@ select last_insert_id();
|
|||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
255
|
||||||
insert into t1 set i = null;
|
insert into t1 set i = null;
|
||||||
ERROR 23000: Duplicate entry '255' for key 'PRIMARY'
|
ERROR 22003: Out of range value for column 'i' at row 1
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
255
|
||||||
@ -162,8 +162,7 @@ select last_insert_id();
|
|||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
255
|
||||||
insert into t1 set i = null;
|
insert into t1 set i = null;
|
||||||
Warnings:
|
ERROR 22003: Out of range value for column 'i' at row 1
|
||||||
Warning 1264 Out of range value for column 'i' at row 1
|
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
255
|
||||||
@ -487,7 +486,7 @@ SELECT @@SESSION.AUTO_INCREMENT_OFFSET;
|
|||||||
@@SESSION.AUTO_INCREMENT_OFFSET
|
@@SESSION.AUTO_INCREMENT_OFFSET
|
||||||
1
|
1
|
||||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||||
ERROR 22003: Out of range value for column 't1' at row 167
|
ERROR 22003: Out of range value for column 'c1' at row 2
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
266
mysql-test/r/auto_increment_ranges_innodb.result
Normal file
266
mysql-test/r/auto_increment_ranges_innodb.result
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
set default_storage_engine=innodb;
|
||||||
|
drop table if exists t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with smallint
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert into t1 values(32767);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
32766
|
||||||
|
32767
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
32767
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned smallint
|
||||||
|
#
|
||||||
|
create table t1 (a smallint unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(65535);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
65534
|
||||||
|
65535
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
65535
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with integer
|
||||||
|
#
|
||||||
|
create table t1 (a int primary key auto_increment);
|
||||||
|
insert into t1 values(2147483647);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
2147483646
|
||||||
|
2147483647
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
2147483647
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned integer
|
||||||
|
#
|
||||||
|
create table t1 (a int unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(4294967295);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
4294967294
|
||||||
|
4294967295
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
4294967295
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with bigint
|
||||||
|
#
|
||||||
|
create table t1 (a bigint primary key auto_increment);
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned));
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9223372036854775806
|
||||||
|
9223372036854775807
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9223372036854775807
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned bigint
|
||||||
|
#
|
||||||
|
create table t1 (a bigint unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(18446744073709551615-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
18446744073709551614
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615),(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615-1),(NULL),(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Test IGNORE and strict mode
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert ignore into t1 values(32766),(NULL),(NULL),(1);
|
||||||
|
Warnings:
|
||||||
|
Warning 167 Out of range value for column 'a' at row 3
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
32766
|
||||||
|
32767
|
||||||
|
truncate table t1;
|
||||||
|
set @org_mode=@@sql_mode;
|
||||||
|
set @@sql_mode='ansi,traditional';
|
||||||
|
insert ignore into t1 values(32766),(NULL),(NULL);
|
||||||
|
Warnings:
|
||||||
|
Warning 167 Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32766),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
set @@sql_mode=@org_mode;
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Test auto increment with negative numbers
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT, PRIMARY KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (NULL), (2), (-5), (NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
-5
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
5
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES (-5), (NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
-5
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test inserting a value out-of-range into an auto increment column
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a smallint AUTO_INCREMENT, PRIMARY KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (2);
|
||||||
|
INSERT INTO t1 VALUES (32768);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
32767
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test old behaviour
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert into t1 values(32766),(NULL);
|
||||||
|
delete from t1 where a=32767;
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
272
mysql-test/r/auto_increment_ranges_myisam.result
Normal file
272
mysql-test/r/auto_increment_ranges_myisam.result
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
set default_storage_engine=MYISAM;
|
||||||
|
drop table if exists t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with smallint
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert into t1 values(32767);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
32766
|
||||||
|
32767
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
32767
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32767+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
32767
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned smallint
|
||||||
|
#
|
||||||
|
create table t1 (a smallint unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(65535);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
65534
|
||||||
|
65535
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
65535
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(65535+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
65535
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with integer
|
||||||
|
#
|
||||||
|
create table t1 (a int primary key auto_increment);
|
||||||
|
insert into t1 values(2147483647);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
2147483646
|
||||||
|
2147483647
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
2147483647
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(2147483647+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
2147483647
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned integer
|
||||||
|
#
|
||||||
|
create table t1 (a int unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(4294967295);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
4294967294
|
||||||
|
4294967295
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
4294967295
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(4294967295+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
4294967295
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with bigint
|
||||||
|
#
|
||||||
|
create table t1 (a bigint primary key auto_increment);
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned));
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9223372036854775806
|
||||||
|
9223372036854775807
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 2
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9223372036854775807
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)-1),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(cast(9223372036854775807 as unsigned)+1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9223372036854775807
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Testing ranges with unsigned bigint
|
||||||
|
#
|
||||||
|
create table t1 (a bigint unsigned primary key auto_increment);
|
||||||
|
insert into t1 values(18446744073709551615-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615-1);
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
18446744073709551614
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615),(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
18446744073709551615
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(18446744073709551615-1),(NULL),(NULL);
|
||||||
|
ERROR HY000: Failed to read auto-increment value from storage engine
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Test IGNORE and strict mode
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert ignore into t1 values(32766),(NULL),(NULL),(1);
|
||||||
|
Warnings:
|
||||||
|
Warning 167 Out of range value for column 'a' at row 3
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
32766
|
||||||
|
32767
|
||||||
|
truncate table t1;
|
||||||
|
set @org_mode=@@sql_mode;
|
||||||
|
set @@sql_mode='ansi,traditional';
|
||||||
|
insert ignore into t1 values(32766),(NULL),(NULL);
|
||||||
|
Warnings:
|
||||||
|
Warning 167 Out of range value for column 'a' at row 3
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 values(32766),(NULL),(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 3
|
||||||
|
set @@sql_mode=@org_mode;
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Test auto increment with negative numbers
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT, PRIMARY KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (NULL), (2), (-5), (NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
-5
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES (-5), (NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
-5
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test inserting a value out-of-range into an auto increment column
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a smallint AUTO_INCREMENT, PRIMARY KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (2);
|
||||||
|
INSERT INTO t1 VALUES (32768);
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 1
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
32767
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test old behaviour
|
||||||
|
#
|
||||||
|
create table t1 (a smallint primary key auto_increment);
|
||||||
|
insert into t1 values(32766),(NULL);
|
||||||
|
delete from t1 where a=32767;
|
||||||
|
insert into t1 values(NULL);
|
||||||
|
ERROR 22003: Out of range value for column 'a' at row 1
|
||||||
|
drop table t1;
|
@ -220,6 +220,10 @@ a d
|
|||||||
3 11120436154190595086
|
3 11120436154190595086
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
CREATE TABLE t1(a YEAR);
|
||||||
|
SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END;
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
create table t1 (f1 time);
|
create table t1 (f1 time);
|
||||||
insert t1 values ('00:00:00'),('00:01:00');
|
insert t1 values ('00:00:00'),('00:01:00');
|
||||||
select case t1.f1 when '00:00:00' then 1 end from t1;
|
select case t1.f1 when '00:00:00' then 1 end from t1;
|
||||||
|
@ -529,6 +529,8 @@ SUCCESS
|
|||||||
# 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
# 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
||||||
#
|
#
|
||||||
insert ignore t1 set a=2;
|
insert ignore t1 set a=2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1062 Duplicate entry '2' for key 'a'
|
||||||
call p_verify_status_increment(2, 2, 1, 0);
|
call p_verify_status_increment(2, 2, 1, 0);
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
|
||||||
|
@ -96,3 +96,7 @@ SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
|||||||
a
|
a
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
CREATE TABLE t1(a INT ZEROFILL);
|
||||||
|
SELECT 1 FROM t1 WHERE t1.a IN (1, t1.a) AND t1.a=2;
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -53,8 +53,8 @@ set debug_sync='create_table_select_before_create SIGNAL parked WAIT_FOR go';
|
|||||||
create table t1 select 1 as i;;
|
create table t1 select 1 as i;;
|
||||||
set debug_sync='now WAIT_FOR parked';
|
set debug_sync='now WAIT_FOR parked';
|
||||||
alter table t3 rename to t1;
|
alter table t3 rename to t1;
|
||||||
ERROR 42S01: Table 't1' already exists
|
|
||||||
set debug_sync='now SIGNAL go';
|
set debug_sync='now SIGNAL go';
|
||||||
|
ERROR 42S01: Table 't1' already exists
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
@ -65,8 +65,8 @@ set debug_sync='create_table_select_before_create SIGNAL parked WAIT_FOR go';
|
|||||||
create table t1 select 1 as i;;
|
create table t1 select 1 as i;;
|
||||||
set debug_sync='now WAIT_FOR parked';
|
set debug_sync='now WAIT_FOR parked';
|
||||||
alter table t3 rename to t1, add k int;
|
alter table t3 rename to t1, add k int;
|
||||||
ERROR 42S01: Table 't1' already exists
|
|
||||||
set debug_sync='now SIGNAL go';
|
set debug_sync='now SIGNAL go';
|
||||||
|
ERROR 42S01: Table 't1' already exists
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
|
@ -2396,6 +2396,8 @@ a b
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
create table if not exists t1 (a int unique, b int)
|
create table if not exists t1 (a int unique, b int)
|
||||||
ignore select 1 as a, 1 as b union select 1 as a, 2 as b;
|
ignore select 1 as a, 1 as b union select 1 as a, 2 as b;
|
||||||
|
Warnings:
|
||||||
|
Warning 1062 Duplicate entry '1' for key 'a'
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b
|
a b
|
||||||
1 1
|
1 1
|
||||||
|
@ -2039,6 +2039,8 @@ hex(concat(a)) a
|
|||||||
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select hex(concat(a)) from t1;
|
select hex(concat(a)) from t1;
|
||||||
hex(concat(a))
|
hex(concat(a))
|
||||||
@ -2352,6 +2354,8 @@ hex(a)
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
create view v1(a) as select concat(a) from t1;
|
create view v1(a) as select concat(a) from t1;
|
||||||
show columns from v1;
|
show columns from v1;
|
||||||
|
@ -2431,6 +2431,8 @@ hex(concat(a)) a
|
|||||||
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select hex(concat(a)) from t1;
|
select hex(concat(a)) from t1;
|
||||||
hex(concat(a))
|
hex(concat(a))
|
||||||
@ -2744,6 +2746,8 @@ hex(a)
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
create view v1(a) as select concat(a) from t1;
|
create view v1(a) as select concat(a) from t1;
|
||||||
show columns from v1;
|
show columns from v1;
|
||||||
|
@ -2458,6 +2458,8 @@ hex(concat(a)) a
|
|||||||
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select hex(concat(a)) from t1;
|
select hex(concat(a)) from t1;
|
||||||
hex(concat(a))
|
hex(concat(a))
|
||||||
@ -2771,6 +2773,8 @@ hex(a)
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
create view v1(a) as select concat(a) from t1;
|
create view v1(a) as select concat(a) from t1;
|
||||||
show columns from v1;
|
show columns from v1;
|
||||||
|
@ -3341,6 +3341,8 @@ hex(concat(a)) a
|
|||||||
00300030003000300030003000300030003000300030003000300030003000310030003000300030002E0031 00000000000000010000.1
|
00300030003000300030003000300030003000300030003000300030003000310030003000300030002E0031 00000000000000010000.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select hex(concat(a)) from t1;
|
select hex(concat(a)) from t1;
|
||||||
hex(concat(a))
|
hex(concat(a))
|
||||||
@ -3654,6 +3656,8 @@ hex(a)
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
create view v1(a) as select concat(a) from t1;
|
create view v1(a) as select concat(a) from t1;
|
||||||
show columns from v1;
|
show columns from v1;
|
||||||
|
@ -1182,5 +1182,11 @@ a 256
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
||||||
#
|
#
|
||||||
|
# incorrect charset for val_str_ascii
|
||||||
|
#
|
||||||
|
SELECT '2010-10-10 10:10:10' + INTERVAL GeometryType(GeomFromText('POINT(1 1)')) hour_second;
|
||||||
|
'2010-10-10 10:10:10' + INTERVAL GeometryType(GeomFromText('POINT(1 1)')) hour_second
|
||||||
|
2010-10-10 10:10:10
|
||||||
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@ -4197,6 +4197,8 @@ hex(concat(a)) a
|
|||||||
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
30303030303030303030303030303031303030302E31 00000000000000010000.1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
select hex(concat(a)) from t1;
|
select hex(concat(a)) from t1;
|
||||||
hex(concat(a))
|
hex(concat(a))
|
||||||
@ -4510,6 +4512,8 @@ hex(a)
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a year(2));
|
create table t1 (a year(2));
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
create view v1(a) as select concat(a) from t1;
|
create view v1(a) as select concat(a) from t1;
|
||||||
show columns from v1;
|
show columns from v1;
|
||||||
|
8
mysql-test/r/datetime_456.result
Normal file
8
mysql-test/r/datetime_456.result
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
create table t1 (d datetime);
|
||||||
|
insert t1 values (addtime('9999-12-31 23:59:59', '00:00:01')),
|
||||||
|
(from_days(3652499));
|
||||||
|
select * from t1;
|
||||||
|
d
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
drop table t1;
|
@ -1687,7 +1687,6 @@ SELECT t.b, t.c, t1.a
|
|||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
WHERE t.b AND t.c = t1.a;
|
WHERE t.b AND t.c = t1.a;
|
||||||
b c a
|
b c a
|
||||||
8 c c
|
|
||||||
EXPLAIN EXTENDED
|
EXPLAIN EXTENDED
|
||||||
SELECT t.b, t.c, t1.a
|
SELECT t.b, t.c, t1.a
|
||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
@ -1702,7 +1701,6 @@ SELECT t.b, t.c, t1.a
|
|||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
WHERE t.b <> 0 AND t.c = t1.a;
|
WHERE t.b <> 0 AND t.c = t1.a;
|
||||||
b c a
|
b c a
|
||||||
8 c c
|
|
||||||
INSERT INTO t3 VALUES (100), (200);
|
INSERT INTO t3 VALUES (100), (200);
|
||||||
EXPLAIN EXTENDED
|
EXPLAIN EXTENDED
|
||||||
SELECT t.b, t.c, t1.a
|
SELECT t.b, t.c, t1.a
|
||||||
@ -1718,7 +1716,7 @@ SELECT t.b, t.c, t1.a
|
|||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
WHERE t.b AND t.c = t1.a;
|
WHERE t.b AND t.c = t1.a;
|
||||||
b c a
|
b c a
|
||||||
8 c c
|
NULL NULL c
|
||||||
EXPLAIN EXTENDED
|
EXPLAIN EXTENDED
|
||||||
SELECT t.b, t.c, t1.a
|
SELECT t.b, t.c, t1.a
|
||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
@ -1733,7 +1731,7 @@ SELECT t.b, t.c, t1.a
|
|||||||
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
FROM t1, (SELECT t2.b, t2.c FROM t3 RIGHT JOIN t2 ON t2.a = t3.b) AS t
|
||||||
WHERE t.b <> 0 AND t.c = t1.a;
|
WHERE t.b <> 0 AND t.c = t1.a;
|
||||||
b c a
|
b c a
|
||||||
8 c c
|
NULL NULL c
|
||||||
SET optimizer_switch=@save_optimizer_switch;
|
SET optimizer_switch=@save_optimizer_switch;
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
#
|
#
|
||||||
|
@ -160,3 +160,11 @@ ERROR 42S22: Unknown column '' in 'VALUES() function'
|
|||||||
INSERT INTO t2(a,b) VALUES (1,0) ON DUPLICATE KEY UPDATE
|
INSERT INTO t2(a,b) VALUES (1,0) ON DUPLICATE KEY UPDATE
|
||||||
b=(SELECT VALUES(a)+2 FROM t1);
|
b=(SELECT VALUES(a)+2 FROM t1);
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# MDEV-492: incorrect error check before sending OK in mysql_update
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a CHAR(3), b BLOB);
|
||||||
|
UPDATE t1 SET a = 'new'
|
||||||
|
WHERE COLUMN_CREATE( 1, 'v', 1, 'w' ) IS NULL;
|
||||||
|
ERROR 22007: Illegal value used as argument of dynamic column function
|
||||||
|
drop table t1;
|
||||||
|
@ -287,7 +287,7 @@ WHERE t1.f1 GROUP BY t1.f1));
|
|||||||
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 PRIMARY t1 system NULL NULL NULL NULL 1
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY a system NULL NULL NULL NULL 1
|
2 SUBQUERY a system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1
|
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1 Using where
|
||||||
PREPARE stmt FROM
|
PREPARE stmt FROM
|
||||||
'EXPLAIN SELECT 1 FROM t1
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
WHERE 1 > ALL((SELECT t1.f1 FROM t1 RIGHT OUTER JOIN t1 a
|
WHERE 1 > ALL((SELECT t1.f1 FROM t1 RIGHT OUTER JOIN t1 a
|
||||||
@ -297,12 +297,12 @@ EXECUTE stmt;
|
|||||||
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 PRIMARY t1 system NULL NULL NULL NULL 1
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY a system NULL NULL NULL NULL 1
|
2 SUBQUERY a system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1
|
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1 Using where
|
||||||
EXECUTE stmt;
|
EXECUTE stmt;
|
||||||
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 PRIMARY t1 system NULL NULL NULL NULL 1
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY a system NULL NULL NULL NULL 1
|
2 SUBQUERY a system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1
|
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1 Using where
|
||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
PREPARE stmt FROM
|
PREPARE stmt FROM
|
||||||
'EXPLAIN SELECT 1 FROM t1
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
@ -313,12 +313,12 @@ EXECUTE stmt;
|
|||||||
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 PRIMARY t1 system NULL NULL NULL NULL 1
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY a system NULL NULL NULL NULL 1
|
2 SUBQUERY a system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1
|
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1 Using where
|
||||||
EXECUTE stmt;
|
EXECUTE stmt;
|
||||||
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 PRIMARY t1 system NULL NULL NULL NULL 1
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY a system NULL NULL NULL NULL 1
|
2 SUBQUERY a system NULL NULL NULL NULL 1
|
||||||
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1
|
2 SUBQUERY t1 fulltext f1_2,f1 f1 0 1 Using where
|
||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
140
mysql-test/r/features.result
Normal file
140
mysql-test/r/features.result
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
drop table if exists t1;
|
||||||
|
show status like "feature%";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_dynamic_columns 0
|
||||||
|
Feature_fulltext 0
|
||||||
|
Feature_gis 0
|
||||||
|
Feature_locale 0
|
||||||
|
Feature_subquery 0
|
||||||
|
Feature_timezone 0
|
||||||
|
Feature_trigger 0
|
||||||
|
Feature_xml 0
|
||||||
|
#
|
||||||
|
# Feature GIS
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (g POINT);
|
||||||
|
SHOW FIELDS FROM t1;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
g point YES NULL
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(PointFromText('POINT(10 10)')),
|
||||||
|
(PointFromText('POINT(20 10)')),
|
||||||
|
(PointFromText('POINT(20 20)')),
|
||||||
|
(PointFromWKB(AsWKB(PointFromText('POINT(10 20)'))));
|
||||||
|
drop table t1;
|
||||||
|
show status like "feature_gis";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_gis 3
|
||||||
|
#
|
||||||
|
# Feature dynamic columns
|
||||||
|
#
|
||||||
|
set @a= COLUMN_CREATE(1, 1212 AS int);
|
||||||
|
set @b= column_add(@a, 2, 1212 as integer);
|
||||||
|
select column_get(@b, 2 as integer);
|
||||||
|
column_get(@b, 2 as integer)
|
||||||
|
1212
|
||||||
|
show status like "feature_dynamic_columns";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_dynamic_columns 2
|
||||||
|
#
|
||||||
|
# Feature fulltext
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)) engine=myisam;
|
||||||
|
INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'),
|
||||||
|
('Full-text indexes', 'are called collections'),
|
||||||
|
('Only MyISAM tables','support collections'),
|
||||||
|
('Function MATCH ... AGAINST()','is used to do a search'),
|
||||||
|
('Full-text search in MySQL', 'implements vector space model');
|
||||||
|
select * from t1 where MATCH(a,b) AGAINST ("collections");
|
||||||
|
a b
|
||||||
|
Only MyISAM tables support collections
|
||||||
|
Full-text indexes are called collections
|
||||||
|
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
||||||
|
a b
|
||||||
|
Full-text indexes are called collections
|
||||||
|
drop table t1;
|
||||||
|
show status like "feature_fulltext";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_fulltext 2
|
||||||
|
#
|
||||||
|
# Feature locale
|
||||||
|
#
|
||||||
|
SET lc_messages=sr_RS;
|
||||||
|
SET lc_messages=en_US;
|
||||||
|
show status like "feature_locale";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_locale 2
|
||||||
|
#
|
||||||
|
# Feature subquery
|
||||||
|
#
|
||||||
|
select (select 2);
|
||||||
|
(select 2)
|
||||||
|
2
|
||||||
|
SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
||||||
|
(SELECT 1)
|
||||||
|
1
|
||||||
|
2
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (2);
|
||||||
|
select (select a from t1 where t1.a=t2.a), a from t1 as t2;
|
||||||
|
(select a from t1 where t1.a=t2.a) a
|
||||||
|
2 2
|
||||||
|
drop table t1;
|
||||||
|
show status like "feature_subquery";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_subquery 4
|
||||||
|
#
|
||||||
|
# Feature timezone
|
||||||
|
#
|
||||||
|
SELECT FROM_UNIXTIME(unix_timestamp()) > "1970-01-01";
|
||||||
|
FROM_UNIXTIME(unix_timestamp()) > "1970-01-01"
|
||||||
|
1
|
||||||
|
set time_zone="+03:00";
|
||||||
|
SELECT FROM_UNIXTIME(unix_timestamp()) > "1970-01-01";
|
||||||
|
FROM_UNIXTIME(unix_timestamp()) > "1970-01-01"
|
||||||
|
1
|
||||||
|
set time_zone= @@global.time_zone;
|
||||||
|
show status like "feature_timezone";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_timezone 1
|
||||||
|
#
|
||||||
|
# Feature triggers
|
||||||
|
#
|
||||||
|
create table t1 (i int);
|
||||||
|
# let us test some very simple trigger
|
||||||
|
create trigger trg before insert on t1 for each row set @a:=1;
|
||||||
|
set @a:=0;
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
0
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
1
|
||||||
|
SHOW TRIGGERS IN test like 't1';
|
||||||
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
||||||
|
trg INSERT t1 set @a:=1 BEFORE NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
|
drop trigger trg;
|
||||||
|
drop table t1;
|
||||||
|
show status like "%trigger%";
|
||||||
|
Variable_name Value
|
||||||
|
Com_create_trigger 1
|
||||||
|
Com_drop_trigger 1
|
||||||
|
Com_show_create_trigger 0
|
||||||
|
Com_show_triggers 1
|
||||||
|
Executed_triggers 2
|
||||||
|
Feature_trigger 2
|
||||||
|
#
|
||||||
|
# Feature xml
|
||||||
|
#
|
||||||
|
SET @xml='<a aa1="aa1" aa2="aa2">a1<b ba1="ba1">b1<c>c1</c>b2</b>a2</a>';
|
||||||
|
SELECT extractValue(@xml,'/a');
|
||||||
|
extractValue(@xml,'/a')
|
||||||
|
a1 a2
|
||||||
|
select updatexml('<div><div><span>1</span><span>2</span></div></div>',
|
||||||
|
'/','<tr><td>1</td><td>2</td></tr>') as upd1;
|
||||||
|
upd1
|
||||||
|
<tr><td>1</td><td>2</td></tr>
|
||||||
|
show status like "feature_xml";
|
||||||
|
Variable_name Value
|
||||||
|
Feature_xml 2
|
@ -4,7 +4,7 @@ SET @old_debug= @@session.debug;
|
|||||||
#
|
#
|
||||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||||
SET session debug_dbug= '+d,make_sort_keys_alloc_fail';
|
SET session debug_dbug= '+d,alloc_sort_buffer_fail';
|
||||||
CALL mtr.add_suppression("Out of sort memory");
|
CALL mtr.add_suppression("Out of sort memory");
|
||||||
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
||||||
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
||||||
|
@ -489,3 +489,10 @@ UNLOCK TABLES;
|
|||||||
# Switching to connection 'default'.
|
# Switching to connection 'default'.
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test flushing slave or relay logs twice
|
||||||
|
#
|
||||||
|
flush relay logs,relay logs;
|
||||||
|
ERROR HY000: Incorrect usage of FLUSH and RELAY LOGS
|
||||||
|
flush slave,slave;
|
||||||
|
ERROR HY000: Incorrect usage of FLUSH and SLAVE
|
||||||
|
@ -1527,6 +1527,8 @@ DROP TABLE t1;
|
|||||||
# Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
|
# Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
|
||||||
#
|
#
|
||||||
create table t1 (f1 year(2), f2 year(4), f3 date, f4 datetime);
|
create table t1 (f1 year(2), f2 year(4), f3 date, f4 datetime);
|
||||||
|
Warnings:
|
||||||
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
||||||
insert into t1 values
|
insert into t1 values
|
||||||
(98,1998,19980101,"1998-01-01 00:00:00"),
|
(98,1998,19980101,"1998-01-01 00:00:00"),
|
||||||
(00,2000,20000101,"2000-01-01 00:00:01"),
|
(00,2000,20000101,"2000-01-01 00:00:01"),
|
||||||
@ -1838,7 +1840,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
1 PRIMARY t1 range a a 4 NULL 4 100.00 Using where; Using index
|
1 PRIMARY t1 range a a 4 NULL 4 100.00 Using where; Using index
|
||||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select max(`test`.`t1`.`a`) AS `MAX(a)` from `test`.`t1` where (<expr_cache><<cache>(1),<cache>(2)>(<in_optimizer>(<cache>((1,2)),<exists>(select 3,4 having (((1 = 3) or isnull(3)) and ((2 = 4) or isnull(4)) and <is_not_null_test>(3) and <is_not_null_test>(4))))) and (`test`.`t1`.`a` < 10))
|
Note 1003 select max(`test`.`t1`.`a`) AS `MAX(a)` from `test`.`t1` where (<cache>(<in_optimizer>((1,2),<exists>(select 3,4 having (((1 = 3) or isnull(3)) and ((2 = 4) or isnull(4)) and <is_not_null_test>(3) and <is_not_null_test>(4))))) and (`test`.`t1`.`a` < 10))
|
||||||
SELECT MAX(a) FROM t1 WHERE (1,2) IN (SELECT 3,4) AND a<10;
|
SELECT MAX(a) FROM t1 WHERE (1,2) IN (SELECT 3,4) AND a<10;
|
||||||
MAX(a)
|
MAX(a)
|
||||||
NULL
|
NULL
|
||||||
|
@ -146,19 +146,6 @@ count(*) min(7) max(7)
|
|||||||
0 NULL NULL
|
0 NULL NULL
|
||||||
drop table t1m, t1i, t2m, t2i;
|
drop table t1m, t1i, t2m, t2i;
|
||||||
#
|
#
|
||||||
# Bug#13723054 CRASH WITH MIN/MAX AFTER QUICK_GROUP_MIN_MAX_SELECT::NEXT_MIN
|
|
||||||
#
|
|
||||||
CREATE TABLE t1(a BLOB, b VARCHAR(255) CHARSET LATIN1, c INT,
|
|
||||||
KEY(b, c, a(765))) ENGINE=INNODB;
|
|
||||||
INSERT INTO t1(a, b, c) VALUES ('', 'a', 0), ('', 'a', null), ('', 'a', 0);
|
|
||||||
SELECT MIN(c) FROM t1 GROUP BY b;
|
|
||||||
MIN(c)
|
|
||||||
0
|
|
||||||
EXPLAIN SELECT MIN(c) FROM t1 GROUP BY b;
|
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
|
||||||
1 SIMPLE t1 range NULL b 263 NULL 4 Using index for group-by
|
|
||||||
DROP TABLE t1;
|
|
||||||
#
|
|
||||||
# Bug #57954: BIT_AND function returns incorrect results when
|
# Bug #57954: BIT_AND function returns incorrect results when
|
||||||
# semijoin=on
|
# semijoin=on
|
||||||
CREATE TABLE c (
|
CREATE TABLE c (
|
||||||
@ -230,4 +217,18 @@ SELECT member_id_to, COUNT(*) FROM t1 WHERE r_date =
|
|||||||
member_id_to COUNT(*)
|
member_id_to COUNT(*)
|
||||||
518491 2
|
518491 2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
# End of test BUG#12713907
|
||||||
|
#
|
||||||
|
# Bug#13723054 CRASH WITH MIN/MAX AFTER QUICK_GROUP_MIN_MAX_SELECT::NEXT_MIN
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a BLOB, b VARCHAR(255) CHARSET LATIN1, c INT,
|
||||||
|
KEY(b, c, a(765))) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1(a, b, c) VALUES ('', 'a', 0), ('', 'a', null), ('', 'a', 0);
|
||||||
|
SELECT MIN(c) FROM t1 GROUP BY b;
|
||||||
|
MIN(c)
|
||||||
|
0
|
||||||
|
EXPLAIN SELECT MIN(c) FROM t1 GROUP BY b;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range NULL b 263 NULL 4 Using index for group-by
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.5 tests
|
End of 5.5 tests
|
||||||
|
@ -1023,11 +1023,11 @@ MAKETIME(CAST(-1 AS UNSIGNED), 0, 0)
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1105 Cast to unsigned converted negative integer to it's positive complement
|
Note 1105 Cast to unsigned converted negative integer to it's positive complement
|
||||||
Warning 1292 Truncated incorrect time value: '18446744073709551615:00:00'
|
Warning 1292 Truncated incorrect time value: '18446744073709551615:00:00'
|
||||||
SELECT EXTRACT(HOUR FROM '100000:02:03');
|
SELECT EXTRACT(HOUR FROM '10000:02:03');
|
||||||
EXTRACT(HOUR FROM '100000:02:03')
|
EXTRACT(HOUR FROM '10000:02:03')
|
||||||
838
|
838
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect time value: '100000:02:03'
|
Warning 1292 Truncated incorrect time value: '10000:02:03'
|
||||||
CREATE TABLE t1(f1 TIME);
|
CREATE TABLE t1(f1 TIME);
|
||||||
INSERT INTO t1 VALUES('916:00:00 a');
|
INSERT INTO t1 VALUES('916:00:00 a');
|
||||||
Warnings:
|
Warnings:
|
||||||
@ -1922,3 +1922,5 @@ cast(greatest(cast("0-0-0" as date), cast("10:20:05" as time)) as datetime(6))
|
|||||||
select microsecond('12:00:00.123456'), microsecond('2009-12-31 23:59:59.000010');
|
select microsecond('12:00:00.123456'), microsecond('2009-12-31 23:59:59.000010');
|
||||||
microsecond('12:00:00.123456') microsecond('2009-12-31 23:59:59.000010')
|
microsecond('12:00:00.123456') microsecond('2009-12-31 23:59:59.000010')
|
||||||
123456 10
|
123456 10
|
||||||
|
select now(258);
|
||||||
|
ERROR 42000: Too big precision 258 specified for 'now'. Maximum is 6.
|
||||||
|
@ -1428,6 +1428,29 @@ WHERE ST_Contains(ST_Buffer(bridges.position, 15.0), buildings.footprint) = 1;
|
|||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
DROP DATABASE gis_ogs;
|
DROP DATABASE gis_ogs;
|
||||||
|
#
|
||||||
|
# BUG #1043845 st_distance() results are incorrect depending on variable order
|
||||||
|
#
|
||||||
|
select st_distance(geomfromtext('LINESTRING(-95.9673005697771 36.13509598461,
|
||||||
|
-95.9673057475387 36.1344478941074,
|
||||||
|
-95.9673063519371 36.134484524621,
|
||||||
|
-95.9673049102515 36.1343976584193)'),
|
||||||
|
geomfromtext('point(-95.96269500000000000000 36.14181833333330000000)')) ;
|
||||||
|
st_distance(geomfromtext('LINESTRING(-95.9673005697771 36.13509598461,
|
||||||
|
-95.9673057475387 36.1344478941074,
|
||||||
|
-95.9673063519371 36.134484524621,
|
||||||
|
|
||||||
|
0.008148695928146028
|
||||||
|
select st_distance(geomfromtext('point(-95.96269500000000000000 36.14181833333330000000)'),
|
||||||
|
geomfromtext('LINESTRING(-95.9673005697771 36.13509598461,
|
||||||
|
-95.9673057475387 36.1344478941074,
|
||||||
|
-95.9673063519371 36.134484524621,
|
||||||
|
-95.9673049102515 36.1343976584193) ')) ;
|
||||||
|
st_distance(geomfromtext('point(-95.96269500000000000000 36.14181833333330000000)'),
|
||||||
|
geomfromtext('LINESTRING(-95.9673005697771 36.13509598461,
|
||||||
|
-95.9673057475387 36.1344478941074,
|
||||||
|
-95.9673063519371 36.
|
||||||
|
0.008148695928146028
|
||||||
USE test;
|
USE test;
|
||||||
#
|
#
|
||||||
# BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS
|
# BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS
|
||||||
|
@ -2149,3 +2149,48 @@ f1 MIN(f2) MAX(f2)
|
|||||||
4 00:25:00 00:25:00
|
4 00:25:00 00:25:00
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#End of test#49771
|
#End of test#49771
|
||||||
|
#
|
||||||
|
# Bug #58782
|
||||||
|
# Missing rows with SELECT .. WHERE .. IN subquery
|
||||||
|
# with full GROUP BY and no aggr
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
pk INT NOT NULL,
|
||||||
|
col_int_nokey INT,
|
||||||
|
PRIMARY KEY (pk)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (10,7);
|
||||||
|
INSERT INTO t1 VALUES (11,1);
|
||||||
|
INSERT INTO t1 VALUES (12,5);
|
||||||
|
INSERT INTO t1 VALUES (13,3);
|
||||||
|
SELECT pk AS field1, col_int_nokey AS field2
|
||||||
|
FROM t1
|
||||||
|
WHERE col_int_nokey > 0
|
||||||
|
GROUP BY field1, field2;
|
||||||
|
field1 field2
|
||||||
|
10 7
|
||||||
|
11 1
|
||||||
|
12 5
|
||||||
|
13 3
|
||||||
|
CREATE TABLE where_subselect
|
||||||
|
SELECT pk AS field1, col_int_nokey AS field2
|
||||||
|
FROM t1
|
||||||
|
WHERE col_int_nokey > 0
|
||||||
|
GROUP BY field1, field2
|
||||||
|
;
|
||||||
|
SELECT *
|
||||||
|
FROM where_subselect
|
||||||
|
WHERE (field1, field2) IN (
|
||||||
|
SELECT pk AS field1, col_int_nokey AS field2
|
||||||
|
FROM t1
|
||||||
|
WHERE col_int_nokey > 0
|
||||||
|
GROUP BY field1, field2
|
||||||
|
);
|
||||||
|
field1 field2
|
||||||
|
10 7
|
||||||
|
11 1
|
||||||
|
12 5
|
||||||
|
13 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE where_subselect;
|
||||||
|
# End of Bug #58782
|
||||||
|
@ -2403,7 +2403,7 @@ EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
|||||||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
||||||
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 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
2 SUBQUERY t1 index NULL a 10 NULL 15 Using index
|
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||||
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||||
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
|
||||||
@ -2421,7 +2421,7 @@ AND t1_outer1.b = t1_outer2.b;
|
|||||||
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 PRIMARY t1_outer1 ref a a 5 const 1 Using where; Using index
|
1 PRIMARY t1_outer1 ref a a 5 const 1 Using where; Using index
|
||||||
1 PRIMARY t1_outer2 index NULL a 10 NULL 15 Using where; Using index; Using join buffer (flat, BNL join)
|
1 PRIMARY t1_outer2 index NULL a 10 NULL 15 Using where; Using index; Using join buffer (flat, BNL join)
|
||||||
2 SUBQUERY t1 index NULL a 10 NULL 15 Using index
|
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||||
EXPLAIN SELECT (SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
EXPLAIN SELECT (SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||||
FROM t1 AS t1_outer) x2 FROM t1 AS t1_outer2;
|
FROM t1 AS t1_outer) x2 FROM t1 AS t1_outer2;
|
||||||
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
|
||||||
@ -2757,7 +2757,7 @@ EXPLAIN
|
|||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
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
|
||||||
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
||||||
x x x x x x x x x Using index
|
x x x x x x x x x Using where; Using index
|
||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
MIN( a )
|
MIN( a )
|
||||||
NULL
|
NULL
|
||||||
@ -2829,7 +2829,7 @@ EXPLAIN
|
|||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
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
|
||||||
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
||||||
x x x x x x x x x Using index
|
x x x x x x x x x Using where; Using index
|
||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
MIN( a )
|
MIN( a )
|
||||||
NULL
|
NULL
|
||||||
@ -2908,7 +2908,7 @@ EXPLAIN
|
|||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
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
|
||||||
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
x x x x x x x x x Impossible WHERE noticed after reading const tables
|
||||||
x x x x x x x x x Using index
|
x x x x x x x x x Using where; Using index
|
||||||
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
|
||||||
MIN( a )
|
MIN( a )
|
||||||
NULL
|
NULL
|
||||||
|
@ -313,7 +313,7 @@ alter table t1 add index i3(key3);
|
|||||||
update t1 set key2=key1,key3=key1;
|
update t1 set key2=key1,key3=key1;
|
||||||
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
||||||
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 index_merge i2,i3 i3,i2 4,4 NULL 9 Using sort_union(i3,i2); Using where
|
1 SIMPLE t1 index_merge i2,i3 i3,i2 4,4 NULL REF Using sort_union(i3,i2); Using where
|
||||||
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
|
||||||
key1 key2 key3
|
key1 key2 key3
|
||||||
31 31 31
|
31 31 31
|
||||||
@ -777,4 +777,19 @@ commit;
|
|||||||
select * from t1 where t1.zone_id=830 AND modified=9;
|
select * from t1 where t1.zone_id=830 AND modified=9;
|
||||||
pk zone_id modified
|
pk zone_id modified
|
||||||
drop table t0, t1;
|
drop table t0, t1;
|
||||||
|
#
|
||||||
|
# MDEV-376: Wrong result (missing rows) with index_merge+index_merge_intersection, join
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT, b CHAR(1), c CHAR(1), KEY(a), KEY(b)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (8,'v','v'),(8,'m','m'),(9,'d','d');
|
||||||
|
SELECT ta.* FROM t1 AS ta, t1 AS tb
|
||||||
|
WHERE ( tb.b != ta.b OR tb.a = ta.a )
|
||||||
|
AND ( tb.b = ta.c OR tb.b = ta.b );
|
||||||
|
a b c
|
||||||
|
8 v v
|
||||||
|
8 m m
|
||||||
|
9 d d
|
||||||
|
DROP TABLE t1;
|
||||||
set optimizer_switch= @optimizer_switch_save;
|
set optimizer_switch= @optimizer_switch_save;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user