Commit f27ca6f6 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.1 into 10.2

parents 3d46768d 5044dae2
......@@ -274,7 +274,7 @@ ENDIF()
# Set commonly used variables
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)
ELSE()
SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
......
......@@ -2089,6 +2089,21 @@ tab1 CREATE TABLE `tab1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
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
#
#
......
......@@ -340,3 +340,26 @@ f1()
DROP FUNCTION f1;
DROP VIEW v1;
DROP TABLE t1,t2;
#
# Bug #16672723 "CAN'T FIND TEMPORARY TABLE".
#
CREATE FUNCTION f1() RETURNS INT RETURN 1;
CREATE TEMPORARY TABLE tmp1(a INT);
PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t";
# The below statement failed before the fix.
EXECUTE stmt1;
DROP TEMPORARY TABLES tmp1, tmp2;
DEALLOCATE PREPARE stmt1;
DROP FUNCTION f1;
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;
ERROR 42S01: Table 't1' already exists
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;
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;
SHOW CREATE 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 # Start of 10.1 tests
--echo #
......
......@@ -414,3 +414,33 @@ SELECT f1();
DROP FUNCTION f1;
DROP VIEW v1;
DROP TABLE t1,t2;
--echo #
--echo # Bug #16672723 "CAN'T FIND TEMPORARY TABLE".
--echo #
CREATE FUNCTION f1() RETURNS INT RETURN 1;
CREATE TEMPORARY TABLE tmp1(a INT);
PREPARE stmt1 FROM "CREATE TEMPORARY TABLE tmp2 AS SELECT b FROM (SELECT f1() AS b FROM tmp1) AS t";
--echo # The below statement failed before the fix.
EXECUTE stmt1;
DROP TEMPORARY TABLES tmp1, tmp2;
DEALLOCATE PREPARE stmt1;
DROP FUNCTION f1;
#
# 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
}
# 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
# 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) */
#define MAX_DEFAULT_DIRS 6
#define MAX_DEFAULT_DIRS 7
#define DEFAULT_DIRS_SIZE (MAX_DEFAULT_DIRS + 1) /* Terminate with 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);
if (my_get_module_parent(fname_buffer, sizeof(fname_buffer)) != NULL)
{
errors += add_directory(alloc, fname_buffer, dirs);
strncat(fname_buffer, "/data", sizeof(fname_buffer));
errors += add_directory(alloc, fname_buffer, dirs);
}
}
#else
......
......@@ -413,6 +413,7 @@ IF(WIN32)
${CMAKE_CURRENT_BINARY_DIR}/mysql_bootstrap_sql.c
COMPONENT Server
)
SET_TARGET_PROPERTIES(mysql_install_db PROPERTIES COMPILE_FLAGS -DINSTALL_PLUGINDIR=${INSTALL_PLUGINDIR})
TARGET_LINK_LIBRARIES(mysql_install_db mysys)
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.
......@@ -313,6 +327,10 @@ static int create_myini()
fprintf(myini,"protocol=pipe\n");
else if (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);
return 0;
}
......
......@@ -3415,6 +3415,9 @@ void LEX::first_lists_tables_same()
if (query_tables_last == &first_table->next_global)
query_tables_last= first_table->prev_global;
if (query_tables_own_last == &first_table->next_global)
query_tables_own_last= first_table->prev_global;
if ((next= *first_table->prev_global= first_table->next_global))
next->prev_global= first_table->prev_global;
/* include in new place */
......
......@@ -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;
/* Delete the table definition file */
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)
frm_delete_error= my_errno;
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)
thd->clear_error();
}
non_tmp_error= error ? TRUE : non_tmp_error;
non_tmp_error|= MY_TEST(error);
}
if (error)
{
......@@ -6002,7 +6014,7 @@ handle_if_exists_options(THD *thd, TABLE *table, Alter_info *alter_info)
while ((f_key= fk_key_it++))
{
if (my_strcasecmp(system_charset_info, f_key->foreign_id->str,
key->name.str) == 0)
keyname) == 0)
goto remove_key;
}
}
......
......@@ -16,13 +16,26 @@ sub locate_sphinx_binary {
for (@list) { return $_ if -x $_; }
}
# Look for Sphinx binaries.
# Look for Sphinx binaries
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');
return "No Sphinx" unless $exe_sphinx_indexer and $exe_sphinx_searchd;
return "No SphinxSE" unless $ENV{HA_SPHINX_SO} or
$::mysqld_variables{'sphinx'} eq "ON";
unless ($exe_sphinx_searchd) {
mtr_report("Sphinx 'searchd' binary not found, sphinx suite will be skipped");
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`;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment