afs commented on code in PR #2925:
URL: https://github.com/apache/jena/pull/2925#discussion_r1918581831
##########
jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterLateral.java:
##########
@@ -292,17 +295,33 @@ public Op transform(OpTable opTable) {
// By the assignment restriction, the binding only needs to be
added to each row of the table.
Table table = opTable.getTable();
// Table vars.
- List<Var> vars = new ArrayList<>(table.getVars());
- binding.vars().forEachRemaining(vars::add);
- TableN table2 = new TableN(vars);
+ List<Var> tableVars = table.getVars();
+ List<Var> vars = new ArrayList<>(tableVars);
+
+ // Track variables that appear both in the table and the binding.
+ List<Var> commonVars = new ArrayList<>();
+
+ // Index variables in a set if there are more than a few of them.
+ Collection<Var> tableVarsIndex = tableVars.size() > 4 ? new
HashSet<>(tableVars) : tableVars;
+ binding.vars().forEachRemaining(v -> {
+ if (tableVarsIndex.contains(v)) {
+ commonVars.add(v);
+ } else {
+ vars.add(v);
+ }
+ });
+
+ List<Binding> bindings = new ArrayList<>(table.size());
BindingBuilder builder = BindingFactory.builder();
table.iterator(null).forEachRemaining(row->{
- builder.reset();
- builder.addAll(row);
- builder.addAll(binding);
- table2.addBinding(builder.build());
+ if (Algebra.compatible(row, binding, commonVars.iterator())) {
Review Comment:
> Hm, depending on the viewpoint it is the effective query _after_
substitution,
My bad - I was thinking about `GROUP BY`.
For `ORDER BY`, the query is illegal by the assignment restriction.
> To me it looks like it would only retain bindings where ?o = 123.
That would turn `BIND` into a filter. (ARQ's extension `LET` does that.)
We have to have a restriction of some kind. The SEP-0007 design makes it a
compile-time condition (test once per query).
In general, some system have optimizations that on the static analysis of
the query. Making the RHS of a LATERAL have runtime variance would interfere.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]