Browse Source
MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode
MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode
- Adding optional qualifiers to data types: CREATE TABLE t1 (a schema.DATE); Qualifiers now work only for three pre-defined schemas: mariadb_schema oracle_schema maxdb_schema These schemas are virtual (hard-coded) for now, but may turn into real databases on disk in the future. - mariadb_schema.TYPE now always resolves to a true MariaDB data type TYPE without sql_mode specific translations. - oracle_schema.DATE translates to MariaDB DATETIME. - maxdb_schema.TIMESTAMP translates to MariaDB DATETIME. - Fixing SHOW CREATE TABLE to use a qualifier for a data type TYPE if the current sql_mode translates TYPE to something else. The above changes fix the reported problem, so this script: SET sql_mode=ORACLE; CREATE TABLE t2 AS SELECT mariadb_date_column FROM t1; is now replicated as: SET sql_mode=ORACLE; CREATE TABLE t2 (mariadb_date_column mariadb_schema.DATE); and the slave can unambiguously treat DATE as the true MariaDB DATE without ORACLE specific translation to DATETIME. Similar, SET sql_mode=MAXDB; CREATE TABLE t2 AS SELECT mariadb_timestamp_column FROM t1; is now replicated as: SET sql_mode=MAXDB; CREATE TABLE t2 (mariadb_timestamp_column mariadb_schema.TIMESTAMP); so the slave treats TIMESTAMP as the true MariaDB TIMESTAMP without MAXDB specific translation to DATETIME.bb-10.3-MDEV-22543
28 changed files with 860 additions and 60 deletions
-
1libmysqld/CMakeLists.txt
-
10mysql-test/main/lowercase_fs_off.result
-
15mysql-test/main/lowercase_fs_off.test
-
1mysql-test/mysql-test-run.pl
-
65mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result
-
34mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test
-
53mysql-test/suite/compat/maxdb/type_timestamp.result
-
29mysql-test/suite/compat/maxdb/type_timestamp.test
-
86mysql-test/suite/compat/oracle/r/rpl_mariadb_date.result
-
150mysql-test/suite/compat/oracle/r/type_date.result
-
38mysql-test/suite/compat/oracle/t/rpl_mariadb_date.test
-
99mysql-test/suite/compat/oracle/t/type_date.test
-
1sql/CMakeLists.txt
-
13sql/field.cc
-
4sql/sql_class.cc
-
2sql/sql_class.h
-
34sql/sql_lex.cc
-
5sql/sql_lex.h
-
80sql/sql_schema.cc
-
70sql/sql_schema.h
-
7sql/sql_show.cc
-
4sql/sql_string.h
-
6sql/sql_type.cc
-
2sql/sql_type.h
-
50sql/sql_yacc.yy
-
55sql/sql_yacc_ora.yy
-
4sql/structs.h
-
2storage/test_sql_discovery/mysql-test/sql_discovery/simple.result
@ -0,0 +1,65 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
# |
|||
# MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode |
|||
# |
|||
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:00:00'); |
|||
SET sql_mode=DEFAULT; |
|||
CREATE TABLE t1 (a TIMESTAMP); |
|||
INSERT INTO t1 VALUES (NULL); |
|||
INSERT INTO t1 VALUES ('2001-01-01 10:20:30'); |
|||
SET sql_mode=MAXDB; |
|||
CREATE TABLE t2 SELECT * FROM t1; |
|||
SET timestamp=DEFAULT; |
|||
include/show_binlog_events.inc |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Gtid # # GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a TIMESTAMP) |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES (NULL) |
|||
master-bin.000001 # Table_map # # table_id: # (test.t1) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES ('2001-01-01 10:20:30') |
|||
master-bin.000001 # Table_map # # table_id: # (test.t1) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; CREATE TABLE "t2" ( |
|||
"a" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp() |
|||
) |
|||
master-bin.000001 # Annotate_rows # # CREATE TABLE t2 SELECT * FROM t1 |
|||
master-bin.000001 # Table_map # # table_id: # (test.t2) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
connection slave; |
|||
SELECT * FROM t1; |
|||
a |
|||
2001-01-01 10:00:00 |
|||
2001-01-01 10:20:30 |
|||
SET sql_mode=DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`a` timestamp NOT NULL DEFAULT current_timestamp() |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SET sql_mode=MAXDB; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE "t1" ( |
|||
"a" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp() |
|||
) |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE "t2" ( |
|||
"a" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp() |
|||
) |
|||
connection master; |
|||
DROP TABLE t1, t2; |
|||
include/rpl_end.inc |
@ -0,0 +1,34 @@ |
|||
--source include/have_binlog_format_row.inc |
|||
--source include/master-slave.inc |
|||
|
|||
--echo # |
|||
--echo # MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode |
|||
--echo # |
|||
|
|||
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:00:00'); |
|||
SET sql_mode=DEFAULT; |
|||
CREATE TABLE t1 (a TIMESTAMP); |
|||
INSERT INTO t1 VALUES (NULL); |
|||
INSERT INTO t1 VALUES ('2001-01-01 10:20:30'); |
|||
SET sql_mode=MAXDB; |
|||
CREATE TABLE t2 SELECT * FROM t1; |
|||
SET timestamp=DEFAULT; |
|||
|
|||
--let $binlog_file = LAST |
|||
source include/show_binlog_events.inc; |
|||
|
|||
|
|||
--sync_slave_with_master |
|||
SELECT * FROM t1; |
|||
SET sql_mode=DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
SET sql_mode=MAXDB; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
--connection master |
|||
DROP TABLE t1, t2; |
|||
|
|||
--source include/rpl_end.inc |
@ -0,0 +1,53 @@ |
|||
# |
|||
# MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode |
|||
# |
|||
SET sql_mode=DEFAULT; |
|||
CREATE TABLE t1 ( |
|||
def_timestamp TIMESTAMP, |
|||
mdb_timestamp mariadb_schema.TIMESTAMP, |
|||
ora_timestamp oracle_schema.TIMESTAMP, |
|||
max_timestamp maxdb_schema.TIMESTAMP |
|||
); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`def_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), |
|||
`mdb_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
`ora_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
`max_timestamp` datetime DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SET sql_mode=MAXDB; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE "t1" ( |
|||
"def_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp(), |
|||
"mdb_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
"ora_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
"max_timestamp" datetime DEFAULT NULL |
|||
) |
|||
DROP TABLE t1; |
|||
SET sql_mode=MAXDB; |
|||
CREATE TABLE t1 ( |
|||
def_timestamp TIMESTAMP, |
|||
mdb_timestamp mariadb_schema.TIMESTAMP, |
|||
ora_timestamp oracle_schema.TIMESTAMP, |
|||
max_timestamp maxdb_schema.TIMESTAMP |
|||
); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE "t1" ( |
|||
"def_timestamp" datetime DEFAULT NULL, |
|||
"mdb_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp(), |
|||
"ora_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
"max_timestamp" datetime DEFAULT NULL |
|||
) |
|||
SET sql_mode=DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`def_timestamp` datetime DEFAULT NULL, |
|||
`mdb_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), |
|||
`ora_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|||
`max_timestamp` datetime DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
DROP TABLE t1; |
@ -0,0 +1,29 @@ |
|||
--echo # |
|||
--echo # MDEV-19632 Replication aborts with ER_SLAVE_CONVERSION_FAILED upon CREATE ... SELECT in ORACLE mode |
|||
--echo # |
|||
|
|||
|
|||
SET sql_mode=DEFAULT; |
|||
CREATE TABLE t1 ( |
|||
def_timestamp TIMESTAMP, |
|||
mdb_timestamp mariadb_schema.TIMESTAMP, |
|||
ora_timestamp oracle_schema.TIMESTAMP, |
|||
max_timestamp maxdb_schema.TIMESTAMP |
|||
); |
|||
SHOW CREATE TABLE t1; |
|||
SET sql_mode=MAXDB; |
|||
SHOW CREATE TABLE t1; |
|||
DROP TABLE t1; |
|||
|
|||
|
|||
SET sql_mode=MAXDB; |
|||
CREATE TABLE t1 ( |
|||
def_timestamp TIMESTAMP, |
|||
mdb_timestamp mariadb_schema.TIMESTAMP, |
|||
ora_timestamp oracle_schema.TIMESTAMP, |
|||
max_timestamp maxdb_schema.TIMESTAMP |
|||
); |
|||
SHOW CREATE TABLE t1; |
|||
SET sql_mode=DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
DROP TABLE t1; |
@ -0,0 +1,86 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
SET SQL_MODE=DEFAULT; |
|||
CREATE TABLE t1 (a DATE); |
|||
INSERT INTO t1 VALUES (NULL); |
|||
INSERT INTO t1 VALUES ('2001-01-01'); |
|||
SET SQL_MODE= ORACLE; |
|||
CREATE TABLE t2 SELECT * FROM t1; |
|||
include/show_binlog_events.inc |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
master-bin.000001 # Gtid # # GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a DATE) |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES (NULL) |
|||
master-bin.000001 # Table_map # # table_id: # (test.t1) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES ('2001-01-01') |
|||
master-bin.000001 # Table_map # # table_id: # (test.t1) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
master-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
master-bin.000001 # Query # # use `test`; CREATE TABLE "t2" ( |
|||
"a" mariadb_schema.date DEFAULT NULL |
|||
) |
|||
master-bin.000001 # Annotate_rows # # CREATE TABLE t2 SELECT * FROM t1 |
|||
master-bin.000001 # Table_map # # table_id: # (test.t2) |
|||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
master-bin.000001 # Query # # COMMIT |
|||
SET SQL_MODE= DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`a` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`a` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SET SQL_MODE= ORACLE; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE "t1" ( |
|||
"a" mariadb_schema.date DEFAULT NULL |
|||
) |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE "t2" ( |
|||
"a" mariadb_schema.date DEFAULT NULL |
|||
) |
|||
connection slave; |
|||
SELECT * FROM t1; |
|||
a |
|||
NULL |
|||
2001-01-01 |
|||
SELECT * FROM t2; |
|||
a |
|||
NULL |
|||
2001-01-01 |
|||
SET SQL_MODE= DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`a` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`a` date DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
SET SQL_MODE= ORACLE; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE "t1" ( |
|||
"a" mariadb_schema.date DEFAULT NULL |
|||
) |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE "t2" ( |
|||
"a" mariadb_schema.date DEFAULT NULL |
|||
) |
|||
connection master; |
|||
DROP TABLE t1, t2; |
|||
include/rpl_end.inc |
@ -0,0 +1,38 @@ |
|||
--source include/have_binlog_format_row.inc |
|||
--source include/master-slave.inc |
|||
|
|||
SET SQL_MODE=DEFAULT; |
|||
CREATE TABLE t1 (a DATE); |
|||
INSERT INTO t1 VALUES (NULL); |
|||
INSERT INTO t1 VALUES ('2001-01-01'); |
|||
|
|||
SET SQL_MODE= ORACLE; |
|||
CREATE TABLE t2 SELECT * FROM t1; |
|||
|
|||
--let $binlog_file = LAST |
|||
source include/show_binlog_events.inc; |
|||
|
|||
SET SQL_MODE= DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
SET SQL_MODE= ORACLE; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
--sync_slave_with_master |
|||
SELECT * FROM t1; |
|||
SELECT * FROM t2; |
|||
|
|||
SET SQL_MODE= DEFAULT; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
SET SQL_MODE= ORACLE; |
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
|
|||
# Cleanup |
|||
--connection master |
|||
DROP TABLE t1, t2; |
|||
--source include/rpl_end.inc |
@ -0,0 +1,80 @@ |
|||
/*
|
|||
Copyright (c) 2020, 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 |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ |
|||
|
|||
#include "mariadb.h"
|
|||
#include "sql_type.h"
|
|||
#include "sql_schema.h"
|
|||
#include "sql_class.h"
|
|||
|
|||
class Schema_oracle: public Schema |
|||
{ |
|||
public: |
|||
Schema_oracle(const LEX_CSTRING &name) |
|||
:Schema(name) |
|||
{ } |
|||
const Type_handler *map_data_type(THD *thd, const Type_handler *src) |
|||
const |
|||
{ |
|||
if (src == &type_handler_newdate) |
|||
return thd->type_handler_for_datetime(); |
|||
return src; |
|||
} |
|||
}; |
|||
|
|||
|
|||
class Schema_maxdb: public Schema |
|||
{ |
|||
public: |
|||
Schema_maxdb(const LEX_CSTRING &name) |
|||
:Schema(name) |
|||
{ } |
|||
const Type_handler *map_data_type(THD *thd, const Type_handler *src) |
|||
const |
|||
{ |
|||
if (src == &type_handler_timestamp || |
|||
src == &type_handler_timestamp2) |
|||
return thd->type_handler_for_datetime(); |
|||
return src; |
|||
} |
|||
}; |
|||
|
|||
|
|||
Schema mariadb_schema(Lex_cstring(STRING_WITH_LEN("mariadb_schema"))); |
|||
Schema_oracle oracle_schema(Lex_cstring(STRING_WITH_LEN("oracle_schema"))); |
|||
Schema_maxdb maxdb_schema(Lex_cstring(STRING_WITH_LEN("maxdb_schema"))); |
|||
|
|||
|
|||
Schema *Schema::find_by_name(const LEX_CSTRING &name) |
|||
{ |
|||
DBUG_ASSERT(name.str); |
|||
if (mariadb_schema.eq_name(name)) |
|||
return &mariadb_schema; |
|||
if (oracle_schema.eq_name(name)) |
|||
return &oracle_schema; |
|||
if (maxdb_schema.eq_name(name)) |
|||
return &maxdb_schema; |
|||
return NULL; |
|||
} |
|||
|
|||
|
|||
Schema *Schema::find_implied(THD *thd) |
|||
{ |
|||
if (thd->variables.sql_mode & MODE_ORACLE) |
|||
return &oracle_schema; |
|||
if (thd->variables.sql_mode & MODE_MAXDB) |
|||
return &maxdb_schema; |
|||
return &mariadb_schema; |
|||
} |
@ -0,0 +1,70 @@ |
|||
#ifndef SQL_SCHEMA_H_INCLUDED |
|||
#define SQL_SCHEMA_H_INCLUDED |
|||
/* |
|||
Copyright (c) 2020, 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 |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ |
|||
|
|||
#include "mysqld.h" |
|||
#include "lex_string.h" |
|||
|
|||
class Schema |
|||
{ |
|||
LEX_CSTRING m_name; |
|||
public: |
|||
Schema(const LEX_CSTRING &name) |
|||
:m_name(name) |
|||
{ } |
|||
virtual ~Schema() { } |
|||
const LEX_CSTRING &name() const { return m_name; } |
|||
virtual const Type_handler *map_data_type(THD *thd, const Type_handler *src) |
|||
const |
|||
{ |
|||
return src; |
|||
} |
|||
/* |
|||
For now we have *hard-coded* compatibility schemas: |
|||
schema_mariadb, schema_oracle, schema_maxdb. |
|||
But eventually we'll turn then into real databases on disk. |
|||
So the code below compares names according to the filesystem |
|||
case sensitivity, like it is done for regular databases. |
|||
|
|||
Note, this is different to information_schema, whose name |
|||
is always case insensitive. This is intentional! |
|||
The assymetry will be gone when we'll implement SQL standard |
|||
regular and delimited identifiers. |
|||
*/ |
|||
bool eq_name(const LEX_CSTRING &name) const |
|||
{ |
|||
#if MYSQL_VERSION_ID > 100500 |
|||
#error Remove the old code |
|||
return !table_alias_charset->strnncoll(m_name.str, m_name.length, |
|||
name.str, name.length); |
|||
#else |
|||
// Please remove this when merging to 10.5 |
|||
return !table_alias_charset->coll->strnncoll(table_alias_charset, |
|||
(const uchar *) m_name.str, |
|||
m_name.length, |
|||
(const uchar *) name.str, |
|||
name.length, FALSE); |
|||
#endif |
|||
} |
|||
static Schema *find_by_name(const LEX_CSTRING &name); |
|||
static Schema *find_implied(THD *thd); |
|||
}; |
|||
|
|||
|
|||
extern Schema mariadb_schema; |
|||
|
|||
#endif // SQL_SCHEMA_H_INCLUDED |
Write
Preview
Loading…
Cancel
Save
Reference in new issue