mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.5 into 10.6
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2018, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2020, MariaDB Corporation.
|
||||
Copyright (c) 2009, 2021, MariaDB Corporation.
|
||||
|
||||
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
|
||||
@@ -91,10 +91,14 @@ extern "C" {
|
||||
#if defined(_WIN32)
|
||||
#include <conio.h>
|
||||
#else
|
||||
#include <readline.h>
|
||||
#if !defined(USE_LIBEDIT_INTERFACE)
|
||||
#include <history.h>
|
||||
#endif
|
||||
# ifdef __APPLE__
|
||||
# include <editline/readline.h>
|
||||
# else
|
||||
# include <readline.h>
|
||||
# if !defined(USE_LIBEDIT_INTERFACE)
|
||||
# include <history.h>
|
||||
# endif
|
||||
# endif
|
||||
#define HAVE_READLINE
|
||||
#define USE_POPEN
|
||||
#endif
|
||||
|
@@ -51,21 +51,82 @@ SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
|
||||
SET(CPACK_PACKAGE_RELOCATABLE FALSE)
|
||||
SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
|
||||
SET(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_URL})
|
||||
SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
|
||||
|
||||
SET(CPACK_RPM_shared_PACKAGE_VENDOR "MariaDB Corporation Ab")
|
||||
SET(CPACK_RPM_shared_PACKAGE_LICENSE "LGPLv2.1")
|
||||
SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB client library")
|
||||
SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "
|
||||
This is LGPL MariaDB client library that can be used to connect to MySQL
|
||||
|
||||
# Set default description for packages
|
||||
SET(CPACK_RPM_PACKAGE_DESCRIPTION "MariaDB: a very fast and robust SQL database server
|
||||
|
||||
It is GPL v2 licensed, which means you can use the it free of charge under the
|
||||
conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
|
||||
|
||||
MariaDB documentation can be found at https://mariadb.com/kb
|
||||
MariaDB bug reports should be submitted through https://jira.mariadb.org")
|
||||
|
||||
# Packages with default description
|
||||
SET(CPACK_RPM_client_PACKAGE_SUMMARY "MariaDB database client binaries")
|
||||
SET(CPACK_RPM_common_PACKAGE_SUMMARY "MariaDB database common files (e.g. /etc/mysql/conf.d/mariadb.cnf)")
|
||||
SET(CPACK_RPM_compat_PACKAGE_SUMMARY "MariaDB database client library MySQL compat package")
|
||||
SET(CPACK_RPM_devel_PACKAGE_SUMMARY "MariaDB database development files")
|
||||
SET(CPACK_RPM_server_PACKAGE_SUMMARY "MariaDB database server binaries")
|
||||
SET(CPACK_RPM_test_PACKAGE_SUMMARY "MariaDB database regression test suite")
|
||||
|
||||
# libmariadb3
|
||||
SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB database client library")
|
||||
SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "This is LGPL MariaDB client library that can be used to connect to MySQL
|
||||
or MariaDB.
|
||||
|
||||
This code is based on the LGPL libmysql client library from MySQL 3.23
|
||||
and PHP's mysqlnd extension.
|
||||
|
||||
This product includes PHP software, freely available from
|
||||
<http://www.php.net/software/>
|
||||
")
|
||||
http://www.php.net/software/")
|
||||
|
||||
# Summary and descriptions per package
|
||||
SET(CPACK_RPM_backup_PACKAGE_SUMMARY "Backup tool for MariaDB server")
|
||||
SET(CPACK_RPM_backup_PACKAGE_DESCRIPTION "Mariabackup is an open source tool provided by MariaDB
|
||||
for performing physical online backups of InnoDB, Aria and MyISAM tables.
|
||||
For InnoDB, “hot online” backups are possible.
|
||||
It was originally forked from Percona XtraBackup 2.3.8.")
|
||||
|
||||
SET(CPACK_RPM_cassandra-engine_PACKAGE_SUMMARY "Cassandra storage engine for MariaDB")
|
||||
SET(CPACK_RPM_cassandra-engine_PACKAGE_DESCRIPTION "The Cassandra Storage Engine allows access to data in a Cassandra cluster from
|
||||
MariaDB, combining the best of SQL and no-SQL worlds. Cassandra SE (storage
|
||||
engine) makes Cassandra's column family appear as a table in MariaDB that you
|
||||
can insert to, update, and select from. You can write joins against this table,
|
||||
it is possible to join data that's stored in MariaDB with data that's stored in
|
||||
Cassandra.")
|
||||
|
||||
SET(CPACK_RPM_connect-engine_PACKAGE_SUMMARY "Connect storage engine for MariaDB")
|
||||
SET(CPACK_RPM_connect-engine_PACKAGE_DESCRIPTION "Connect engine supports a number of file formats (dbf, xml, txt, bin, etc),
|
||||
connections to ODBC tables and remote MySQL tables, as well as a number of
|
||||
other interesting features.")
|
||||
|
||||
SET(CPACK_RPM_cracklib-password-check_PACKAGE_SUMMARY "CrackLib Password Validation Plugin for MariaDB")
|
||||
SET(CPACK_RPM_cracklib-password-check_PACKAGE_DESCRIPTION "This password validation plugin uses cracklib to allow only
|
||||
sufficiently secure (as defined by cracklib) user passwords in MariaDB.")
|
||||
|
||||
SET(CPACK_RPM_gssapi-server_PACKAGE_SUMMARY "GSSAPI authentication plugin for MariaDB server")
|
||||
SET(CPACK_RPM_gssapi-server_PACKAGE_DESCRIPTION "The gssapi authentication plugin allows the user to authenticate with services
|
||||
that use the Generic Security Services Application Program Interface (GSSAPI).
|
||||
The gssapi authentication plugin is most often used for authenticating with Microsoft Active Directory.")
|
||||
|
||||
SET(CPACK_RPM_oqgraph-engine_PACKAGE_SUMMARY "OQGraph storage engine for MariaDB")
|
||||
SET(CPACK_RPM_oqgraph-engine_PACKAGE_DESCRIPTION "The Open Query GRAPH computation engine, or OQGRAPH as the engine itself is called,
|
||||
allows you to handle hierarchies (tree structures) and complex graphs
|
||||
(nodes having many connections in several directions).
|
||||
It is intended to be used for retrieving hierarchical information, such as those used for graphs,
|
||||
routes or social relationships, in plain SQL.")
|
||||
|
||||
SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB")
|
||||
SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed
|
||||
at maximising storage efficiency while maintaining InnoDB-like performance.")
|
||||
|
||||
SET(CPACK_RPM_tokudb-engine_PACKAGE_SUMMARY "TokuDB storage engine for MariaDB")
|
||||
SET(CPACK_RPM_tokudb-engine_PACKAGE_DESCRIPTION "The TokuDB storage engine is for use in high-performance and write-intensive
|
||||
environments, offering increased compression and better performance based
|
||||
on fractal indexes.")
|
||||
|
||||
SET(CPACK_RPM_SPEC_MORE_DEFINE "
|
||||
%define mysql_vendor ${CPACK_PACKAGE_VENDOR}
|
||||
|
@@ -367,6 +367,7 @@ create_worker_threads(uint n)
|
||||
thd)) {
|
||||
msg("compress: pthread_create() failed: "
|
||||
"errno = %d", errno);
|
||||
pthread_mutex_unlock(&thd->ctrl_mutex);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
@@ -383,6 +384,13 @@ create_worker_threads(uint n)
|
||||
return threads;
|
||||
|
||||
err:
|
||||
while (i > 0) {
|
||||
comp_thread_ctxt_t *thd;
|
||||
i--;
|
||||
thd = threads + i;
|
||||
pthread_mutex_unlock(&thd->ctrl_mutex);
|
||||
}
|
||||
|
||||
my_free(threads);
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -150,7 +150,8 @@ sub do_args($$$$$) {
|
||||
my %vars = (
|
||||
vardir => $::opt_vardir,
|
||||
exe => $$exe,
|
||||
args => join(' ', map { quote_from_mtr $_ } @$$args, '--loose-gdb'),
|
||||
args => join(' ', map { quote_from_mtr $_ } @$$args,
|
||||
'--loose-debug-gdb', '--loose-skip-stack-trace'),
|
||||
input => $input,
|
||||
script => "$::opt_vardir/tmp/${k}init.$type",
|
||||
log => "$::opt_vardir/log/$type.$k",
|
||||
|
@@ -2588,6 +2588,22 @@ set max_statement_time= 0;
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
#
|
||||
# MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
|
||||
#
|
||||
set @save_default_engine= @@default_storage_engine;
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
set @@default_storage_engine= @save_default_engine;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
#
|
||||
@@ -3373,5 +3389,31 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
|
||||
#
|
||||
set @save_default_engine= @@default_storage_engine;
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
set @@default_storage_engine= @save_default_engine;
|
||||
#
|
||||
# MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
|
||||
#
|
||||
create table t1 (a int, key idx1(a), key idx2 using btree(a)) engine=memory;
|
||||
alter table t1 rename index idx1 to idx3, algorithm=inplace;
|
||||
delete from t1 where a = 10;
|
||||
alter table t1 drop key idx3, add key idx1(a), algorithm=inplace;
|
||||
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
|
||||
delete from t1 where a = 11;
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
@@ -2099,6 +2099,47 @@ set max_statement_time= 0;
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
|
||||
--echo #
|
||||
set @save_default_engine= @@default_storage_engine;
|
||||
--disable_query_log
|
||||
if ($MTR_COMBINATION_INNODB)
|
||||
{
|
||||
set default_storage_engine= innodb;
|
||||
}
|
||||
if ($MTR_COMBINATION_ARIA)
|
||||
{
|
||||
set default_storage_engine= aria;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
if (!$MTR_COMBINATION_INNODB)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
# There is no inplace ADD INDEX for MyISAM/Aria:
|
||||
create or replace table t1 (x int);
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add unique (x), algorithm=inplace;
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add primary key(x), algorithm=inplace;
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add index(x), algorithm=inplace;
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
# cleanup
|
||||
drop table t1;
|
||||
set @@default_storage_engine= @save_default_engine;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
@@ -2567,6 +2608,59 @@ alter table t1 rename column abc to ABC;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
|
||||
--echo #
|
||||
set @save_default_engine= @@default_storage_engine;
|
||||
--disable_query_log
|
||||
if ($MTR_COMBINATION_INNODB)
|
||||
{
|
||||
set default_storage_engine= innodb;
|
||||
}
|
||||
if ($MTR_COMBINATION_ARIA)
|
||||
{
|
||||
set default_storage_engine= aria;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
if (!$MTR_COMBINATION_INNODB)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
# There is no inplace ADD INDEX for MyISAM/Aria:
|
||||
create or replace table t1 (x int);
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add unique (x), algorithm=inplace;
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add primary key(x), algorithm=inplace;
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 add index(x), algorithm=inplace;
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
|
||||
alter table t1 change x xx int, algorithm=inplace;
|
||||
check table t1;
|
||||
# cleanup
|
||||
drop table t1;
|
||||
set @@default_storage_engine= @save_default_engine;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
|
||||
--echo #
|
||||
create table t1 (a int, key idx1(a), key idx2 using btree(a)) engine=memory;
|
||||
alter table t1 rename index idx1 to idx3, algorithm=inplace;
|
||||
delete from t1 where a = 10;
|
||||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||||
alter table t1 drop key idx3, add key idx1(a), algorithm=inplace;
|
||||
delete from t1 where a = 11;
|
||||
# cleanup
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -14,3 +14,35 @@ DROP TABLE t1;
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
|
||||
--echo #
|
||||
|
||||
SET NAMES cp850;
|
||||
SELECT '' LIKE '' ESCAPE _cp850 0xFF;
|
||||
|
||||
DELIMITER $$;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE ch INT DEFAULT 0x00;
|
||||
DECLARE query TEXT DEFAULT 'SELECT _cp850'''' LIKE _cp850'''' ESCAPE _cp850 0xFF';
|
||||
WHILE ch <= 0xFF DO
|
||||
SET @query= REPLACE(query, 'FF', CONV(ch, 10, 16));
|
||||
SELECT @query;
|
||||
PREPARE stmt FROM @query;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
SET ch=ch+1;
|
||||
END WHILE;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
12
mysql-test/main/ctype_cp866.result
Normal file
12
mysql-test/main/ctype_cp866.result
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Start of 10.2 tests
|
||||
#
|
||||
#
|
||||
# MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
|
||||
#
|
||||
SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF;
|
||||
_cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF
|
||||
1
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
14
mysql-test/main/ctype_cp866.test
Normal file
14
mysql-test/main/ctype_cp866.test
Normal file
@@ -0,0 +1,14 @@
|
||||
--echo #
|
||||
--echo # Start of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
|
||||
--echo #
|
||||
|
||||
SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
@@ -4421,5 +4421,14 @@ DROP TABLE t1;
|
||||
#
|
||||
SET DEFAULT_STORAGE_ENGINE=Default;
|
||||
#
|
||||
# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing
|
||||
#
|
||||
SELECT HEX(WEIGHT_STRING(_tis620 'a\0b'));
|
||||
HEX(WEIGHT_STRING(_tis620 'a\0b'))
|
||||
610062
|
||||
SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci));
|
||||
HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci))
|
||||
610062
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
|
@@ -209,6 +209,13 @@ let $coll='tis620_nopad_bin';
|
||||
let $coll_pad='tis620_bin';
|
||||
--source include/ctype_pad_all_engines.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing
|
||||
--echo #
|
||||
|
||||
SELECT HEX(WEIGHT_STRING(_tis620 'a\0b'));
|
||||
SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci));
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
@@ -6473,5 +6473,24 @@ CAST(_ucs2 0x0061E0030062 AS INT)
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'ab'
|
||||
#
|
||||
# MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
|
||||
#
|
||||
SET NAMES utf8, collation_connection=ucs2_general_ci;
|
||||
SELECT 1 COLLATE ucs2_general_ci;
|
||||
1 COLLATE ucs2_general_ci
|
||||
1
|
||||
SELECT 1 COLLATE ucs2_bin;
|
||||
1 COLLATE ucs2_bin
|
||||
1
|
||||
SELECT HEX(1 COLLATE ucs2_general_ci);
|
||||
HEX(1 COLLATE ucs2_general_ci)
|
||||
0031
|
||||
SELECT HEX(1 COLLATE ucs2_bin);
|
||||
HEX(1 COLLATE ucs2_bin)
|
||||
0031
|
||||
SELECT 1 COLLATE latin1_swedish_ci;
|
||||
ERROR 42000: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'ucs2'
|
||||
SET NAMES utf8;
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
@@ -1150,6 +1150,19 @@ SELECT CAST(_ucs2 0x0061DFFF0062 AS INT);
|
||||
SELECT CAST(_ucs2 0x0061D7000062 AS INT);
|
||||
SELECT CAST(_ucs2 0x0061E0030062 AS INT);
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8, collation_connection=ucs2_general_ci;
|
||||
SELECT 1 COLLATE ucs2_general_ci;
|
||||
SELECT 1 COLLATE ucs2_bin;
|
||||
SELECT HEX(1 COLLATE ucs2_general_ci);
|
||||
SELECT HEX(1 COLLATE ucs2_bin);
|
||||
--error ER_COLLATION_CHARSET_MISMATCH
|
||||
SELECT 1 COLLATE latin1_swedish_ci;
|
||||
SET NAMES utf8;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
@@ -11261,6 +11261,17 @@ DROP TABLE kv;
|
||||
DROP VIEW v1;
|
||||
SET NAMES utf8;
|
||||
#
|
||||
# MDEV-24335 Unexpected question mark in the end of a TINYTEXT column
|
||||
#
|
||||
CREATE TABLE t1 (a TINYTEXT character set utf8);
|
||||
INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250));
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xD1\x84\xD1\x84\xD1\x84...' for column `test`.`t1`.`a` at row 1
|
||||
SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1;
|
||||
LENGTH(a) CHAR_LENGTH(a) RIGHT(a,3)
|
||||
254 127 ффф
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
|
@@ -2184,6 +2184,15 @@ DROP TABLE kv;
|
||||
DROP VIEW v1;
|
||||
SET NAMES utf8;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24335 Unexpected question mark in the end of a TINYTEXT column
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a TINYTEXT character set utf8);
|
||||
INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250));
|
||||
SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
@@ -4149,3 +4149,21 @@ c
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.5 tests
|
||||
#
|
||||
#
|
||||
# MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
|
||||
#
|
||||
SET NAMES utf8mb4;
|
||||
SELECT 1 COLLATE utf8mb4_general_ci;
|
||||
1 COLLATE utf8mb4_general_ci
|
||||
1
|
||||
SELECT 1 COLLATE utf8mb4_bin;
|
||||
1 COLLATE utf8mb4_bin
|
||||
1
|
||||
SELECT 1 COLLATE latin1_swedish_ci;
|
||||
ERROR 42000: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
@@ -2043,3 +2043,22 @@ EXECUTE IMMEDIATE 'SELECT ''😎'' AS c';
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SELECT 1 COLLATE utf8mb4_general_ci;
|
||||
SELECT 1 COLLATE utf8mb4_bin;
|
||||
--error ER_COLLATION_CHARSET_MISMATCH
|
||||
SELECT 1 COLLATE latin1_swedish_ci;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
@@ -597,17 +597,17 @@ t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
UNIQUE KEY `db_row_hash_1` (`db_row_hash_1`),
|
||||
UNIQUE KEY `db_row_hash_2` (`db_row_hash_2`),
|
||||
UNIQUE KEY `d` (`d`) USING HASH,
|
||||
UNIQUE KEY `e` (`e`),
|
||||
UNIQUE KEY `a` (`a`),
|
||||
UNIQUE KEY `d` (`d`) USING HASH
|
||||
UNIQUE KEY `a` (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show keys from t1;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Ignored
|
||||
t1 0 db_row_hash_1 1 db_row_hash_1 A NULL NULL NULL YES BTREE NO
|
||||
t1 0 db_row_hash_2 1 db_row_hash_2 A NULL NULL NULL YES BTREE NO
|
||||
t1 0 d 1 d A NULL NULL NULL YES HASH NO
|
||||
t1 0 e 1 e A NULL NULL NULL YES BTREE NO
|
||||
t1 0 a 1 a A NULL NULL NULL YES BTREE NO
|
||||
t1 0 d 1 d A NULL NULL NULL YES HASH NO
|
||||
alter table t1 add column clm1 blob unique,add column clm2 blob unique;
|
||||
#try changing the name;
|
||||
alter table t1 change column clm1 clm_changed1 blob, change column clm2 clm_changed2 blob;
|
||||
@@ -1494,3 +1494,4 @@ DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (pk INT, a TEXT NOT NULL DEFAULT '', PRIMARY KEY (pk), b INT AUTO_INCREMENT, UNIQUE(b), UNIQUE (a,b)) ENGINE=myisam;
|
||||
ERROR HY000: AUTO_INCREMENT column `b` cannot be used in the UNIQUE index `a`
|
||||
set @@GLOBAL.max_allowed_packet= @allowed_packet;
|
||||
# End of 10.4 tests
|
||||
|
@@ -575,3 +575,4 @@ CREATE TABLE t1 (pk INT, a TEXT NOT NULL DEFAULT '', PRIMARY KEY (pk), b INT AUT
|
||||
|
||||
# Cleanup
|
||||
set @@GLOBAL.max_allowed_packet= @allowed_packet;
|
||||
--echo # End of 10.4 tests
|
||||
|
@@ -291,6 +291,21 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par
|
||||
t2 0 a 1 a A NULL NULL NULL YES HASH NO
|
||||
t2 0 a 2 b A NULL NULL NULL YES HASH NO
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption
|
||||
#
|
||||
CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c));
|
||||
ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c`
|
||||
CREATE TABLE t (c INT AUTO_INCREMENT KEY);
|
||||
CREATE UNIQUE INDEX i USING HASH ON t (c);
|
||||
ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c`
|
||||
INSERT INTO t VALUES (0);
|
||||
SELECT * FROM t;
|
||||
c
|
||||
1
|
||||
DELETE FROM t;
|
||||
DROP TABLE t;
|
||||
# End of 10.4 tests
|
||||
create temporary table tmp ( a int, b int, c blob not null, d int, e int default 0, f int, unique key (c)) engine=innodb;
|
||||
create table t2 (x int);
|
||||
lock table t2 write;
|
||||
|
@@ -370,6 +370,24 @@ show index from t2;
|
||||
# Cleanup
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption
|
||||
--echo #
|
||||
|
||||
--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
|
||||
CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c));
|
||||
|
||||
CREATE TABLE t (c INT AUTO_INCREMENT KEY);
|
||||
--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
|
||||
CREATE UNIQUE INDEX i USING HASH ON t (c);
|
||||
INSERT INTO t VALUES (0);
|
||||
SELECT * FROM t;
|
||||
DELETE FROM t;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
||||
#
|
||||
# MDEV-22113 SIGSEGV, ASAN use-after-poison, Assertion `next_insert_id == 0' in handler::ha_external_lock
|
||||
#
|
||||
|
@@ -4,14 +4,14 @@ OPTIMIZER_TRACE QUERY
|
||||
OPTIMIZER_TRACE TRACE
|
||||
OPTIMIZER_TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE
|
||||
OPTIMIZER_TRACE INSUFFICIENT_PRIVILEGES
|
||||
show variables like 'optimizer_trace';
|
||||
Variable_name Value
|
||||
optimizer_trace enabled=off
|
||||
set optimizer_trace="enabled=on";
|
||||
show variables like 'optimizer_trace';
|
||||
Variable_name Value
|
||||
optimizer_trace enabled=on
|
||||
set optimizer_trace="enabled=off";
|
||||
show variables like 'optimizer_trace';
|
||||
Variable_name Value
|
||||
optimizer_trace enabled=off
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2),(2,3);
|
||||
create table t2 (b int);
|
||||
|
@@ -2,10 +2,10 @@
|
||||
--source include/have_sequence.inc
|
||||
--source include/protocol.inc
|
||||
SELECT table_name, column_name FROM information_schema.columns where table_name="OPTIMIZER_TRACE";
|
||||
show variables like 'optimizer_trace';
|
||||
set optimizer_trace="enabled=on";
|
||||
show variables like 'optimizer_trace';
|
||||
set optimizer_trace="enabled=off";
|
||||
show variables like 'optimizer_trace';
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2),(2,3);
|
||||
|
||||
|
8
mysql-test/main/opt_trace_default.result
Normal file
8
mysql-test/main/opt_trace_default.result
Normal file
@@ -0,0 +1,8 @@
|
||||
# Verify that compile-time default for optimizer trace is OFF (enabled=off).
|
||||
select
|
||||
global_value_origin,
|
||||
default_value
|
||||
from
|
||||
INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace';
|
||||
global_value_origin default_value
|
||||
COMPILE-TIME enabled=off
|
11
mysql-test/main/opt_trace_default.test
Normal file
11
mysql-test/main/opt_trace_default.test
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
if (`SELECT 'COMPILE-TIME'<>GLOBAL_VALUE_ORIGIN from INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'`) {
|
||||
--Skip Needs optimizer_trace default to be the compile-time default
|
||||
}
|
||||
|
||||
--echo # Verify that compile-time default for optimizer trace is OFF (enabled=off).
|
||||
select
|
||||
global_value_origin,
|
||||
default_value
|
||||
from
|
||||
INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace';
|
@@ -19,6 +19,7 @@ mysql/innodb_table_stats
|
||||
mysql/transaction_registry
|
||||
test/t1
|
||||
test/t2
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in t1.ibd
|
||||
# t2 ... on expecting NOT FOUND
|
||||
@@ -27,7 +28,7 @@ NOT FOUND /tempsecret/ in t2.ibd
|
||||
FOUND 12 /dummysecret/ in t3.ibd
|
||||
# ibdata1 expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in ibdata1
|
||||
# restart
|
||||
UNLOCK TABLES;
|
||||
# Now turn off encryption and wait for threads to decrypt everything
|
||||
SET GLOBAL innodb_encrypt_tables = off;
|
||||
# Wait max 10 min for key encryption threads to decrypt all spaces
|
||||
@@ -42,6 +43,7 @@ test/t3
|
||||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
|
||||
NAME
|
||||
test/t1
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in t1.ibd
|
||||
# t2 ... default expecting FOUND
|
||||
@@ -50,7 +52,7 @@ FOUND 12 /tempsecret/ in t2.ibd
|
||||
FOUND 12 /dummysecret/ in t3.ibd
|
||||
# ibdata1 expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in ibdata1
|
||||
# restart
|
||||
UNLOCK TABLES;
|
||||
# Now turn on encryption and wait for threads to encrypt all spaces
|
||||
SET GLOBAL innodb_encrypt_tables = on;
|
||||
# Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
@@ -65,6 +67,7 @@ mysql/innodb_table_stats
|
||||
mysql/transaction_registry
|
||||
test/t1
|
||||
test/t2
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in t1.ibd
|
||||
# t2 ... on expecting NOT FOUND
|
||||
@@ -73,5 +76,5 @@ NOT FOUND /tempsecret/ in t2.ibd
|
||||
FOUND 12 /dummysecret/ in t3.ibd
|
||||
# ibdata1 expecting NOT FOUND
|
||||
NOT FOUND /foobarsecret/ in ibdata1
|
||||
# restart
|
||||
UNLOCK TABLES;
|
||||
drop table t1, t2, t3;
|
||||
|
@@ -1,9 +1,6 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_file_key_management_plugin.inc
|
||||
|
||||
# embedded does not support restart
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# MDEV-8138: strange results from encrypt-and-grep test
|
||||
#
|
||||
@@ -35,7 +32,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
--sorted_result
|
||||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
|
||||
|
||||
--source include/shutdown_mysqld.inc
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
|
||||
--let SEARCH_PATTERN=foobarsecret
|
||||
--echo # t1 yes on expecting NOT FOUND
|
||||
@@ -54,7 +51,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
-- let SEARCH_FILE=$ib1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
-- source include/start_mysqld.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Now turn off encryption and wait for threads to decrypt everything
|
||||
|
||||
@@ -71,7 +68,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
--sorted_result
|
||||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
|
||||
|
||||
--source include/shutdown_mysqld.inc
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
|
||||
--let SEARCH_PATTERN=foobarsecret
|
||||
--echo # t1 yes on expecting NOT FOUND
|
||||
@@ -90,8 +87,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
-- let SEARCH_FILE=$ib1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
|
||||
-- source include/start_mysqld.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Now turn on encryption and wait for threads to encrypt all spaces
|
||||
SET GLOBAL innodb_encrypt_tables = on;
|
||||
@@ -106,7 +102,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
--sorted_result
|
||||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
|
||||
|
||||
--source include/shutdown_mysqld.inc
|
||||
FLUSH TABLES t1,t2,t3 FOR EXPORT;
|
||||
|
||||
--let SEARCH_PATTERN=foobarsecret
|
||||
--echo # t1 yes on expecting NOT FOUND
|
||||
@@ -125,6 +121,6 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
-- let SEARCH_FILE=$ib1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
-- source include/start_mysqld.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
28
mysql-test/suite/innodb/r/innodb_ctype_tis620.result
Normal file
28
mysql-test/suite/innodb/r/innodb_ctype_tis620.result
Normal file
@@ -0,0 +1,28 @@
|
||||
SET DEFAULT_STORAGE_ENGINE=InnoDB;
|
||||
#
|
||||
# Start of 10.2 tests
|
||||
#
|
||||
#
|
||||
# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export
|
||||
#
|
||||
CREATE TABLE t1(c TEXT CHARACTER SET tis620);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c` text CHARACTER SET tis620 DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES('100');
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c` text CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES('100');
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
29
mysql-test/suite/innodb/t/innodb_ctype_tis620.test
Normal file
29
mysql-test/suite/innodb/t/innodb_ctype_tis620.test
Normal file
@@ -0,0 +1,29 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_tis620.inc
|
||||
|
||||
SET DEFAULT_STORAGE_ENGINE=InnoDB;
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(c TEXT CHARACTER SET tis620);
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES('100');
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci);
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES('100');
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
@@ -2882,3 +2882,14 @@ insert into t1 values (8,'0');
|
||||
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-22284 Aria table key read crash because wrong index used
|
||||
#
|
||||
create table t1 (
|
||||
a int auto_increment,
|
||||
b int, c int,
|
||||
key(c, a), unique(b)
|
||||
) engine aria
|
||||
partition by hash (b);
|
||||
replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0);
|
||||
drop table t1;
|
||||
|
@@ -2099,3 +2099,16 @@ aria_page_checksum=$default_checksum,
|
||||
aria_log_file_size=$default_log_file_size;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-22284 Aria table key read crash because wrong index used
|
||||
--echo #
|
||||
create table t1 (
|
||||
a int auto_increment,
|
||||
b int, c int,
|
||||
key(c, a), unique(b)
|
||||
) engine aria
|
||||
partition by hash (b);
|
||||
replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0);
|
||||
# cleanup
|
||||
drop table t1;
|
||||
|
@@ -8,6 +8,7 @@
|
||||
# Finish the following tests by calling its common test script:
|
||||
# include/rpl_get_master_version_and_clock.test.
|
||||
|
||||
source include/not_valgrind.inc;
|
||||
source include/have_debug.inc;
|
||||
source include/have_debug_sync.inc;
|
||||
source include/master-slave.inc;
|
||||
|
@@ -9,6 +9,7 @@
|
||||
# Verify row-based events applying when table map id value is about and greater
|
||||
# than 1 << 32.
|
||||
##################################################################
|
||||
--source include/not_valgrind.inc
|
||||
--source include/word_size.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
@@ -611,3 +611,28 @@ t1 CREATE TABLE `t1` (
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields
|
||||
#
|
||||
create or replace table t1 (x int, y int with system versioning);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
|
||||
`y` int(11) DEFAULT NULL
|
||||
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
|
||||
create or replace table t1 (
|
||||
x int, y int with system versioning,
|
||||
row_start timestamp(6) as row start,
|
||||
row_end timestamp(6) as row end,
|
||||
period for system_time(row_start, row_end));
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
|
||||
`y` int(11) DEFAULT NULL,
|
||||
`row_start` timestamp(6) GENERATED ALWAYS AS ROW START WITHOUT SYSTEM VERSIONING,
|
||||
`row_end` timestamp(6) GENERATED ALWAYS AS ROW END WITHOUT SYSTEM VERSIONING,
|
||||
PERIOD FOR SYSTEM_TIME (`row_start`, `row_end`)
|
||||
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
|
||||
drop table t1;
|
||||
|
@@ -998,8 +998,7 @@ delete from t1;
|
||||
delete from t1;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check note Not supported for non-INTERVAL history partitions
|
||||
test.t1 check note The storage engine for the table doesn't support check
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-21233 Assertion `m_extra_cache' failed in ha_partition::late_extra_cache
|
||||
|
@@ -454,3 +454,20 @@ show index from t1;
|
||||
--replace_result $default_engine DEFAULT_ENGINE
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields
|
||||
--echo #
|
||||
create or replace table t1 (x int, y int with system versioning);
|
||||
--replace_result $default_engine DEFAULT_ENGINE
|
||||
show create table t1;
|
||||
|
||||
create or replace table t1 (
|
||||
x int, y int with system versioning,
|
||||
row_start timestamp(6) as row start,
|
||||
row_end timestamp(6) as row end,
|
||||
period for system_time(row_start, row_end));
|
||||
--replace_result $default_engine DEFAULT_ENGINE
|
||||
show create table t1;
|
||||
|
||||
drop table t1;
|
||||
|
@@ -517,6 +517,7 @@ enum enum_vcol_info_type
|
||||
{
|
||||
VCOL_GENERATED_VIRTUAL, VCOL_GENERATED_STORED,
|
||||
VCOL_DEFAULT, VCOL_CHECK_FIELD, VCOL_CHECK_TABLE,
|
||||
VCOL_USING_HASH,
|
||||
/* Additional types should be added here */
|
||||
/* Following is the highest value last */
|
||||
VCOL_TYPE_NONE = 127 // Since the 0 value is already in use
|
||||
@@ -534,6 +535,8 @@ static inline const char *vcol_type_name(enum_vcol_info_type type)
|
||||
case VCOL_CHECK_FIELD:
|
||||
case VCOL_CHECK_TABLE:
|
||||
return "CHECK";
|
||||
case VCOL_USING_HASH:
|
||||
return "USING HASH";
|
||||
case VCOL_TYPE_NONE:
|
||||
return "UNTYPED";
|
||||
}
|
||||
|
@@ -1203,7 +1203,6 @@ static const LEX_CSTRING opt_op_name[]=
|
||||
};
|
||||
|
||||
|
||||
static const LEX_CSTRING msg_note= { STRING_WITH_LEN("note") };
|
||||
static const LEX_CSTRING msg_warning= { STRING_WITH_LEN("warning") };
|
||||
#define msg_error error_clex_str
|
||||
|
||||
@@ -11068,11 +11067,8 @@ int ha_partition::check_misplaced_rows(uint read_part_id, bool do_repair)
|
||||
read_part_id != m_part_info->vers_info->now_part->id &&
|
||||
!m_part_info->vers_info->interval.is_set())
|
||||
{
|
||||
print_admin_msg(ha_thd(), MYSQL_ERRMSG_SIZE, &msg_note,
|
||||
table_share->db.str, table->alias,
|
||||
&opt_op_name[CHECK_PARTS],
|
||||
"Not supported for non-INTERVAL history partitions");
|
||||
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
|
||||
/* Skip this check as it is not supported for non-INTERVAL history partitions. */
|
||||
DBUG_RETURN(HA_ADMIN_OK);
|
||||
}
|
||||
|
||||
if (do_repair)
|
||||
|
@@ -8285,15 +8285,16 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
|
||||
if (!vers_info.need_check(alter_info))
|
||||
return false;
|
||||
|
||||
if (!vers_info.versioned_fields && vers_info.unversioned_fields &&
|
||||
!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING))
|
||||
const bool add_versioning= alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING;
|
||||
|
||||
if (!vers_info.versioned_fields && vers_info.unversioned_fields && !add_versioning)
|
||||
{
|
||||
// All is correct but this table is not versioned.
|
||||
options&= ~HA_VERSIONED_TABLE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && vers_info)
|
||||
if (!add_versioning && vers_info && !vers_info.versioned_fields)
|
||||
{
|
||||
my_error(ER_MISSING, MYF(0), create_table.table_name.str,
|
||||
"WITH SYSTEM VERSIONING");
|
||||
@@ -8303,8 +8304,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
|
||||
List_iterator<Create_field> it(alter_info->create_list);
|
||||
while (Create_field *f= it++)
|
||||
{
|
||||
if ((f->versioning == Column_definition::VERSIONING_NOT_SET &&
|
||||
!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) ||
|
||||
if ((f->versioning == Column_definition::VERSIONING_NOT_SET && !add_versioning) ||
|
||||
f->versioning == Column_definition::WITHOUT_VERSIONING)
|
||||
{
|
||||
f->flags|= VERS_UPDATE_UNVERSIONED_FLAG;
|
||||
|
@@ -483,6 +483,7 @@ enum chf_create_flags {
|
||||
#define HA_CREATE_TMP_ALTER 8U
|
||||
#define HA_LEX_CREATE_SEQUENCE 16U
|
||||
#define HA_VERSIONED_TABLE 32U
|
||||
#define HA_SKIP_KEY_SORT 64U
|
||||
|
||||
#define HA_MAX_REC_LENGTH 65535
|
||||
|
||||
@@ -789,11 +790,16 @@ typedef bool Log_func(THD*, TABLE*, bool, const uchar*, const uchar*);
|
||||
*/
|
||||
#define ALTER_COLUMN_INDEX_LENGTH (1ULL << 60)
|
||||
|
||||
/**
|
||||
Indicate that index order might have been changed. Disables inplace algorithm
|
||||
by default (not for InnoDB).
|
||||
*/
|
||||
#define ALTER_INDEX_ORDER (1ULL << 61)
|
||||
|
||||
/**
|
||||
Means that the ignorability of an index is changed.
|
||||
*/
|
||||
#define ALTER_INDEX_IGNORABILITY (1ULL << 61)
|
||||
#define ALTER_INDEX_IGNORABILITY (1ULL << 62)
|
||||
|
||||
/*
|
||||
Flags set in partition_flags when altering partitions
|
||||
|
13
sql/item.h
13
sql/item.h
@@ -7695,6 +7695,19 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
fix_escape_item() sets the out "escape" parameter to:
|
||||
- native code in case of an 8bit character set
|
||||
- Unicode code point in case of a multi-byte character set
|
||||
|
||||
The value meaning a not-initialized ESCAPE character must not be equal to
|
||||
any valid value, so must be outside of these ranges:
|
||||
- -128..+127, not to conflict with a valid 8bit charcter
|
||||
- 0..0x10FFFF, not to conflict with a valid Unicode code point
|
||||
The exact value does not matter.
|
||||
*/
|
||||
#define ESCAPE_NOT_INITIALIZED -1000
|
||||
|
||||
/*
|
||||
It's used in ::fix_fields() methods of LIKE and JSON_SEARCH
|
||||
functions to handle the ESCAPE parameter.
|
||||
|
@@ -5607,7 +5607,7 @@ void Item_func_like::print(String *str, enum_query_type query_type)
|
||||
longlong Item_func_like::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed());
|
||||
DBUG_ASSERT(escape != -1);
|
||||
DBUG_ASSERT(escape != ESCAPE_NOT_INITIALIZED);
|
||||
String* res= args[0]->val_str(&cmp_value1);
|
||||
if (args[0]->null_value)
|
||||
{
|
||||
@@ -5711,7 +5711,7 @@ bool fix_escape_item(THD *thd, Item *escape_item, String *tmp_str,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
IF_DBUG(*escape= -1,);
|
||||
IF_DBUG(*escape= ESCAPE_NOT_INITIALIZED,);
|
||||
|
||||
if (escape_item->const_item())
|
||||
{
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2017, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2020, MariaDB Corporation.
|
||||
Copyright (c) 2009, 2021, MariaDB Corporation.
|
||||
|
||||
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
|
||||
@@ -3579,11 +3579,13 @@ String *Item_func_set_collation::val_str(String *str)
|
||||
|
||||
bool Item_func_set_collation::fix_length_and_dec()
|
||||
{
|
||||
if (!my_charset_same(args[0]->collation.collation, m_set_collation))
|
||||
if (agg_arg_charsets_for_string_result(collation, args, 1))
|
||||
return true;
|
||||
if (!my_charset_same(collation.collation, m_set_collation))
|
||||
{
|
||||
my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0),
|
||||
m_set_collation->coll_name.str,
|
||||
args[0]->collation.collation->cs_name.str);
|
||||
collation.collation->cs_name.str);
|
||||
return TRUE;
|
||||
}
|
||||
collation.set(m_set_collation, DERIVATION_EXPLICIT,
|
||||
|
@@ -8524,7 +8524,6 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
|
||||
{
|
||||
/* Allow break with SIGINT, no core or stack trace */
|
||||
test_flags|= TEST_SIGINT;
|
||||
opt_stack_trace= 1;
|
||||
test_flags&= ~TEST_CORE_ON_SIGNAL;
|
||||
}
|
||||
/* Set global MyISAM variables from delay_key_write_options */
|
||||
|
@@ -254,16 +254,8 @@ Alter_info::algorithm(const THD *thd) const
|
||||
|
||||
|
||||
Alter_table_ctx::Alter_table_ctx()
|
||||
: implicit_default_value_error_field(NULL),
|
||||
error_if_not_empty(false),
|
||||
tables_opened(0),
|
||||
db(null_clex_str), table_name(null_clex_str), alias(null_clex_str),
|
||||
new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str),
|
||||
fk_error_if_delete_row(false), fk_error_id(NULL),
|
||||
fk_error_table(NULL)
|
||||
#ifdef DBUG_ASSERT_EXISTS
|
||||
, tmp_table(false)
|
||||
#endif
|
||||
: db(null_clex_str), table_name(null_clex_str), alias(null_clex_str),
|
||||
new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -276,12 +268,8 @@ Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list,
|
||||
uint tables_opened_arg,
|
||||
const LEX_CSTRING *new_db_arg,
|
||||
const LEX_CSTRING *new_name_arg)
|
||||
: implicit_default_value_error_field(NULL), error_if_not_empty(false),
|
||||
tables_opened(tables_opened_arg),
|
||||
new_db(*new_db_arg), new_name(*new_name_arg),
|
||||
fk_error_if_delete_row(false), fk_error_id(NULL),
|
||||
fk_error_table(NULL),
|
||||
tmp_table(false)
|
||||
: tables_opened(tables_opened_arg),
|
||||
new_db(*new_db_arg), new_name(*new_name_arg)
|
||||
{
|
||||
/*
|
||||
Assign members db, table_name, new_db and new_name
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2010, 2014, Oracle and/or its affiliates.
|
||||
Copyright (c) 2013, 2020, MariaDB Corporation.
|
||||
Copyright (c) 2013, 2021, MariaDB Corporation.
|
||||
|
||||
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
|
||||
@@ -313,9 +313,9 @@ public:
|
||||
|
||||
void report_implicit_default_value_error(THD *thd, const TABLE_SHARE *) const;
|
||||
public:
|
||||
Create_field *implicit_default_value_error_field;
|
||||
bool error_if_not_empty;
|
||||
uint tables_opened;
|
||||
Create_field *implicit_default_value_error_field= nullptr;
|
||||
bool error_if_not_empty= false;
|
||||
uint tables_opened= 0;
|
||||
LEX_CSTRING db;
|
||||
LEX_CSTRING table_name;
|
||||
LEX_CSTRING storage_engine_name;
|
||||
@@ -337,13 +337,14 @@ public:
|
||||
of table to the new version ER_FK_CANNOT_DELETE_PARENT error should be
|
||||
emitted.
|
||||
*/
|
||||
bool fk_error_if_delete_row;
|
||||
bool fk_error_if_delete_row= false;
|
||||
/** Name of foreign key for the above error. */
|
||||
const char *fk_error_id;
|
||||
const char *fk_error_id= nullptr;
|
||||
/** Name of table for the above error. */
|
||||
const char *fk_error_table;
|
||||
const char *fk_error_table= nullptr;
|
||||
bool modified_primary_key= false;
|
||||
/** Indicates that we are altering temporary table */
|
||||
bool tmp_table;
|
||||
bool tmp_table= false;
|
||||
|
||||
private:
|
||||
char new_filename[FN_REFLEN + 1];
|
||||
|
@@ -3452,9 +3452,30 @@ without_overlaps_err:
|
||||
my_message(ER_WRONG_AUTO_KEY, ER_THD(thd, ER_WRONG_AUTO_KEY), MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
/* Sort keys in optimized order */
|
||||
/*
|
||||
We cannot do qsort of key info if MyISAM/Aria does inplace. These engines
|
||||
do not synchronise key info on inplace alter and that qsort is
|
||||
indeterministic (MDEV-25803).
|
||||
|
||||
Yet we do not know whether we do inplace or not. That detection is done
|
||||
after this create_table_impl() and that cannot be changed because of chicken
|
||||
and egg problem (inplace processing requires key info made by
|
||||
create_table_impl()).
|
||||
|
||||
MyISAM/Aria cannot add index inplace so we are safe to qsort key info in
|
||||
that case. And if we don't add index then we do not need qsort at all.
|
||||
*/
|
||||
if (!(create_info->options & HA_SKIP_KEY_SORT))
|
||||
{
|
||||
/*
|
||||
Sort keys in optimized order.
|
||||
|
||||
Note: PK must be always first key, otherwise init_from_binary_frm_image()
|
||||
can not understand it.
|
||||
*/
|
||||
my_qsort((uchar*) *key_info_buffer, *key_count, sizeof(KEY),
|
||||
(qsort_cmp) sort_keys);
|
||||
}
|
||||
create_info->null_bits= null_fields;
|
||||
|
||||
/* Check fields. */
|
||||
@@ -7668,7 +7689,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
uint used_fields, dropped_sys_vers_fields= 0;
|
||||
KEY *key_info=table->key_info;
|
||||
bool rc= TRUE;
|
||||
bool modified_primary_key= FALSE;
|
||||
bool vers_system_invisible= false;
|
||||
Create_field *def;
|
||||
Field **f_ptr,*field;
|
||||
@@ -8092,6 +8112,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
if (key_info->flags & HA_INVISIBLE_KEY)
|
||||
continue;
|
||||
const char *key_name= key_info->name.str;
|
||||
const bool primary_key= table->s->primary_key == i;
|
||||
const bool explicit_pk= primary_key &&
|
||||
!my_strcasecmp(system_charset_info, key_name,
|
||||
primary_key_name.str);
|
||||
const bool implicit_pk= primary_key && !explicit_pk;
|
||||
|
||||
Alter_drop *drop;
|
||||
drop_it.rewind();
|
||||
while ((drop=drop_it++))
|
||||
@@ -8105,7 +8131,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
if (table->s->tmp_table == NO_TMP_TABLE)
|
||||
{
|
||||
(void) delete_statistics_for_index(thd, table, key_info, FALSE);
|
||||
if (i == table->s->primary_key)
|
||||
if (primary_key)
|
||||
{
|
||||
KEY *tab_key_info= table->key_info;
|
||||
for (uint j=0; j < table->s->keys; j++, tab_key_info++)
|
||||
@@ -8204,13 +8230,19 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
}
|
||||
if (!cfield)
|
||||
{
|
||||
if (table->s->primary_key == i)
|
||||
modified_primary_key= TRUE;
|
||||
if (primary_key)
|
||||
alter_ctx->modified_primary_key= true;
|
||||
delete_index_stat= TRUE;
|
||||
if (!(kfield->flags & VERS_SYSTEM_FIELD))
|
||||
dropped_key_part= key_part_name;
|
||||
continue; // Field is removed
|
||||
}
|
||||
|
||||
DBUG_ASSERT(!primary_key || kfield->flags & NOT_NULL_FLAG);
|
||||
if (implicit_pk && !alter_ctx->modified_primary_key &&
|
||||
!(cfield->flags & NOT_NULL_FLAG))
|
||||
alter_ctx->modified_primary_key= true;
|
||||
|
||||
key_part_length= key_part->length;
|
||||
if (cfield->field) // Not new field
|
||||
{
|
||||
@@ -8259,7 +8291,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
{
|
||||
if (delete_index_stat)
|
||||
(void) delete_statistics_for_index(thd, table, key_info, FALSE);
|
||||
else if (modified_primary_key &&
|
||||
else if (alter_ctx->modified_primary_key &&
|
||||
key_info->user_defined_key_parts != key_info->ext_key_parts)
|
||||
(void) delete_statistics_for_index(thd, table, key_info, TRUE);
|
||||
}
|
||||
@@ -8304,7 +8336,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
key_type= Key::SPATIAL;
|
||||
else if (key_info->flags & HA_NOSAME)
|
||||
{
|
||||
if (! my_strcasecmp(system_charset_info, key_name, primary_key_name.str))
|
||||
if (explicit_pk)
|
||||
key_type= Key::PRIMARY;
|
||||
else
|
||||
key_type= Key::UNIQUE;
|
||||
@@ -10037,6 +10069,10 @@ do_continue:;
|
||||
|
||||
tmp_disable_binlog(thd);
|
||||
create_info->options|=HA_CREATE_TMP_ALTER;
|
||||
if (!(alter_info->flags & ALTER_ADD_INDEX) && !alter_ctx.modified_primary_key)
|
||||
create_info->options|= HA_SKIP_KEY_SORT;
|
||||
else
|
||||
alter_info->flags|= ALTER_INDEX_ORDER;
|
||||
create_info->alias= alter_ctx.table_name;
|
||||
/*
|
||||
Create the .frm file for the new table. Storage engine table will not be
|
||||
@@ -10095,7 +10131,7 @@ do_continue:;
|
||||
*/
|
||||
|
||||
if (!(ha_alter_info.handler_flags &
|
||||
~(ALTER_COLUMN_ORDER | ALTER_RENAME_COLUMN)))
|
||||
~(ALTER_COLUMN_ORDER | ALTER_RENAME_COLUMN | ALTER_INDEX_ORDER)))
|
||||
{
|
||||
/*
|
||||
No-op ALTER, no need to call handler API functions.
|
||||
@@ -10110,6 +10146,9 @@ do_continue:;
|
||||
Also note that we ignore the LOCK clause here.
|
||||
|
||||
TODO don't create partitioning metadata in the first place
|
||||
|
||||
TODO: Now case-change index name is treated as noop which is not quite
|
||||
correct.
|
||||
*/
|
||||
table->file->ha_create_partitioning_metadata(alter_ctx.get_tmp_path(),
|
||||
NULL, CHF_DELETE_FLAG);
|
||||
|
@@ -1119,6 +1119,8 @@ static void mysql57_calculate_null_position(TABLE_SHARE *share,
|
||||
}
|
||||
}
|
||||
|
||||
static bool fix_and_check_vcol_expr(THD *thd, TABLE *table,
|
||||
Virtual_column_info *vcol);
|
||||
|
||||
/** Parse TABLE_SHARE::vcol_defs
|
||||
|
||||
@@ -1304,6 +1306,9 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table,
|
||||
Virtual_column_info *v= new (mem_root) Virtual_column_info();
|
||||
field->vcol_info= v;
|
||||
field->vcol_info->expr= hash_item;
|
||||
field->vcol_info->set_vcol_type(VCOL_USING_HASH);
|
||||
if (fix_and_check_vcol_expr(thd, table, v))
|
||||
goto end;
|
||||
key->user_defined_key_parts= key->ext_key_parts= key->usable_key_parts= 1;
|
||||
key->key_part+= parts;
|
||||
|
||||
|
@@ -7208,7 +7208,8 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table,
|
||||
ALTER_ADD_UNIQUE_INDEX |
|
||||
ALTER_DROP_UNIQUE_INDEX |
|
||||
ALTER_ADD_PK_INDEX |
|
||||
ALTER_DROP_PK_INDEX;
|
||||
ALTER_DROP_PK_INDEX |
|
||||
ALTER_INDEX_ORDER;
|
||||
|
||||
alter_table_operations inplace_offline_operations=
|
||||
ALTER_COLUMN_TYPE_CHANGE_BY_ENGINE |
|
||||
|
@@ -113,6 +113,7 @@ static const alter_table_operations INNOBASE_INPLACE_IGNORE
|
||||
| ALTER_VIRTUAL_GCOL_EXPR
|
||||
| ALTER_DROP_CHECK_CONSTRAINT
|
||||
| ALTER_RENAME
|
||||
| ALTER_INDEX_ORDER
|
||||
| ALTER_COLUMN_INDEX_LENGTH
|
||||
| ALTER_CHANGE_INDEX_COMMENT
|
||||
| ALTER_INDEX_IGNORABILITY;
|
||||
@@ -2461,7 +2462,8 @@ next_column:
|
||||
| ALTER_ADD_UNIQUE_INDEX
|
||||
*/
|
||||
| ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX
|
||||
| ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX);
|
||||
| ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX
|
||||
| ALTER_INDEX_ORDER);
|
||||
if (supports_instant) {
|
||||
flags &= ~(ALTER_DROP_STORED_COLUMN
|
||||
#if 0 /* MDEV-17468: remove check_v_col_in_order() and fix the code */
|
||||
|
@@ -80,7 +80,7 @@ que_node_t */
|
||||
#include "que0que.h"
|
||||
#include "row0sel.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11)
|
||||
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
|
||||
#endif
|
||||
|
||||
|
@@ -38,7 +38,7 @@ que_node_t */
|
||||
#include "que0que.h"
|
||||
#include "row0sel.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11)
|
||||
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
|
||||
#endif
|
||||
|
||||
|
@@ -736,6 +736,11 @@ static int table2maria(TABLE *table_arg, data_file_type row_type,
|
||||
- compare SPATIAL keys;
|
||||
- compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly
|
||||
(should be correctly detected in table2maria).
|
||||
|
||||
FIXME:
|
||||
maria_check_definition() is never used! CHECK TABLE does not detect the
|
||||
corruption! Do maria_check_definition() like check_definition() is done
|
||||
by MyISAM (related to MDEV-25803).
|
||||
*/
|
||||
|
||||
int maria_check_definition(MARIA_KEYDEF *t1_keyinfo,
|
||||
|
@@ -210,7 +210,13 @@ int maria_extra(MARIA_HA *info, enum ha_extra_function function,
|
||||
info->last_key.data + share->base.max_key_length*2,
|
||||
info->save_lastkey_data_length + info->save_lastkey_ref_length);
|
||||
info->update= info->save_update | HA_STATE_WRITTEN;
|
||||
info->lastinx= info->save_lastinx;
|
||||
if (info->lastinx != info->save_lastinx) /* Index changed */
|
||||
{
|
||||
info->lastinx = info->save_lastinx;
|
||||
info->last_key.keyinfo= info->s->keyinfo + info->lastinx;
|
||||
info->last_key.flag= 0;
|
||||
info->page_changed=1;
|
||||
}
|
||||
info->cur_row.lastpos= info->save_lastpos;
|
||||
info->last_key.data_length= info->save_lastkey_data_length;
|
||||
info->last_key.ref_length= info->save_lastkey_ref_length;
|
||||
|
@@ -713,7 +713,11 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Write key and keyseg definitions */
|
||||
/* Write key and keyseg definitions
|
||||
|
||||
TODO: update key and keyseg definitions for inplace alter (grep sql layer by
|
||||
MDEV-25803). Do the same for Aria.
|
||||
*/
|
||||
DBUG_PRINT("info", ("write key and keyseg definitions"));
|
||||
for (i=0 ; i < share.base.keys - uniques; i++)
|
||||
{
|
||||
|
@@ -12454,6 +12454,7 @@ my_core::enum_alter_inplace_result ha_rocksdb::check_if_supported_inplace_alter(
|
||||
ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX |
|
||||
ALTER_PARTITIONED |
|
||||
ALTER_ADD_UNIQUE_INDEX |
|
||||
ALTER_INDEX_ORDER |
|
||||
ALTER_CHANGE_CREATE_OPTION)) {
|
||||
DBUG_RETURN(my_core::HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2020, MariaDB Corporation.
|
||||
Copyright (c) 2009, 2021, MariaDB Corporation.
|
||||
|
||||
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
|
||||
@@ -402,9 +402,9 @@ my_copy_fix_mb(CHARSET_INFO *cs,
|
||||
size_t well_formed_nchars;
|
||||
size_t well_formed_length;
|
||||
size_t fixed_length;
|
||||
size_t min_length= MY_MIN(src_length, dst_length);
|
||||
|
||||
set_if_smaller(src_length, dst_length);
|
||||
well_formed_nchars= my_ci_well_formed_char_length(cs, src, src + src_length,
|
||||
well_formed_nchars= my_ci_well_formed_char_length(cs, src, src + min_length,
|
||||
nchars, status);
|
||||
DBUG_ASSERT(well_formed_nchars <= nchars);
|
||||
well_formed_length= status->m_source_end_pos - src;
|
||||
|
@@ -609,8 +609,8 @@ my_strnxfrm_tis620(CHARSET_INFO *cs,
|
||||
const uchar *src, size_t srclen, uint flags)
|
||||
{
|
||||
size_t len, dstlen0= dstlen;
|
||||
len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) -
|
||||
(char*) dst);
|
||||
len= MY_MIN(dstlen, srclen);
|
||||
memcpy(dst, src, len);
|
||||
len= thai2sortable(dst, len);
|
||||
set_if_smaller(dstlen, nweights);
|
||||
set_if_smaller(len, dstlen);
|
||||
@@ -632,8 +632,8 @@ my_strnxfrm_tis620_nopad(CHARSET_INFO *cs,
|
||||
const uchar *src, size_t srclen, uint flags)
|
||||
{
|
||||
size_t len, dstlen0= dstlen;
|
||||
len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) -
|
||||
(char*) dst);
|
||||
len= MY_MIN(dstlen, srclen);
|
||||
memcpy(dst, src, len);
|
||||
len= thai2sortable(dst, len);
|
||||
set_if_smaller(dstlen, nweights);
|
||||
set_if_smaller(len, dstlen);
|
||||
|
Reference in New Issue
Block a user