From c6f5f093e9a262cc39a619e3bfac916b4c658e4b Mon Sep 17 00:00:00 2001 From: obdev Date: Sat, 10 Jul 2021 15:50:13 +0800 Subject: [PATCH] bugfix: char function data error in gc col --- src/sql/resolver/expr/ob_raw_expr_printer.cpp | 36 +++++++++++++++++++ .../expr/ob_raw_expr_resolver_impl.cpp | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/sql/resolver/expr/ob_raw_expr_printer.cpp b/src/sql/resolver/expr/ob_raw_expr_printer.cpp index 2d9ee67094..f3268bc4ce 100644 --- a/src/sql/resolver/expr/ob_raw_expr_printer.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_printer.cpp @@ -1284,6 +1284,42 @@ int ObRawExprPrinter::print(ObSysFunRawExpr* expr) } break; } + case T_FUN_SYS_POSITION: { + DATA_PRINTF("%.*s", LEN_AND_PTR(func_name)); + if (2 != expr->get_param_count()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("param count should be equal 2", K(ret), K(expr->get_param_count())); + } else { + DATA_PRINTF("("); + PRINT_EXPR(expr->get_param_expr(0)); + DATA_PRINTF(" in "); + PRINT_EXPR(expr->get_param_expr(1)); + DATA_PRINTF(")"); + } + break; + } + case T_FUN_SYS_CHAR: { + DATA_PRINTF("%.*s(", LEN_AND_PTR(func_name)); + if (OB_SUCC(ret)) { + if (expr->get_param_count() < 2) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("param count should be great or equ 2", K(ret), K(expr->get_param_count())); + } else { + int64_t i = 0; + for (; OB_SUCC(ret) && i < expr->get_param_count() - 1; ++i) { + PRINT_EXPR(expr->get_param_expr(i)); + DATA_PRINTF(","); + } + if (OB_SUCC(ret)) { + --*pos_; + DATA_PRINTF(" using "); + PRINT_EXPR(expr->get_param_expr(expr->get_param_count() - 1)); + DATA_PRINTF(")"); + } + } + } + break; + } default: { // substr // date, month 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 c8aacbcb6c..f3ada9a9a6 100644 --- a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp @@ -1608,7 +1608,7 @@ int ObRawExprResolverImpl::process_char_charset_node(const ParseNode* node, ObRa LOG_WARN("invalid character set", K(charset_str), K(ret)); LOG_USER_ERROR(OB_ERR_UNKNOWN_CHARSET, charset_str.length(), charset_str.ptr()); } else { - ObCollationType coll_type = ObCharset::get_default_collation(charset_type); + ObCollationType coll_type = ObCharset::get_system_collation(); ObObj val; val.set_varchar(charset_str); val.set_collation_type(coll_type); -- GitLab