diff --git a/src/observer/virtual_table/ob_mysql_proc_table.cpp b/src/observer/virtual_table/ob_mysql_proc_table.cpp index 1bc6305415..1b5cecc4fe 100644 --- a/src/observer/virtual_table/ob_mysql_proc_table.cpp +++ b/src/observer/virtual_table/ob_mysql_proc_table.cpp @@ -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()) diff --git a/src/share/schema/ob_routine_sql_service.cpp b/src/share/schema/ob_routine_sql_service.cpp index 0b13065e95..1b2faa152d 100644 --- a/src/share/schema/ob_routine_sql_service.cpp +++ b/src/share/schema/ob_routine_sql_service.cpp @@ -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); diff --git a/src/share/schema/ob_routine_sql_service.h b/src/share/schema/ob_routine_sql_service.h index 79c7e94bf9..16b8e6574c 100644 --- a/src/share/schema/ob_routine_sql_service.h +++ b/src/share/schema/ob_routine_sql_service.h @@ -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); diff --git a/src/sql/resolver/ddl/ob_alter_routine_resolver.cpp b/src/sql/resolver/ddl/ob_alter_routine_resolver.cpp index 3a4f36ad38..4f2fda00cf 100644 --- a/src/sql/resolver/ddl/ob_alter_routine_resolver.cpp +++ b/src/sql/resolver/ddl/ob_alter_routine_resolver.cpp @@ -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, diff --git a/tools/deploy/mysql_test/test_suite/pl/r/mysql/sp_mysql.result b/tools/deploy/mysql_test/test_suite/pl/r/mysql/sp_mysql.result index 34b4a1b950..7bab1390aa 100644 --- a/tools/deploy/mysql_test/test_suite/pl/r/mysql/sp_mysql.result +++ b/tools/deploy/mysql_test/test_suite/pl/r/mysql/sp_mysql.result @@ -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;