|
@@ -13,6 +13,7 @@ import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
public class MyDbHelper {
|
|
|
|
|
@@ -180,17 +181,18 @@ public class MyDbHelper {
|
|
|
if (!event6Map.containsKey(tableName)) {
|
|
|
event6Map.put(tableName, new ArrayList<>());
|
|
|
}
|
|
|
+ String key = MapTools.jacksonObjToStr(updateParam);
|
|
|
List<Object> tableUniqe = event6Map.get(tableName);
|
|
|
if (isAdd) {
|
|
|
- if (!tableUniqe.contains(updateParam)) {
|
|
|
+ if (!tableUniqe.contains(key)) {
|
|
|
isNew = true;
|
|
|
- tableUniqe.add(updateParam);
|
|
|
+ tableUniqe.add(key);
|
|
|
}
|
|
|
if (tableUniqe.size() > 6000) {
|
|
|
tableUniqe.remove(0);
|
|
|
}
|
|
|
} else {
|
|
|
- tableUniqe.remove(updateParam);
|
|
|
+ tableUniqe.remove(key);
|
|
|
}
|
|
|
return isNew;
|
|
|
}
|
|
@@ -200,7 +202,9 @@ public class MyDbHelper {
|
|
|
for (Map<String, Object> signParam : paramsList) {
|
|
|
String eventStr = "2";
|
|
|
if (updateEvent6Map(tableName, signParam.get("filter"), true)) { //不包含true
|
|
|
- Map<String, Object> selectMap = generalProcess("0", null, "select 1 from " + tableName, null, paramsList, false, 1, 1);
|
|
|
+ Map<String, Object> selectMap = generalProcess("0", null, "select 1 from " + tableName, null, new ArrayList<>() {{
|
|
|
+ add(signParam);
|
|
|
+ }}, false, 1, 1);
|
|
|
if (selectMap.get("code").equals("-1")) {
|
|
|
updateEvent6Map(tableName, signParam.get("filter"), false);
|
|
|
returnList.add(selectMap);
|
|
@@ -246,15 +250,20 @@ public class MyDbHelper {
|
|
|
List<String> allPrimaryKey = new ArrayList<>();//初始化所有主键
|
|
|
if (MapTools.isBlank(tableName)) {//如果SQL不为空
|
|
|
if ("0".equals(event)) {//如果是查询则---应该只有复杂select
|
|
|
- Map<String, Object> tempAllColumn = getAllColumnBySql(sql);
|
|
|
- if (tempAllColumn.get("code").equals("-1")) {
|
|
|
- return tempAllColumn;
|
|
|
- }
|
|
|
- HashMap<String, List<String>> sqlMetaData = (HashMap<String, List<String>>) tempAllColumn.get("returnData");
|
|
|
- allColumn = sqlMetaData.get("allColumn"); // a表 col1 col2 b表 col3 col4
|
|
|
- List<String> tableNameList = sqlMetaData.get("tableList");
|
|
|
- if (Objects.nonNull(tableNameList) && tableNameList.size() == 1) {
|
|
|
- tableName = tableNameList.get(0);
|
|
|
+ if (sql.startsWith("select 1 from")) { //??
|
|
|
+ String[] sqlSplit = sql.trim().toLowerCase().split("\\s+");
|
|
|
+ tableName = sqlSplit[3];
|
|
|
+ } else {
|
|
|
+ Map<String, Object> tempAllColumn = getAllColumnBySql(sql);
|
|
|
+ if (tempAllColumn.get("code").equals("-1")) {
|
|
|
+ return tempAllColumn;
|
|
|
+ }
|
|
|
+ HashMap<String, List<String>> sqlMetaData = (HashMap<String, List<String>>) tempAllColumn.get("returnData");
|
|
|
+ allColumn = sqlMetaData.get("allColumn"); // a表 col1 col2 b表 col3 col4
|
|
|
+ List<String> tableNameList = sqlMetaData.get("tableList");
|
|
|
+ if (Objects.nonNull(tableNameList) && tableNameList.size() == 1) {
|
|
|
+ tableName = tableNameList.get(0);
|
|
|
+ }
|
|
|
}
|
|
|
} else {//否则---此时只有简单的insert update delete,或者根本不存在
|
|
|
tableName = getTableBySql(sql);//从SQL语句中获取表名(使用空格进行分组,循环分组,update后不为空格的第一个就是表名)
|
|
@@ -394,6 +403,9 @@ public class MyDbHelper {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ List<String> tempAllColumn = new ArrayList<>();
|
|
|
+ tempAllColumn.addAll(allColumn);
|
|
|
+ tempAllColumn.addAll(allPrimaryKey);
|
|
|
|
|
|
allColumn.removeAll(allPrimaryKey);
|
|
|
Map<String, Map<String, Object>> sqlMap = new HashMap<>();
|
|
@@ -431,7 +443,10 @@ public class MyDbHelper {
|
|
|
if (tempObj instanceof Map || tempObj instanceof List) {
|
|
|
if (tempObj instanceof Map) {
|
|
|
if (((Map<String, Object>) tempObj).containsKey("left")) {
|
|
|
- filterMapList.add((Map<String, Object>) tempObj);
|
|
|
+ Map<String, Object> tempMap = (Map<String, Object>) tempObj;
|
|
|
+ if (tempAllColumn.contains(tempMap.get("column").toString())) {
|
|
|
+ filterMapList.add(tempMap);
|
|
|
+ }
|
|
|
} else {
|
|
|
authoParams((Map<String, Object>) tempObj, filterMapList, allColumn, allPrimaryKey);
|
|
|
}
|
|
@@ -441,6 +456,7 @@ public class MyDbHelper {
|
|
|
if (firstObj instanceof Map<?, ?>) {
|
|
|
if (((Map<?, ?>) firstObj).containsKey("left")) {
|
|
|
filterMapList = (List<Map<String, Object>>) tempObj;
|
|
|
+ filterMapList = filterMapList.stream().filter(map -> tempAllColumn.contains(map.get("column").toString())).collect(Collectors.toList());
|
|
|
} else {
|
|
|
authoParams((Map<String, Object>) firstObj, filterMapList, allColumn, allPrimaryKey);
|
|
|
}
|