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 fbf1081acfefc5d4d85174f43cb829a82cd583ce..70d955150fddec9123dae7f1d08d4b679ea79bf4 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 @@ -20,7 +20,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -254,7 +256,7 @@ public class DebuggerReportService { } catch (SQLException e) { MPPDBIDELoggerUtility.error(e.getMessage()); } - List runLinks = new ArrayList(); + Set runLinks = new LinkedHashSet(); runLinks.add(getCurLine()); // next inputsParams = new ArrayList(); @@ -275,18 +277,20 @@ public class DebuggerReportService { hasNext = false; } } - VariableRunLine.runList.addAll(runLinks); + List toRunLines = DbeCommonUtils.getCanBreakLinesByInfo(queryConn, + Arrays.asList(functionVo.oid), SourceCodeService.CodeDescription.getLines(startInfo.sourceCode)) + .stream().map(item -> String.valueOf(Integer.parseInt(item) + 1)) + .collect(Collectors.toList()); + List runnings = runLinks.stream().filter(item -> toRunLines. + contains(String.valueOf(Integer.valueOf(item) + 1))).sorted().collect(Collectors.toList()); + VariableRunLine.runList.addAll(runnings); DebuggerEndInfoVo endInfo = new DebuggerEndInfoVo(); - String runStr = String.join(",", runLinks); + String runStr = String.join(",", runnings); endInfo.runStr = runStr; endInfo.setInfo(startInfo); 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); } 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 6b07081fcf9b80dd5d7c300e51b5381f551bf6ce..128af2ec675ca559f288767523f731787264cd6f 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 @@ -22,6 +22,7 @@ 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.VariableRunLine; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import java.sql.PreparedStatement; @@ -50,8 +51,11 @@ public class QueryService implements IService { public FunctionVo queryFunction(String proname) throws SQLException { try (PreparedStatement ps = conn.getStatement(functionDao.getSql(proname))) { try (ResultSet rs = ps.executeQuery()) { - if (rs.next()) { - return functionDao.parse(rs); + while(rs.next()) { + FunctionVo functionVo = functionDao.parse(rs); + if (functionVo.oid == VariableRunLine.currentOid) { + return functionVo; + } } throw new SQLException("proname:" + proname + " not found!"); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/VariableRunLine.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/VariableRunLine.java index 477ac6111c8a0a8399e40a56756ba81fc7aa554a..e37be0f26caf7ed4e95ae8fb68e2893288885c07 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/VariableRunLine.java +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/VariableRunLine.java @@ -50,4 +50,9 @@ public class VariableRunLine { * isPldebugger of function */ public static volatile Boolean isPldebugger; + + /** + * id of function + */ + public static volatile long currentOid; } 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 d90cb242c4df7176b6267d71ecc1e6955149e362..4c53788fb539d8dd407dd5d720cacc59108b0481 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 @@ -2152,7 +2152,10 @@ public final class PLSourceEditorCore extends SelectMenuItem implements IPropert PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); long oid = pl.getDebugObject().getOid(); DebuggerStartInfoVo vo = DebuggerStartVariable.getStartInfo(oid); - List oldList = Arrays.asList(vo.remarLinesStr.split(",")); + List oldList = new ArrayList(); + if (StringUtils.isNotBlank(vo.remarLinesStr)) { + oldList.addAll(Arrays.asList(vo.remarLinesStr.split(","))); + } List newLine = new ArrayList<>(); oldList.forEach(item -> { if (!StringUtils.isBlank(item) && (Integer.valueOf(item) < start || Integer.valueOf(item) > end)) { 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 57fb85b646e4e6172ce640a30e32cc408815ed53..85edf06212e7d592551a3d0481d10d11691b2ed8 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 @@ -34,11 +34,13 @@ import org.opengauss.mppdbide.debuger.service.WrappedDebugService; import org.opengauss.mppdbide.debuger.vo.FunctionVo; import org.opengauss.mppdbide.debuger.service.DebuggerReportService; import org.opengauss.mppdbide.debuger.vo.SourceCodeVo; +import org.opengauss.mppdbide.utils.DebuggerStartVariable; 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.utils.vo.DebuggerStartInfoVo; import org.opengauss.mppdbide.view.core.sourceeditor.BreakpointAnnotation; import org.opengauss.mppdbide.view.coverage.CoverageService; import org.opengauss.mppdbide.view.prefernces.PreferenceWrapper; @@ -91,7 +93,9 @@ public class DebugServiceHelper { checkSupportDebug(); checkDebugVersion(provider); queryService = serviceFactory.getQueryService(); + VariableRunLine.currentOid = debugObject.getOid(); functionVo = queryService.queryFunction(debugObject.getName()); + functionVo.proname = debugObject.getNamespace().getName() + "." + functionVo.proname; debugService = new WrappedDebugService(serviceFactory.getDebugService(functionVo)); debugService.addHandler(new UiEventHandler()); debugService.addHandler(new DebugEventHandler()); @@ -110,6 +114,8 @@ public class DebugServiceHelper { codeService.setTotalCode(debugObject.getSourceCode().getCode()); debuggerReportService.setTotalCode(codeService.getTotalCodeDesc()); this.debugObject = debugObject; + DebuggerStartInfoVo info = DebuggerStartVariable.getStartInfo(debugObject.getOid()); + info.sourceCode = debugObject.getSourceCode().getCode(); } if (debugService != null) { debugService.setRollback(getRollbackPreference()); 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 dfbef0da4c88f36c07791e1a88146ff1c8e1909d..06f2898585f62784fe2aaae0fac734ed4ec01d21 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 @@ -30,7 +30,9 @@ import org.opengauss.mppdbide.bl.serverdatacache.IDebugObject; import org.opengauss.mppdbide.bl.serverdatacache.ObjectParameter; import org.opengauss.mppdbide.bl.serverdatacache.ObjectParameter.PARAMETERTYPE; import org.opengauss.mppdbide.debuger.service.DbeDebugService; +import org.opengauss.mppdbide.debuger.service.QueryService; import org.opengauss.mppdbide.debuger.service.WrappedDebugService; +import org.opengauss.mppdbide.debuger.vo.FunctionVo; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; @@ -91,11 +93,22 @@ public class StartDebugHandler { plSourceEditor.setExecuteInProgress(true); debugUtils.showAllDebugView(true); startInputParamDialog(); - PLSourceEditor pl = UIElement.getInstance().getVisibleSourceViewer(); - List params = Arrays.asList(pl.getDebugObject().getObjectParameters()); - long oid = pl.getDebugObject().getOid(); - List paramNames = params.stream().map(item -> item.getName()).distinct().collect(Collectors.toList()); - DbeDebugService.map.put(oid, paramNames); + dbeStartDebugParam(plSourceEditor); + } + + private void dbeStartDebugParam(PLSourceEditor pl) { + try { + List params = Arrays.asList(pl.getDebugObject().getObjectParameters()); + String functionName = plSourceEditor.getDebugObject().getName(); + QueryService queryService = serviceHelper.getQueryService(); + FunctionVo functionVo = queryService.queryFunction(functionName); + long oid = functionVo.oid; + List paramNames = params.stream().map(item -> item.getName()).distinct().collect(Collectors.toList()); + DbeDebugService.map.put(oid, paramNames); + setUsagehint(plSourceEditor); + } catch (SQLException e) { + MPPDBIDELoggerUtility.info("dbeStartDebugParam get failed: " + e.getMessage()); + } } private void startInputParamDialog() { diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/PLSourceEditor.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/PLSourceEditor.java index f948607994538c81f89ed94ac9c119a4d4215821..ca3ad39341aba3794b35744c6d9e7efdfb775e79 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/PLSourceEditor.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/PLSourceEditor.java @@ -93,7 +93,6 @@ import org.opengauss.mppdbide.presentation.grid.IDSGridDataProvider; import org.opengauss.mppdbide.presentation.resultset.ActionAfterResultFetch; import org.opengauss.mppdbide.presentation.resultsetif.IConsoleResult; import org.opengauss.mppdbide.presentation.resultsetif.IResultConfig; -import org.opengauss.mppdbide.utils.DebuggerStartVariable; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; import org.opengauss.mppdbide.utils.MemoryCleaner; @@ -104,7 +103,6 @@ import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; import org.opengauss.mppdbide.utils.logger.ILogger; import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.opengauss.mppdbide.utils.messaging.MessageQueue; -import org.opengauss.mppdbide.utils.vo.DebuggerStartInfoVo; import org.opengauss.mppdbide.view.core.ConsoleCoreWindow; import org.opengauss.mppdbide.view.core.ConsoleMessageWindow; import org.opengauss.mppdbide.view.core.sourceeditor.AnnotationHelper.AnnotationType; @@ -687,9 +685,6 @@ public class PLSourceEditor extends AbstractAutoSaveObject sourceEditor.setDocument(new Document(debugObject.getLatestSouceCode().getCode()), 0); debugObject.setCodeReloaded(false); } - String sourceCode = debugObject.getLatestSouceCode().getCode(); - DebuggerStartInfoVo info = DebuggerStartVariable.getStartInfo(debugObject.getOid()); - info.sourceCode = sourceCode; registerModifyListener(); setSourceChangedInEditor(false); setSourceViewerConfiguration();