Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MDEV-35748 : Attempting to create a CONNECT engine Table results in n… #3768

Open
wants to merge 1 commit into
base: 10.6
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions mysql-test/suite/galera/r/MDEV-35748.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
connection node_2;
connection node_1;
connection node_1;
INSTALL PLUGIN IF NOT EXISTS connect SONAME 'ha_connect';
CREATE TABLE t1 (f INT) ENGINE=CONNECT;
Warnings:
Warning 1105 No table_type. Will be set to DOS
Warning 1105 No file name. Table will use t1.dos
CREATE TABLE t2 (f INT) ENGINE=ROCKSDB;
CREATE TABLE t3 (f INT) ENGINE=SEQUENCE;
ERROR 42000: This version of MariaDB doesn't yet support 'non-InnoDB sequences in Galera cluster'
show warnings;
Level Code Message
Error 1235 This version of MariaDB doesn't yet support 'non-InnoDB sequences in Galera cluster'
Note 1235 ENGINE=SEQUENCE not supported by Galera
connection node_2;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f` int(11) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`f` int(11) DEFAULT NULL
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
show create table t3;
ERROR 42S02: Table 'test.t3' doesn't exist
connection node_1;
DROP TABLE t1, t2;
UNINSTALL PLUGIN IF EXISTS connect;
23 changes: 23 additions & 0 deletions mysql-test/suite/galera/t/MDEV-35748.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--source include/galera_cluster.inc
--source include/have_sequence.inc
--source include/have_rocksdb.inc

--connection node_1
INSTALL PLUGIN IF NOT EXISTS connect SONAME 'ha_connect';

CREATE TABLE t1 (f INT) ENGINE=CONNECT;
CREATE TABLE t2 (f INT) ENGINE=ROCKSDB;
--error ER_NOT_SUPPORTED_YET
CREATE TABLE t3 (f INT) ENGINE=SEQUENCE;
show warnings;

--connection node_2
show create table t1;
show create table t2;
--error ER_NO_SUCH_TABLE
show create table t3;

--connection node_1
DROP TABLE t1, t2;
UNINSTALL PLUGIN IF EXISTS connect;

2 changes: 2 additions & 0 deletions sql/sql_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ class Storage_engine_name
handlerton **ha,
bool tmp_table);
bool is_set() { return m_storage_engine_name.str != NULL; }

const LEX_CSTRING *name() const { return &m_storage_engine_name; }
};


Expand Down
23 changes: 20 additions & 3 deletions sql/sql_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4695,9 +4695,26 @@ bool wsrep_check_sequence(THD* thd,
// In Galera cluster we support only InnoDB sequences
if (db_type != DB_TYPE_INNODB)
{
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
"non-InnoDB sequences in Galera cluster");
return(true);
// Currently any dynamic storage engine is not possible to identify
// using DB_TYPE_XXXX and ENGINE=SEQUENCE is one of them.
// Therefore, we get storage engine name from lex.
const LEX_CSTRING *tb_name= thd->lex->m_sql_cmd->option_storage_engine_name()->name();
// (1) CREATE TABLE ... ENGINE=SEQUENCE OR
// (2) ALTER TABLE ... ENGINE= OR
// Note in ALTER TABLE table->s->sequence != nullptr
// (3) CREATE SEQUENCE ... ENGINE=
if ((thd->lex->sql_command == SQLCOM_CREATE_TABLE &&
lex_string_eq(tb_name, STRING_WITH_LEN("SEQUENCE"))) ||
(thd->lex->sql_command == SQLCOM_ALTER_TABLE) ||
(thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE))
{
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
"non-InnoDB sequences in Galera cluster");
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_NOT_SUPPORTED_YET,
"ENGINE=%s not supported by Galera", tb_name->str);
return(true);
}
}

// In Galera cluster it is best to use INCREMENT BY 0 with CACHE
Expand Down