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
|
||||
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 @@ drop_create_field:
|
||||
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`;
|
||||
|
Reference in New Issue
Block a user