From 14588491668dcb77ba9be064eb2332a6cfe3de5b Mon Sep 17 00:00:00 2001 From: xf0 Date: Tue, 24 Aug 2021 20:42:03 +0800 Subject: [PATCH] support show triggers for mysqldump --- src/sql/resolver/cmd/ob_show_resolver.cpp | 23 ++++++++++++++++++++++- src/sql/resolver/ob_resolver.cpp | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/sql/resolver/cmd/ob_show_resolver.cpp b/src/sql/resolver/cmd/ob_show_resolver.cpp index 742a63f48..7cda932e2 100644 --- a/src/sql/resolver/cmd/ob_show_resolver.cpp +++ b/src/sql/resolver/cmd/ob_show_resolver.cpp @@ -749,7 +749,28 @@ int ObShowResolver::resolve(const ParseNode& parse_tree) break; } case T_SHOW_TRIGGERS: { - ret = OB_NOT_SUPPORTED; + // Trigger is not supported in mysql mode and this is only used for mysqldump tool now. + // https://work.aone.alibaba-inc.com/issue/21188380 + if (is_oracle_mode) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("not support show triggers in oracle mode", K(ret)); + } else if (OB_UNLIKELY(parse_tree.num_child_ != 2 || NULL == parse_tree.children_)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("parse tree is wrong", + K(ret), + K(parse_tree.num_child_), + K(parse_tree.children_)); + } else { + if (OB_FAIL(sql_gen.init(params_.allocator_))) { + LOG_WARN("fail to init sql string generator", K(ret)); + } else if (OB_FAIL(sql_gen.gen_select_str(ObShowSqlSet::SHOW_TRIGGERS_SELECT))) { + LOG_WARN("fail to generate select string", K(ret)); + } else if (OB_FAIL(sql_gen.gen_from_str(ObShowSqlSet::SHOW_TRIGGERS_SUBQUERY))) { + LOG_WARN("fail to generate from string", K(ret)); + } else { + sql_gen.assign_sql_str(select_sql); + } + } break; } case T_SHOW_WARNINGS: diff --git a/src/sql/resolver/ob_resolver.cpp b/src/sql/resolver/ob_resolver.cpp index 590e23536..30bc8e471 100644 --- a/src/sql/resolver/ob_resolver.cpp +++ b/src/sql/resolver/ob_resolver.cpp @@ -575,6 +575,7 @@ int ObResolver::resolve(IsPrepared if_prepared, const ParseNode& parse_tree, ObS case T_SHOW_CREATE_TENANT: case T_SHOW_RECYCLEBIN: case T_SHOW_CREATE_TABLEGROUP: + case T_SHOW_TRIGGERS: case T_SHOW_STATUS: { REGISTER_STMT_RESOLVER(Show); break;