From 64ff0c1b97b6c11d2ae42aa0ea325567306757c7 Mon Sep 17 00:00:00 2001 From: yinyj17 Date: Mon, 15 Apr 2024 04:15:30 +0000 Subject: [PATCH] fix information_schema views can not use index --- .../resolver/expr/ob_raw_expr_resolver_impl.cpp | 16 ++++++++++++++++ .../r/mysql/desc_sys_views_in_mysql.result | 2 +- .../r/mysql/desc_sys_views_in_sys.result | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp index 6d779ad77e..070d94885f 100644 --- a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp @@ -8203,6 +8203,22 @@ int ObRawExprResolverImpl::process_internal_sys_function_node(const ParseNode *n } } //end for OX (expr = func_expr); + if (OB_SUCC(ret) && T_FUN_SYS_SET_COLLATION == node_type && ctx_.is_in_system_view_) { + if (OB_UNLIKELY(expr->get_param_count() != 2 || num != 2)) { + ret = OB_ERR_PARSER_SYNTAX; + LOG_WARN("invalid parse tree", K(ret)); + } else if (OB_ISNULL(expr->get_param_expr(1))) { + ret = OB_ERR_PARSER_SYNTAX; + LOG_WARN("invalid parse tree", K(ret)); + } else { + const ParseNode *collation_node = node->children_[1]->children_[1]; + ObString collation(collation_node->str_len_, collation_node->str_value_); + if (0 == collation.case_compare("utf8mb4_name_case") && + CS_TYPE_UTF8MB4_GENERAL_CI == expr->get_param_expr(1)->get_collation_type()) { + expr = expr->get_param_expr(0); + } + } + } } } return ret; diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result index 581eb0cd2d..d560c4dead 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result @@ -240,7 +240,7 @@ desc information_schema.ROUTINES; Field Type Null Key Default Extra SPECIFIC_NAME varchar(64) NO NULL ROUTINE_CATALOG varchar(512) NO -ROUTINE_SCHEMA varchar(64) NO +ROUTINE_SCHEMA varchar(64) NO NULL ROUTINE_NAME varchar(64) NO NULL ROUTINE_TYPE varchar(9) NO NULL DATA_TYPE varchar(64) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result index 74035c6f59..bb34985787 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result @@ -241,7 +241,7 @@ desc information_schema.ROUTINES; Field Type Null Key Default Extra SPECIFIC_NAME varchar(64) NO NULL ROUTINE_CATALOG varchar(512) NO -ROUTINE_SCHEMA varchar(64) NO +ROUTINE_SCHEMA varchar(64) NO NULL ROUTINE_NAME varchar(64) NO NULL ROUTINE_TYPE varchar(9) NO NULL DATA_TYPE varchar(64) NO