[to #46102811] information schema routines table compatible with mysql
This commit is contained in:
@ -212,6 +212,19 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
|
||||
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
|
||||
break;
|
||||
}
|
||||
case (SQL_DATA_ACCESS): {
|
||||
if (routine_info->is_no_sql()) {
|
||||
cells[col_idx].set_varchar("NO_SQL");
|
||||
} else if (routine_info->is_reads_sql_data()) {
|
||||
cells[col_idx].set_varchar("READS_SQL_DATA");
|
||||
} else if (routine_info->is_modifies_sql_data()) {
|
||||
cells[col_idx].set_varchar("MODIFIES_SQL_DATA");
|
||||
} else {
|
||||
cells[col_idx].set_varchar("CONTAINS_SQL");
|
||||
}
|
||||
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
|
||||
break;
|
||||
}
|
||||
|
||||
#define COLUMN_SET_WITH_TYPE(COL_NAME, TYPE, VALUE) \
|
||||
case (COL_NAME): { \
|
||||
@ -224,7 +237,6 @@ case (COL_NAME): { \
|
||||
COLUMN_SET_WITH_TYPE(TYPE, varchar, ROUTINE_PROCEDURE_TYPE == routine_info->get_routine_type() ? "PROCEDURE" : "FUNCTION")
|
||||
COLUMN_SET_WITH_TYPE(SPECIFIC_NAME, varchar, routine_info->get_routine_name())
|
||||
COLUMN_SET_WITH_TYPE(LANGUAGE, varchar, "SQL")
|
||||
COLUMN_SET_WITH_TYPE(SQL_DATA_ACCESS, varchar, "CONTAINS_SQL")
|
||||
COLUMN_SET_WITH_TYPE(IS_DETERMINISTIC, varchar, routine_info->is_deterministic() ? "YES" : "NO")
|
||||
COLUMN_SET_WITH_TYPE(SECURITY_TYPE, varchar, routine_info->is_invoker_right() ? "INVOKER" : "DEFINER")
|
||||
COLUMN_SET_WITH_TYPE(BODY, varchar, routine_info->get_routine_body())
|
||||
|
||||
@ -479,7 +479,8 @@ int ObRoutineSqlService::gen_package_dml(
|
||||
int ObRoutineSqlService::gen_routine_dml(
|
||||
const uint64_t exec_tenant_id,
|
||||
const ObRoutineInfo &routine_info,
|
||||
ObDMLSqlSplicer &dml)
|
||||
ObDMLSqlSplicer &dml,
|
||||
bool is_replace)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_FAIL(dml.add_pk_column("tenant_id", ObSchemaUtils::get_extract_tenant_id(
|
||||
@ -518,7 +519,7 @@ int ObRoutineSqlService::gen_routine_dml(
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(dml.add_gmt_create())
|
||||
} else if ((!is_replace && OB_FAIL(dml.add_gmt_create()))
|
||||
|| OB_FAIL(dml.add_gmt_modified())) {
|
||||
LOG_WARN("add column failed", K(ret));
|
||||
}
|
||||
@ -601,7 +602,7 @@ int ObRoutineSqlService::add_routine(ObISQLClient &sql_client,
|
||||
const uint64_t tenant_id = routine_info.get_tenant_id();
|
||||
const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id);
|
||||
ObDMLSqlSplicer dml;
|
||||
if (OB_FAIL(gen_routine_dml(exec_tenant_id, routine_info, dml))) {
|
||||
if (OB_FAIL(gen_routine_dml(exec_tenant_id, routine_info, dml, is_replace))) {
|
||||
LOG_WARN("gen table dml failed", K(ret));
|
||||
} else {
|
||||
ObDMLExecHelper exec(sql_client, exec_tenant_id);
|
||||
|
||||
@ -77,7 +77,10 @@ private:
|
||||
int del_package(common::ObISQLClient &sql_client,
|
||||
const ObPackageInfo &package_info,
|
||||
int64_t new_schema_version);
|
||||
int gen_routine_dml(const uint64_t exec_tenant_id, const ObRoutineInfo &routine_info, ObDMLSqlSplicer &dml);
|
||||
int gen_routine_dml(const uint64_t exec_tenant_id,
|
||||
const ObRoutineInfo &routine_info,
|
||||
ObDMLSqlSplicer &dml,
|
||||
bool is_replace = false);
|
||||
int del_routine(common::ObISQLClient &sql_client,
|
||||
const ObRoutineInfo &routine_info,
|
||||
int64_t new_schema_version);
|
||||
|
||||
@ -121,6 +121,20 @@ int ObAlterRoutineResolver::resolve_clause_list(
|
||||
} else if (SP_DEFINER == child->value_) {
|
||||
crt_routine_arg.routine_info_.clear_invoker_right();
|
||||
}
|
||||
} else if (T_COMMENT == child->type_ && lib::is_mysql_mode()) {
|
||||
ObString routine_comment;
|
||||
OX (routine_comment = ObString(child->str_len_, child->str_value_));
|
||||
OZ (crt_routine_arg.routine_info_.set_comment(routine_comment));
|
||||
} else if (T_SP_DATA_ACCESS == child->type_ && lib::is_mysql_mode()) {
|
||||
if (SP_NO_SQL == child->value_) {
|
||||
crt_routine_arg.routine_info_.set_no_sql();
|
||||
} else if (SP_READS_SQL_DATA == child->value_) {
|
||||
crt_routine_arg.routine_info_.set_reads_sql_data();
|
||||
} else if (SP_MODIFIES_SQL_DATA == child->value_) {
|
||||
crt_routine_arg.routine_info_.set_modifies_sql_data();
|
||||
} else if (SP_CONTAINS_SQL == child->value_) {
|
||||
crt_routine_arg.routine_info_.set_contains_sql();
|
||||
}
|
||||
} else {
|
||||
// do nothing
|
||||
/* Currently, ob only support SQL SECURITY and LANGUAGE SQL opt clause,
|
||||
|
||||
@ -847,9 +847,10 @@ Function sql_mode Create Function character_set_client collation_connection Data
|
||||
chistics STRICT_ALL_TABLES CREATE DEFINER = admin@% FUNCTION `test`.`chistics`
|
||||
()
|
||||
RETURNS int(11)
|
||||
NO SQL
|
||||
DETERMINISTIC
|
||||
INVOKER
|
||||
COMMENT `Characteristics procedure test`
|
||||
COMMENT `Characteristics function test`
|
||||
return 42 utf8mb4 utf8mb4_general_ci utf8mb4_general_ci
|
||||
drop function chistics|
|
||||
set @@sql_mode=@old_mode|
|
||||
@ -1374,11 +1375,11 @@ bar CREATE DEFINER = admin@% PROCEDURE `test`.`bar`
|
||||
IN `x` char(16), IN `y` int(11)
|
||||
)
|
||||
MODIFIES SQL DATA
|
||||
COMMENT `111111111111`
|
||||
COMMENT `3333333333`
|
||||
insert into test.t1 values (x, y) utf8mb4 utf8mb4_general_ci utf8mb4_general_ci
|
||||
show procedure status like 'bar'|
|
||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||
test bar PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER 111111111111 utf8mb4 utf8mb4_general_ci utf8mb4_general_ci
|
||||
test bar PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER 3333333333 utf8mb4 utf8mb4_general_ci utf8mb4_general_ci
|
||||
drop procedure bar|
|
||||
drop procedure if exists p1|
|
||||
create procedure p1 ()
|
||||
@ -3696,17 +3697,17 @@ call bug12589_1()|
|
||||
Table Create Table
|
||||
tm1 CREATE TEMPORARY TABLE `tm1` (
|
||||
`spv1` decimal(3,3) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
call bug12589_2()|
|
||||
Table Create Table
|
||||
tm1 CREATE TEMPORARY TABLE `tm1` (
|
||||
`spv1` decimal(6,3) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
call bug12589_3()|
|
||||
Table Create Table
|
||||
tm1 CREATE TEMPORARY TABLE `tm1` (
|
||||
`spv1` decimal(6,3) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
drop procedure bug12589_1|
|
||||
drop procedure bug12589_2|
|
||||
drop procedure bug12589_3|
|
||||
@ -4629,7 +4630,7 @@ show create table t3|
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`j` int(11) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
select * from t3|
|
||||
j
|
||||
0
|
||||
@ -6258,7 +6259,7 @@ SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`v` datetime DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
@ -6267,7 +6268,7 @@ SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`v` datetime DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
@ -6276,7 +6277,7 @@ SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`v` int(11) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
@ -6285,7 +6286,7 @@ SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`v` int(11) DEFAULT NULL
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user