mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.1 into 10.2
This commit is contained in:
@ -274,7 +274,7 @@ ENDIF()
|
|||||||
|
|
||||||
# Set commonly used variables
|
# Set commonly used variables
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
SET(DEFAULT_MYSQL_HOME "C:/MariaDB${MYSQL_BASE_VERSION}")
|
SET(DEFAULT_MYSQL_HOME "C:/Program Files/MariaDB ${MYSQL_BASE_VERSION}")
|
||||||
SET(SHAREDIR share)
|
SET(SHAREDIR share)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
|
SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
|
||||||
|
@ -2089,6 +2089,21 @@ tab1 CREATE TABLE `tab1` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
DROP TABLE `tab1`;
|
DROP TABLE `tab1`;
|
||||||
#
|
#
|
||||||
|
# MDEV-11548 Reproducible server crash after the 2nd ALTER TABLE ADD FOREIGN KEY IF NOT EXISTS
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (id INT UNSIGNED NOT NULL PRIMARY KEY);
|
||||||
|
CREATE TABLE t2 (id1 INT UNSIGNED NOT NULL);
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY IF NOT EXISTS (id1)
|
||||||
|
REFERENCES t1 (id);
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY IF NOT EXISTS (id1)
|
||||||
|
REFERENCES t1 (id);
|
||||||
|
Warnings:
|
||||||
|
Note 1061 Duplicate key name 'id1'
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
# Start of 10.1 tests
|
# Start of 10.1 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -340,3 +340,26 @@ f1()
|
|||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug #16672723 "CAN'T FIND TEMPORARY TABLE".
|
||||||
|
#
|
||||||
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
||||||
|
CREATE TEMPORARY TABLE tmp1(a INT);
|
||||||
|
PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t";
|
||||||
|
# The below statement failed before the fix.
|
||||||
|
EXECUTE stmt1;
|
||||||
|
DROP TEMPORARY TABLES tmp1, tmp2;
|
||||||
|
DEALLOCATE PREPARE stmt1;
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
drop table if exists t1, t2;
|
||||||
|
create temporary table t1 select 1 v;
|
||||||
|
create table t2 (col varchar(45)) select distinct col from (select sf1() as col from t1) t;
|
||||||
|
end$$
|
||||||
|
create function sf1() returns text return 'blah';
|
||||||
|
call test.sp1();
|
||||||
|
call test.sp1();
|
||||||
|
drop procedure sp1;
|
||||||
|
drop function sf1;
|
||||||
|
drop table t2;
|
||||||
|
@ -139,3 +139,10 @@ flush tables;
|
|||||||
create table t1 (a int) engine=archive;
|
create table t1 (a int) engine=archive;
|
||||||
ERROR 42S01: Table 't1' already exists
|
ERROR 42S01: Table 't1' already exists
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
pk
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -132,3 +132,13 @@ flush tables;
|
|||||||
create table t1 (a int) engine=archive;
|
create table t1 (a int) engine=archive;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-11317: Error in deleting non existing .frm for tables with disocvery
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE OR REPLACE TABLE t1 ( pk INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = ARCHIVE;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1735,6 +1735,25 @@ SHOW CREATE TABLE `tab1`;
|
|||||||
ALTER TABLE `tab1` CHANGE COLUMN v_col `v_col` varchar(128) AS (IF(field11='option1',CONCAT_WS(":","field1",field2,field3,field4,field5,field6,field7,field8,field9,field10), CONCAT_WS(":","field1",field11,field2,field3,field4,field5,field6,field7,field8,field9,field10))) PERSISTENT;
|
ALTER TABLE `tab1` CHANGE COLUMN v_col `v_col` varchar(128) AS (IF(field11='option1',CONCAT_WS(":","field1",field2,field3,field4,field5,field6,field7,field8,field9,field10), CONCAT_WS(":","field1",field11,field2,field3,field4,field5,field6,field7,field8,field9,field10))) PERSISTENT;
|
||||||
SHOW CREATE TABLE `tab1`;
|
SHOW CREATE TABLE `tab1`;
|
||||||
DROP TABLE `tab1`;
|
DROP TABLE `tab1`;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-11548 Reproducible server crash after the 2nd ALTER TABLE ADD FOREIGN KEY IF NOT EXISTS
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (id INT UNSIGNED NOT NULL PRIMARY KEY);
|
||||||
|
CREATE TABLE t2 (id1 INT UNSIGNED NOT NULL);
|
||||||
|
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY IF NOT EXISTS (id1)
|
||||||
|
REFERENCES t1 (id);
|
||||||
|
|
||||||
|
ALTER TABLE t2
|
||||||
|
ADD FOREIGN KEY IF NOT EXISTS (id1)
|
||||||
|
REFERENCES t1 (id);
|
||||||
|
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Start of 10.1 tests
|
--echo # Start of 10.1 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -414,3 +414,33 @@ SELECT f1();
|
|||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #16672723 "CAN'T FIND TEMPORARY TABLE".
|
||||||
|
--echo #
|
||||||
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
||||||
|
CREATE TEMPORARY TABLE tmp1(a INT);
|
||||||
|
PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t";
|
||||||
|
--echo # The below statement failed before the fix.
|
||||||
|
EXECUTE stmt1;
|
||||||
|
DROP TEMPORARY TABLES tmp1, tmp2;
|
||||||
|
DEALLOCATE PREPARE stmt1;
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-9084 Calling a stored function from a nested select from temporary table causes unpredictable behavior
|
||||||
|
#
|
||||||
|
delimiter $$;
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
drop table if exists t1, t2;
|
||||||
|
create temporary table t1 select 1 v;
|
||||||
|
create table t2 (col varchar(45)) select distinct col from (select sf1() as col from t1) t;
|
||||||
|
end$$
|
||||||
|
delimiter ;$$
|
||||||
|
create function sf1() returns text return 'blah';
|
||||||
|
call test.sp1();
|
||||||
|
call test.sp1();
|
||||||
|
drop procedure sp1;
|
||||||
|
drop function sf1;
|
||||||
|
drop table t2;
|
||||||
|
@ -357,6 +357,19 @@
|
|||||||
fun:_dl_init
|
fun:_dl_init
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This one is on OpenSuse 10.3 with gcc 5.4
|
||||||
|
{
|
||||||
|
memory "loss" from _dl_init 2
|
||||||
|
Memcheck:Leak
|
||||||
|
fun:malloc
|
||||||
|
fun:pool
|
||||||
|
...
|
||||||
|
fun:call_init*
|
||||||
|
fun:_dl_init
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# dlclose can allocate memory for error message, the memory will be
|
# dlclose can allocate memory for error message, the memory will be
|
||||||
# freed by dlerror or other dl* function.
|
# freed by dlerror or other dl* function.
|
||||||
|
@ -90,7 +90,7 @@ static my_bool defaults_already_read= FALSE;
|
|||||||
|
|
||||||
/* Which directories are searched for options (and in which order) */
|
/* Which directories are searched for options (and in which order) */
|
||||||
|
|
||||||
#define MAX_DEFAULT_DIRS 6
|
#define MAX_DEFAULT_DIRS 7
|
||||||
#define DEFAULT_DIRS_SIZE (MAX_DEFAULT_DIRS + 1) /* Terminate with NULL */
|
#define DEFAULT_DIRS_SIZE (MAX_DEFAULT_DIRS + 1) /* Terminate with NULL */
|
||||||
static const char **default_directories = NULL;
|
static const char **default_directories = NULL;
|
||||||
|
|
||||||
@ -1182,7 +1182,12 @@ static const char **init_default_directories(MEM_ROOT *alloc)
|
|||||||
errors += add_directory(alloc, "C:/", dirs);
|
errors += add_directory(alloc, "C:/", dirs);
|
||||||
|
|
||||||
if (my_get_module_parent(fname_buffer, sizeof(fname_buffer)) != NULL)
|
if (my_get_module_parent(fname_buffer, sizeof(fname_buffer)) != NULL)
|
||||||
|
{
|
||||||
errors += add_directory(alloc, fname_buffer, dirs);
|
errors += add_directory(alloc, fname_buffer, dirs);
|
||||||
|
|
||||||
|
strncat(fname_buffer, "/data", sizeof(fname_buffer));
|
||||||
|
errors += add_directory(alloc, fname_buffer, dirs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -413,6 +413,7 @@ IF(WIN32)
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/mysql_bootstrap_sql.c
|
${CMAKE_CURRENT_BINARY_DIR}/mysql_bootstrap_sql.c
|
||||||
COMPONENT Server
|
COMPONENT Server
|
||||||
)
|
)
|
||||||
|
SET_TARGET_PROPERTIES(mysql_install_db PROPERTIES COMPILE_FLAGS -DINSTALL_PLUGINDIR=${INSTALL_PLUGINDIR})
|
||||||
TARGET_LINK_LIBRARIES(mysql_install_db mysys)
|
TARGET_LINK_LIBRARIES(mysql_install_db mysys)
|
||||||
|
|
||||||
ADD_LIBRARY(winservice STATIC winservice.c)
|
ADD_LIBRARY(winservice STATIC winservice.c)
|
||||||
|
@ -233,6 +233,20 @@ static void get_basedir(char *basedir, int size, const char *mysqld_path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define STR(s) _STR(s)
|
||||||
|
#define _STR(s) #s
|
||||||
|
|
||||||
|
static char *get_plugindir()
|
||||||
|
{
|
||||||
|
static char plugin_dir[2*MAX_PATH];
|
||||||
|
get_basedir(plugin_dir, sizeof(plugin_dir), mysqld_path);
|
||||||
|
strcat(plugin_dir, "/" STR(INSTALL_PLUGINDIR));
|
||||||
|
|
||||||
|
if (access(plugin_dir, 0) == 0)
|
||||||
|
return plugin_dir;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate and initialize command line for mysqld --bootstrap.
|
Allocate and initialize command line for mysqld --bootstrap.
|
||||||
@ -313,6 +327,10 @@ static int create_myini()
|
|||||||
fprintf(myini,"protocol=pipe\n");
|
fprintf(myini,"protocol=pipe\n");
|
||||||
else if (opt_port)
|
else if (opt_port)
|
||||||
fprintf(myini,"port=%d\n",opt_port);
|
fprintf(myini,"port=%d\n",opt_port);
|
||||||
|
|
||||||
|
char *plugin_dir = get_plugindir();
|
||||||
|
if (plugin_dir)
|
||||||
|
fprintf(myini, "plugin-dir=%s\n", plugin_dir);
|
||||||
fclose(myini);
|
fclose(myini);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3415,6 +3415,9 @@ void LEX::first_lists_tables_same()
|
|||||||
if (query_tables_last == &first_table->next_global)
|
if (query_tables_last == &first_table->next_global)
|
||||||
query_tables_last= first_table->prev_global;
|
query_tables_last= first_table->prev_global;
|
||||||
|
|
||||||
|
if (query_tables_own_last == &first_table->next_global)
|
||||||
|
query_tables_own_last= first_table->prev_global;
|
||||||
|
|
||||||
if ((next= *first_table->prev_global= first_table->next_global))
|
if ((next= *first_table->prev_global= first_table->next_global))
|
||||||
next->prev_global= first_table->prev_global;
|
next->prev_global= first_table->prev_global;
|
||||||
/* include in new place */
|
/* include in new place */
|
||||||
|
@ -2474,7 +2474,19 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
|||||||
int frm_delete_error, trigger_drop_error= 0;
|
int frm_delete_error, trigger_drop_error= 0;
|
||||||
/* Delete the table definition file */
|
/* Delete the table definition file */
|
||||||
strmov(end,reg_ext);
|
strmov(end,reg_ext);
|
||||||
frm_delete_error= mysql_file_delete(key_file_frm, path, MYF(MY_WME));
|
if (table_type && table_type != view_pseudo_hton &&
|
||||||
|
table_type->discover_table)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Table type is using discovery and may not need a .frm file.
|
||||||
|
Delete it silently if it exists
|
||||||
|
*/
|
||||||
|
(void) mysql_file_delete(key_file_frm, path, MYF(0));
|
||||||
|
frm_delete_error= 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
frm_delete_error= mysql_file_delete(key_file_frm, path,
|
||||||
|
MYF(MY_WME));
|
||||||
if (frm_delete_error)
|
if (frm_delete_error)
|
||||||
frm_delete_error= my_errno;
|
frm_delete_error= my_errno;
|
||||||
else
|
else
|
||||||
@ -2490,7 +2502,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
|||||||
else if (frm_delete_error && if_exists)
|
else if (frm_delete_error && if_exists)
|
||||||
thd->clear_error();
|
thd->clear_error();
|
||||||
}
|
}
|
||||||
non_tmp_error= error ? TRUE : non_tmp_error;
|
non_tmp_error|= MY_TEST(error);
|
||||||
}
|
}
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
@ -6002,7 +6014,7 @@ drop_create_field:
|
|||||||
while ((f_key= fk_key_it++))
|
while ((f_key= fk_key_it++))
|
||||||
{
|
{
|
||||||
if (my_strcasecmp(system_charset_info, f_key->foreign_id->str,
|
if (my_strcasecmp(system_charset_info, f_key->foreign_id->str,
|
||||||
key->name.str) == 0)
|
keyname) == 0)
|
||||||
goto remove_key;
|
goto remove_key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,26 @@ sub locate_sphinx_binary {
|
|||||||
for (@list) { return $_ if -x $_; }
|
for (@list) { return $_ if -x $_; }
|
||||||
}
|
}
|
||||||
|
|
||||||
# Look for Sphinx binaries.
|
# Look for Sphinx binaries
|
||||||
my $exe_sphinx_indexer = &locate_sphinx_binary('indexer');
|
my $exe_sphinx_indexer = &locate_sphinx_binary('indexer');
|
||||||
|
|
||||||
|
unless ($exe_sphinx_indexer) {
|
||||||
|
mtr_report("Sphinx 'indexer' binary not found, sphinx suite will be skipped");
|
||||||
|
return "No Sphinx";
|
||||||
|
}
|
||||||
my $exe_sphinx_searchd = &locate_sphinx_binary('searchd');
|
my $exe_sphinx_searchd = &locate_sphinx_binary('searchd');
|
||||||
|
|
||||||
return "No Sphinx" unless $exe_sphinx_indexer and $exe_sphinx_searchd;
|
unless ($exe_sphinx_searchd) {
|
||||||
return "No SphinxSE" unless $ENV{HA_SPHINX_SO} or
|
mtr_report("Sphinx 'searchd' binary not found, sphinx suite will be skipped");
|
||||||
$::mysqld_variables{'sphinx'} eq "ON";
|
return "No Sphinx";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for Sphinx engine
|
||||||
|
|
||||||
|
unless ($ENV{HA_SPHINX_SO} or $::mysqld_variables{'sphinx'} eq "ON") {
|
||||||
|
mtr_report("Sphinx engine not found, sphinx suite will be skipped");
|
||||||
|
return "No SphinxSE";
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
local $_ = `"$exe_sphinx_searchd" --help`;
|
local $_ = `"$exe_sphinx_searchd" --help`;
|
||||||
|
Reference in New Issue
Block a user