diff --git a/engine/src/main/java/com/arcadedb/query/sql/parser/MethodCall.java b/engine/src/main/java/com/arcadedb/query/sql/parser/MethodCall.java index 1a2d83832a..a8aadcab0b 100755 --- a/engine/src/main/java/com/arcadedb/query/sql/parser/MethodCall.java +++ b/engine/src/main/java/com/arcadedb/query/sql/parser/MethodCall.java @@ -97,6 +97,8 @@ private Object execute(final Object targetObjects, final CommandContext context, paramValues.add(expr.execute(identifiable, context)); } else if (targetObjects instanceof Result result) { paramValues.add(expr.execute(result, context)); + } else if (val == null) { + paramValues.add(expr.execute((Identifiable) null, context)); } else { throw new CommandExecutionException("Invalid value for $current: " + val); } diff --git a/engine/src/test/java/com/arcadedb/function/sql/sql/SQLFunctionsTest.java b/engine/src/test/java/com/arcadedb/function/sql/sql/SQLFunctionsTest.java index b7f33e4923..b42e608e1d 100755 --- a/engine/src/test/java/com/arcadedb/function/sql/sql/SQLFunctionsTest.java +++ b/engine/src/test/java/com/arcadedb/function/sql/sql/SQLFunctionsTest.java @@ -608,6 +608,39 @@ void querySplit() { } } + @Test + void queryUnionAllWithLetAndStringMethods() { + database.getSchema().createDocumentType("NER"); + database.getSchema().createDocumentType("THEME"); + database.transaction(() -> { + database.newDocument("NER").set("identity", "Hello World").save(); + database.newDocument("NER").set("identity", "Hello\nWorld").save(); + database.newDocument("THEME").set("identity", "Hello World Theme").save(); + }); + + final Map params = new HashMap<>(); + params.put("keyWordIdentifier_0", "Hello"); + params.put("keyWordIdentifier_1", "World"); + + final ResultSet result = database.query("sql", + "SELECT expand($c) LET " + + "$a = (SELECT identity, @rid as id FROM NER " + + "WHERE identity.replace('\\n', ' ').replace('\\t', ' ').replace(' ', ' ') ILIKE ('%' + :keyWordIdentifier_0 + '%') " + + "AND identity.replace('\\n', ' ').replace('\\t', ' ').replace(' ', ' ') ILIKE ('%' + :keyWordIdentifier_1 + '%')), " + + "$b = (SELECT identity, @rid as id FROM THEME " + + "WHERE identity.replace('\\n', ' ').replace('\\t', ' ').replace(' ', ' ') ILIKE ('%' + :keyWordIdentifier_0 + '%') " + + "AND identity.replace('\\n', ' ').replace('\\t', ' ').replace(' ', ' ') ILIKE ('%' + :keyWordIdentifier_1 + '%')), " + + "$c = UNIONALL($a, $b)", + params); + + final List results = result.stream().collect(Collectors.toList()); + assertThat(results).hasSize(3); + for (final Result r : results) { + assertThat(r.hasProperty("identity")).isTrue(); + assertThat(r.hasProperty("id")).isTrue(); + } + } + @Test void CheckAllFunctions() { final DefaultSQLFunctionFactory fFactory = ((SQLQueryEngine) database.getQueryEngine("sql")).getFunctionFactory();