From f6348318d0511d54babc870d5bd7dd9e4ea00313 Mon Sep 17 00:00:00 2001 From: lrj <386002446@qq.com> Date: 星期五, 25 十月 2024 09:48:20 +0800 Subject: [PATCH] 修改参数传入 ,支持 canal --- src/main/java/com/ycl/scheme/SqlQueryBuilder.java | 58 ++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/ycl/scheme/SqlQueryBuilder.java b/src/main/java/com/ycl/scheme/SqlQueryBuilder.java index 88dbaec..139c92b 100644 --- a/src/main/java/com/ycl/scheme/SqlQueryBuilder.java +++ b/src/main/java/com/ycl/scheme/SqlQueryBuilder.java @@ -4,19 +4,15 @@ import com.ycl.scheme.entity.BlockCode; import com.ycl.scheme.entity.Keyword; import com.ycl.scheme.entity.KeywordType; -import com.ycl.scheme.service.SchemeService; +import com.ycl.scheme.entity.TriggerType; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; public class SqlQueryBuilder extends AbstractBlockCodeBuilder { - private static final String[] splits = {" ", "/", "\\", "(", ")", System.lineSeparator(), ":", ";", ",", "."}; private BlockText blockText; @@ -39,16 +35,20 @@ private Integer idx ; - - private List<Parameter> pars=new ArrayList<>(); + private TriggerType triggerType; - public SqlQueryBuilder(BlockText blockText, List<Keyword> keywords, Integer idx) { + private Map<String,Parameter> parameters = new HashMap<>(); + + + public SqlQueryBuilder(BlockText blockText, List<Keyword> keywords, Integer idx, TriggerType triggerType) { this.blockText = blockText; this.keywords = keywords; this.idx= idx; + + this.triggerType = triggerType; } @@ -59,14 +59,17 @@ throw new RuntimeException("娌℃湁鎵惧埌鏁版嵁婧�:" + this.blockText.getSource().trim()); } - this.scanExpression(); + this.scanWhere(); + if(this.triggerType== TriggerType.CANAL){ + this.addWhereRowSql(); + } this.scanResult(); this.buildSql(); BlockCode bc = this.buildCode(); return bc; } - private void scanExpression() { + private void scanWhere() { String inputExpression = this.blockText.getExpression(); int idx = 0; @@ -105,6 +108,10 @@ } + private void addWhereRowSql(){ + this.where += this.tableKeyword.getTableKey() + "= :rowId"; + } + private boolean sqlTest(){ //娴嬭瘯sql鎵ц鏄惁姝g‘ return true; @@ -120,7 +127,6 @@ if(ss.length < 2){ throw new RuntimeException("缁撴灉琛ㄨ揪寮忎笉姝g‘"); } - String fields = ss[0]; @@ -165,6 +171,7 @@ private void buildSql(){ this.sql = "select " + this.select + " from " + this.tableKeyword.getTable() + " where " + this.where; + } private BlockCode buildCode(){ @@ -173,16 +180,15 @@ StringBuilder csb = new StringBuilder(); String sql = "\"" +this.sql + "\""; csb.append(" def " + funcName + "(){\n"); - csb.append(" List<Object> pars = new ArrayList<>();\n"); + csb.append(" Map<String,Object> pars = new HashMap<>();\n"); csb.append(" def sql= " +sql + ";\n"); - for(int i=0;i<this.pars.size();i++){ - String pname= "p_" + i; - Parameter p = this.pars.get(i); - csb.append(" def " + pname + " = " + p.getScript()+";\n"); - csb.append(" pars.add("+pname + ");\n"); + this.parameters.forEach((k,v)->{ + String pname= "p_" + k; + csb.append(" def " + pname + " = " + v.getScript()+";\n"); + csb.append(" pars.put('" +v.getName() +"'," + pname +");\n"); - } + }); csb.append(" def rs = service.execQuery(sql,pars);\n"); csb.append(" if(rs " + this.compareScript + "){\n"); csb.append(" return true;\n"); @@ -345,7 +351,6 @@ private MatchResult matchTimeRange(String skw, Keyword tkw,int idx){ - String sub = this.blockText.getExpression().substring(idx); String regex = tkw.getRegex(); @@ -372,18 +377,21 @@ String d = vm.group(0); day = Integer.valueOf(d); - rs.setOutput(tableKeyword.getTableTimeField() + " between ? and ?"); + rs.setOutput(tableKeyword.getTableTimeField() + " between :beginTime and :endTime"); rs.setInput(skw); rs.setIdx(idx + e); //鏈夊嚑涓棶鍙凤紝灏辫鏈夊嚑涓搴旂殑鍙傛暟 Parameter p1 = new Parameter(); + p1.setName("beginTime"); p1.setScript("LocalDateTime.now()"); + p1.setTypeName("LocalDateTime"); Parameter p2 = new Parameter(); + p2.setName("endTime"); p2.setScript("LocalDateTime.now().minusDays("+day+ ")"); - - pars.add(p1); - pars.add(p2); + p2.setTypeName("LocalDateTime"); + parameters.put(p1.getName(),p1); + parameters.put(p2.getName(),p2); }else{ throw new RuntimeException("娌℃湁鍦ㄦ棩鏈熻寖鍥翠腑鎵惧埌鎸囧畾澶╂暟"); @@ -395,4 +403,6 @@ return rs; } + + } -- Gitblit v1.8.0