diff --git a/src/sql/engine/expr/ob_expr_output_pack.cpp b/src/sql/engine/expr/ob_expr_output_pack.cpp index f6a4dc6bc3..952f472f36 100644 --- a/src/sql/engine/expr/ob_expr_output_pack.cpp +++ b/src/sql/engine/expr/ob_expr_output_pack.cpp @@ -17,6 +17,9 @@ #include "io/easy_io.h" #include "lib/oblog/ob_log.h" #include "share/ob_lob_access_utils.h" +#ifdef OB_BUILD_ORACLE_XML +#include "sql/engine/expr/ob_expr_xml_func_helper.h" +#endif namespace oceanbase{ using namespace common; @@ -561,39 +564,6 @@ int ObExprOutputPack::process_lob_locator_results(common::ObObj& value, return ret; } -int ObExprOutputPack::process_sql_udt_results(common::ObObj& value, - common::ObIAllocator &alloc, - const ObSQLSessionInfo &my_session) -{ - int ret = OB_SUCCESS; - if (!value.is_xml_sql_type()) { - ret = OB_NOT_SUPPORTED; - OB_LOG(WARN, "not support udt type", K(ret), K(value.get_type()), K(value.get_udt_subschema_id())); - } else { - bool is_client_support_binary_xml = false; // client receive xml as json, like json - if (value.is_null() || value.is_nop_value()) { - // do nothing - } else if (is_client_support_binary_xml) { - // convert to udt client format - } else { - ObString data; - ObLobLocatorV2 loc(value.get_string(), true); - if (loc.is_null()) { - } else { - ObTextStringIter instr_iter(ObLongTextType, CS_TYPE_BINARY, value.get_string(), true); - if (OB_FAIL(instr_iter.init(0, &my_session, &alloc))) { - LOG_WARN("init lob str inter failed", K(ret), K(value)); - } else if (OB_FAIL(instr_iter.get_full_data(data))) { - LOG_WARN("get xml full data failed", K(value)); - } else { - value.set_udt_value(data.ptr(), data.length()); - } - } - } - } - return ret; -} - int ObExprOutputPack::convert_string_charset(const common::ObString &in_str, const ObCollationType in_cs_type, const ObCollationType out_cs_type, @@ -678,8 +648,10 @@ int ObExprOutputPack::try_encode_row(const ObExpr &expr, ObEvalCtx &ctx, } else if ((obj.is_lob() || obj.is_lob_locator() || obj.is_json()) && OB_FAIL(process_lob_locator_results(obj, alloc, *session))) { LOG_WARN("convert lob locator to longtext failed", K(ret)); - } else if (obj.is_user_defined_sql_type() && OB_FAIL(process_sql_udt_results(obj, alloc, *session))) { +#ifdef OB_BUILD_ORACLE_XML + } else if (obj.is_user_defined_sql_type() && OB_FAIL(ObXMLExprHelper::process_sql_udt_results(obj, &alloc, session))) { LOG_WARN("convert udt to client format failed", K(ret), K(obj.get_udt_subschema_id())); +#endif } } } diff --git a/src/sql/engine/expr/ob_expr_output_pack.h b/src/sql/engine/expr/ob_expr_output_pack.h index 42a770df2d..4e106bbe97 100644 --- a/src/sql/engine/expr/ob_expr_output_pack.h +++ b/src/sql/engine/expr/ob_expr_output_pack.h @@ -74,9 +74,6 @@ private: static int process_lob_locator_results(common::ObObj& value, common::ObIAllocator &alloc, const ObSQLSessionInfo &my_session); - static int process_sql_udt_results(common::ObObj& value, - common::ObIAllocator &alloc, - const ObSQLSessionInfo &my_session); static int convert_string_charset(const common::ObString &in_str, const ObCollationType in_cs_type,