Commit cea2b80b authored by wenmo's avatar wenmo

字段血缘 fixbug

parent 06773f6b
...@@ -109,15 +109,23 @@ public class MapParseUtils { ...@@ -109,15 +109,23 @@ public class MapParseUtils {
public static List<String> getSelectList(String inStr) { public static List<String> getSelectList(String inStr) {
List<String> selects = new ArrayList<>(); List<String> selects = new ArrayList<>();
int startIndex = inStr.indexOf("=[") + 2;
if (inStr == null || inStr.isEmpty()) { if (inStr == null || inStr.isEmpty()) {
return selects; return selects;
} }
int startIndex = -1;
// lineage only need select or field
if (inStr.contains("select=[")) {
startIndex = inStr.indexOf("select=[") + 8;
} else if (inStr.contains("field=[")) {
startIndex = inStr.indexOf("field=[") + 7;
}
if (startIndex < 0) {
return selects;
}
Deque<Integer> stack = new LinkedList<>(); Deque<Integer> stack = new LinkedList<>();
for (int i = 0; i < inStr.length(); i++) { for (int i = startIndex; i < inStr.length(); i++) {
if (inStr.charAt(i) == ']' && stack.size() == 0) { if (inStr.charAt(i) == ']' && stack.size() == 0) {
selects.add(inStr.substring(startIndex, i)); selects.add(inStr.substring(startIndex, i));
startIndex = i + 1;
return selects; return selects;
} }
if (inStr.charAt(i) == ',' && stack.size() == 0) { if (inStr.charAt(i) == ',' && stack.size() == 0) {
...@@ -138,12 +146,12 @@ public class MapParseUtils { ...@@ -138,12 +146,12 @@ public class MapParseUtils {
} }
public static boolean hasField(String fragement, String field) { public static boolean hasField(String fragement, String field) {
if(field.startsWith("$")){ if (field.startsWith("$")) {
field = field.substring(1,field.length()); field = field.substring(1, field.length());
} }
String sign = "([^a-zA-Z0-9_]?)"; String sign = "([^a-zA-Z0-9_])";
Pattern p = Pattern.compile(sign + field + sign); Pattern p = Pattern.compile(sign + field + sign);
Matcher m = p.matcher(fragement); Matcher m = p.matcher(" " + fragement + " ");
while (m.find()) { while (m.find()) {
return true; return true;
} }
...@@ -152,11 +160,11 @@ public class MapParseUtils { ...@@ -152,11 +160,11 @@ public class MapParseUtils {
public static String replaceField(String operation, String field, String fragement) { public static String replaceField(String operation, String field, String fragement) {
String newOperation = operation; String newOperation = operation;
String sign = "([^a-zA-Z0-9_]?)"; String sign = "([^a-zA-Z0-9_])";
Pattern p = Pattern.compile(sign + field + sign); Pattern p = Pattern.compile(sign + field + sign);
Matcher m = p.matcher(operation); Matcher m = p.matcher(operation);
while (m.find()) { while (m.find()) {
newOperation = newOperation.substring(0,m.start(1)+1)+ fragement + newOperation.substring(m.end(1)+1,newOperation.length()); newOperation = newOperation.substring(0, m.start(1) + 1) + fragement + newOperation.substring(m.end(1) + 1, newOperation.length());
} }
return newOperation; return newOperation;
} }
...@@ -235,7 +243,7 @@ public class MapParseUtils { ...@@ -235,7 +243,7 @@ public class MapParseUtils {
*/ */
public static Map parseForSelect(String inStr) { public static Map parseForSelect(String inStr) {
Map map = new HashMap(); Map map = new HashMap();
map.put(getMapKey(inStr), getSelectList(inStr)); map.put(getMapKeyOnlySelectOrField(inStr), getSelectList(inStr));
return map; return map;
} }
...@@ -271,6 +279,18 @@ public class MapParseUtils { ...@@ -271,6 +279,18 @@ public class MapParseUtils {
return splitStr.substring(0, splitStr.indexOf("=[")).replace(" ", ""); return splitStr.substring(0, splitStr.indexOf("=[")).replace(" ", "");
} }
public static String getMapKeyOnlySelectOrField(String splitStr) {
if (splitStr == null || splitStr.indexOf("=[") == -1) {
return "";
}
if (splitStr.contains("select=[")) {
return "select";
} else if (splitStr.contains("field=[")) {
return "field";
}
return "";
}
/** /**
* 获取主键对应的集合值 例子where=[(sid = sid0)] []中内容为集合内容 * 获取主键对应的集合值 例子where=[(sid = sid0)] []中内容为集合内容
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment