/** * Applies the optimization to a given subquery root (wrapper around * the main entry point). */ private IBindingSet[] optimize( final StaticAnalysis sa, final SubqueryRoot subqueryRoot, final StaticBindingInfo staticBindingInfo, final VariableUsageInfo ancestorVarUsageInfo, final Set<InlineTasks> inlineTasks) { final IBindingSet[] staticBindings = optimize( sa, subqueryRoot, staticBindingInfo, ancestorVarUsageInfo, inlineTasks, subqueryRoot.getBindingsClause()); // record static bindings in subquery VALUES clause, if any final LinkedHashSet<IVariable<?>> bcVars = new LinkedHashSet<IVariable<?>>(); bcVars.addAll(SolutionSetStatserator.get(staticBindings).getUsedVars()); final List<IBindingSet> bcBindings = Arrays.asList(staticBindings); if (!bcVars.isEmpty()) { final BindingsClause bc = new BindingsClause(bcVars,bcBindings); subqueryRoot.setBindingsClause(bc); } return staticBindings; }
/** * Test interface implementation for assignment nodes. */ @SuppressWarnings("serial") public void testBindingsClause() { final LinkedHashSet<IVariable<?>> declaredVars = new LinkedHashSet<IVariable<?>>() {{ add(Var.var("x")); add(Var.var("y")); }}; final List<IBindingSet> bindingSets = new ArrayList<IBindingSet>() {{ add(new ListBindingSet() {{ set(Var.var("x"), new Constant<>(TermId.mockIV(VTE.URI))); set(Var.var("y"), new Constant<>(TermId.mockIV(VTE.URI))); }}); }}; final BindingsClause bc = new BindingsClause(declaredVars, bindingSets); // dummy sa object final StaticAnalysis sa = new StaticAnalysis(new QueryRoot(QueryType.SELECT), null); // bindings clauses requires no variables to be bound before, as they // introduce constant values only; nothing is forbidden and nothing // desired here... assertEquals(new HashSet<IVariable<?>>(), bc.getRequiredBound(sa)); assertEquals(new HashSet<IVariable<?>>(), bc.getDesiredBound(sa)); }
@Override public String toString(final int indent) { final LinkedHashSet<IVariable<?>> declaredVars = getDeclaredVariables(); final List<IBindingSet> bindingSets = getBindingSets(); final String s = indent(indent); final String s1 = indent(indent + 1);
/** * Return the #of declared variables. */ public final int getDeclaredVariableCount() { return getDeclaredVariables().size(); }
/** * Return the #of binding sets. */ public final int getBindingSetsCount() { final List<IBindingSet> bindingSets = getBindingSets(); if (bindingSets == null) return 0; return bindingSets.size(); }
new Chunkerator<IBindingSet>(bindingsClause.getBindingSets().iterator()),// bindingsClause.getQueryHints(), ctx);
if (bindingSets.getBindingSetsCount() > 0) {
/** * Return the #of declared variables. */ public final int getDeclaredVariableCount() { return getDeclaredVariables().size(); }
/** * Return the #of binding sets. */ public final int getBindingSetsCount() { final List<IBindingSet> bindingSets = getBindingSets(); if (bindingSets == null) return 0; return bindingSets.size(); }
new Chunkerator<IBindingSet>(bindingsClause.getBindingSets().iterator()),// bindingsClause.getQueryHints(), ctx);
if (bindingSets.getBindingSetsCount() > 0) {
/** * Applies the optimization to a given subquery root (wrapper around * the main entry point). */ private IBindingSet[] optimize( final StaticAnalysis sa, final SubqueryRoot subqueryRoot, final StaticBindingInfo staticBindingInfo, final VariableUsageInfo ancestorVarUsageInfo, final Set<InlineTasks> inlineTasks) { final IBindingSet[] staticBindings = optimize( sa, subqueryRoot, staticBindingInfo, ancestorVarUsageInfo, inlineTasks, subqueryRoot.getBindingsClause()); // record static bindings in subquery VALUES clause, if any final LinkedHashSet<IVariable<?>> bcVars = new LinkedHashSet<IVariable<?>>(); bcVars.addAll(SolutionSetStatserator.get(staticBindings).getUsedVars()); final List<IBindingSet> bcBindings = Arrays.asList(staticBindings); if (!bcVars.isEmpty()) { final BindingsClause bc = new BindingsClause(bcVars,bcBindings); subqueryRoot.setBindingsClause(bc); } return staticBindings; }
/** * Test interface implementation for assignment nodes. */ @SuppressWarnings("serial") public void testBindingsClause() { final LinkedHashSet<IVariable<?>> declaredVars = new LinkedHashSet<IVariable<?>>() {{ add(Var.var("x")); add(Var.var("y")); }}; final List<IBindingSet> bindingSets = new ArrayList<IBindingSet>() {{ add(new ListBindingSet() {{ set(Var.var("x"), new Constant<>(TermId.mockIV(VTE.URI))); set(Var.var("y"), new Constant<>(TermId.mockIV(VTE.URI))); }}); }}; final BindingsClause bc = new BindingsClause(declaredVars, bindingSets); // dummy sa object final StaticAnalysis sa = new StaticAnalysis(new QueryRoot(QueryType.SELECT), null); // bindings clauses requires no variables to be bound before, as they // introduce constant values only; nothing is forbidden and nothing // desired here... assertEquals(new HashSet<IVariable<?>>(), bc.getRequiredBound(sa)); assertEquals(new HashSet<IVariable<?>>(), bc.getDesiredBound(sa)); }
@Override public String toString(final int indent) { final LinkedHashSet<IVariable<?>> declaredVars = getDeclaredVariables(); final List<IBindingSet> bindingSets = getBindingSets(); final String s = indent(indent); final String s1 = indent(indent + 1);
vars.addAll(bc.getDeclaredVariables());
List<IBindingSet> bs = bindingsClause.getBindingSets(); IBindingSet[] bsList = bs.toArray(new IBindingSet[bs.size()]);
/** * Returns a {@link BindingsClause} binding the specified vars. */ BindingsClause bindingsClauseWithVars(final String... varNames) { final LinkedHashSet<IVariable<?>> declaredVars = new LinkedHashSet<IVariable<?>>(); for (String varName : varNames) { declaredVars.add(Var.var(varName)); } final List<IBindingSet> bindingSets = new ArrayList<IBindingSet>(); IBindingSet bs = new ListBindingSet(); for (String varName : varNames) { bs.set(Var.var(varName), new Constant<>(TermId.mockIV(VTE.URI))); } return new BindingsClause(declaredVars, bindingSets); }
/** * Test interface implementation for assignment nodes. */ @SuppressWarnings("serial") public void testBindingsClause() { final LinkedHashSet<IVariable<?>> declaredVars = new LinkedHashSet<IVariable<?>>() {{ add(Var.var("x")); add(Var.var("y")); }}; final List<IBindingSet> bindingSets = new ArrayList<IBindingSet>() {{ add(new ListBindingSet() {{ set(Var.var("x"), new Constant<>(TermId.mockIV(VTE.URI))); set(Var.var("y"), new Constant<>(TermId.mockIV(VTE.URI))); }}); }}; final BindingsClause bc = new BindingsClause(declaredVars, bindingSets); // dummy sa object final StaticAnalysis sa = new StaticAnalysis(new QueryRoot(QueryType.SELECT), null); // bindings clauses requires no variables to be bound before, as they // introduce constant values only; nothing is forbidden and nothing // desired here... assertEquals(new HashSet<IVariable<?>>(), bc.getRequiredBound(sa)); assertEquals(new HashSet<IVariable<?>>(), bc.getDesiredBound(sa)); }
vars.addAll(bc.getDeclaredVariables());
List<IBindingSet> bs = bindingsClause.getBindingSets(); IBindingSet[] bsList = bs.toArray(new IBindingSet[bs.size()]);