From 62ec8bae307d88f84d4a61bbda58e328ada6f63c Mon Sep 17 00:00:00 2001 From: LiuYoung00 Date: Fri, 20 Oct 2023 12:14:01 +0000 Subject: [PATCH] [CP] [to #52466277]ps cursor support select DO_NOT_OPERATE_THIS_FOLDER into outfile --- src/observer/mysql/obmp_stmt_execute.cpp | 21 ++++++++++++++++----- src/pl/sys_package/ob_dbms_sql.cpp | 5 ++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/observer/mysql/obmp_stmt_execute.cpp b/src/observer/mysql/obmp_stmt_execute.cpp index 493e9c1c2..14e94c3fc 100644 --- a/src/observer/mysql/obmp_stmt_execute.cpp +++ b/src/observer/mysql/obmp_stmt_execute.cpp @@ -3068,11 +3068,22 @@ int ObMPStmtExecute::response_query_header(ObSQLSessionInfo &session, pl::ObDbms *this, false, OB_INVALID_COUNT); - if (OB_FAIL(drv.response_query_header(cursor.get_field_columns(), - false, - false, - true))) { - LOG_WARN("fail to get autocommit", K(ret)); + if (0 == cursor.get_field_columns().count()) { + // SELECT * INTO OUTFILE return null field, and only response ok packet + ObOKPParam ok_param; + ok_param.affected_rows_ = 0; + ok_param.is_partition_hit_ = session.partition_hit().get_bool(); + ok_param.has_more_result_ = false; + if (OB_FAIL(send_ok_packet(session, ok_param))) { + LOG_WARN("fail to send ok packt", K(ok_param), K(ret)); + } + } else { + if (OB_FAIL(drv.response_query_header(cursor.get_field_columns(), + false, + false, + true))) { + LOG_WARN("fail to get autocommit", K(ret)); + } } return ret; } diff --git a/src/pl/sys_package/ob_dbms_sql.cpp b/src/pl/sys_package/ob_dbms_sql.cpp index 266544a60..06d6fa97b 100644 --- a/src/pl/sys_package/ob_dbms_sql.cpp +++ b/src/pl/sys_package/ob_dbms_sql.cpp @@ -73,9 +73,12 @@ int ObDbmsInfo::deep_copy_field_columns(ObIAllocator& allocator, if (OB_ISNULL(src_fields)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("can't copy null fields", K(ret)); - } else if (src_fields->count() <= 0) { + } else if (src_fields->count() < 0) { ret = OB_ERR_UNEXPECTED; LOG_WARN("src fields is null.", K(ret), K(src_fields->count())); + } else if (0 == src_fields->count() ) { + // do nothing + // SELECT * INTO OUTFILE return null field } else if (OB_FAIL(dst_fields.reserve(src_fields->count()))) { LOG_WARN("fail to reserve column fields", K(ret), K(dst_fields.count()), K(src_fields->count()));