1
0
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:
Marko Mäkelä
2017-01-10 14:39:28 +02:00
14 changed files with 178 additions and 9 deletions

View File

@ -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})

View File

@ -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
# #
# #

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 #

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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)

View File

@ -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;
} }

View File

@ -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 */

View File

@ -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;
} }
} }

View File

@ -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`;