From b2f2241ea5a4eaff5ea5136c191f098a497fa74f Mon Sep 17 00:00:00 2001
From: gaibu <1016771049@qq.com>
Date: Tue, 21 Mar 2023 22:08:47 +0800
Subject: [PATCH] =?UTF-8?q?feat=20#I6O2YE=20sql=20=E5=A4=96=E7=BD=AE?=
=?UTF-8?q?=E5=AD=98=E5=82=A8=E6=94=AF=E6=8C=81=E5=A4=9A=E8=84=9A=E6=9C=AC?=
=?UTF-8?q?=E6=B7=B7=E5=90=88=E8=B0=83=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../liteflow/parser/sql/util/JDBCHelper.java | 76 +++++++++++++++++--
.../liteflow/parser/sql/vo/SQLParserVO.java | 2 +-
2 files changed, 72 insertions(+), 6 deletions(-)
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
index c2e44b87b..e7a8bc939 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
@@ -29,13 +29,17 @@ public class JDBCHelper {
private static final String SCRIPT_SQL_CHECK_PATTERN = "SELECT 1 FROM {} WHERE {}=?";
- private static final String SCRIPT_SQL_PATTERN = "SELECT {},{},{},{},{} FROM {} WHERE {}=?";
+ private static final String SCRIPT_SQL_PATTERN = "SELECT {},{},{},{} FROM {} WHERE {}=?";
+
+ private static final String SCRIPT_WITH_LANGUAG_SQL_PATTERN = "SELECT {},{},{},{},{} FROM {} WHERE {}=?";
private static final String CHAIN_XML_PATTERN = "{}";
private static final String NODE_XML_PATTERN = "{}";
- private static final String NODE_ITEM_XML_PATTERN = "";
+ private static final String NODE_ITEM_XML_PATTERN = "";
+
+ private static final String NODE_ITEM_WITH_LANGUAGE_XML_PATTERN = "";
private static final String XML_PATTERN = "{}{}";
@@ -144,6 +148,68 @@ public class JDBCHelper {
}
public String getScriptNodes() {
+ String scriptLanguageField = sqlParserVO.getScriptLanguageField();
+ if (StrUtil.isNotBlank(scriptLanguageField)) {
+ return getScriptNodesWithLanguage();
+ }
+
+ List result = new ArrayList<>();
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+
+ String scriptTableName = sqlParserVO.getScriptTableName();
+ String scriptIdField = sqlParserVO.getScriptIdField();
+ String scriptDataField = sqlParserVO.getScriptDataField();
+ String scriptNameField = sqlParserVO.getScriptNameField();
+ String scriptTypeField = sqlParserVO.getScriptTypeField();
+ String scriptApplicationNameField = sqlParserVO.getScriptApplicationNameField();
+ String applicationName = sqlParserVO.getApplicationName();
+
+ if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(scriptApplicationNameField)) {
+ throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
+ }
+
+ String sqlCmd = StrUtil.format(SCRIPT_SQL_PATTERN, scriptIdField, scriptDataField, scriptNameField,
+ scriptTypeField, scriptTableName, scriptApplicationNameField);
+ try {
+ conn = getConn();
+ stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+ // 设置游标拉取数量
+ stmt.setFetchSize(FETCH_SIZE_MAX);
+ stmt.setString(1, applicationName);
+ rs = stmt.executeQuery();
+
+ while (rs.next()) {
+ String id = getStringFromResultSet(rs, scriptIdField);
+ String data = getStringFromResultSet(rs, scriptDataField);
+ String name = getStringFromResultSet(rs, scriptNameField);
+ String type = getStringFromResultSet(rs, scriptTypeField);
+
+ NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(type);
+ if (Objects.isNull(nodeTypeEnum)) {
+ throw new ELSQLException(StrUtil.format("Invalid type value[{}]", type));
+ }
+
+ if (!nodeTypeEnum.isScript()) {
+ throw new ELSQLException(StrUtil.format("The type value[{}] is not a script type", type));
+ }
+
+ result.add(StrUtil.format(NODE_ITEM_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name), type, data));
+ }
+ }
+ catch (Exception e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ finally {
+ // 关闭连接
+ close(conn, stmt, rs);
+ }
+ return StrUtil.format(NODE_XML_PATTERN, CollUtil.join(result, StrUtil.EMPTY));
+ }
+
+ public String getScriptNodesWithLanguage() {
+
List result = new ArrayList<>();
Connection conn = null;
PreparedStatement stmt = null;
@@ -162,7 +228,7 @@ public class JDBCHelper {
throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
}
- String sqlCmd = StrUtil.format(SCRIPT_SQL_PATTERN, scriptIdField, scriptDataField, scriptNameField,
+ String sqlCmd = StrUtil.format(SCRIPT_WITH_LANGUAG_SQL_PATTERN, scriptIdField, scriptDataField, scriptNameField,
scriptTypeField, scriptLanguageField, scriptTableName, scriptApplicationNameField);
try {
conn = getConn();
@@ -192,8 +258,8 @@ public class JDBCHelper {
throw new ELSQLException(StrUtil.format("The language value[{}] is error", language));
}
- result.add(StrUtil.format(NODE_ITEM_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name), type,
- language, data));
+ result.add(StrUtil.format(NODE_ITEM_WITH_LANGUAGE_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name),
+ type, language, data));
}
}
catch (Exception e) {
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
index 731e88109..4459d1922 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
@@ -86,7 +86,7 @@ public class SQLParserVO {
/**
* 脚本 node language 字段
*/
- private String scriptLanguageField = "script_language";
+ private String scriptLanguageField;
public String getUrl() {
return url;