From b9542f0fbd0796801fed6b4569d7ded73de2510f Mon Sep 17 00:00:00 2001
From: gaibu <1016771049@qq.com>
Date: Sun, 19 Mar 2023 21:42:35 +0800
Subject: [PATCH 1/4] =?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/enums/ScriptTypeEnum.java | 18 ++-
.../liteflow/parser/sql/util/JDBCHelper.java | 14 ++-
.../liteflow/parser/sql/vo/SQLParserVO.java | 13 ++
.../pom.xml | 7 ++
.../test/sql/SQLWithXmlELSpringbootTest.java | 113 ++++++++++--------
.../test/resources/application-xml.properties | 1 +
.../src/test/resources/sql/data.sql | 7 +-
.../src/test/resources/sql/schema.sql | 1 +
.../src/test/resources/sql/sql-lite/data.sql | 8 +-
.../test/resources/sql/sql-lite/schema.sql | 1 +
10 files changed, 121 insertions(+), 62 deletions(-)
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
index 512b05cbc..c1d6b2cd4 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
@@ -6,8 +6,7 @@ public enum ScriptTypeEnum {
QLEXPRESS("qlexpress", "qlexpress"),
JS("javascript", "js"),
PYTHON("python", "python"),
- LUA("luaj", "lua")
- ;
+ LUA("luaj", "lua");
private String engineName;
private String displayName;
@@ -41,4 +40,19 @@ public enum ScriptTypeEnum {
}
return null;
}
+
+ /**
+ * 校验脚本类型是否合法
+ *
+ * @param scriptType 脚本类型
+ * @return true:合法,false:不合法
+ */
+ public static boolean checkScriptType(String scriptType) {
+ for (ScriptTypeEnum e : ScriptTypeEnum.values()) {
+ if (e.getDisplayName().equals(scriptType)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
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 8bce369a8..ab276edd8 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
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import com.yomahub.liteflow.enums.NodeTypeEnum;
+import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.parser.sql.exception.ELSQLException;
import com.yomahub.liteflow.parser.sql.vo.SQLParserVO;
@@ -28,12 +29,12 @@ 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 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 XML_PATTERN = "{}{}";
private static final Integer FETCH_SIZE_MAX = 1000;
@@ -145,6 +146,7 @@ public class JDBCHelper {
String scriptTypeField = sqlParserVO.getScriptTypeField();
String scriptApplicationNameField = sqlParserVO.getScriptApplicationNameField();
String applicationName = sqlParserVO.getApplicationName();
+ String scriptLanguageField = sqlParserVO.getScriptLanguageField();
if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(scriptApplicationNameField)) {
throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
@@ -156,6 +158,7 @@ public class JDBCHelper {
scriptDataField,
scriptNameField,
scriptTypeField,
+ scriptLanguageField,
scriptTableName,
scriptApplicationNameField
);
@@ -172,6 +175,7 @@ public class JDBCHelper {
String data = getStringFromResultSet(rs, scriptDataField);
String name = getStringFromResultSet(rs, scriptNameField);
String type = getStringFromResultSet(rs, scriptTypeField);
+ String language = getStringFromResultSet(rs, scriptLanguageField);
NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(type);
if (Objects.isNull(nodeTypeEnum)) {
@@ -182,7 +186,11 @@ public class JDBCHelper {
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));
+ if(!ScriptTypeEnum.checkScriptType(language)){
+ 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));
}
} catch (Exception e) {
throw new ELSQLException(e.getMessage());
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 9065af69e..778cdf5e3 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
@@ -83,6 +83,11 @@ public class SQLParserVO {
*/
private String scriptTypeField = "script_type";
+ /**
+ * 脚本 node language 字段
+ */
+ private String scriptLanguageField = "script_language";
+
public String getUrl() {
return url;
}
@@ -202,4 +207,12 @@ public class SQLParserVO {
public void setScriptTypeField(String scriptTypeField) {
this.scriptTypeField = scriptTypeField;
}
+
+ public String getScriptLanguageField() {
+ return scriptLanguageField;
+ }
+
+ public void setScriptLanguageField(String scriptLanguageField) {
+ this.scriptLanguageField = scriptLanguageField;
+ }
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml
index 8fb4c22df..b759a97f2 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml
@@ -57,5 +57,12 @@
test
+
+ com.yomahub
+ liteflow-script-javascript
+ ${revision}
+ test
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
index 46ac7164a..6b1256ab8 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
@@ -33,64 +33,71 @@ import java.sql.Statement;
@EnableAutoConfiguration
@ComponentScan({"com.yomahub.liteflow.test.sql.cmp"})
public class SQLWithXmlELSpringbootTest extends BaseTest {
- @Resource
- private FlowExecutor flowExecutor;
+ @Resource
+ private FlowExecutor flowExecutor;
- @Test
- public void testSQLWithXml() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
- Assert.assertEquals("a==>b==>c", response.getExecuteStepStr());
+ @Test
+ public void testSQLWithXml() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
+ Assert.assertEquals("a==>b==>c", response.getExecuteStepStr());
- // 修改数据库
- changeData();
+ // 修改数据库
+ changeData();
- // 重新加载规则
- flowExecutor.reloadRule();
- Assert.assertEquals("a==>c==>b", flowExecutor.execute2Resp("chain1", "arg").getExecuteStepStr());
- }
+ // 重新加载规则
+ flowExecutor.reloadRule();
+ Assert.assertEquals("a==>c==>b", flowExecutor.execute2Resp("chain1", "arg").getExecuteStepStr());
+ }
- @Test
- public void testSQLWithScriptXml() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg");
- Assert.assertTrue(response.isSuccess());
- Assert.assertEquals("x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
+ @Test
+ public void testSQLWithScriptXml() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg");
+ Assert.assertTrue(response.isSuccess());
+ Assert.assertEquals("x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
- // 修改数据库
- changeScriptData();
- // 重新加载规则
- flowExecutor.reloadRule();
- Assert.assertEquals("x0[if 脚本]", flowExecutor.execute2Resp("chain3", "arg").getExecuteStepStr());
- }
+ // 修改数据库
+ changeScriptData();
+ // 重新加载规则
+ flowExecutor.reloadRule();
+ Assert.assertEquals("x0[if 脚本]", flowExecutor.execute2Resp("chain3", "arg").getExecuteStepStr());
+ }
- /**
- * 修改数据库数据
- */
- private void changeData() {
- LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
- SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
- Connection connection;
- try {
- connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
- Statement statement = connection.createStatement();
- statement.executeUpdate("UPDATE EL_TABLE SET EL_DATA='THEN(a, c, b);' WHERE chain_name='chain1'");
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
+ @Test
+ public void testMultiLanguage1() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg");
+ Assert.assertTrue(response.isSuccess());
+ Assert.assertEquals("x2[python脚本]==>x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
+ }
- /**
- * 修改数据库数据
- */
- private void changeScriptData() {
- LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
- SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
- Connection connection;
- try {
- connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
- Statement statement = connection.createStatement();
- statement.executeUpdate("UPDATE SCRIPT_NODE_TABLE SET SCRIPT_NODE_DATA='return false;' WHERE SCRIPT_NODE_ID='x0'");
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
+ /**
+ * 修改数据库数据
+ */
+ private void changeData() {
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
+ SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
+ Connection connection;
+ try {
+ connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("UPDATE EL_TABLE SET EL_DATA='THEN(a, c, b);' WHERE chain_name='chain1'");
+ } catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
+
+ /**
+ * 修改数据库数据
+ */
+ private void changeScriptData() {
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
+ SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
+ Connection connection;
+ try {
+ connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("UPDATE SCRIPT_NODE_TABLE SET SCRIPT_NODE_DATA='return false;' WHERE SCRIPT_NODE_ID='x0'");
+ } catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties
index 7453c9b12..97dd95281 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties
@@ -13,6 +13,7 @@ liteflow.rule-source-ext-data={\
"scriptIdField":"script_node_id",\
"scriptNameField":"script_node_name",\
"scriptDataField":"script_node_data",\
+ "scriptLanguageField":"script_language",\
"scriptTypeField":"script_node_type"\
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql
index 3bb39657f..dda527ee6 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql
@@ -4,8 +4,11 @@ INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain3','IF(x0, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','','IF(x0, THEN(a, b));');
+INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain4','IF(x2, IF(x0, THEN(a, b)));');
DELETE FROM SCRIPT_NODE_TABLE;
-INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA) values ('demo','x0','if 脚本','if_script','return true');
-INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA) values ('demo','x1','if 脚本','if_script','return false');
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x0','if 脚本','if_script','return true','groovy');
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','if_script','return false','groovy');
+
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x2','python脚本','if_script','return true','js');
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql
index 8016b768f..00292ff24 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql
@@ -15,5 +15,6 @@ create table `script_node_table`
`script_node_name` varchar(32) NOT NULL,
`script_node_type` varchar(32) NOT NULL,
`script_node_data` varchar(1024) NOT NULL,
+ `script_language` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
);
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/data.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/data.sql
index 22f2e7803..dda527ee6 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/data.sql
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/data.sql
@@ -3,8 +3,12 @@ DELETE FROM EL_TABLE;
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain1','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain3','IF(x0, THEN(a, b));');
+INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','','IF(x0, THEN(a, b));');
+INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain4','IF(x2, IF(x0, THEN(a, b)));');
DELETE FROM SCRIPT_NODE_TABLE;
-INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA) values ('demo','x0','if 脚本','if_script','return true');
-INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA) values ('demo','x1','if 脚本','if_script','return false');
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x0','if 脚本','if_script','return true','groovy');
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','if_script','return false','groovy');
+
+INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x2','python脚本','if_script','return true','js');
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/schema.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/schema.sql
index 8783ea6cf..f89fa2aab 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/schema.sql
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/sql-lite/schema.sql
@@ -15,5 +15,6 @@ create table `script_node_table`
`script_node_name` text NOT NULL,
`script_node_type` text NOT NULL,
`script_node_data` text NOT NULL,
+ `script_language` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
);
\ No newline at end of file
From 30a12da03be5ade0884dd6b3d2a88b7b2d635291 Mon Sep 17 00:00:00 2001
From: gaibu <1016771049@qq.com>
Date: Mon, 20 Mar 2023 21:57:29 +0800
Subject: [PATCH 2/4] =?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/enums/ScriptTypeEnum.java | 88 ++--
.../liteflow/parser/sql/util/JDBCHelper.java | 442 +++++++++---------
.../liteflow/parser/sql/vo/SQLParserVO.java | 1 +
.../test/sql/SQLWithXmlELSpringbootTest.java | 127 ++---
4 files changed, 336 insertions(+), 322 deletions(-)
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
index c1d6b2cd4..b899d2705 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ScriptTypeEnum.java
@@ -2,57 +2,55 @@ package com.yomahub.liteflow.enums;
public enum ScriptTypeEnum {
- GROOVY("groovy", "groovy"),
- QLEXPRESS("qlexpress", "qlexpress"),
- JS("javascript", "js"),
- PYTHON("python", "python"),
- LUA("luaj", "lua");
- private String engineName;
+ GROOVY("groovy", "groovy"), QLEXPRESS("qlexpress", "qlexpress"), JS("javascript", "js"), PYTHON("python", "python"),
+ LUA("luaj", "lua");
- private String displayName;
+ private String engineName;
- ScriptTypeEnum(String engineName, String displayName) {
- this.engineName = engineName;
- this.displayName = displayName;
- }
+ private String displayName;
- public String getEngineName() {
- return engineName;
- }
+ ScriptTypeEnum(String engineName, String displayName) {
+ this.engineName = engineName;
+ this.displayName = displayName;
+ }
- public void setEngineName(String engineName) {
- this.engineName = engineName;
- }
+ public String getEngineName() {
+ return engineName;
+ }
- public String getDisplayName() {
- return displayName;
- }
+ public void setEngineName(String engineName) {
+ this.engineName = engineName;
+ }
- public void setDisplayName(String displayName) {
- this.displayName = displayName;
- }
+ public String getDisplayName() {
+ return displayName;
+ }
- public static ScriptTypeEnum getEnumByDisplayName(String displayName) {
- for (ScriptTypeEnum e : ScriptTypeEnum.values()) {
- if (e.getDisplayName().equals(displayName)) {
- return e;
- }
- }
- return null;
- }
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public static ScriptTypeEnum getEnumByDisplayName(String displayName) {
+ for (ScriptTypeEnum e : ScriptTypeEnum.values()) {
+ if (e.getDisplayName().equals(displayName)) {
+ return e;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 校验脚本类型是否合法
+ * @param scriptType 脚本类型
+ * @return true:合法,false:不合法
+ */
+ public static boolean checkScriptType(String scriptType) {
+ for (ScriptTypeEnum e : ScriptTypeEnum.values()) {
+ if (e.getDisplayName().equals(scriptType)) {
+ return true;
+ }
+ }
+ return false;
+ }
- /**
- * 校验脚本类型是否合法
- *
- * @param scriptType 脚本类型
- * @return true:合法,false:不合法
- */
- public static boolean checkScriptType(String scriptType) {
- for (ScriptTypeEnum e : ScriptTypeEnum.values()) {
- if (e.getDisplayName().equals(scriptType)) {
- return true;
- }
- }
- return false;
- }
}
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 ab276edd8..c2e44b87b 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
@@ -25,257 +25,265 @@ import java.util.Objects;
*/
public class JDBCHelper {
- private static final String SQL_PATTERN = "SELECT {},{} FROM {} WHERE {}=?";
+ private static final String SQL_PATTERN = "SELECT {},{} FROM {} WHERE {}=?";
- private static final String SCRIPT_SQL_CHECK_PATTERN = "SELECT 1 FROM {} WHERE {}=?";
+ 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 CHAIN_XML_PATTERN = "{}";
- private static final String NODE_XML_PATTERN = "{}";
+ private static final String CHAIN_XML_PATTERN = "{}";
- private static final String NODE_ITEM_XML_PATTERN = "";
- private static final String XML_PATTERN = "{}{}";
- private static final Integer FETCH_SIZE_MAX = 1000;
+ private static final String NODE_XML_PATTERN = "{}";
- private SQLParserVO sqlParserVO;
+ private static final String NODE_ITEM_XML_PATTERN = "";
- private static JDBCHelper INSTANCE;
+ private static final String XML_PATTERN = "{}{}";
- /**
- * 初始化 INSTANCE
- */
- public static void init(SQLParserVO sqlParserVO) {
- try {
- INSTANCE = new JDBCHelper();
- Class.forName(sqlParserVO.getDriverClassName());
- INSTANCE.setSqlParserVO(sqlParserVO);
- } catch (ClassNotFoundException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
+ private static final Integer FETCH_SIZE_MAX = 1000;
- /**
- * 获取 INSTANCE
- */
- public static JDBCHelper getInstance() {
- return INSTANCE;
- }
+ private SQLParserVO sqlParserVO;
- /**
- * 获取链接
- */
- public Connection getConn() {
- Connection connection;
- try {
- connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- return connection;
- }
+ private static JDBCHelper INSTANCE;
- /**
- * 获取 ElData 数据内容
- */
- public String getContent() {
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rs = null;
+ /**
+ * 初始化 INSTANCE
+ */
+ public static void init(SQLParserVO sqlParserVO) {
+ try {
+ INSTANCE = new JDBCHelper();
+ Class.forName(sqlParserVO.getDriverClassName());
+ INSTANCE.setSqlParserVO(sqlParserVO);
+ }
+ catch (ClassNotFoundException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
- String chainTableName = sqlParserVO.getChainTableName();
- String elDataField = sqlParserVO.getElDataField();
- String chainNameField = sqlParserVO.getChainNameField();
- String chainApplicationNameField = sqlParserVO.getChainApplicationNameField();
- String applicationName = sqlParserVO.getApplicationName();
+ /**
+ * 获取 INSTANCE
+ */
+ public static JDBCHelper getInstance() {
+ return INSTANCE;
+ }
- if (StrUtil.isBlank(chainTableName)) {
- throw new ELSQLException("You did not define the chainTableName property");
- }
+ /**
+ * 获取链接
+ */
+ public Connection getConn() {
+ Connection connection;
+ try {
+ connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(),
+ sqlParserVO.getPassword());
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ return connection;
+ }
- if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(chainApplicationNameField)) {
- throw new ELSQLException("You did not define the applicationName or chainApplicationNameField property");
- }
+ /**
+ * 获取 ElData 数据内容
+ */
+ public String getContent() {
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
- String sqlCmd = StrUtil.format(SQL_PATTERN, chainNameField, elDataField, chainTableName, chainApplicationNameField);
+ String chainTableName = sqlParserVO.getChainTableName();
+ String elDataField = sqlParserVO.getElDataField();
+ String chainNameField = sqlParserVO.getChainNameField();
+ String chainApplicationNameField = sqlParserVO.getChainApplicationNameField();
+ String applicationName = sqlParserVO.getApplicationName();
- List result = new ArrayList<>();
- 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();
+ if (StrUtil.isBlank(chainTableName)) {
+ throw new ELSQLException("You did not define the chainTableName property");
+ }
- while (rs.next()) {
- String elData = getStringFromResultSet(rs, elDataField);
- String chainName = getStringFromResultSet(rs, chainNameField);
+ if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(chainApplicationNameField)) {
+ throw new ELSQLException("You did not define the applicationName or chainApplicationNameField property");
+ }
- result.add(StrUtil.format(CHAIN_XML_PATTERN, XmlUtil.escape(chainName), elData));
- }
- } catch (Exception e) {
- throw new ELSQLException(e.getMessage());
- } finally {
- // 关闭连接
- close(conn, stmt, rs);
- }
+ String sqlCmd = StrUtil.format(SQL_PATTERN, chainNameField, elDataField, chainTableName,
+ chainApplicationNameField);
- String chainsContent = CollUtil.join(result, StrUtil.EMPTY);
+ List result = new ArrayList<>();
+ 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();
- String nodesContent;
- if (hasScriptData()) {
- nodesContent = getScriptNodes();
- } else {
- nodesContent = StrUtil.EMPTY;
- }
+ while (rs.next()) {
+ String elData = getStringFromResultSet(rs, elDataField);
+ String chainName = getStringFromResultSet(rs, chainNameField);
- return StrUtil.format(XML_PATTERN, nodesContent, chainsContent);
- }
+ result.add(StrUtil.format(CHAIN_XML_PATTERN, XmlUtil.escape(chainName), elData));
+ }
+ }
+ catch (Exception e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ finally {
+ // 关闭连接
+ close(conn, stmt, rs);
+ }
- public String getScriptNodes() {
- List result = new ArrayList<>();
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rs = null;
+ String chainsContent = CollUtil.join(result, StrUtil.EMPTY);
- 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();
- String scriptLanguageField = sqlParserVO.getScriptLanguageField();
+ String nodesContent;
+ if (hasScriptData()) {
+ nodesContent = getScriptNodes();
+ }
+ else {
+ nodesContent = StrUtil.EMPTY;
+ }
- if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(scriptApplicationNameField)) {
- throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
- }
+ return StrUtil.format(XML_PATTERN, nodesContent, chainsContent);
+ }
- String sqlCmd = StrUtil.format(
- SCRIPT_SQL_PATTERN,
- scriptIdField,
- scriptDataField,
- scriptNameField,
- scriptTypeField,
- scriptLanguageField,
- 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();
+ public String getScriptNodes() {
+ List result = new ArrayList<>();
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
- while (rs.next()) {
- String id = getStringFromResultSet(rs, scriptIdField);
- String data = getStringFromResultSet(rs, scriptDataField);
- String name = getStringFromResultSet(rs, scriptNameField);
- String type = getStringFromResultSet(rs, scriptTypeField);
- String language = getStringFromResultSet(rs, scriptLanguageField);
+ 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();
+ String scriptLanguageField = sqlParserVO.getScriptLanguageField();
- NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(type);
- if (Objects.isNull(nodeTypeEnum)) {
- throw new ELSQLException(StrUtil.format("Invalid type value[{}]", type));
- }
+ if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(scriptApplicationNameField)) {
+ throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
+ }
- if (!nodeTypeEnum.isScript()) {
- throw new ELSQLException(StrUtil.format("The type value[{}] is not a script type", type));
- }
+ String sqlCmd = StrUtil.format(SCRIPT_SQL_PATTERN, scriptIdField, scriptDataField, scriptNameField,
+ scriptTypeField, scriptLanguageField, 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();
- if(!ScriptTypeEnum.checkScriptType(language)){
- throw new ELSQLException(StrUtil.format("The language value[{}] is error", language));
- }
+ while (rs.next()) {
+ String id = getStringFromResultSet(rs, scriptIdField);
+ String data = getStringFromResultSet(rs, scriptDataField);
+ String name = getStringFromResultSet(rs, scriptNameField);
+ String type = getStringFromResultSet(rs, scriptTypeField);
+ String language = getStringFromResultSet(rs, scriptLanguageField);
- result.add(StrUtil.format(NODE_ITEM_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name), type, language, 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));
- }
+ NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(type);
+ if (Objects.isNull(nodeTypeEnum)) {
+ throw new ELSQLException(StrUtil.format("Invalid type value[{}]", type));
+ }
- /**
- * 关闭连接
- *
- * @param conn conn
- * @param stmt stmt
- * @param rs rs
- */
- private void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
- // 关闭连接
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
- // 关闭 statement
- if (stmt != null) {
- try {
- stmt.close();
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
- //关闭结果集
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
- }
+ if (!nodeTypeEnum.isScript()) {
+ throw new ELSQLException(StrUtil.format("The type value[{}] is not a script type", type));
+ }
- private boolean hasScriptData() {
- if (StrUtil.isBlank(sqlParserVO.getScriptTableName())) {
- return false;
- }
+ if (!ScriptTypeEnum.checkScriptType(language)) {
+ throw new ELSQLException(StrUtil.format("The language value[{}] is error", language));
+ }
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- String sqlCmd = StrUtil.format(SCRIPT_SQL_CHECK_PATTERN,
- sqlParserVO.getScriptTableName(),
- sqlParserVO.getScriptApplicationNameField());
- try {
- conn = getConn();
- stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- stmt.setFetchSize(1);
- stmt.setString(1, sqlParserVO.getApplicationName());
- rs = stmt.executeQuery();
- return rs.next();
- } catch (Exception e) {
- return false;
- } finally {
- // 关闭连接
- close(conn, stmt, rs);
- }
- }
+ result.add(StrUtil.format(NODE_ITEM_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name), type,
+ language, 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));
+ }
+ /**
+ * 关闭连接
+ * @param conn conn
+ * @param stmt stmt
+ * @param rs rs
+ */
+ private void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
+ // 关闭连接
+ if (conn != null) {
+ try {
+ conn.close();
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
+ // 关闭 statement
+ if (stmt != null) {
+ try {
+ stmt.close();
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
+ // 关闭结果集
+ if (rs != null) {
+ try {
+ rs.close();
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
+ }
- //#region get set method
- private String getStringFromResultSet(ResultSet rs, String field) throws SQLException {
- String data = rs.getString(field);
- if (StrUtil.isBlank(data)) {
- throw new ELSQLException(StrUtil.format("exist {} field value is empty", field));
- }
- return data;
- }
+ private boolean hasScriptData() {
+ if (StrUtil.isBlank(sqlParserVO.getScriptTableName())) {
+ return false;
+ }
- private SQLParserVO getSqlParserVO() {
- return sqlParserVO;
- }
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+ String sqlCmd = StrUtil.format(SCRIPT_SQL_CHECK_PATTERN, sqlParserVO.getScriptTableName(),
+ sqlParserVO.getScriptApplicationNameField());
+ try {
+ conn = getConn();
+ stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+ stmt.setFetchSize(1);
+ stmt.setString(1, sqlParserVO.getApplicationName());
+ rs = stmt.executeQuery();
+ return rs.next();
+ }
+ catch (Exception e) {
+ return false;
+ }
+ finally {
+ // 关闭连接
+ close(conn, stmt, rs);
+ }
+ }
+
+ // #region get set method
+ private String getStringFromResultSet(ResultSet rs, String field) throws SQLException {
+ String data = rs.getString(field);
+ if (StrUtil.isBlank(data)) {
+ throw new ELSQLException(StrUtil.format("exist {} field value is empty", field));
+ }
+ return data;
+ }
+
+ private SQLParserVO getSqlParserVO() {
+ return sqlParserVO;
+ }
+
+ private void setSqlParserVO(SQLParserVO sqlParserVO) {
+ this.sqlParserVO = sqlParserVO;
+ }
- private void setSqlParserVO(SQLParserVO sqlParserVO) {
- this.sqlParserVO = sqlParserVO;
- }
}
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 778cdf5e3..731e88109 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
@@ -215,4 +215,5 @@ public class SQLParserVO {
public void setScriptLanguageField(String scriptLanguageField) {
this.scriptLanguageField = scriptLanguageField;
}
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
index 6b1256ab8..da6296f37 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
@@ -31,73 +31,80 @@ import java.sql.Statement;
@TestPropertySource(value = "classpath:/application-xml.properties")
@SpringBootTest(classes = SQLWithXmlELSpringbootTest.class)
@EnableAutoConfiguration
-@ComponentScan({"com.yomahub.liteflow.test.sql.cmp"})
+@ComponentScan({ "com.yomahub.liteflow.test.sql.cmp" })
public class SQLWithXmlELSpringbootTest extends BaseTest {
- @Resource
- private FlowExecutor flowExecutor;
- @Test
- public void testSQLWithXml() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
- Assert.assertEquals("a==>b==>c", response.getExecuteStepStr());
+ @Resource
+ private FlowExecutor flowExecutor;
- // 修改数据库
- changeData();
+ @Test
+ public void testSQLWithXml() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
+ Assert.assertEquals("a==>b==>c", response.getExecuteStepStr());
- // 重新加载规则
- flowExecutor.reloadRule();
- Assert.assertEquals("a==>c==>b", flowExecutor.execute2Resp("chain1", "arg").getExecuteStepStr());
- }
+ // 修改数据库
+ changeData();
- @Test
- public void testSQLWithScriptXml() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg");
- Assert.assertTrue(response.isSuccess());
- Assert.assertEquals("x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
+ // 重新加载规则
+ flowExecutor.reloadRule();
+ Assert.assertEquals("a==>c==>b", flowExecutor.execute2Resp("chain1", "arg").getExecuteStepStr());
+ }
- // 修改数据库
- changeScriptData();
- // 重新加载规则
- flowExecutor.reloadRule();
- Assert.assertEquals("x0[if 脚本]", flowExecutor.execute2Resp("chain3", "arg").getExecuteStepStr());
- }
+ @Test
+ public void testSQLWithScriptXml() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg");
+ Assert.assertTrue(response.isSuccess());
+ Assert.assertEquals("x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
- @Test
- public void testMultiLanguage1() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg");
- Assert.assertTrue(response.isSuccess());
- Assert.assertEquals("x2[python脚本]==>x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
- }
+ // 修改数据库
+ changeScriptData();
+ // 重新加载规则
+ flowExecutor.reloadRule();
+ Assert.assertEquals("x0[if 脚本]", flowExecutor.execute2Resp("chain3", "arg").getExecuteStepStr());
+ }
- /**
- * 修改数据库数据
- */
- private void changeData() {
- LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
- SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
- Connection connection;
- try {
- connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
- Statement statement = connection.createStatement();
- statement.executeUpdate("UPDATE EL_TABLE SET EL_DATA='THEN(a, c, b);' WHERE chain_name='chain1'");
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
+ @Test
+ public void testMultiLanguage1() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg");
+ Assert.assertTrue(response.isSuccess());
+ Assert.assertEquals("x2[python脚本]==>x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
+ }
+
+ /**
+ * 修改数据库数据
+ */
+ private void changeData() {
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
+ SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
+ Connection connection;
+ try {
+ connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(),
+ sqlParserVO.getPassword());
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("UPDATE EL_TABLE SET EL_DATA='THEN(a, c, b);' WHERE chain_name='chain1'");
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
+
+ /**
+ * 修改数据库数据
+ */
+ private void changeScriptData() {
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
+ SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
+ Connection connection;
+ try {
+ connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(),
+ sqlParserVO.getPassword());
+ Statement statement = connection.createStatement();
+ statement.executeUpdate(
+ "UPDATE SCRIPT_NODE_TABLE SET SCRIPT_NODE_DATA='return false;' WHERE SCRIPT_NODE_ID='x0'");
+ }
+ catch (SQLException e) {
+ throw new ELSQLException(e.getMessage());
+ }
+ }
- /**
- * 修改数据库数据
- */
- private void changeScriptData() {
- LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
- SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
- Connection connection;
- try {
- connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword());
- Statement statement = connection.createStatement();
- statement.executeUpdate("UPDATE SCRIPT_NODE_TABLE SET SCRIPT_NODE_DATA='return false;' WHERE SCRIPT_NODE_ID='x0'");
- } catch (SQLException e) {
- throw new ELSQLException(e.getMessage());
- }
- }
}
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 3/4] =?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;
From ea090fa50ca39cbb897628dea96f0aabef202b1d Mon Sep 17 00:00:00 2001
From: gaibu <1016771049@qq.com>
Date: Tue, 21 Mar 2023 22:14:01 +0800
Subject: [PATCH 4/4] =?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
---
...LWithXmlELMultiLanguageSpringbootTest.java | 34 +++++++++++++++++++
.../test/sql/SQLWithXmlELSpringbootTest.java | 7 ----
2 files changed, 34 insertions(+), 7 deletions(-)
create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELMultiLanguageSpringbootTest.java
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELMultiLanguageSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELMultiLanguageSpringbootTest.java
new file mode 100644
index 000000000..aa862aadb
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELMultiLanguageSpringbootTest.java
@@ -0,0 +1,34 @@
+package com.yomahub.liteflow.test.sql;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/application-xml.properties")
+@SpringBootTest(classes = SQLWithXmlELSpringbootTest.class)
+@EnableAutoConfiguration
+@ComponentScan({ "com.yomahub.liteflow.test.sql.cmp" })
+public class SQLWithXmlELMultiLanguageSpringbootTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testMultiLanguage1() {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg");
+ Assert.assertTrue(response.isSuccess());
+ Assert.assertEquals("x2[python脚本]==>x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
index da6296f37..f000048c9 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java
@@ -63,13 +63,6 @@ public class SQLWithXmlELSpringbootTest extends BaseTest {
Assert.assertEquals("x0[if 脚本]", flowExecutor.execute2Resp("chain3", "arg").getExecuteStepStr());
}
- @Test
- public void testMultiLanguage1() {
- LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg");
- Assert.assertTrue(response.isSuccess());
- Assert.assertEquals("x2[python脚本]==>x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime());
- }
-
/**
* 修改数据库数据
*/