From 513daffbf1aee79ed564e21fc08326f17ad3cd1d Mon Sep 17 00:00:00 2001 From: xjp Date: Wed, 26 Oct 2022 18:22:45 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D=201.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=A4=9A=E6=AC=A1debug=E5=90=8E=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E6=9C=AA=E9=87=8A=E6=94=BE?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=B6=85=E8=BF=87=E6=9C=80=E5=A4=A7=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=95=B0=E7=9A=84=E9=97=AE=E9=A2=98=202.=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=AF=AD=E5=8F=A5=E4=B8=AD=E5=AD=98=E5=9C=A8=E7=A9=BA?= =?UTF-8?q?=E8=A1=8C=E6=97=B6=E4=B9=9F=E4=BC=9A=E6=89=A7=E8=A1=8C=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=203.=E5=8E=BB=E9=99=A4=E6=89=A7?= =?UTF-8?q?=E8=A1=8Cdebug=E5=90=8E=E9=83=A8=E5=88=86=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E4=B8=8D=E6=94=AF=E6=8C=81=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E5=90=8E=E7=9A=84=E8=A6=86=E7=9B=96=E7=8E=87?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E7=BB=9F=E8=AE=A1=204.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E8=AF=AD=E5=8F=A5=E6=97=B6=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81=E7=9A=84=E7=B1=BB=E5=9E=8B=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=BC=82=E5=B8=B8=E6=97=B6,=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=BF=9E=E6=8E=A5=E6=9C=AA=E9=87=8A=E6=94=BE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=205.=E4=BF=AE=E5=A4=8D2.0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=8B=E6=89=A7=E8=A1=8Cdebug=E6=97=B6=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E6=9C=AA?= =?UTF-8?q?=E9=87=8A=E6=94=BE=E7=9A=84=E9=97=AE=E9=A2=98=20=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9=201.=E8=A6=86=E7=9B=96=E7=8E=87?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E6=B7=BB=E5=8A=A0=E5=85=A5=E5=8F=82=E5=88=97?= =?UTF-8?q?=202.=E5=AF=BC=E5=87=BA=E6=8A=A5=E5=91=8A=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BAoid=5F=E5=90=8D=E7=A7=B0=5F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3=203.=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=204.=E6=89=A7=E8=A1=8C=E6=A0=87=E8=AE=B0,?= =?UTF-8?q?=E6=89=A7=E8=A1=8C,=E7=BB=9F=E8=AE=A1=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=B6=E8=BF=87=E6=BB=A4=E7=A9=BA=E8=A1=8C=205.=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=BD=93=E8=BF=94=E5=9B=9E=E5=80=BC=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E6=97=B6,=E5=85=A8=E9=83=A8=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=206.=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E5=B1=9E?= =?UTF-8?q?=E6=80=A7/tip=E5=91=BD=E5=90=8D=E6=97=B6=E7=9A=84=E8=A7=84?= =?UTF-8?q?=E8=8C=83=207.=E4=BF=AE=E6=94=B9=E6=A0=87=E8=AE=B0=E6=97=B6?= =?UTF-8?q?=E5=8F=AA=E8=83=BD=E6=A0=87=E8=AE=B0=E5=87=BD=E6=95=B0=E4=BD=93?= =?UTF-8?q?=E5=86=85=E7=9A=84=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.bug 修复 修改提示 1.code check 2.导出报告时过滤掉不可标记的行 code check code check code check 用户手册修改 修改英文环境时导出报错问题 --- .../mppdbide/common/DbeCommonUtils.java | 178 ++++++++++++++++++ .../common/QueryResVoConvertHelper.java | 20 +- .../debuger/service/DbeDebugService.java | 37 +++- .../debuger/service/DbeQueryService.java | 57 ++++++ .../debuger/service/DbeSourceCodeService.java | 40 ++++ .../debuger/service/DebugService.java | 62 ++++-- .../service/DebuggerReportService.java | 32 +++- .../debuger/service/QueryService.java | 33 ++-- .../debuger/service/ServiceFactory.java | 18 +- .../debuger/service/SourceCodeService.java | 73 ++----- .../debuger/vo/dbe/ExportParamVo.java | 5 + .../src/messages.properties | 17 +- .../src/messages_zh_CN.properties | 19 +- .../mppdbide/utils/IMessagesConstants.java | 5 + .../mppdbide/utils/IMessagesConstantsOne.java | 60 ++++++ .../utils/vo/DebuggerStartInfoVo.java | 5 + .../Application.e4xmi | 2 + .../core/sourceeditor/PLSourceEditorCore.java | 172 +++++++++++------ .../view/coverage/CoverageService.java | 6 +- .../handler/debug/DebugServiceHelper.java | 47 ++++- .../view/handler/debug/StartDebugHandler.java | 1 + .../handler/debug/chain/ServerExitChain.java | 6 +- .../debug/ui/UpdateDebugPositionTask.java | 88 +++------ .../view/service/CoverageServiceFactory.java | 11 +- .../mppdbide/view/ui/CoverageHistory.java | 59 +++--- .../mppdbide/view/utils/ExportUtil.java | 70 ++++--- .../mppdbide/view/utils/icon/IiconPath.java | 5 + .../mppdbide/view/vo/CoverageVo.java | 11 ++ .../src/resources/exportTemplate.html | 14 +- .../src/resources/exportTemplate_zh_CN.html | 20 +- .../bl/test/debug/DbeDebugerTest.java | 5 +- .../datastudio/Data Studio User Manual.pdf | Bin 4431206 -> 4794077 bytes ...0\346\210\267\346\211\213\345\206\214.pdf" | Bin 4200132 -> 4413321 bytes 33 files changed, 839 insertions(+), 339 deletions(-) create mode 100644 code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/DbeCommonUtils.java create mode 100644 code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeQueryService.java create mode 100644 code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeSourceCodeService.java diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/DbeCommonUtils.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/DbeCommonUtils.java new file mode 100644 index 00000000..35434340 --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/DbeCommonUtils.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2022 Huawei Technologies Co.,Ltd. + * + * openGauss is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.opengauss.mppdbide.common; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.apache.commons.lang.StringUtils; +import org.opengauss.mppdbide.debuger.service.DbeDebugService; +import org.opengauss.mppdbide.debuger.vo.dbe.InfoCodeVo; +import org.opengauss.mppdbide.utils.IMessagesConstants; +import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; +import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; + +/** + * Description: DbeCommonUtils + * + * @since 3.0.0 + */ +public final class DbeCommonUtils { + /** + * list of infoCode + */ + public static volatile List infoCodes; + + /** + * variable begin + */ + public static final String BEGIN = "BEGIN"; + + /** + * variable END + */ + public static final String END = "END"; + + private DbeCommonUtils() { + + } + + /** + * checkCanBreakLines + * + * @param sourceCode code + * @param conn dbConnection + * @param oid oid + * @param selectIndex index + * @throws SQLException exception + */ + public static void checkCanBreakLines(List sourceCodes, IConnection conn, long oid, List indexs) + throws SQLException { + List infos = DbeDebugService.getInfoCodes(conn, Arrays.asList(oid)); + List canBreaks = infos.stream().filter(item -> item.canbreak).collect(Collectors.toList()); + for (int i = 0; i < indexs.size(); i++) { + String selectCode = sourceCodes.get(Integer.parseInt(indexs.get(i))); + long count = canBreaks.stream().filter(item -> item.query.equalsIgnoreCase(selectCode)).count(); + if (count == 0) { + throw new SQLException(MessageConfigLoader.getProperty(IMessagesConstants.NOT_SUPPORT_BREAK)); + } + } + } + + /** + * getBeginToEndLineNo + * + * @param sourceCode code + * @return Map map + */ + public static Map getBeginToEndLineNo(List sourceCodes) { + Map map = new HashMap(); + boolean isBeginFlag = true; + for (int i = 0; i < sourceCodes.size(); i++) { + String code = sourceCodes.get(i); + if (isBeginFlag && checkStrEquals(code, BEGIN)) { + map.put(BEGIN, i); + isBeginFlag = false; + continue; + } + if (checkStrEquals(code, END)) { + map.put(END, i); + } + } + return map; + } + + /** + * checkStrEquals + * + * @param firstCode firstCode + * @param endCode endCode + * @return boolean boolean + */ + public static boolean checkStrEquals(String firstCode, String endCode) { + return firstCode.toUpperCase(Locale.ENGLISH).trim().startsWith(endCode); + } + + /** + * getCanBreakLinesByInfo + * + * @param conn dbConnection + * @param inputsParams params + * @param sourceCode code + * @return List string + */ + public static List getCanBreakLinesByInfo(IConnection conn, List inputsParams, + List sourceCodes) { + List infos = null; + try { + infos = DbeDebugService.getInfoCodes(conn, inputsParams); + } catch (SQLException e) { + MPPDBIDELoggerUtility.error(e.getMessage()); + return Collections.emptyList(); + } + return getBreakLines(infos, sourceCodes); + } + + /** + * getBreakLines + * + * @param infos infoCode + * @param sourceCode code + * @return List string + */ + public static List getBreakLines(List infos, List sourceCodes) { + Map map = getBeginToEndLineNo(sourceCodes); + List linse = new ArrayList(); + for (int i = map.get(BEGIN); i < sourceCodes.size(); i++) { + if (i >= map.get(END)) { + return linse; + } + if (i < infos.size() && infos.get(i).canbreak) { + linse.add(String.valueOf(i)); + } + } + return linse; + } + + /** + * compluteIndex + * + * @param infos infos + * @param sourceCode code + * @return index int + */ + public static int compluteIndex(List infos, List sourceCodes) { + Map map = getBeginToEndLineNo(sourceCodes); + int index = -1; + for (int i = map.get(BEGIN) + 1; i < sourceCodes.size(); i++) { + index = i; + if (index >= map.get(END)) { + return index; + } + if (!StringUtils.isBlank(sourceCodes.get(index)) && infos.size() >= index && infos.get(index).canbreak) { + return i; + } + } + return index; + } +} \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/QueryResVoConvertHelper.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/QueryResVoConvertHelper.java index d3df0c59..d3c8f32b 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/QueryResVoConvertHelper.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/QueryResVoConvertHelper.java @@ -18,6 +18,7 @@ package org.opengauss.mppdbide.common; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import org.opengauss.mppdbide.debuger.annotation.ParseVo; @@ -43,7 +44,7 @@ public class QueryResVoConvertHelper { * @return return value * @throws SQLException the exception */ - public static T parse(ResultSet rs, Class clazz, IConnection conn) throws SQLException { + public static Optional parse(ResultSet rs, Class clazz, IConnection conn) throws SQLException { VersionVo version = VersionHelper.getDebuggerVersion(conn); return parse(rs, clazz, version); } @@ -58,17 +59,12 @@ public class QueryResVoConvertHelper { * @return the converted value * @throws SQLException the exception */ - public static T parse(ResultSet rs, Class clazz, VersionVo versionVo) throws SQLException { + public static Optional parse(ResultSet rs, Class clazz, VersionVo versionVo) throws SQLException { T obj = null; - // if openGauss2.0 command do not need to convert - if (!getConvert(versionVo.getDebuggerVersion())) { - obj = ParseVo.parse(rs, clazz); - } else { - if (SourceCodeVo.class.equals(clazz)) { - obj = convertToSourceCodeVo(rs); - } + if (SourceCodeVo.class.equals(clazz)) { + obj = convertToSourceCodeVo(rs, clazz); } - return obj; + return Optional.of(obj); } /** @@ -111,12 +107,14 @@ public class QueryResVoConvertHelper { * Convert vo by class * * @param rs the rs + * @param clazz class * @param the Generics * @return the converted value * @throws SQLException the exception */ - public static T convertToSourceCodeVo(ResultSet rs) throws SQLException { + public static T convertToSourceCodeVo(ResultSet rs, Class clazz) throws SQLException { List infos = ParseVo.parseList(rs, InfoCodeVo.class); + DbeCommonUtils.infoCodes = infos; List infoCodeList = infos.stream().filter(item -> item.lineno != null).collect(Collectors.toList()); StringBuffer buffer = new StringBuffer(); infoCodeList.forEach(infoItem -> { diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeDebugService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeDebugService.java index 9dda765b..e3807b6a 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeDebugService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeDebugService.java @@ -21,13 +21,16 @@ import java.sql.SQLException; import java.sql.SQLWarning; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; +import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.QueryResVoConvertHelper; import org.opengauss.mppdbide.common.VersionHelper; import org.opengauss.mppdbide.debuger.annotation.ParseVo; @@ -39,6 +42,7 @@ import org.opengauss.mppdbide.debuger.vo.PositionVo; import org.opengauss.mppdbide.debuger.vo.StackVo; import org.opengauss.mppdbide.debuger.vo.VariableVo; import org.opengauss.mppdbide.debuger.vo.dbe.AttachVo; +import org.opengauss.mppdbide.debuger.vo.dbe.InfoCodeVo; import org.opengauss.mppdbide.debuger.vo.dbe.TurnOnVo; import org.opengauss.mppdbide.utils.DebuggerStartVariable; import org.opengauss.mppdbide.utils.VariableRunLine; @@ -107,7 +111,17 @@ public class DbeDebugService extends DebugService { }, 2000); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { - return Optional.ofNullable(rs.getObject(1)); + int totalCount = rs.getMetaData().getColumnCount(); + int initCount = 0; + List resList = new ArrayList(); + while (initCount < totalCount) { + initCount++; + String columnName = rs.getMetaData().getColumnName(initCount); + Object result = rs.getObject(initCount); + String coverRes = String.format(Locale.ENGLISH, columnName+"%s "+result,":"); + resList.add(coverRes); + } + return Optional.ofNullable(String.join("; ", resList)); } return Optional.empty(); } @@ -349,6 +363,27 @@ public class DbeDebugService extends DebugService { return VariableRunLine.isPldebugger; } + /** + * get infoCodes + * + * @param conn the dbConnection + * @param debugOpt debugOpt + * @param params oid + * @return List InfoCodeVo + * @throws SQLException Exception + */ + public static List getInfoCodes(IConnection conn, List params) throws SQLException { + try (PreparedStatement ps = conn.getDebugOptPrepareStatement( + DebugConstants.DebugOpt.DBE_GET_SOURCE_CODE, params)) { + try (ResultSet rs = ps.executeQuery()) { + return ParseVo.parseList(rs, InfoCodeVo.class); + } catch (SQLException e) { + MPPDBIDELoggerUtility.error(e.getMessage()); + } + } + return Collections.emptyList(); + } + private boolean disposeDbeBreakpoint(DebugOpt debugOpt, PositionVo positionVo, Boolean isDelete) throws SQLException { if (positionVo.func == null || positionVo.func.intValue() == 0) { diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeQueryService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeQueryService.java new file mode 100644 index 00000000..f0a6957f --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeQueryService.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2022 Huawei Technologies Co.,Ltd. + * + * openGauss is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.opengauss.mppdbide.debuger.service; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.opengauss.mppdbide.common.QueryResVoConvertHelper; +import org.opengauss.mppdbide.debuger.debug.DebugConstants; +import org.opengauss.mppdbide.debuger.vo.SourceCodeVo; + +/** + * Title: the QueryService class + * + * @since 3.0.0 + */ +public class DbeQueryService extends QueryService { + /** + * get base source code + * + * @param oid function oid + * @return Optional the source code + * @throws SQLException sql exp + */ + @Override + public Optional getSourceCode(Long oid) throws SQLException { + return getTempSourceCode(oid, DebugConstants.DebugOpt.DBE_GET_SOURCE_CODE, SourceCodeVo.class); + } + + private Optional getTempSourceCode(Long oid, DebugConstants.DebugOpt debugOpt, Class clazz) + throws SQLException { + List inputParams = Arrays.asList(oid); + try (PreparedStatement ps = getIConn().getDebugOptPrepareStatement( + debugOpt, inputParams)) { + try (ResultSet rs = ps.executeQuery()) { + return QueryResVoConvertHelper.parse(rs, clazz, getIConn()); + } + } + } +} \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeSourceCodeService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeSourceCodeService.java new file mode 100644 index 00000000..16a43044 --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DbeSourceCodeService.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Huawei Technologies Co.,Ltd. + * + * openGauss is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.opengauss.mppdbide.debuger.service; + +import java.util.List; + +import org.opengauss.mppdbide.common.DbeCommonUtils; +import org.opengauss.mppdbide.debuger.exception.DebugPositionNotFoundException; + +/** + * Title: the SourceCodeService class + * + * @since 3.0.0 + */ +public class DbeSourceCodeService extends SourceCodeService { + /** + * get begin debug line number + * + * @return int return begin debug line number in code line + * @throws DebugPositionNotFoundException debug position exp + */ + @Override + public int getBeginDebugCodeLine() throws DebugPositionNotFoundException { + List terminalCodes = super.totalCodeDesc.getCodeList(); + return DbeCommonUtils.compluteIndex(DbeCommonUtils.infoCodes, terminalCodes); + } +} diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebugService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebugService.java index 0fa9e4e4..2857d6f8 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebugService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebugService.java @@ -15,15 +15,27 @@ package org.opengauss.mppdbide.debuger.service; -import org.opengauss.mppdbide.debuger.event.Event; -import org.opengauss.mppdbide.debuger.event.EventHander; -import org.opengauss.mppdbide.debuger.event.Event.EventMessage; -import org.opengauss.mppdbide.debuger.exception.DebugExitException; -import org.opengauss.mppdbide.debuger.service.chain.MsgChainHelper; +import java.lang.Thread.State; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.SQLWarning; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Optional; + +import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.debuger.annotation.ParseVo; import org.opengauss.mppdbide.debuger.debug.DebugConstants; import org.opengauss.mppdbide.debuger.debug.DebugConstants.DebugOpt; import org.opengauss.mppdbide.debuger.debug.DebugState; +import org.opengauss.mppdbide.debuger.event.Event; +import org.opengauss.mppdbide.debuger.event.Event.EventMessage; +import org.opengauss.mppdbide.debuger.event.EventHander; +import org.opengauss.mppdbide.debuger.exception.DebugExitException; +import org.opengauss.mppdbide.debuger.service.chain.MsgChainHelper; import org.opengauss.mppdbide.debuger.thread.DebugServerRunable; import org.opengauss.mppdbide.debuger.thread.DebugServerThreadProxy; import org.opengauss.mppdbide.debuger.thread.EventQueueThread; @@ -33,20 +45,9 @@ import org.opengauss.mppdbide.debuger.vo.SessionVo; import org.opengauss.mppdbide.debuger.vo.StackVo; import org.opengauss.mppdbide.debuger.vo.VariableVo; import org.opengauss.mppdbide.debuger.vo.VersionVo; -import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.postgresql.core.NoticeListener; -import java.lang.Thread.State; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.SQLWarning; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; - /** * Title: the DebugService class * Description: this is module use to debug openGauss database's pl/sql function. @@ -150,10 +151,7 @@ public class DebugService implements NoticeListener, EventHander, IDebugService ps.setObject(i, args.get(i - 1)); } try (ResultSet rs = ps.executeQuery()) { - if (rs.next()) { - return Optional.ofNullable(rs.getObject(1)); - } - return Optional.empty(); + return this.listResultSet(rs); } } } finally { @@ -793,4 +791,28 @@ public class DebugService implements NoticeListener, EventHander, IDebugService void getServerCallBackBegin() throws SQLException { serverCallBackBegin(); } + + /** + * get all val from ResultSet + * + * @param rs param + * @return Optional<> Object + * @throws SQLException Exception + */ + private Optional listResultSet(ResultSet rs) throws SQLException { + if (rs.next()) { + int totalCount = rs.getMetaData().getColumnCount(); + int initCount = 0; + List resList = new ArrayList(); + while (initCount < totalCount) { + initCount++; + String columnName = rs.getMetaData().getColumnName(initCount); + Object result = rs.getObject(initCount); + String coverRes = String.format(Locale.ENGLISH, columnName+"%s "+result,":"); + resList.add(coverRes); + } + return Optional.ofNullable(String.join("; ", resList)); + } + return Optional.empty(); + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebuggerReportService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebuggerReportService.java index 14a393ea..fbf1081a 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebuggerReportService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/DebuggerReportService.java @@ -23,7 +23,9 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import org.opengauss.mppdbide.common.DbeCommonUtils; import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.IConnectionProvider; import org.opengauss.mppdbide.debuger.annotation.ParseVo; @@ -52,8 +54,9 @@ public class DebuggerReportService { public static final int CODE_BASE_OFFSET = 1; private static final String CREAT_TABLE = "CREATE TABLE IF NOT EXISTS his_coverage( oid BIGINT,"; private static final String TABLE_FIELD_ONE = " cid BIGINT, coverageLines VARCHAR, remarkLines VARCHAR, "; - private static final String TABLE_FIELD_TWO = "endTime BIGINT, sourceCode VARCHAR, params VARCHAR);"; - private static final String INSERT = "insert into his_coverage VALUES(?,?,?,?,?,?,?);"; + private static final String TABLE_FIELD_TWO = "endTime BIGINT, sourceCode VARCHAR, params VARCHAR," + + " canBreakLine VARCHAR);"; + private static final String INSERT = "insert into his_coverage VALUES(?,?,?,?,?,?,?,?);"; /** * default value @@ -62,6 +65,7 @@ public class DebuggerReportService { private IConnection serverConn; private IConnection clientConn; + private IConnection queryConn; private FunctionVo functionVo; private TurnOnVo turnOnVo; private DebuggerStartInfoVo startInfo; @@ -109,12 +113,9 @@ public class DebuggerReportService { } private String getCurLine() { - try { - return String.valueOf(getBeginDebugCodeLine()); - } catch (DebugPositionNotFoundException debugExp) { - MPPDBIDELoggerUtility.error("receive invalid position:" + debugExp.toString()); - } - return "-1"; + List terminalCodes = this.totalCodeDesc.getCodeList(); + int index = DbeCommonUtils.compluteIndex(DbeCommonUtils.infoCodes, terminalCodes); + return String.valueOf(index); } /** @@ -127,6 +128,7 @@ public class DebuggerReportService { try { this.serverConn = connectProvider.getValidFreeConnection(); this.clientConn = connectProvider.getValidFreeConnection(); + this.queryConn = connectProvider.getValidFreeConnection(); this.functionVo = functionVo; } catch (SQLException e) { MPPDBIDELoggerUtility.error(e.getMessage()); @@ -175,6 +177,14 @@ public class DebuggerReportService { } catch (SQLException sqlErr) { MPPDBIDELoggerUtility.warn("reportService clientConn close failed, err=" + sqlErr.toString()); } + try { + if (queryConn != null) { + queryConn.close(); + queryConn = null; + } + } catch (SQLException sqlErr) { + MPPDBIDELoggerUtility.warn("reportService queryConn close failed, err=" + sqlErr.toString()); + } } /** @@ -273,6 +283,11 @@ public class DebuggerReportService { List historyList = DebuggerStartVariable.getHistoryList(functionVo.oid); historyList.add(endInfo); DebuggerStartVariable.setHistoryList(functionVo.oid, historyList); + List toRunLines = DbeCommonUtils.getCanBreakLinesByInfo(queryConn, + Arrays.asList(functionVo.oid), SourceCodeService.CodeDescription.getLines(endInfo.sourceCode)) + .stream().map(item -> String.valueOf(Integer.parseInt(item) + 1)) + .collect(Collectors.toList()); + endInfo.canBreakLine = String.join(",", toRunLines); createTbale(endInfo); } @@ -293,6 +308,7 @@ public class DebuggerReportService { if (endInfo.args != null) { preparedStatement.setObject(7, endInfo.args.toString()); } + preparedStatement.setObject(8, endInfo.canBreakLine); preparedStatement.execute(); } catch (SQLException e) { MPPDBIDELoggerUtility.error(e.getMessage()); diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/QueryService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/QueryService.java index a77e991d..6b07081f 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/QueryService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/QueryService.java @@ -15,24 +15,22 @@ package org.opengauss.mppdbide.debuger.service; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; - -import org.opengauss.mppdbide.common.IConnection; -import org.opengauss.mppdbide.common.QueryResVoConvertHelper; -import org.opengauss.mppdbide.common.VersionHelper; import org.opengauss.mppdbide.debuger.dao.FunctionDao; +import org.opengauss.mppdbide.debuger.annotation.ParseVo; import org.opengauss.mppdbide.debuger.debug.DebugConstants; -import org.opengauss.mppdbide.debuger.debug.DebugConstants.DebugOpt; import org.opengauss.mppdbide.debuger.vo.FunctionVo; import org.opengauss.mppdbide.debuger.vo.SourceCodeVo; import org.opengauss.mppdbide.debuger.vo.TotalSourceCodeVo; +import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + /** * Title: the QueryService class * @@ -68,10 +66,9 @@ public class QueryService implements IService { * @throws SQLException sql exp */ public Optional getSourceCode(Long oid) throws SQLException { - DebugOpt opt = VersionHelper.getDebugOptByDebuggerVersion(conn, DebugConstants.DebugOpt.GET_SOURCE_CODE); - Optional sourceCodeVo = getTempSourceCode(oid, opt, SourceCodeVo.class); - String sourceCode = sourceCodeVo.get().getSourceCode(); - return sourceCodeVo; + return getTempSourceCode(oid, + DebugConstants.DebugOpt.GET_SOURCE_CODE, + SourceCodeVo.class); } /** @@ -96,7 +93,7 @@ public class QueryService implements IService { debugOpt, inputParams)) { try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { - return Optional.of(QueryResVoConvertHelper.parse(rs, clazz, conn)); + return Optional.of(ParseVo.parse(rs, clazz)); } return Optional.empty(); } @@ -157,4 +154,8 @@ public class QueryService implements IService { MPPDBIDELoggerUtility.warn("close conn with err:" + e.toString()); } } + + IConnection getIConn() { + return conn; + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/ServiceFactory.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/ServiceFactory.java index 2c0f771e..645fa1b9 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/ServiceFactory.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/ServiceFactory.java @@ -21,7 +21,6 @@ import org.opengauss.mppdbide.debuger.debug.DebugConstants; import org.opengauss.mppdbide.debuger.vo.FunctionVo; import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.IConnectionProvider; -import org.opengauss.mppdbide.common.VersionHelper; import org.opengauss.mppdbide.debuger.vo.VersionVo; import org.opengauss.mppdbide.utils.VariableRunLine; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; @@ -87,7 +86,7 @@ public class ServiceFactory { * @return Optional the version vo * @throws SQLException sql error */ - public Optional getVersion() throws SQLException { + public Optional getVersion() throws SQLException { IConnection conn = provider.getValidFreeConnection(); try (PreparedStatement ps = conn.getDebugOptPrepareStatement( DebugConstants.DebugOpt.DEBUG_VERSION, @@ -113,6 +112,9 @@ public class ServiceFactory { * @return SourceCodeService the code service */ public SourceCodeService getCodeService() { + if (!VariableRunLine.isPldebugger) { + return new DbeSourceCodeService(); + } return new SourceCodeService(); } @@ -128,11 +130,6 @@ public class ServiceFactory { } private static DebugService getDebugService(IConnection conn) { - try { - VariableRunLine.isPldebugger = VersionHelper.getDebuggerVersion(conn).isPldebugger(); - } catch (SQLException e) { - MPPDBIDELoggerUtility.error(e.getMessage()); - } if (!VariableRunLine.isPldebugger) { return new DbeDebugService(); } @@ -140,7 +137,12 @@ public class ServiceFactory { } private static QueryService createQueryService(IConnection conn) { - QueryService queryService = new QueryService(); + QueryService queryService; + if (!VariableRunLine.isPldebugger) { + queryService = new DbeQueryService(); + } else { + queryService = new QueryService(); + } queryService.setFunctionDao(new FunctionDao()); queryService.setConn(conn); return queryService; diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/SourceCodeService.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/SourceCodeService.java index 57a4f516..7cb74910 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/SourceCodeService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/service/SourceCodeService.java @@ -15,14 +15,13 @@ package org.opengauss.mppdbide.debuger.service; -import org.opengauss.mppdbide.debuger.exception.DebugPositionNotFoundException; - -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; +import org.opengauss.mppdbide.debuger.exception.DebugPositionNotFoundException; + /** * Title: the SourceCodeService class * @@ -33,11 +32,9 @@ public class SourceCodeService implements IService { * the offset of show code and base code */ public static final int CODE_BASE_OFFSET = 1; - private static final String BEGIN = "BEGIN"; - private static final String END = "END;"; - private CodeDescription baseCodeDesc = null; - private CodeDescription totalCodeDesc = null; + CodeDescription baseCodeDesc = null; + CodeDescription totalCodeDesc = null; /** * close service @@ -231,68 +228,22 @@ public class SourceCodeService implements IService { } /** - * get code to run lines + * get code list * * @param srcCode the code - * @return the run line num + * @return the line list */ - public static List getRunLines(String srcCode) { - List totalLines = getLines(srcCode); - Boolean isStart = false; - Boolean isEnd = false; - Boolean isBegin = false; - List runLines = new ArrayList(); - for (String line : totalLines) { - if (!isStart) { - isStart = line.toUpperCase(Locale.ENGLISH).contains(BEGIN); - } - isEnd = line.toUpperCase(Locale.ENGLISH).contains(END); - if (isEnd) { - break; - } - if (isStart) { - isBegin = line.toUpperCase(Locale.ENGLISH).contains(BEGIN); - if (!isBegin) { - runLines.add(line); - } - } - } - return runLines; + public List getCodeList() { + return this.codeList; } /** - * get line num by code + * get BeginFromCode * - * @param srcCode the code - * @return the line num + * @param lines line + * @return int linse item */ - public static List getRunLinesNums(String srcCode) { - List totalLines = getLines(srcCode); - Boolean isStart = false; - Boolean isEnd = false; - Boolean isBegin = false; - List runLines = new ArrayList(); - Integer count = 0; - for (String line : totalLines) { - count++; - if (!isStart) { - isStart = line.toUpperCase(Locale.ENGLISH).contains(BEGIN); - } - isEnd = line.toUpperCase(Locale.ENGLISH).contains(END); - if (isEnd) { - break; - } - if (isStart) { - isBegin = line.toUpperCase(Locale.ENGLISH).contains(BEGIN); - if (!isBegin) { - runLines.add(count.toString()); - } - } - } - return runLines; - } - - private int getBeginFromCode(List lines) { + public int getBeginFromCode(List lines) { for (int i = 0; i < lines.size(); i++) { if (lines.get(i).toUpperCase(Locale.ENGLISH).trim().startsWith("BEGIN")) { return i; diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/vo/dbe/ExportParamVo.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/vo/dbe/ExportParamVo.java index 280085f1..acaffa94 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/vo/dbe/ExportParamVo.java +++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/vo/dbe/ExportParamVo.java @@ -59,4 +59,9 @@ public class ExportParamVo { * html of function */ public String html; + + /** + * canBreakLine of function + */ + public String canBreakLine; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties index af1785cb..671ff78b 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties @@ -3179,13 +3179,13 @@ CREATE_VIEW_UI_DELETE = Delete CREATE_VIEW_UI_MATERVIEW = Materialized view CREATE_VIEW_UI_VIEW = View CREATE_VIEW_UI_NAME_NOT_EMPTY = View name cann't be empty! -REMARK_SHORTCUT_KEY_BINDING_TOGGLE_LINE_COMMENTS=remark Line /UnRemark Line (coverage) +REMARK_SHORTCUT_KEY_BINDING_TOGGLE_LINE_COMMENTS=Remark/Unremark Line OID=Oid -TOTAL_LINE=Total rows -TOTAL_RUN_LINE_NUM=Total running lines +TOTAL_LINE=Total Rows +TOTAL_RUN_LINE_NUM=Total Running Lines TOTAL_COVERAGE=Total Coverage REMARK_LINE=Mark Row -REMARK_RUM_LINE_NUM=Mark execution line number +REMARK_RUM_LINE_NUM=Mark Execution Line REMARK_COVERAGE=Remark Coverage DELETE_COVERAGE=Select Delete DELETE_COVERAGE_ALL=Delete All @@ -3193,13 +3193,16 @@ EXPORT_REPORT=Export Report SURE_EXPORT_REPORT=Are you sure you want to export coverage reports? COVERAGE_REPORT_NOT_EXIST=Coverage report does not exist COVERAGE_REPORT_TO_SELECT=Please select a record -COVERAGE_HISTORY_TITLE=Coverage_Report - {0} +COVERAGE_HISTORY_TITLE=Historical Coverage - {0} DELETE_COVERAGE_REPORT_TITLE=Delete Stored Procedure DELETE_SELECTED_COVERAGE_HISTORY_ALERT=Are you sure you want to delete the selected stored procedure query history for the {0} connection profile? DELETE_ALL_COVERAGE_HISTORY_ALERT=Are you sure you want to delete the stored procedure query history for the {0} connection profile? -UPDATE_TIME=Update time +UPDATE_TIME=Update Time DEBUG_POSITION_LABEL_PASS=pass DEBUG_POSITION_LABEL_FAIL=fail COVERAGE_HINT=To view the coverage report, please execute Debug! EXPORT_PATH = The report has been downloaded to: {0} -COVERAGE_CHECK = This version does not support this function! \ No newline at end of file +COVERAGE_CHECK = This version does not support this function! +INPUT_PARAMS = Input Params +NOT_SUPPORT_BREAK = There are rows that do not support flags! +VERSION_CHECK_FAIL = Check version failed! \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties index ce94248b..259934b0 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties @@ -3158,7 +3158,7 @@ CREATE_VIEW_UI_DELETE = \u5220\u9664 CREATE_VIEW_UI_MATERVIEW = \u7269\u5316\u89C6\u56FE CREATE_VIEW_UI_VIEW = \u89C6\u56FE CREATE_VIEW_UI_NAME_NOT_EMPTY = \u89C6\u56FE\u540D\u4E0D\u80FD\u4E3A\u7A7A -REMARK_SHORTCUT_KEY_BINDING_TOGGLE_LINE_COMMENTS=\u6807\u8BB0\u884C/\u53D6\u6D88\u6807\u8BB0\u884C(\u8986\u76D6\u7387) +REMARK_SHORTCUT_KEY_BINDING_TOGGLE_LINE_COMMENTS=\u6807\u8BB0/\u53D6\u6D88\u6807\u8BB0\u884C OID=Oid TOTAL_LINE=\u603B\u884C\u6570 TOTAL_RUN_LINE_NUM=\u6267\u884C\u884C\u6570 @@ -3172,7 +3172,7 @@ EXPORT_REPORT=\u5BFC\u51FA\u8986\u76D6\u7387\u62A5\u544A SURE_EXPORT_REPORT=\u786E\u5B9A\u5BFC\u51FA\u8986\u76D6\u7387\u62A5\u544A\u5417? COVERAGE_REPORT_NOT_EXIST=\u8986\u76D6\u7387\u62A5\u544A\u4E0D\u5B58\u5728 COVERAGE_REPORT_TO_SELECT=\u8BF7\u9009\u62E9\u4E00\u6761\u8BB0\u5F55 -COVERAGE_HISTORY_TITLE=\u8986\u76D6\u7387\u62A5\u544A - {0} +COVERAGE_HISTORY_TITLE=\u5386\u53F2\u8986\u76D6\u7387 - {0} DELETE_COVERAGE_REPORT_TITLE=\u5220\u9664\u5B58\u50A8\u8FC7\u7A0B DELETE_SELECTED_COVERAGE_HISTORY_ALERT=\u4F60\u786E\u5B9A\u8981\u5220\u9664\u201C{0}\u201D\u8FDE\u63A5\u914D\u7F6E\u6587\u4EF6\u7684\u9009\u5B9A\u7684\u5B58\u50A8\u8FC7\u7A0B\u67E5\u8BE2\u5386\u53F2\uFF1F DELETE_ALL_COVERAGE_HISTORY_ALERT=\u4F60\u786E\u5B9A\u8981\u5220\u9664\u201C{0}\u201D\u8FDE\u63A5\u914D\u7F6E\u6587\u4EF6\u7684\u5B58\u50A8\u8FC7\u7A0B\u67E5\u8BE2\u5386\u53F2\uFF1F @@ -3181,4 +3181,17 @@ DEBUG_POSITION_LABEL_PASS=\u901A\u8FC7 DEBUG_POSITION_LABEL_FAIL=\u672A\u901A\u8FC7 COVERAGE_HINT=\u82E5\u9700\u8981\u67E5\u770B\u8986\u76D6\u7387\u62A5\u544A,\u8BF7\u6267\u884CDebug! EXPORT_PATH = \u62A5\u544A\u5DF2\u4E0B\u8F7D\u5230: {0} -COVERAGE_CHECK = \u8BE5\u7248\u672C\u4E0D\u652F\u6301\u6B64\u529F\u80FD! \ No newline at end of file +COVERAGE_CHECK = \u8BE5\u7248\u672C\u4E0D\u652F\u6301\u6B64\u529F\u80FD! +INPUT_PARAMS = \u5165\u53C2 +NOT_SUPPORT_BREAK = \u5B58\u5728\u4E0D\u652F\u6301\u6807\u8BB0\u7684\u884C! +VERSION_CHECK_FAIL = \u7248\u672C\u6821\u9A8C\u5931\u8D25! +EXP_EXECUTE_STATEMENT = \u6267\u884C\u8BED\u53E5 +EXP_SERIAL_NUMBER = \u5E8F\u53F7 +EXP_TOTAL_ROWS = \u603B\u884C\u6570 +EXP_TOTAL_RUNNING_LINES = \u6267\u884C\u884C\u6570 +EXP_TOTAL_COVERAGE = \u603B\u8986\u76D6\u7387 +EXP_MARK_ROW = \u6807\u8BB0\u884C +EXP_MARK_EXECUTION_LINE = \u6807\u8BB0\u6267\u884C\u884C +EXP_MARKER_COVERAGE = \u6807\u8BB0\u8986\u76D6\u7387 +EXP_INPUT_PARAMS = \u5165\u53C2 +EXP_UPDATE_TIME = \u7ED3\u675F\u65F6\u95F4 \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstants.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstants.java index 2ed00e54..d387fdfb 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstants.java +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstants.java @@ -3120,4 +3120,9 @@ public interface IMessagesConstants extends IMessagesConstantsOne { * The update time */ String UPDATE_TIME = "UPDATE_TIME"; + + /** + * The input params + */ + String INPUT_PARAMS = "INPUT_PARAMS"; } \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java index cf0883c9..35f159f2 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java @@ -1114,4 +1114,64 @@ public interface IMessagesConstantsOne extends IMessagesConstantsTwo { * COVERAGE_CHECK */ String COVERAGE_CHECK = "COVERAGE_CHECK"; + + /** + * BREAK + */ + String NOT_SUPPORT_BREAK = "NOT_SUPPORT_BREAK"; + + /** + * VERSION_CHECK_FAIL + */ + String VERSION_CHECK_FAIL = "VERSION_CHECK_FAIL"; + + /** + * EXP_EXECUTE_STATEMENT + */ + String EXP_EXECUTE_STATEMENT = "EXP_EXECUTE_STATEMENT"; + + /** + * EXP_SERIAL_NUMBER + */ + String EXP_SERIAL_NUMBER = "EXP_SERIAL_NUMBER"; + + /** + * EXP_TOTAL_ROWS + */ + String EXP_TOTAL_ROWS = "EXP_TOTAL_ROWS"; + + /** + * EXP_TOTAL_RUNNING_LINES + */ + String EXP_TOTAL_RUNNING_LINES = "EXP_TOTAL_RUNNING_LINES"; + + /** + * VERSION_CHECK_FAIL + */ + String EXP_TOTAL_COVERAGE = "EXP_TOTAL_COVERAGE"; + + /** + * EXP_MARK_ROW + */ + String EXP_MARK_ROW = "EXP_MARK_ROW"; + + /** + * EXP_MARK_EXECUTION_LINE + */ + String EXP_MARK_EXECUTION_LINE = "EXP_MARK_EXECUTION_LINE"; + + /** + * VERSION_CHECK_FAIL + */ + String EXP_MARKER_COVERAGE = "EXP_MARKER_COVERAGE"; + + /** + * EXP_INPUT_PARAMS + */ + String EXP_INPUT_PARAMS = "EXP_INPUT_PARAMS"; + + /** + * EXP_UPDATE_TIME + */ + String EXP_UPDATE_TIME = "EXP_UPDATE_TIME"; } \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/vo/DebuggerStartInfoVo.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/vo/DebuggerStartInfoVo.java index fa38e9c7..cbf071f0 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/vo/DebuggerStartInfoVo.java +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/vo/DebuggerStartInfoVo.java @@ -55,6 +55,11 @@ public class DebuggerStartInfoVo { */ public boolean isMakeReport = true; + /** + * totalCanBreakLine of function + */ + public String canBreakLine; + /** * get remakr list * diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/Application.e4xmi b/code/datastudio/src/org.opengauss.mppdbide.view/Application.e4xmi index 0d93b595..7cff0786 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/Application.e4xmi +++ b/code/datastudio/src/org.opengauss.mppdbide.view/Application.e4xmi @@ -294,6 +294,7 @@ + @@ -979,6 +980,7 @@ + diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/PLSourceEditorCore.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/PLSourceEditorCore.java index 186b6d93..d90cb242 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/PLSourceEditorCore.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/PLSourceEditorCore.java @@ -17,6 +17,7 @@ package org.opengauss.mppdbide.view.core.sourceeditor; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -25,6 +26,7 @@ import java.util.stream.Collectors; import javax.annotation.PreDestroy; +import org.apache.commons.lang3.StringUtils; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.ParameterizedCommand; import org.eclipse.e4.core.commands.ECommandService; @@ -86,6 +88,7 @@ import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.VerifyEvent; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; @@ -101,9 +104,11 @@ import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; import org.opengauss.mppdbide.adapter.keywordssyntax.SQLSyntax; import org.opengauss.mppdbide.bl.serverdatacache.Database; +import org.opengauss.mppdbide.common.DbeCommonUtils; import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.IConnectionProvider; import org.opengauss.mppdbide.common.VersionHelper; +import org.opengauss.mppdbide.debuger.service.SourceCodeService; import org.opengauss.mppdbide.gauss.sqlparser.SQLFoldingConstants; import org.opengauss.mppdbide.utils.DebuggerStartVariable; import org.opengauss.mppdbide.utils.IMessagesConstants; @@ -142,10 +147,6 @@ import org.opengauss.mppdbide.view.workerjob.UIWorkerJob; * @since 3.0.0 */ public final class PLSourceEditorCore extends SelectMenuItem implements IPropertyChangeListener { - private static final String START_LINE = "startLine: "; - - private static final String END_LINE = "endLine: "; - private static final String FORMAT_COMMAND_ID = "org.opengauss.mppdbide.command.id.format"; private ECommandService commandService; @@ -213,6 +214,8 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert private int counterForTxtInEditor = 0; private MenuItem toggleLineComments; + + private MenuItem toggleRemarkComments; private MenuItem toggleBlockComments; @@ -1346,15 +1349,22 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert toggleLineComments.setImage(IconUtility.getIconImage(IiconPath.ICON_TOGGLE_LINE_COMMENTS, this.getClass())); } + /** + * Adds the toggle remark comment menu item. + * + * @param menuItem the menu item + */ private void addRemarkLineCommentMenuItem(Menu menuItem) { - toggleLineComments = new MenuItem(menuItem, SWT.PUSH); - toggleLineComments.setText(MessageConfigLoader + toggleRemarkComments = new MenuItem(menuItem, SWT.PUSH); + toggleRemarkComments.setText(MessageConfigLoader .getProperty(IMessagesConstants.REMARK_SHORTCUT_KEY_BINDING_TOGGLE_LINE_COMMENTS)); - toggleLineComments.addSelectionListener(new SelectionListener() { + toggleRemarkComments.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent event) { - remarkLineCommentHandle(); + Command cmd = commandService.getCommand("org.opengauss.mppdbide.view.command.ToggleRemarkComment"); + ParameterizedCommand parameterizedCmd = new ParameterizedCommand(cmd, null); + handlerService.executeHandler(parameterizedCmd); } @Override @@ -1362,60 +1372,51 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert } }); - toggleLineComments.setImage(IconUtility.getIconImage(IiconPath.ICON_REMARK_COVERAGE, this.getClass())); + toggleRemarkComments.setImage(IconUtility.getIconImage(IiconPath.ICON_REMARK_COVERAGE, this.getClass())); } - private void remarkLineCommentHandle() { + /** + * Remark line comment. + */ + public void remarkLineComment() { PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); - IConnectionProvider prov = new DBConnectionProvider(pl.getDebugObject().getDatabase()); - Optional conn = prov.getFreeConnection(); - try { - boolean isPldebugger = VersionHelper.getDebuggerVersion(conn.get()).isPldebugger(); - if (isPldebugger) { - MPPDBIDEDialogs.generateOKMessageDialog(MESSAGEDIALOGTYPE.INFORMATION, true, - MessageConfigLoader.getProperty(IMessagesConstants.EXECDIALOG_HINT), - MessageConfigLoader.getProperty(IMessagesConstants.COVERAGE_CHECK)); - return; - } - ISelection res = viewer.getSelection(); - int start = Integer.valueOf(res.toString().split(START_LINE)[1].split(",")[0]); - String[] arr = res.toString().split(END_LINE); - int endLength = 1; - if (arr.length > 1) { - endLength = Integer.parseInt(arr[1].split(",")[0]); - } - List list = new ArrayList(); - for (int i = start; i < (endLength == 1 ? start + 1 : endLength + 1); i++) { - list.add(String.valueOf(i)); - } - long oid = pl.getDebugObject().getOid(); - DebuggerStartInfoVo startInfo = DebuggerStartVariable.getStartInfo(oid); - List remarkLines = startInfo.getRemarkList(); - List cancel = list.stream() - .filter(item -> remarkLines.contains(item)).collect(Collectors.toList()); - cancel.forEach(item -> viewer.getTextWidget() - .setLineBackground(Integer.parseInt(item), 1, - SQLSyntaxColorProvider.BACKGROUND_COLOR)); - List newRemark = list.stream() - .filter(item -> !remarkLines.contains(item)).collect(Collectors.toList()); - newRemark.forEach(item -> viewer.getTextWidget() - .setLineBackground(Integer.parseInt(item), 1, - SQLSyntaxColorProvider.BACKGROUND_COLOR_GREY)); - List oldRemark = remarkLines.stream() - .filter(item -> !list.contains(item)).collect(Collectors.toList()); - newRemark.addAll(oldRemark); - String remarLinesStr = newRemark.stream().map(String::valueOf).collect(Collectors.joining(",")); - startInfo.remarLinesStr = remarLinesStr; - DebuggerStartVariable.setStartInfo(oid, startInfo); - } catch (SQLException e) { - MPPDBIDELoggerUtility.error(e.getMessage()); - } finally { - try { - conn.get().close(); - } catch (SQLException e) { - MPPDBIDELoggerUtility.error(e.getMessage()); - } + long oid = pl.getDebugObject().getOid(); + List list = getList(); + DebuggerStartInfoVo startInfo = DebuggerStartVariable.getStartInfo(oid); + List remarkLines = startInfo.getRemarkList(); + List cancels = getRemarkList(list, remarkLines, true); + setLineBackground(cancels, SQLSyntaxColorProvider.BACKGROUND_COLOR); + List newRemarks = getRemarkList(list, remarkLines, false); + setLineBackground(newRemarks, SQLSyntaxColorProvider.BACKGROUND_COLOR_GREY); + List oldRemarks = getRemarkList(remarkLines, list, false); + newRemarks.addAll(oldRemarks); + String remarLinesStr = newRemarks.stream().map(String::valueOf).collect(Collectors.joining(",")); + startInfo.remarLinesStr = remarLinesStr; + DebuggerStartVariable.setStartInfo(oid, startInfo); + } + + private List getRemarkList(List rangeList, List lines, boolean isEqual) { + return rangeList.stream().filter(item -> { + if (isEqual) { + return lines.contains(item); + } + return !lines.contains(item); + }).collect(Collectors.toList()); + } + + private void setLineBackground(List lines, Color background) { + lines.forEach(item -> viewer.getTextWidget().setLineBackground(Integer.parseInt(item), 1, background)); + } + + private List getList() { + ITextSelection selection = (ITextSelection) viewer.getSelection(); + int start = selection.getStartLine(); + int end = selection.getEndLine(); + List list = new ArrayList(); + for (int i = start; i < (end == 1 ? start + 1 : end + 1); i++) { + list.add(String.valueOf(i)); } + return list; } /** @@ -1933,10 +1934,12 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert ITextSelection selection = (ITextSelection) viewer.getSelection(); int selOffset = selection.getOffset(); int selLength = selection.getLength(); + int startLine = selection.getStartLine(); + int endLine = selection.getEndLine(); + removeRemarkLines(startLine, endLine); String selText = null != selection.getText() ? selection.getText() : ""; int blockCommentOpenLen = MPPDBIDEConstants.ML_COMMENT_START.length(); int blockCommentEndLen = MPPDBIDEConstants.ML_COMMENT_END.length(); - DocumentRewriteSession rewriteSession = null; rewriteSession = getRewriteSession(document); @@ -2144,6 +2147,21 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert public String getText() { return getDocument().get(); } + + private void removeRemarkLines(int start, int end) { + PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); + long oid = pl.getDebugObject().getOid(); + DebuggerStartInfoVo vo = DebuggerStartVariable.getStartInfo(oid); + List oldList = Arrays.asList(vo.remarLinesStr.split(",")); + List newLine = new ArrayList<>(); + oldList.forEach(item -> { + if (!StringUtils.isBlank(item) && (Integer.valueOf(item) < start || Integer.valueOf(item) > end)) { + newLine.add(item); + } + }); + vo.remarLinesStr = String.join(",", newLine); + DebuggerStartVariable.setStartInfo(oid, vo); + } /** * Toggle line comment. @@ -2157,6 +2175,9 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert boolean firstLineFlag = true; int startLine = textSelection.getStartLine(); int endLine = textSelection.getEndLine(); + + removeRemarkLines(startLine, endLine); + int lineCommentLen = SL_COMMENT.length(); boolean lineComment = false; int selLineNo = 0; @@ -2403,9 +2424,40 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert } toggleLineComments.setEnabled(isEnabled); toggleBlockComments.setEnabled(isEnabled); - + checkVisiable(isEnabled); } + private void checkVisiable(boolean isEnabled) { + PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); + long oid = pl.getDebugObject().getOid(); + IDocument document = viewer.getDocument(); + List codes = SourceCodeService.CodeDescription.getLines(document.get()); + List list = getList(); + IConnectionProvider prov = new DBConnectionProvider(pl.getDebugObject().getDatabase()); + Optional conn = Optional.empty(); + boolean isVisiable = true; + boolean isPldebugger = false; + try { + conn = prov.getFreeConnection(); + isPldebugger = VersionHelper.getDebuggerVersion(conn.get()).isPldebugger(); + DbeCommonUtils.checkCanBreakLines(codes, conn.get(), oid, list); + } catch (SQLException e1) { + isVisiable = false; + } finally { + try { + conn.get().close(); + } catch (SQLException e) { + MPPDBIDELoggerUtility.error(e.getMessage()); + } + } + if (!isPldebugger && isVisiable) { + toggleRemarkComments.setEnabled(isEnabled); + } else { + toggleRemarkComments.setEnabled(false); + return; + } + } + /** * Property change. * diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/coverage/CoverageService.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/coverage/CoverageService.java index 8204a82e..bdc1a495 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/coverage/CoverageService.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/coverage/CoverageService.java @@ -19,6 +19,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -26,7 +27,6 @@ import java.util.stream.Collectors; import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.debuger.annotation.ParseVo; import org.opengauss.mppdbide.debuger.service.IService; -import org.opengauss.mppdbide.debuger.service.SourceCodeService; import org.opengauss.mppdbide.utils.DebuggerStartVariable; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.opengauss.mppdbide.utils.vo.DebuggerEndInfoVo; @@ -82,7 +82,7 @@ public class CoverageService implements IService { List res = this.queryList(sql, CoverageVo.class); res.stream().forEach(cov -> { if (cov.sourceCode != null) { - List toRunLines = SourceCodeService.CodeDescription.getRunLinesNums(cov.sourceCode); + List toRunLines = Arrays.asList(cov.canBreakLine.split(",")); cov.totalLineNum = toRunLines.size(); cov.coverageLineNum = cov.getRunList().size(); cov.coverageLinesArr = cov.getRunList(); @@ -162,7 +162,7 @@ public class CoverageService implements IService { } private List queryList(String sql, Class clazz) throws SQLException { - List list = null; + List list = new ArrayList(); try (PreparedStatement ps = conn.getStatement(sql)) { try (ResultSet rs = ps.executeQuery()) { list = ParseVo.parseList(rs, clazz); diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/DebugServiceHelper.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/DebugServiceHelper.java index a91417a3..57fb85b6 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/DebugServiceHelper.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/DebugServiceHelper.java @@ -21,7 +21,9 @@ import java.util.Optional; import org.eclipse.jface.preference.PreferenceStore; import org.opengauss.mppdbide.bl.serverdatacache.IDebugObject; +import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.IConnectionProvider; +import org.opengauss.mppdbide.common.VersionHelper; import org.opengauss.mppdbide.debuger.event.Event; import org.opengauss.mppdbide.debuger.event.IHandlerManger; import org.opengauss.mppdbide.debuger.event.Event.EventMessage; @@ -34,11 +36,14 @@ import org.opengauss.mppdbide.debuger.service.DebuggerReportService; import org.opengauss.mppdbide.debuger.vo.SourceCodeVo; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.VariableRunLine; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; +import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.opengauss.mppdbide.view.core.sourceeditor.BreakpointAnnotation; import org.opengauss.mppdbide.view.coverage.CoverageService; import org.opengauss.mppdbide.view.prefernces.PreferenceWrapper; -import org.opengauss.mppdbide.view.service.CoverageServiceFactory; +import org.opengauss.mppdbide.view.utils.dialog.MPPDBIDEDialogs; +import org.opengauss.mppdbide.view.utils.dialog.MPPDBIDEDialogs.MESSAGEDIALOGTYPE; /** * Title: class @@ -50,7 +55,6 @@ public class DebugServiceHelper { private static DebugServiceHelper debugServiceHelper = new DebugServiceHelper(); private IDebugObject debugObject = null; private ServiceFactory serviceFactory = null; - private CoverageServiceFactory coverageServiceFactory = null; private WrappedDebugService debugService = null; private DebuggerReportService debuggerReportService = null; private FunctionVo functionVo = null; @@ -84,17 +88,18 @@ public class DebugServiceHelper { if (!isCommonDatabase(debugObject)) { IConnectionProvider provider = new DBConnectionProvider(debugObject.getDatabase()); serviceFactory = new ServiceFactory(provider); - coverageServiceFactory = new CoverageServiceFactory(provider); checkSupportDebug(); + checkDebugVersion(provider); queryService = serviceFactory.getQueryService(); functionVo = queryService.queryFunction(debugObject.getName()); - debuggerReportService = DebuggerReportService.getInstance(); - debuggerReportService.setAttr(provider, functionVo); debugService = new WrappedDebugService(serviceFactory.getDebugService(functionVo)); debugService.addHandler(new UiEventHandler()); debugService.addHandler(new DebugEventHandler()); + debuggerReportService = DebuggerReportService.getInstance(); + if (!VariableRunLine.isPldebugger) { + debuggerReportService.setAttr(provider, functionVo); + } codeService = serviceFactory.getCodeService(); - coverageService = coverageServiceFactory.getCoverageService(); Optional sourceCode = queryService.getSourceCode(functionVo.oid); if (sourceCode.isPresent()) { codeService.setBaseCode(sourceCode.get().getSourceCode()); @@ -158,11 +163,15 @@ public class DebugServiceHelper { return queryService; } + /** + * description: get coverage service + * + * @return CoverageService the coverage service + */ public CoverageService getCoverageService() { return coverageService; } - /** * description: get code service * @@ -250,6 +259,24 @@ public class DebugServiceHelper { } } + private void checkDebugVersion(IConnectionProvider provider) throws SQLException { + IConnection conn = null; + try { + conn = provider.getValidFreeConnection(); + VariableRunLine.isPldebugger = VersionHelper.getDebuggerVersion(conn).isPldebugger(); + } catch (SQLException e) { + MPPDBIDEDialogs.generateOKMessageDialog(MESSAGEDIALOGTYPE.INFORMATION, true, + MessageConfigLoader.getProperty(IMessagesConstants.EXECDIALOG_HINT), + MessageConfigLoader.getProperty(IMessagesConstants.VERSION_CHECK_FAIL)); + MPPDBIDELoggerUtility.error(e.getMessage()); + return; + } finally { + if (conn != null) { + conn.close(); + } + } + } + private static boolean getRollbackPreference() { PreferenceStore store = PreferenceWrapper.getInstance().getPreferenceStore(); if (store != null) { @@ -278,4 +305,10 @@ public class DebugServiceHelper { IMessagesConstants.DEBUG_NOT_SUPPORT_WARN); } } + + void closeDbConn() { + queryService.closeService(); + debuggerReportService.close(); + debugService.closeService(); + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/StartDebugHandler.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/StartDebugHandler.java index 4573e93e..dfbef0da 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/StartDebugHandler.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/StartDebugHandler.java @@ -85,6 +85,7 @@ public class StartDebugHandler { } catch (SQLException sqlExp) { MPPDBIDELoggerUtility.warn("create servicefactory with error:" + sqlExp.getMessage()); showMsg(sqlExp.getLocalizedMessage()); + serviceHelper.closeDbConn(); return; } plSourceEditor.setExecuteInProgress(true); diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/chain/ServerExitChain.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/chain/ServerExitChain.java index 7fd98781..dfa647b5 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/chain/ServerExitChain.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/chain/ServerExitChain.java @@ -59,8 +59,10 @@ public class ServerExitChain extends IMsgChain { Display.getDefault().asyncExec(new UpdateDebugPositionTask(-1)); Display.getDefault().asyncExec(new UpdateHighlightLineNumTask()); - if (!VariableRunLine.isPldebugger) { - reportService.makeReport(); + if (VariableRunLine.isPldebugger != null && !VariableRunLine.isPldebugger) { + if (!event.hasException()) { + reportService.makeReport(); + } if (VariableRunLine.isContinue != null && VariableRunLine.isContinue) { Display.getDefault().asyncExec(() -> UpdateDebugPositionTask.continueDebug()); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/ui/UpdateDebugPositionTask.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/ui/UpdateDebugPositionTask.java index 1e266c02..ee8b306b 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/ui/UpdateDebugPositionTask.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/handler/debug/ui/UpdateDebugPositionTask.java @@ -16,18 +16,17 @@ package org.opengauss.mppdbide.view.handler.debug.ui; import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Locale; -import java.util.Set; +import java.util.Map; import org.eclipse.jface.text.BadLocationException; +import org.opengauss.mppdbide.bl.serverdatacache.IDebugObject; +import org.opengauss.mppdbide.common.DbeCommonUtils; import org.opengauss.mppdbide.debuger.service.SourceCodeService; +import org.opengauss.mppdbide.debuger.service.SourceCodeService.CodeDescription; import org.opengauss.mppdbide.debuger.vo.VersionVo; import org.opengauss.mppdbide.utils.DebuggerStartVariable; import org.opengauss.mppdbide.utils.VariableRunLine; -import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; -import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.exceptions.MPPDBIDEException; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.opengauss.mppdbide.view.core.sourceeditor.SQLSyntaxColorProvider; @@ -41,10 +40,6 @@ import org.opengauss.mppdbide.view.utils.UIElement; * @since 3.0.0 */ public class UpdateDebugPositionTask implements Runnable { - private static final String BEGIN = "BEGIN"; - - private static final String END = "END;"; - private int showLine = -1; /** @@ -54,7 +49,9 @@ public class UpdateDebugPositionTask implements Runnable { */ public UpdateDebugPositionTask(int showLine) { this.showLine = showLine; - VariableRunLine.passLine.add(showLine); + if (showLine != -1) { + VariableRunLine.passLine.add(showLine); + } } @Override @@ -76,7 +73,7 @@ public class UpdateDebugPositionTask implements Runnable { } else { // dbedebugger if (VariableRunLine.isTerminate) { - debDebuggerRemark(plSourceEditor); + dbeDebuggerRemark(plSourceEditor); } } } catch (MPPDBIDEException e) { @@ -120,8 +117,12 @@ public class UpdateDebugPositionTask implements Runnable { MPPDBIDELoggerUtility.error(e.getMessage()); } PLSourceEditor pl = terminateDebug(); - getToatlLineNo(pl).forEach(item -> { + String code = pl.getDebugObject().getSourceCode().getCode(); + List list = DbeCommonUtils.getBreakLines(DbeCommonUtils.infoCodes, + SourceCodeService.CodeDescription.getLines(code)); + list.forEach(core -> { try { + Integer item = Integer.parseInt(core); if (VariableRunLine.runList.contains(String.valueOf(item))) { pl.createPassPosition(item); } else { @@ -149,14 +150,17 @@ public class UpdateDebugPositionTask implements Runnable { } } - private void debDebuggerRemark(PLSourceEditor plSourceEditor) { - plSourceEditor.removeDebugPosition(); + private void dbeDebuggerRemark(PLSourceEditor pl) { + pl.removeDebugPosition(); try { - remarkBack(plSourceEditor); - if (showLine >= 0) { - plSourceEditor.createDebugPosition(showLine); + remarkBack(pl); + IDebugObject iDebugObject = pl.getDebugObject(); + String code = iDebugObject.getSourceCode().getCode(); + Map map = DbeCommonUtils.getBeginToEndLineNo(CodeDescription.getLines(code)); + if (showLine >= map.get(DbeCommonUtils.BEGIN) && map.get(DbeCommonUtils.END) >= showLine) { + pl.createDebugPosition(showLine); } - remark(showLine, plSourceEditor); + remark(showLine, pl); } catch (BadLocationException e) { MPPDBIDELoggerUtility.error("set debugPostion at " + showLine + " failed,err=" + e.getMessage()); } catch (Exception e) { @@ -165,8 +169,11 @@ public class UpdateDebugPositionTask implements Runnable { } private void remark(int line, PLSourceEditor plSourceEditor) { - getToatlLineNo(plSourceEditor).forEach(item -> { + String code = plSourceEditor.getDebugObject().getSourceCode().getCode(); + List list = DbeCommonUtils.getBreakLines(DbeCommonUtils.infoCodes, CodeDescription.getLines(code)); + list.forEach(core -> { try { + Integer item = Integer.parseInt(core); if (showLine != item && VariableRunLine.passLine.contains(item)) { plSourceEditor.createPassPosition(item); } else { @@ -179,47 +186,4 @@ public class UpdateDebugPositionTask implements Runnable { } }); } - - /** - * The get Toatl LineNo - * - * @param plSourceEditor the source editor - * @return the value for function - */ - public static Set getToatlLineNo(PLSourceEditor plSourceEditor) { - Set record = new HashSet<>(); - int begin = -1; - int end = -1; - ; - try { - String sourceCode = plSourceEditor.getDebugObject().getLatestSouceCode().getCode(); - List total = SourceCodeService.CodeDescription.getLines(sourceCode); - - for (int i = 0; i < total.size(); i++) { - String code = total.get(i); - if (code.toUpperCase(Locale.ENGLISH).trim().startsWith(BEGIN)) { - begin = i; - } - if (code.toUpperCase(Locale.ENGLISH).trim().startsWith(END)) { - end = i; - break; - } - } - Boolean isFlag = true; - int beg = begin; - while (isFlag && begin != -1 && end != -1 && begin < end) { - int val = ++beg; - if (val == end) { - break; - } - record.add(val); - if (val + 1 == end) { - isFlag = false; - } - } - } catch (DatabaseOperationException | DatabaseCriticalException e) { - MPPDBIDELoggerUtility.error(e.getMessage()); - } - return record; - } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/service/CoverageServiceFactory.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/service/CoverageServiceFactory.java index 8d95796e..9093ee89 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/service/CoverageServiceFactory.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/service/CoverageServiceFactory.java @@ -16,9 +16,11 @@ package org.opengauss.mppdbide.view.service; import java.sql.SQLException; +import java.util.Optional; import org.opengauss.mppdbide.common.IConnection; import org.opengauss.mppdbide.common.IConnectionProvider; +import org.opengauss.mppdbide.utils.VariableRunLine; import org.opengauss.mppdbide.view.coverage.CoverageService; /** @@ -39,13 +41,16 @@ public class CoverageServiceFactory { * @return the value * @throws SQLException the exception */ - public CoverageService getCoverageService() throws SQLException { + public Optional getCoverageService() throws SQLException { return createCoverageService(provider.getValidFreeConnection()); } - private static CoverageService createCoverageService(IConnection conn) { + private static Optional createCoverageService(IConnection conn) { + if (VariableRunLine.isPldebugger != null && VariableRunLine.isPldebugger) { + return Optional.empty(); + } CoverageService service = new CoverageService(); service.setConn(conn); - return service; + return Optional.of(service); } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/CoverageHistory.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/CoverageHistory.java index e5cfbb60..73cbd5d1 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/CoverageHistory.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/CoverageHistory.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -75,8 +76,10 @@ public class CoverageHistory extends Dialog { private static final int REMARK_LINE = 4; private static final int REMARK_RUM_LINE_NUM = 5; private static final int REMARK_COVERAGE = 6; - private static final int UPDATE_TIME = 7; + private static final int INPUT_PARAMS = 7; + private static final int UPDATE_TIME = 8; + private String sqlName = null; private Table table = null; private ToolItem saveToolItem = null; private ToolItem deleteToolItem = null; @@ -141,6 +144,9 @@ public class CoverageHistory extends Dialog { TableColumn remarkCoverage = new TableColumn(table, SWT.LEFT); remarkCoverage.setText(org.opengauss.mppdbide.utils.loader.MessageConfigLoader.getProperty( IMessagesConstants.REMARK_COVERAGE)); + TableColumn inputParams = new TableColumn(table, SWT.LEFT); + inputParams.setText(org.opengauss.mppdbide.utils.loader.MessageConfigLoader.getProperty( + IMessagesConstants.INPUT_PARAMS)); TableColumn updateTime = new TableColumn(table, SWT.LEFT); updateTime.setText(org.opengauss.mppdbide.utils.loader.MessageConfigLoader.getProperty( IMessagesConstants.UPDATE_TIME)); @@ -149,9 +155,10 @@ public class CoverageHistory extends Dialog { totalRunLineNum.pack(); totalCoverage.pack(); remarkCoverage.pack(); + inputParams.setWidth(150); updateTime.setWidth(150); - remarkLine.setWidth(200); - remarkRunLineNum.setWidth(200); + remarkLine.setWidth(150); + remarkRunLineNum.setWidth(150); displaySqlHistoryObject(); mainSc.setExpandHorizontal(true); mainSc.setExpandVertical(true); @@ -168,7 +175,7 @@ public class CoverageHistory extends Dialog { protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(MessageConfigLoader.getProperty(IMessagesConstants.COVERAGE_HISTORY_TITLE, profileName)); - shell.setImage(IconUtility.getIconImage(IiconPath.SQL_HISTORY1, this.getClass())); + shell.setImage(IconUtility.getIconImage(IiconPath.ICON_COVERAGE, this.getClass())); shell.setSize(1000, 750); } @@ -178,18 +185,21 @@ public class CoverageHistory extends Dialog { public void displaySqlHistoryObject() { PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); long oid = pl.getDebugObject().getOid(); + sqlName = pl.getDebugObject().getName(); coverageServiceFactory = new CoverageServiceFactory( new DBConnectionProvider(pl.getDebugObject().getDatabase())); - CoverageService coverageService = null; + Optional coverageService = Optional.empty(); try { coverageService = coverageServiceFactory.getCoverageService(); - List ls = coverageService.getCoverageInfoByOid(oid); - setInput(ls); + if (coverageService.isPresent()) { + List ls = coverageService.get().getCoverageInfoByOid(oid); + setInput(ls); + } } catch (SQLException e) { MPPDBIDELoggerUtility.error(e.getMessage()); } finally { - if (coverageService != null) { - coverageService.closeService(); + if (coverageService.isPresent()) { + coverageService.get().closeService(); } } } @@ -222,6 +232,7 @@ public class CoverageHistory extends Dialog { row.setText(REMARK_LINE, String.valueOf(item.remarkLinesArr)); row.setText(REMARK_RUM_LINE_NUM, String.valueOf(item.remarkCoverageLinesArr)); row.setText(REMARK_COVERAGE, String.valueOf(item.remarkPercent)); + row.setText(INPUT_PARAMS, item.params); row.setText(UPDATE_TIME, item.parseDate()); } @@ -247,7 +258,7 @@ public class CoverageHistory extends Dialog { private void createToolbar(final Composite parent) { final ToolBar bar = new ToolBar(parent, SWT.FLAT | SWT.FOCUSED); - final Image sqlcloseIcon = IconUtility.getIconImage(IiconPath.LOAD_QUERY_SQL, getClass()); + final Image sqlcloseIcon = IconUtility.getIconImage(IiconPath.ICO_EXPORT_CURRENT_PAGE, getClass()); saveToolItem = new ToolItem(bar, SWT.PUSH); saveToolItem.setEnabled(false); saveToolItem.setImage(sqlcloseIcon); @@ -328,20 +339,13 @@ public class CoverageHistory extends Dialog { List list = getData(item); serialNum = String.valueOf(index + 1); list.add(0, serialNum); - Map code = getCode(vo.sourceCode); - ExportParamVo expVo = new ExportParamVo(); - expVo.oid = vo.oid; - expVo.index = serialNum; - expVo.executeSql = code; - expVo.remarkLines = vo.remarkLinesArr.stream().collect(Collectors.toSet()); - expVo.coveragePassLines = vo.coverageLinesArr.stream().collect(Collectors.toSet()); - expVo.list = list; + ExportParamVo expVo = getExportParamVo(vo, list, serialNum); if (isFlag) { - html = ExportUtil.exportReport(expVo); + html = ExportUtil.exportReport(expVo, sqlName); isFlag = false; } else { expVo.html = html; - html = ExportUtil.exportReport(expVo); + html = ExportUtil.exportReport(expVo, sqlName); } } try { @@ -360,6 +364,19 @@ public class CoverageHistory extends Dialog { } } + private ExportParamVo getExportParamVo(CoverageVo vo, List list, String serialNum) { + Map code = getCode(vo.sourceCode); + ExportParamVo expVo = new ExportParamVo(); + expVo.oid = vo.oid; + expVo.index = serialNum; + expVo.executeSql = code; + expVo.remarkLines = vo.remarkLinesArr.stream().collect(Collectors.toSet()); + expVo.coveragePassLines = vo.coverageLinesArr.stream().collect(Collectors.toSet()); + expVo.list = list; + expVo.canBreakLine = vo.canBreakLine; + return expVo; + } + private Map getCode(String sourceCode) { Map code = new HashMap(); List codes = SourceCodeService.CodeDescription.getLines(sourceCode); @@ -414,7 +431,7 @@ public class CoverageHistory extends Dialog { if (counter != 0) { CoverageService[] service = new CoverageService[1]; try { - service[0] = coverageServiceFactory.getCoverageService(); + service[0] = coverageServiceFactory.getCoverageService().get(); historyItems.forEach(item -> { service[0].delCoverageInfoByOid(item.oid, item.cid); }); diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/ExportUtil.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/ExportUtil.java index b1760198..64625203 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/ExportUtil.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/ExportUtil.java @@ -20,7 +20,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URL; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -30,8 +30,11 @@ import org.eclipse.core.runtime.FileLocator; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import org.opengauss.mppdbide.common.DbeCommonUtils; import org.opengauss.mppdbide.debuger.vo.dbe.ExportParamVo; +import org.opengauss.mppdbide.utils.IMessagesConstantsOne; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; /** @@ -55,17 +58,19 @@ public final class ExportUtil { * exportReport * * @param vo the vo + * @param sqlName the sqlName * @return the value */ - public static String exportReport(ExportParamVo vo) { + public static String exportReport(ExportParamVo vo, String sqlName) { long oid = vo.oid; Map executeSql = vo.executeSql; List list = vo.list; String html = vo.html; URL url = getUrl("exportTemplate.html"); Document parse = null; - parse = getText(html, url, oid); - List offset = getOffset(executeSql); + parse = getText(html, url, oid, sqlName); + Map offset = DbeCommonUtils.getBeginToEndLineNo( + executeSql.values().stream().collect(Collectors.toList())); Element data = parse.getElementById("data"); Element datatr = data.appendElement("tr"); list.forEach(item -> { @@ -92,10 +97,12 @@ public final class ExportUtil { if (vo.remarkLines.contains(k.toString())) { td2.addClass("bac_remark"); } - if (vo.coveragePassLines.contains((k - 1) + "")) { + boolean isCanBreak = Arrays.asList(vo.canBreakLine.split(",")).contains(String.valueOf(k)); + if (vo.coveragePassLines.contains((k - 1) + "") && isCanBreak) { div.addClass("bac_pass"); } else { - if (k > (offset.get(0) + 1) && k < (offset.get(1) + 1)) { + if (k > (offset.get(DbeCommonUtils.BEGIN) + 1) && k < (offset.get(DbeCommonUtils.END) + 1) + && isCanBreak) { div.addClass("bac_fail"); } } @@ -114,16 +121,18 @@ public final class ExportUtil { return classLoader.getResource(messageFileName); } - private static Document getText(String html, URL url, long oid) { + private static Document getText(String html, URL url, long oid, String sqlName) { Document parse = null; try { if (html == null) { String path = FileLocator.toFileURL(url).getPath().substring(1); file = new File(path); - String workDirectory = System.getProperty("user.dir"); - String fileSeparator = System.getProperty("file.separator"); - outpath = workDirectory + fileSeparator + oid + "_" + System.currentTimeMillis() + ".html"; + String workDir = System.getProperty("user.dir"); + String fileSepa = System.getProperty("file.separator"); + outpath = String.format(Locale.ENGLISH, "%s%s%s_%s_%s.html", + workDir, fileSepa, oid, sqlName, System.currentTimeMillis()); parse = Jsoup.parse(file, "gbk"); + convertZhCn(parse); } else { parse = Jsoup.parse(html); } @@ -133,24 +142,31 @@ public final class ExportUtil { return parse; } - private static List getOffset(Map executeSql) { - int begin = -1; - int end = -1; - List val = executeSql.values().stream().collect(Collectors.toList()); - for (int i = 0; i < val.size(); i++) { - String code = val.get(i); - if (code.toUpperCase(Locale.ENGLISH).trim().startsWith("BEGIN")) { - begin = i; - } - if (code.toUpperCase(Locale.ENGLISH).trim().startsWith("END;")) { - end = i; - break; - } + private static void convertZhCn(Document parse) { + String locale = Locale.getDefault().toString(); + if (!locale.equals(MPPDBIDEConstants.CHINESE_LOCALE)) { + return; } - List list = new ArrayList<>(); - list.add(begin); - list.add(end); - return list; + Element execStatement = parse.getElementById(IMessagesConstantsOne.EXP_EXECUTE_STATEMENT); + execStatement.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_EXECUTE_STATEMENT)); + Element searialNum = parse.getElementById(IMessagesConstantsOne.EXP_SERIAL_NUMBER); + searialNum.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_SERIAL_NUMBER)); + Element totalRows = parse.getElementById(IMessagesConstantsOne.EXP_TOTAL_ROWS); + totalRows.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_TOTAL_ROWS)); + Element runLines = parse.getElementById(IMessagesConstantsOne.EXP_TOTAL_RUNNING_LINES); + runLines.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_TOTAL_RUNNING_LINES)); + Element totalCoverage = parse.getElementById(IMessagesConstantsOne.EXP_TOTAL_COVERAGE); + totalCoverage.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_TOTAL_COVERAGE)); + Element markRow = parse.getElementById(IMessagesConstantsOne.EXP_MARK_ROW); + markRow.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_MARK_ROW)); + Element execLine = parse.getElementById(IMessagesConstantsOne.EXP_MARK_EXECUTION_LINE); + execLine.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_MARK_EXECUTION_LINE)); + Element markCoverage = parse.getElementById(IMessagesConstantsOne.EXP_MARKER_COVERAGE); + markCoverage.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_MARKER_COVERAGE)); + Element inputParams = parse.getElementById(IMessagesConstantsOne.EXP_INPUT_PARAMS); + inputParams.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_INPUT_PARAMS)); + Element updateTime = parse.getElementById(IMessagesConstantsOne.EXP_UPDATE_TIME); + updateTime.text(MessageConfigLoader.getProperty(IMessagesConstantsOne.EXP_UPDATE_TIME)); } /** diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/icon/IiconPath.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/icon/IiconPath.java index beb04218..5d130a88 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/icon/IiconPath.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/utils/icon/IiconPath.java @@ -994,4 +994,9 @@ public interface IiconPath { * The icon remark coverage */ String ICON_REMARK_COVERAGE = "icon-remarkCoverage.png"; + + /** + * The icon remark coverage + */ + String ICON_COVERAGE = PRE_DEBUG_PATH + "breakpoint_indicate.png"; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/vo/CoverageVo.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/vo/CoverageVo.java index bcca7798..c1422c27 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/vo/CoverageVo.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/vo/CoverageVo.java @@ -116,6 +116,17 @@ public class CoverageVo { @DumpFiled public String params; + /** + * the name + */ + public String name; + + /** + * the canBreakLine + */ + @DumpFiled + public String canBreakLine; + private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate.html b/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate.html index 89c325da..5b672487 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate.html +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate.html @@ -13,15 +13,15 @@ - - - - + + + + - - + + - + diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate_zh_CN.html b/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate_zh_CN.html index 51f5b1fd..ecc5be21 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate_zh_CN.html +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/resources/exportTemplate_zh_CN.html @@ -4,7 +4,7 @@
Serial numberTotal rowsNumber of execution linesTotal coverageSerial NumberTotal RowsTotal Running LinesTotal Coverage Mark RowMark execution lineMarker coverageMark Execution LineMarker Coverage Input ParamsEnd timeUpdate Time
- + @@ -13,15 +13,15 @@
ִ
- - - - - - - - - + + + + + + + + + diff --git a/code/datastudio/testcode/LLT/org.opengauss.mppdbide.bl.debug.test.fragment/src/org/opengauss/mppdbide/bl/test/debug/DbeDebugerTest.java b/code/datastudio/testcode/LLT/org.opengauss.mppdbide.bl.debug.test.fragment/src/org/opengauss/mppdbide/bl/test/debug/DbeDebugerTest.java index bacebff1..fe8feb5b 100644 --- a/code/datastudio/testcode/LLT/org.opengauss.mppdbide.bl.debug.test.fragment/src/org/opengauss/mppdbide/bl/test/debug/DbeDebugerTest.java +++ b/code/datastudio/testcode/LLT/org.opengauss.mppdbide.bl.debug.test.fragment/src/org/opengauss/mppdbide/bl/test/debug/DbeDebugerTest.java @@ -32,6 +32,7 @@ import org.junit.Before; import org.junit.Test; import org.opengauss.mppdbide.bl.mock.debug.DebugerJdbcTestCaseBase; import org.opengauss.mppdbide.bl.mock.debug.MockDebugServiceHelper; +import org.opengauss.mppdbide.common.DbeCommonUtils; import org.opengauss.mppdbide.common.IConnectionProvider; import org.opengauss.mppdbide.debuger.debug.DebugConstants.DebugOpt; import org.opengauss.mppdbide.debuger.debug.DebugState; @@ -119,8 +120,8 @@ public class DbeDebugerTest extends DebugerJdbcTestCaseBase { mockHelper.mockDbeInfoCode("select * from DBE_PLDEBUGGER.info_code(?)"); try { Optional sourceCode = queryService.getSourceCode(functionVo.oid); - SourceCodeService.CodeDescription.getRunLines(sourceCode.get().getSourceCode()); - SourceCodeService.CodeDescription.getRunLinesNums(sourceCode.get().getSourceCode()); + DbeCommonUtils.getBeginToEndLineNo( + SourceCodeService.CodeDescription.getLines(sourceCode.get().getSourceCode())); } catch (SQLException e) { fail("get breakpoints failed!"); } diff --git a/information/datastudio/Data Studio User Manual.pdf b/information/datastudio/Data Studio User Manual.pdf index e7cae1b1f8d3b9fb53d28124bbca857b53c45be4..dd01dee80271bee1766c4ea094562a1121f4581b 100644 GIT binary patch delta 1580225 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
  • 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

  • ִִܸǸʱ