diff --git a/3rd_src/pom.xml b/3rd_src/pom.xml
index 022739ae66eaa407d8d6ed72d9d902922efa9689..e49474a379c29547437ee00ad704b28bc10b5e9d 100644
--- a/3rd_src/pom.xml
+++ b/3rd_src/pom.xml
@@ -18,6 +18,11 @@
win
+
+ org.jsoup
+ jsoup
+ 1.14.3
+
org.antlr
antlr4-runtime
diff --git a/code/datastudio/src/copyExternalsToBuild.bat b/code/datastudio/src/copyExternalsToBuild.bat
index b6b8bc23cecdfb242edf6fd0a83753a963c352c8..0be7b37bc0210bfce3878973b8780e42a8115a97 100644
--- a/code/datastudio/src/copyExternalsToBuild.bat
+++ b/code/datastudio/src/copyExternalsToBuild.bat
@@ -48,6 +48,7 @@ xcopy %SOURCE%\3rd_src\target\dependency\guava-30.1.1-jre.jar %DEST%\org.opengau
xcopy %SOURCE%\3rd_src\target\dependency\javafx-base-18-ea+2-win.jar %DEST%\org.opengauss.mppdbide.view\. /Y /S /E
xcopy %SOURCE%\3rd_src\target\dependency\javafx-controls-18-ea+2-win.jar %DEST%\org.opengauss.mppdbide.view\. /Y /S /E
xcopy %SOURCE%\3rd_src\target\dependency\javafx-graphics-18-ea+2-win.jar %DEST%\org.opengauss.mppdbide.view\. /Y /S /E
+xcopy %SOURCE%\3rd_src\target\dependency\jsoup-1.14.3.jar %DEST%\org.opengauss.mppdbide.view\. /Y /S /E
xcopy %SOURCE%\platform\Gauss200\gs_jdbc\gsjdbc4.jar %DEST%\org.opengauss.dbdriver.jdbc.gauss\. /Y /S /E
rmdir /Q /S %TEST%\org.opengauss.mppdbide.adapter.test.fragment\lib
diff --git a/code/datastudio/src/copyExternalsToBuild.sh b/code/datastudio/src/copyExternalsToBuild.sh
index 9c2d20c883895edcb0e20838729024cbc16d52b1..b23aead61171ef0fa8c72f1584b0fbeea026bd72 100644
--- a/code/datastudio/src/copyExternalsToBuild.sh
+++ b/code/datastudio/src/copyExternalsToBuild.sh
@@ -49,6 +49,7 @@ cp $SOURCE/3rd_src/target/dependency/guava-30.1.1-jre.jar $DEST/org.opengauss.mp
cp $SOURCE/3rd_src/target/dependency/javafx-base-18-ea+2-win.jar $DEST/org.opengauss.mppdbide.view/.
cp $SOURCE/3rd_src/target/dependency/javafx-controls-18-ea+2-win.jar $DEST/org.opengauss.mppdbide.view/.
cp $SOURCE/3rd_src/target/dependency/javafx-graphics-18-ea+2-win.jar $DEST/org.opengauss.mppdbide.view/.
+cp $SOURCE/3rd_src/target/dependency/jsoup-1.14.3.jar $DEST/org.opengauss.mppdbide.view/.
cp $SOURCE/platform/Gauss200/gs_jdbc/gsjdbc4.jar $DEST/org.opengauss.dbdriver.jdbc.gauss/.
rm -rf $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib
diff --git a/code/datastudio/src/org.opengauss.mppdbide.adapter.gauss/.classpath b/code/datastudio/src/org.opengauss.mppdbide.adapter.gauss/.classpath
index 6ae8eb6f0a8021436940397b1574147090eb7259..81a01f259ef4a73d31506ac44d9c4fca34e2005f 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.adapter.gauss/.classpath
+++ b/code/datastudio/src/org.opengauss.mppdbide.adapter.gauss/.classpath
@@ -1,11 +1,12 @@
-
+
+
diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/.classpath b/code/datastudio/src/org.opengauss.mppdbide.bl/.classpath
index 682e4d0ba30be0b8c0d1f79fe9a0864fc9123e86..273945efda8655a8b9ed6218c8b5c292575ebca5 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.bl/.classpath
+++ b/code/datastudio/src/org.opengauss.mppdbide.bl/.classpath
@@ -1,5 +1,6 @@
+
@@ -9,6 +10,7 @@
-
+
+
diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DebugObjects.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DebugObjects.java
index b32769dd9fb27ad0b6ad34e2435683253da0e47a..574ddf4d47aaaeb7477a585c0a61ae993f3b3e9c 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DebugObjects.java
+++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DebugObjects.java
@@ -55,6 +55,7 @@ public class DebugObjects extends BatchDropServerObject implements ObjectChange,
private ObjectParameter returnType;
private Database db;
private String usageHint;
+ private static String coverageHint;
private Namespace namespace;
private String lang;
@@ -88,6 +89,7 @@ public class DebugObjects extends BatchDropServerObject implements ObjectChange,
*/
public void setUsagehint(String usagehint) {
this.usageHint = usagehint;
+ this.coverageHint = usagehint;
}
/**
@@ -868,7 +870,10 @@ public class DebugObjects extends BatchDropServerObject implements ObjectChange,
hasout = createTemplateFromParams(params, parameterObject.getTemplateParams(), template,
parameterObject.getOutParams());
-
+
+ if (MessageConfigLoader.getProperty(IMessagesConstants.COVERAGE_HINT).equalsIgnoreCase(coverageHint)) {
+ usagehint.append(coverageHint + MPPDBIDEConstants.LINE_SEPARATOR);
+ }
if (hasout) {
usagehint.append(MessageConfigLoader.getProperty(IMessagesConstants.EXEC_DEBUG_DIALOG_OUT_PARA_MSG)
+ MPPDBIDEConstants.LINE_SEPARATOR);
diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/IDebugObject.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/IDebugObject.java
index 3dc740b00f3cd1b31ef4f0acad3c1ec6b184de06..444ff7a6910560a31816741caa150baf7182ffa0 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/IDebugObject.java
+++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/IDebugObject.java
@@ -258,6 +258,8 @@ public interface IDebugObject {
* @return the template parameters
*/
ArrayList getTemplateParameters();
+
+ ObjectParameter[] getObjectParameters();
/**
* Clear template parameter values.
diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/META-INF/MANIFEST.MF b/code/datastudio/src/org.opengauss.mppdbide.debuger/META-INF/MANIFEST.MF
index 2a29a9e20ed5a232f17618256d37a9cb0e1212a3..9fb82c430e9edccf9b45cf9e1f52f58bab881a0f 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.debuger/META-INF/MANIFEST.MF
+++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/META-INF/MANIFEST.MF
@@ -20,7 +20,8 @@ Export-Package: org.opengauss.mppdbide.common,
org.opengauss.mppdbide.debuger.service,
org.opengauss.mppdbide.debuger.service.chain,
org.opengauss.mppdbide.debuger.thread,
- org.opengauss.mppdbide.debuger.vo
+ org.opengauss.mppdbide.debuger.vo,
+ org.opengauss.mppdbide.debuger.vo.dbe
Bundle-ClassPath: .
Import-Package: org.postgresql.core,
org.postgresql.jdbc,
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
new file mode 100644
index 0000000000000000000000000000000000000000..07bf45268dd818e969976b72704f0bcf7683e153
--- /dev/null
+++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/QueryResVoConvertHelper.java
@@ -0,0 +1,161 @@
+package org.opengauss.mppdbide.common;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang.StringUtils;
+import org.opengauss.mppdbide.debuger.annotation.ParseVo;
+import org.opengauss.mppdbide.debuger.debug.DebugConstants;
+import org.opengauss.mppdbide.debuger.vo.BreakPointListVo;
+import org.opengauss.mppdbide.debuger.vo.PositionVo;
+import org.opengauss.mppdbide.debuger.vo.SourceCodeVo;
+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.debuger.vo.dbe.BacktraceVo;
+import org.opengauss.mppdbide.debuger.vo.dbe.InfoBreakpointsVo;
+import org.opengauss.mppdbide.debuger.vo.dbe.InfoCodeVo;
+import org.opengauss.mppdbide.debuger.vo.dbe.VariablesVo;
+
+/**
+ * Convert openGauss 3.0 vo to openGauss2.0 vo
+ *
+ * @author gitam
+ */
+public class QueryResVoConvertHelper {
+
+ public static T parse(ResultSet rs,Class clazz,IConnection conn) throws SQLException {
+ VersionVo version=VersionHelper.getDebuggerVersion(conn);
+ return parse(rs,clazz,version);
+ }
+
+ public static T parse(ResultSet rs,Class clazz,VersionVo versionVo) throws SQLException {
+ String className= clazz.getName();
+ T obj = null;
+ //if openGauss2.0 command do not need to convert
+ boolean needConvert=versionVo.getDebuggerVersion().equalsIgnoreCase(DebugConstants.DBE_DEBUGGER);
+ if(!needConvert) {
+ obj= ParseVo.parse(rs, clazz);
+ }else {
+ switch(className) {
+ case "org.opengauss.mppdbide.debuger.vo.SourceCodeVo":
+ obj= convertToSourceCodeVo(rs);
+ break;
+ case "org.opengauss.mppdbide.debuger.vo.TotalSourceCodeVo":
+ break;
+ }
+ }
+ return obj;
+ }
+
+ public static List parseList(ResultSet rs,Class clazz,IConnection conn) throws SQLException {
+ VersionVo version=VersionHelper.getDebuggerVersion(conn);
+ return parseList(rs,clazz,version);
+ }
+
+ public static List parseList(ResultSet rs,Class clazz,VersionVo versionVo) throws SQLException {
+ String className= clazz.getName();
+ List list = null;
+ //if openGauss2.0 command do not need to convert
+ boolean needConvert=versionVo.getDebuggerVersion().equalsIgnoreCase(DebugConstants.DBE_DEBUGGER);
+ if(!needConvert) {
+ list= ParseVo.parseList(rs, clazz);
+ }else {
+ switch(className) {
+ case "org.opengauss.mppdbide.debuger.vo.BreakpointVo":
+ list= covertToInofBreakpointsVo(rs);
+ break;
+ case "org.opengauss.mppdbide.debuger.vo.StackVo":
+ list= covertToInofBacktraceVo(rs);
+ break;
+ case "org.opengauss.mppdbide.debuger.vo.VariableVo":
+ list = covertToInofVariablesVo(rs);
+ break;
+ case "org.opengauss.mppdbide.debuger.vo.BreakPointListVo":
+ list = covertToInofBreakPointList(rs);
+ break;
+ }
+ }
+ return list;
+ }
+
+ public static List covertToInofBreakPointList(ResultSet rs) throws SQLException {
+ List list = new ArrayList();
+ List vos = ParseVo.parseList(rs,BreakPointListVo.class);
+ vos.forEach(item -> {
+ BreakPointListVo vo = new BreakPointListVo();
+ vo.breakpointno = item.breakpointno;
+ vo.enable = item.enable;
+ vo.funcoid = item.funcoid;
+ vo.lineno = item.lineno;
+ vo.query = item.query;
+ list.add((T) vo);
+ });
+ return list;
+ }
+
+ public static List covertToInofVariablesVo(ResultSet rs) throws SQLException {
+ List list = new ArrayList();
+ VariablesVo item = ParseVo.parse(rs,VariablesVo.class);
+ VariableVo vo = new VariableVo();
+ vo.name = item.getVarname();
+ vo.isconst = item.getIsconst();
+ vo.value = item.getValue();
+ vo.dtype = item.getDtype();
+ list.add((T) vo);
+ return list;
+ }
+
+ public static List covertToInofBacktraceVo(ResultSet rs) throws SQLException {
+ List list = new ArrayList();
+ List infos = ParseVo.parseList(rs,BacktraceVo.class);
+ infos.forEach(item -> {
+ StackVo vo = new StackVo();
+ vo.func = item.getFuncoid();
+ vo.linenumber = item.getLineno();
+ vo.level = 0;
+ vo.targetname = item.getQuery();
+ list.add((T) vo);
+ });
+ return list;
+ }
+
+ public static List covertToInofBreakpointsVo(ResultSet rs) throws SQLException {
+ List list = new ArrayList();
+ List infos = ParseVo.parseList(rs,InfoBreakpointsVo.class);
+ infos.forEach(item -> {
+ PositionVo vo = new PositionVo();
+ vo.func = item.getFuncoid();
+ vo.linenumber = item.getLineno();
+ vo.breakpointno = item.getBreakpointno();
+ list.add((T) vo);
+ });
+ return list;
+ }
+
+ public static T convertToSourceCodeVo(ResultSet rs) throws SQLException {
+ SourceCodeVo sourceCodeVo = new SourceCodeVo();
+ List infoCodeList= ParseVo.parseList(rs,InfoCodeVo.class);
+ StringBuffer buffer=new StringBuffer();
+ infoCodeList.forEach(a->{
+ if (a.query.toLowerCase().contains("begin")) {
+ a.query = a.query.toUpperCase(Locale.ROOT).replaceFirst("BEGIN", "\rBEGIN");
+ }
+ if (a.query.toLowerCase().contains("end")) {
+ a.query = a.query.toUpperCase(Locale.ROOT).replaceFirst("END", "\rEND");
+ }
+ buffer.append(a.query);
+ });
+ sourceCodeVo.setCodes(infoCodeList);
+ sourceCodeVo.setSourceCode(buffer.toString());
+ return (T) sourceCodeVo;
+ }
+}
diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/VersionHelper.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/VersionHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..2fec8519312996ff8f7923b8b8a9931c7a60d7e4
--- /dev/null
+++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/common/VersionHelper.java
@@ -0,0 +1,50 @@
+package org.opengauss.mppdbide.common;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.opengauss.mppdbide.debuger.debug.DebugConstants;
+import org.opengauss.mppdbide.debuger.debug.DebugConstants.DebugOpt;
+import org.opengauss.mppdbide.debuger.vo.VersionVo;
+import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility;
+
+public class VersionHelper {
+
+ /**
+ * get openGauss debugger version
+ * @return pl_debugger or dbe_debugger
+ */
+ public static VersionVo getDebuggerVersion(IConnection serverConn) throws SQLException {
+ if (null == serverConn) {
+ MPPDBIDELoggerUtility.error("serverConn is null!");
+ }
+ String sql= DebugConstants.getDbVersionSql();
+ VersionVo versionVo=new VersionVo();
+ try (PreparedStatement ps = serverConn.getStatement(sql)) {
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ // (openGauss 2.1.0 build 590b0f8e) openGauss version info
+ String version= rs.getObject(1).toString();
+ MPPDBIDELoggerUtility.debug("openGauss db info version:" + version);
+ versionVo.setVersion(version);
+ }
+ MPPDBIDELoggerUtility.debug("openGauss db info is empty!");
+ return versionVo;
+ }
+ }
+ }
+
+ public static DebugOpt getDebugOptByDebuggerVersion(IConnection serverConn,DebugOpt debugOpt) throws SQLException {
+ if (null == serverConn) {
+ return debugOpt;
+ }
+ VersionVo versionVo=getDebuggerVersion(serverConn);
+ DebugOpt res=DebugConstants.getDebugOptByDebuggerVersion(debugOpt,versionVo.getDebuggerVersion());
+ if (null == res) {
+ return debugOpt;
+ }
+ return res;
+ }
+
+}
diff --git a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/debug/DebugConstants.java b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/debug/DebugConstants.java
index 8e28d5218d2c168aee52829c67bb63d46389b188..8c26b1628e9991254c6d301d30de96c18dee43c4 100644
--- a/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/debug/DebugConstants.java
+++ b/code/datastudio/src/org.opengauss.mppdbide.debuger/src/org/opengauss/mppdbide/debuger/debug/DebugConstants.java
@@ -15,6 +15,8 @@
package org.opengauss.mppdbide.debuger.debug;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.stream.Stream;
@@ -28,28 +30,87 @@ public class DebugConstants {
* default string length
*/
public static final int DEFAULT_STRING_BUILD_LEN = 128;
+ public static final String PL_DEBUGGER="pl_debugger";
+ public static final String DBE_DEBUGGER="dbe_debugger";
+ public static final Integer DBE_DEBUGGER_MIN_VERSION=300;
+ public static final LinkedHashMap enumMap=getEnumMap(DebugOpt.class);
+ public static HashMap oidSqlMap = new HashMap<>();
+
+ /**
+ * get DebugOpt by different debugger
+ * @param debugOpt
+ * @param debuggerVersion
+ * @return DebugOpt
+ */
+ public static DebugOpt getDebugOptByDebuggerVersion(DebugOpt debugOpt,String debuggerVersion) {
+ if(PL_DEBUGGER.equalsIgnoreCase(debuggerVersion)) {
+ return debugOpt;
+ }else {
+ String optName=debugOpt.name();
+ optName="DBE_"+optName;
+ return enumMap.get(optName);
+ }
+ }
+
+ /**
+ * get name and all enum map
+ * @param
+ * @param enumClass
+ * @return LinkedHashMap
+ */
+ public static > LinkedHashMap getEnumMap(final Class enumClass) {
+ final LinkedHashMap map = new LinkedHashMap<>();
+ for (final E e : enumClass.getEnumConstants()) {
+ map.put(e.name(), e);
+ }
+ return map;
+ }
/**
* Title: the DebugOpt enum use to descript debuger interface
*/
public static enum DebugOpt {
+ //pldebugger command
DEBUG_ON("pldbg_on", 0),
DEBUG_OFF("pldbg_off", 0),
- DEBUG_VERSION("pldbg_get_proxy_info", 0),
+ DEBUG_VERSION("version", 0),
GET_SOURCE_CODE("pldbg_get_source", 1),
GET_TOTAL_SOURCE_CODE("pg_get_functiondef", 1),
START_SESSION("plpgsql_oid_debug", 1),
ATTACH_SESSION("pldbg_attach_to_port", 1),
STEP_INTO("pldbg_step_into", 1),
STEP_OVER("pldbg_step_over", 1),
- STEP_OUT("pldbg_step_out", 1),
+ STEP_OUT("pldbg_step_out", 1),//not support
CONTINUE_EXEC("pldbg_continue", 1),
ABORT_TARGET("pldbg_abort_target", 1),
GET_VARIABLES("pldbg_get_variables", 1),
GET_STACKS("pldbg_get_stack", 1),
GET_BREAKPOINTS("pldbg_get_breakpoints", 1),
DROP_BREAKPOINT("pldbg_drop_breakpoint", 3),
- SET_BREAKPOINT("pldbg_set_breakpoint", 3);
+ SET_BREAKPOINT("pldbg_set_breakpoint", 3),
+ //dbe_debugger command
+ DBE_DEBUG_ON("DBE_PLDEBUGGER.turn_on",1),
+ DBE_DEBUG_OFF("DBE_PLDEBUGGER.turn_off", 1),
+ DBE_DEBUG_VERSION("version", 0),
+ DBE_GET_SOURCE_CODE("DBE_PLDEBUGGER.info_code", 1),
+ DBE_GET_TOTAL_SOURCE_CODE("pg_get_functiondef", 1),
+ DBE_START_SESSION("DBE_PLDEBUGGER.turn_on", 1),
+ DBE_ATTACH_SESSION("DBE_PLDEBUGGER.attach", 2),
+ DBE_STEP_INTO("DBE_PLDEBUGGER.step", 1),
+ DBE_STEP_OVER("DBE_PLDEBUGGER.next", 0),
+ DBE_STEP_OUT("pldbg_step_out", 1),//not support
+ DBE_CONTINUE_EXEC("DBE_PLDEBUGGER.continue", 0),
+ DBE_ABORT_TARGET("DBE_PLDEBUGGER.abort", 0),
+ DBE_GET_VARIABLES("DBE_PLDEBUGGER.print_var", 1),
+ DBE_GET_STACKS("DBE_PLDEBUGGER.backtrace", 0),
+ DBE_GET_BREAKPOINTS("DBE_PLDEBUGGER.info_breakpoints", 0),
+ DBE_DROP_BREAKPOINT("DBE_PLDEBUGGER.delete_breakpoint", 1),
+ DBE_SET_BREAKPOINT("DBE_PLDEBUGGER.add_breakpoint", 2),
+ DBE_REMARK_INFO_SET("DBE_PLDEBUGGER.remark_info_set",2),
+ DBE_REMARK_INFO_GET("DBE_PLDEBUGGER.remark_info_get",1),
+ DBE_COVERAGE_INFO_GET("DBE_PLDEBUGGER.coverage_info_get",1),
+ DBE_COVERAGE_INFO_DEL("DBE_PLDEBUGGER.coverage_info_del",2)
+ ;
/**
* opt of interface
@@ -95,4 +156,12 @@ public class DebugConstants {
paramReplace
);
}
+
+ /**
+ * get openGauss db version sql
+ * @return String query sql
+ */
+ public static String getDbVersionSql() {
+ return "select version()";
+ }
}
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 ea5d4e2dbb80fc7af994312a22d1188481887edf..98830729c0f1f58d09424176784c49328bdbf2ec 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
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) 2022 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
@@ -6,7 +6,7 @@
* 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.
@@ -27,15 +27,23 @@ import org.opengauss.mppdbide.debuger.debug.DebugState;
import org.opengauss.mppdbide.debuger.thread.DebugServerRunable;
import org.opengauss.mppdbide.debuger.thread.DebugServerThreadProxy;
import org.opengauss.mppdbide.debuger.thread.EventQueueThread;
+import org.opengauss.mppdbide.debuger.vo.BreakPointListVo;
import org.opengauss.mppdbide.debuger.vo.FunctionVo;
import org.opengauss.mppdbide.debuger.vo.PositionVo;
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.debuger.vo.dbe.AttachVo;
+import org.opengauss.mppdbide.debuger.vo.dbe.TurnOnVo;
import org.opengauss.mppdbide.common.IConnection;
+import org.opengauss.mppdbide.common.QueryResVoConvertHelper;
+import org.opengauss.mppdbide.utils.ConstantRunLine;
import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility;
import org.postgresql.core.NoticeListener;
+import org.opengauss.mppdbide.common.VersionHelper;
+import org.opengauss.mppdbide.utils.vo.DebuggerStartInfoVo;
+import org.opengauss.mppdbide.utils.DebuggerStartConstants;
import java.lang.Thread.State;
import java.sql.PreparedStatement;
@@ -45,7 +53,11 @@ import java.sql.SQLWarning;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
/**
* Title: the DebugService class
@@ -53,632 +65,814 @@ import java.util.Optional;
* you can use by this step:
* 1. create and DebugService by new DebugService()
* 2. set DebugService.functionVo which come from QueryService.queryFunction
- * by functionName
+ * by functionName
* 3. set DebugService.clientConn and DebugService.serverConn,
- * this is IConnection instance, your can create ConnectionAdapter objects
+ * this is IConnection instance, your can create ConnectionAdapter objects
* 4. set DebugService.clinetConn and DebugService.serverConn's NoticeListener,
- * which is DebugService instance self
+ * which is DebugService instance self
* 5. call DebugService.prepareDebug
* 6. call DebugService.startDebug and receive return value for close back server
- * thread in end
+ * thread in end
* 7. call DebugService.attachDebug
* 8. then you can use stepOver/StepInto/continueExec to control debug process
* 9. you can use getVariables and getStacks get variables and stacks info
* 10. you can use getBreakPoints/setBreakpoint/dropBreakpoint function to manager
- * breakpoints
+ * breakpoints
* 11. when debug over, call DebugService.abortDebug, if forget this operation,
- * threadleak will occur
+ * threadleak will occur
* 12. call DebugService.debugOff, if forget this operation, openGauss Database
- * will exit!!
+ * will exit!!
* 13. call DebugService.closeConn
* sample use you can see DebugTest.java
*
* @since 3.0.0
*/
public class DebugService implements NoticeListener, EventHander, IDebugService {
- private static final int DEFAULT_WAIT_LOCK_TIME = 2000; // ms
- private IConnection serverConn;
- private IConnection clientConn;
- private FunctionVo functionVo;
- private MsgChainHelper msgChainHelper;
- private boolean isRollback = false;
- private SessionVo sessionVo = new SessionVo();
- private final Object waitLock = new int[0];
- private DebugState serverState = new DebugState();
- private DebugState clientState = new DebugState();
- private EventQueueThread eventQueueThread = new EventQueueThread();
- private DebugServerThreadProxy serverThreadProxy = new DebugServerThreadProxy();
-
- public DebugService() {
- eventQueueThread.addHandler(this);
- msgChainHelper = new MsgChainHelper(this);
- }
-
- /**
- * prepare to debug
- *
- * @return void
- * @throws SQLException the exp
- */
- public void prepareDebug() throws SQLException {
- List