From a6470c4de7867f5478197c390c158ad730ff5bae Mon Sep 17 00:00:00 2001
From: lrj <386002446@qq.com>
Date: 星期五, 25 十月 2024 14:51:21 +0800
Subject: [PATCH] bug
---
src/main/java/com/ycl/scheme/SqlQueryBuilder.java | 66 +++++++++++++++++---------------
1 files changed, 35 insertions(+), 31 deletions(-)
diff --git a/src/main/java/com/ycl/scheme/SqlQueryBuilder.java b/src/main/java/com/ycl/scheme/SqlQueryBuilder.java
index 88dbaec..928bc38 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,8 +127,6 @@
if(ss.length < 2){
throw new RuntimeException("缁撴灉琛ㄨ揪寮忎笉姝g‘");
}
-
-
String fields = ss[0];
String compareStr = resultText.substring(fields.length());
@@ -144,9 +149,10 @@
res +=c;
}
idx++;
- if(kw!=null && !kw.getKeywordType().equals(KeywordType.FUNCTION) && kw.getCode().equals("count") && !c.equals("(")){
- res+=c;
+ if(kw==null || !kw.getKeywordType().equals(KeywordType.FUNCTION) || kw.getFunctionParameterNullable()==null || !kw.getFunctionParameterNullable()){
+ res +=c;
}
+
skw="";
}else{
skw += c;
@@ -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 = super.getSqlParameters();\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");
@@ -279,11 +285,7 @@
}
throw new RuntimeException("璇诲彇瀛楁鍚嶇О鏃跺彂鐢熼敊璇�");
-
}
-
-
-
private MatchResult matchLike(String skw,Keyword lkw,int idx){
String sub = blockText.getExpression().substring(idx);
@@ -345,7 +347,6 @@
private MatchResult matchTimeRange(String skw, Keyword tkw,int idx){
-
String sub = this.blockText.getExpression().substring(idx);
String regex = tkw.getRegex();
@@ -372,18 +373,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("endTime");
p1.setScript("LocalDateTime.now()");
+ p1.setTypeName("LocalDateTime");
Parameter p2 = new Parameter();
+ p2.setName("beginTime");
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("娌℃湁鍦ㄦ棩鏈熻寖鍥翠腑鎵惧埌鎸囧畾澶╂暟");
--
Gitblit v1.8.0