diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java index 6cc4015db..87281e206 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java @@ -6,15 +6,16 @@ package com.yomahub.liteflow.parser.constant; * @author tangkc * @author houxinyu * @author Bryan.Zhang + * @author jay li * @since 2.11.1 */ public class SqlReadConstant { - public static final String SQL_PATTERN = "SELECT * FROM {} WHERE {}=?"; + public static final String SQL_PATTERN = "SELECT * FROM {} WHERE {}='{}'"; public static final String SCRIPT_SQL_CHECK_PATTERN = "SELECT 1 FROM {} "; - public static final String SCRIPT_SQL_PATTERN = "SELECT * FROM {} WHERE {}=?"; + public static final String SCRIPT_SQL_PATTERN = "SELECT * FROM {} WHERE {}='{}'"; public static final String CHAIN_XML_PATTERN = ""; diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/polling/AbstractSqlReadPollTask.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/polling/AbstractSqlReadPollTask.java index 715d75e6f..2151ecdc9 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/polling/AbstractSqlReadPollTask.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/polling/AbstractSqlReadPollTask.java @@ -3,6 +3,7 @@ package com.yomahub.liteflow.parser.sql.polling; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; +import com.yomahub.liteflow.parser.constant.ReadType; import com.yomahub.liteflow.parser.sql.exception.ELSQLException; import com.yomahub.liteflow.parser.sql.read.SqlRead; @@ -11,7 +12,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; /** diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java index 599815897..01cb01148 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java @@ -3,6 +3,7 @@ package com.yomahub.liteflow.parser.sql.read; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLoggerManager; +import com.yomahub.liteflow.parser.constant.ReadType; import com.yomahub.liteflow.parser.constant.SqlReadConstant; import com.yomahub.liteflow.parser.sql.exception.ELSQLException; import com.yomahub.liteflow.parser.sql.util.LiteFlowJdbcUtil; @@ -10,9 +11,7 @@ import com.yomahub.liteflow.parser.sql.vo.SQLParserVO; import java.sql.*; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * sql 读取抽象类,维护公共方法 @@ -51,7 +50,6 @@ public abstract class AbstractSqlRead implements SqlRead { stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); // 设置游标拉取数量 stmt.setFetchSize(SqlReadConstant.FETCH_SIZE_MAX); - stmt.setString(1, config.getApplicationName()); rs = stmt.executeQuery(); diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/SqlRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/SqlRead.java index e6c8c96f9..b56b31a30 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/SqlRead.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/SqlRead.java @@ -3,7 +3,6 @@ package com.yomahub.liteflow.parser.sql.read; import com.yomahub.liteflow.parser.constant.ReadType; import java.util.List; -import java.util.Map; /** * sql 读取接口 diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java index b7ce9ef97..d4b6d7824 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java @@ -16,6 +16,7 @@ import java.sql.SQLException; * * @author tangkc * @author houxinyu + * @author jay li * @since 2.11.1 */ public class ChainRead extends AbstractSqlRead { @@ -29,10 +30,10 @@ public class ChainRead extends AbstractSqlRead { ChainVO chainVO = new ChainVO(); chainVO.setChainId(getStringFromRsWithCheck(rs, super.config.getChainNameField())); chainVO.setBody(getStringFromRsWithCheck(rs, super.config.getElDataField())); - if (StrUtil.isNotBlank(super.config.getNamespaceField())){ + if (StrUtil.isNotBlank(super.config.getNamespaceField())) { chainVO.setNamespace(getStringFromRs(rs, super.config.getNamespaceField())); } - if (StrUtil.isNotBlank(super.config.getRouteField())){ + if (StrUtil.isNotBlank(super.config.getRouteField())) { chainVO.setRoute(getStringFromRs(rs, super.config.getRouteField())); } return chainVO; @@ -54,10 +55,15 @@ public class ChainRead extends AbstractSqlRead { @Override public String buildQuerySql() { + if (StrUtil.isNotBlank(super.config.getChainCustomSql())) { + return super.config.getChainCustomSql(); + } + String chainTableName = super.config.getChainTableName(); String chainApplicationNameField = super.config.getChainApplicationNameField(); + String applicationName = super.config.getApplicationName(); - return StrUtil.format(SqlReadConstant.SQL_PATTERN, chainTableName, chainApplicationNameField); + return StrUtil.format(SqlReadConstant.SQL_PATTERN, chainTableName, chainApplicationNameField, applicationName); } @Override @@ -68,19 +74,19 @@ public class ChainRead extends AbstractSqlRead { String chainApplicationNameField = super.config.getChainApplicationNameField(); String applicationName = super.config.getApplicationName(); - if (StrUtil.isBlank(chainTableName)){ + if (StrUtil.isBlank(chainTableName)) { throw new ELSQLException("You did not define the chainTableName property"); } - if (StrUtil.isBlank(elDataField)){ + if (StrUtil.isBlank(elDataField)) { throw new ELSQLException("You did not define the elDataField property"); } - if (StrUtil.isBlank(chainNameField)){ + if (StrUtil.isBlank(chainNameField)) { throw new ELSQLException("You did not define the chainNameField property"); } - if (StrUtil.isBlank(chainApplicationNameField)){ + if (StrUtil.isBlank(chainApplicationNameField)) { throw new ELSQLException("You did not define the chainApplicationNameField property"); } - if (StrUtil.isBlank(applicationName)){ + if (StrUtil.isBlank(applicationName)) { throw new ELSQLException("You did not define the applicationName property"); } } diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java index fa10a616c..c8c38c599 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java @@ -1,9 +1,6 @@ package com.yomahub.liteflow.parser.sql.read.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.yomahub.liteflow.enums.NodeTypeEnum; -import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.parser.constant.ReadType; import com.yomahub.liteflow.parser.constant.SqlReadConstant; import com.yomahub.liteflow.parser.sql.exception.ELSQLException; @@ -11,18 +8,19 @@ import com.yomahub.liteflow.parser.sql.read.AbstractSqlRead; import com.yomahub.liteflow.parser.sql.read.vo.ScriptVO; import com.yomahub.liteflow.parser.sql.util.LiteFlowJdbcUtil; import com.yomahub.liteflow.parser.sql.vo.SQLParserVO; +import org.apache.commons.lang.StringUtils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.List; -import java.util.Objects; + /** * 脚本读取 * * @author tangkc * @author houxinyu + * @author jay li * @since 2.11.1 */ public class ScriptRead extends AbstractSqlRead { @@ -58,13 +56,18 @@ public class ScriptRead extends AbstractSqlRead { @Override public String buildQuerySql() { + if (StringUtils.isNotBlank(super.config.getScriptCustomSql())) { + return super.config.getScriptCustomSql(); + } + String scriptTableName = super.config.getScriptTableName(); String scriptApplicationNameField = super.config.getScriptApplicationNameField(); - + String applicationName = super.config.getApplicationName(); return StrUtil.format( SqlReadConstant.SCRIPT_SQL_PATTERN, scriptTableName, - scriptApplicationNameField); + scriptApplicationNameField, + applicationName); } @Override 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 7dd44dc95..7d9a66633 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 @@ -9,10 +9,8 @@ import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLoggerManager; import com.yomahub.liteflow.parser.constant.ReadType; -import com.yomahub.liteflow.parser.helper.NodeConvertHelper; import com.yomahub.liteflow.parser.sql.exception.ELSQLException; import com.yomahub.liteflow.parser.sql.polling.SqlReadPollTask; -import com.yomahub.liteflow.parser.sql.read.AbstractSqlRead; import com.yomahub.liteflow.parser.sql.read.SqlRead; import com.yomahub.liteflow.parser.sql.read.SqlReadFactory; import com.yomahub.liteflow.parser.sql.read.vo.ChainVO; @@ -25,8 +23,6 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; -import java.util.function.Predicate; import static com.yomahub.liteflow.parser.constant.SqlReadConstant.*; 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 c654df2a1..932a60be3 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 @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; * * @author tangkc * @author Bryan.Zhang + * @author jay li * @since 2.9.0 */ public class SQLParserVO { @@ -71,6 +72,16 @@ public class SQLParserVO { */ private String chainEnableField; + /** + * chain 自定义 sql + */ + private String chainCustomSql; + + /** + * 脚本 自定义 sql + */ + private String scriptCustomSql; + /** * 脚本 node 表名 */ @@ -336,4 +347,20 @@ public class SQLParserVO { public void setNamespaceField(String namespaceField) { this.namespaceField = namespaceField; } + + public String getChainCustomSql() { + return chainCustomSql; + } + + public void setChainCustomSql(String chainCustomSql) { + this.chainCustomSql = chainCustomSql; + } + + public String getScriptCustomSql() { + return scriptCustomSql; + } + + public void setScriptCustomSql(String scriptCustomSql) { + this.scriptCustomSql = scriptCustomSql; + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffix2SpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffix2SpringbootTest.java new file mode 100644 index 000000000..7a11c4e2e --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffix2SpringbootTest.java @@ -0,0 +1,38 @@ +package com.yomahub.liteflow.test.withSuffix; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +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.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; + + +/** + * @author jay li + * @since 2.12.0 + */ +@ExtendWith(SpringExtension.class) +@TestPropertySource(value = "classpath:/application-data-source-with-suffix2-xml.properties") +@SpringBootTest(classes = SQLWithXmlELWithSuffix2SpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.sql.cmp"}) +public class SQLWithXmlELWithSuffix2SpringbootTest extends BaseTest { + + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testSQLWithXmlChain() { + LiteflowResponse response = flowExecutor.execute2Resp("r_chain4", "arg"); + Assertions.assertEquals("c==>b==>c", response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffixSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffixSpringbootTest.java new file mode 100644 index 000000000..add48ccbd --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffixSpringbootTest.java @@ -0,0 +1,37 @@ +package com.yomahub.liteflow.test.withSuffix; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +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.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; +import javax.sql.DataSource; + +/** + * @author jay li + * @since 2.12.0 + */ +@ExtendWith(SpringExtension.class) +@TestPropertySource(value = "classpath:/application-data-source-with-suffix-xml.properties") +@SpringBootTest(classes = SQLWithXmlELWithSuffixSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.sql.cmp"}) +public class SQLWithXmlELWithSuffixSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testSQLWithXmlChain1() { + LiteflowResponse response = flowExecutor.execute2Resp("r_chain3", "arg"); + Assertions.assertEquals("a==>b==>c", response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix-xml.properties new file mode 100644 index 000000000..d425b9a10 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix-xml.properties @@ -0,0 +1,22 @@ +liteflow.rule-source-ext-data={\ + "applicationName":"demo",\ + "chainTableName":"EL_TABLE",\ + "chainApplicationNameField":"application_name",\ + "chainNameField":"chain_name",\ + "scriptCustomSql":" SELECT * FROM script_node_table WHERE application_name = 'demo' ",\ + "elDataField":"EL_DATA",\ + "scriptTableName":"script_node_table",\ + "scriptApplicationNameField":"application_name",\ + "scriptIdField":"script_node_id",\ + "scriptNameField":"script_node_name",\ + "scriptDataField":"script_node_data",\ + "scriptLanguageField":"script_language",\ + "scriptTypeField":"script_node_type"\ + } +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:test_db;MODE=MySQL +spring.datasource.username=root +spring.datasource.password=123456 +spring.datasource.schema=classpath:/sql/schema.sql +spring.datasource.data=classpath:/sql/data.sql +spring.datasource.platform=h2 \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix2-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix2-xml.properties new file mode 100644 index 000000000..2898f24e1 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix2-xml.properties @@ -0,0 +1,22 @@ +liteflow.rule-source-ext-data={\ + "applicationName":"demo",\ + "chainTableName":"EL_TABLE",\ + "chainApplicationNameField":"application_name",\ + "chainNameField":"chain_name",\ + "chainCustomSql":" SELECT APPLICATION_NAME,CHAIN_NAME,'THEN(c,b,c);' as EL_DATA,CUSTOM_FILTER_TYPE FROM EL_TABLE WHERE custom_filter_type = 'biz2' ",\ + "elDataField":"EL_DATA",\ + "scriptTableName":"script_node_table",\ + "scriptApplicationNameField":"application_name",\ + "scriptIdField":"script_node_id",\ + "scriptNameField":"script_node_name",\ + "scriptDataField":"script_node_data",\ + "scriptLanguageField":"script_language",\ + "scriptTypeField":"script_node_type"\ + } +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:test_db;MODE=MySQL +spring.datasource.username=root +spring.datasource.password=123456 +spring.datasource.schema=classpath:/sql/schema.sql +spring.datasource.data=classpath:/sql/data.sql +spring.datasource.platform=h2 \ No newline at end of file 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 e885458bf..1da2fc523 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 @@ -7,6 +7,8 @@ INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','