Browse Source

#{list}自动展开

mxd 5 năm trước cách đây
mục cha
commit
3cb82f2970

+ 16 - 2
src/main/java/org/ssssssss/script/functions/DatabaseQuery.java

@@ -236,8 +236,22 @@ public class DatabaseQuery extends HashMap<String, DatabaseQuery> {
 			});
 			this.sql = concatTokenParser.parse(this.sql, text -> String.valueOf(Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context)));
 			this.sql = replaceTokenParser.parse(this.sql, text -> {
-				parameters.add(Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context));
-				return "?";
+				Object value = Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context);
+				try {
+					List<Object> objects = StreamExtension.arrayLikeToList(value);
+					StringBuilder sb = new StringBuilder();
+					for (int i = 0, size = objects.size(); i < size; i++) {
+						sb.append("?");
+						if (i + 1 < size) {
+							sb.append(",");
+						}
+						parameters.add(objects.get(i));
+					}
+					return sb.toString();
+				} catch (Exception e) {
+					parameters.add(value);
+					return "?";
+				}
 			});
 		}
 

+ 14 - 7
src/main/java/org/ssssssss/script/functions/StreamExtension.java

@@ -22,8 +22,15 @@ public class StreamExtension {
         return null;
     }
 
-    private static List<Object> arrayLikeToList(Object arrayLike) {
-        if (arrayLike instanceof Collection) {
+    public static List<Object> arrayLikeToList(Object arrayLike) {
+        if (arrayLike != null && arrayLike.getClass().isArray()) {
+            int len = Array.getLength(arrayLike);
+            List<Object> value = new ArrayList<>();
+            for (int i = 0; i < len; i++) {
+                value.add(Array.get(arrayLike, i));
+            }
+            return value;
+        } else if (arrayLike instanceof Collection) {
             return new ArrayList<>((Collection<?>) arrayLike);
         } else if (arrayLike.getClass().isArray()) {
             List<Object> list = new ArrayList<>(Array.getLength(arrayLike));
@@ -44,19 +51,19 @@ public class StreamExtension {
     public static Object map(Object target, Function<Object[], Object> function) {
         List<Object> objects = arrayLikeToList(target);
         List<Object> results = new ArrayList<>(objects.size());
-        for (int i = 0,len = objects.size(); i < len; i++) {
+        for (int i = 0, len = objects.size(); i < len; i++) {
             Object object = objects.get(i);
-            results.add(function.apply(new Object[]{object,i,len}));
+            results.add(function.apply(new Object[]{object, i, len}));
         }
         return toOriginType(target, results);
     }
 
-    public static Object filter(Object target, Function<Object[], Object> function){
+    public static Object filter(Object target, Function<Object[], Object> function) {
         List<Object> objects = arrayLikeToList(target);
         List<Object> results = new ArrayList<>(objects.size());
-        for (int i = 0,len = objects.size(); i < len; i++) {
+        for (int i = 0, len = objects.size(); i < len; i++) {
             Object object = objects.get(i);
-            if(Objects.equals(true,function.apply(new Object[]{object,i,len}))){
+            if (Objects.equals(true, function.apply(new Object[]{object, i, len}))) {
                 results.add(object);
             }
         }