From ccc6c332accf1d40ed0f6120e71b4a1a7c13c757 Mon Sep 17 00:00:00 2001 From: xujp Date: Wed, 9 Nov 2022 16:26:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E5=90=8Cschema?= =?UTF-8?q?=E4=B8=8B=E7=9B=B8=E5=90=8C=E5=90=8D=E7=A7=B0=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=89=A7=E8=A1=8C=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?.=E5=8E=9F=E5=9B=A0=E6=98=AF=E7=9B=B4=E6=8E=A5call=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E6=97=B6=E7=BC=BA=E5=B0=91schema=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DebuggerReportService.java | 18 +++++++++------ .../debuger/service/QueryService.java | 8 +++++-- .../mppdbide/utils/VariableRunLine.java | 5 ++++ .../core/sourceeditor/PLSourceEditorCore.java | 5 +++- .../handler/debug/DebugServiceHelper.java | 6 +++++ .../view/handler/debug/StartDebugHandler.java | 23 +++++++++++++++---- .../mppdbide/view/ui/PLSourceEditor.java | 5 ---- 7 files changed, 50 insertions(+), 20 deletions(-) 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 fbf1081a..70d95515 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 6b07081f..128af2ec 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 477ac611..e37be0f2 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 d90cb242..4c53788f 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 57fb85b6..85edf062 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 dfbef0da..06f28985 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 f9486079..ca3ad393 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(); -- Gitee