public VarUsageAnalyzerVisitor(Tree<Op> tree, Op current) { this(tree, current, OpVars.visibleVars(current)); }
public static Op transform(Op op) { Collection<Var> mentionedVars = OpVars.mentionedVars(op); Set<Var> oldVisibleVars = OpVars.visibleVars(op); Generator<Var> gen = VarGeneratorBlacklist.create("v", mentionedVars); Transform transform = new TransformReplaceConstants(gen, false); Op result = Transformer.transform(transform, op); // Ensure the correct projection // Set<Var> newVisibleVars = OpVars.visibleVars(op); // // if(!oldVisibleVars.equals(newVisibleVars)) { // result = new OpProject(result, new ArrayList<>(oldVisibleVars)); // } return result; }
public static Set<Var> visibleVars(Op op) { Set<Var> acc = collector() ; visibleVars(op, acc) ; return acc ; }
public static Collection<Var> mentionedVars(Op op) { Set<Var> acc = collector() ; mentionedVars(op, acc) ; return acc ; }
@Override public void visit(OpProcedure opProc) { unknownAcc.addAll(OpVars.mentionedVars(opProc)); }
Set<Var> fixedVars = OpVars.fixedVars(op); for (Pair<Var, Var> pair : joins) { if (fixedVars.contains(pair.getLeft()) && !fixedVars.contains(pair.getRight())) return false; Set<Var> varsLeft = OpVars.visibleVars(opLeft); if (varsLeft.containsAll(varsEquality)) return true;
private static Pair<Var, Var> preprocess(Op opLeft, Op opRight, Expr e) { if (!(e instanceof E_Equals) && !(e instanceof E_SameTerm)) return null; ExprFunction2 eq = (ExprFunction2) e; // An equals or same term implicit join Expr left = eq.getArg1(); Expr right = eq.getArg2(); if (!left.isVariable() || !right.isVariable()) { return null; } if (left.equals(right)) { return null; } // If neither variable is visible in RHS optimization does not apply Collection<Var> rhsVars = OpVars.visibleVars(opRight); if (!rhsVars.contains(left.asVar()) && !rhsVars.contains(right.asVar())) return null; if (e instanceof E_Equals) { // Is a safe equals for this optimization? Tuple<Set<Var>> varsByPosition = OpVars.mentionedVarsByPosition(opLeft, opRight); if (!isSafeEquals(varsByPosition, left.asVar(), right.asVar())) return null; } return Pair.create(left.asVar(), right.asVar()); }
private Set<Var> fixedVars(Op op) { return OpVars.fixedVars(op) ; }
Var effectiveFilterVar = varMap.get(rawFilterVar); Op attrOp = Algebra.compile(attrElement); Tuple<Set<Var>> tuple = OpVars.mentionedVarsByPosition(attrOp); canOmitJoin = tuple.get(1).contains(effectiveFilterVar);
public static Tuple<Set<Var>> mentionedVarsByPosition(Op op) { Set<Var> graphAcc = collector() ; Set<Var> subjAcc = collector() ; Set<Var> predAcc = collector() ; Set<Var> objAcc = collector() ; Set<Var> unknownAcc = collector() ; OpVarsPatternWithPositions visitor = new OpVarsPatternWithPositions(graphAcc, subjAcc, predAcc, objAcc, unknownAcc, false); OpWalker.walk(op, visitor); return TupleFactory.tuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc); }
@Override public Set<Var> getVarsMentioned() { Set<Var> result = new HashSet<Var>(); result.addAll(QuadPatternUtils.getVarsMentioned(template)); result.addAll(OpVars.mentionedVars(op)); return result; }
Set<Var> fixedVars = OpVars.fixedVars(op); for (Pair<Var, Var> pair : joins) { if (fixedVars.contains(pair.getLeft()) && !fixedVars.contains(pair.getRight())) return false; Set<Var> varsLeft = OpVars.visibleVars(opLeft); if (varsLeft.containsAll(varsEquality)) return true;
private static Pair<Var, Var> preprocess(Op subOp, Expr e) { if (!(e instanceof E_Equals) && !(e instanceof E_SameTerm)) return null; ExprFunction2 eq = (ExprFunction2) e; Expr left = eq.getArg1(); Expr right = eq.getArg2(); if (!left.isVariable() || !right.isVariable()) { return null; } if (left.equals(right)) { return null; } if (e instanceof E_Equals) { // Is a safe equals for this optimization? Tuple<Set<Var>> varsByPosition = OpVars.mentionedVarsByPosition(subOp); if (!isSafeEquals(varsByPosition, left.asVar(), right.asVar())) return null; } return Pair.create(left.asVar(), right.asVar()); }
public static Tuple<Set<Var>> mentionedVarsByPosition(Op... ops) { Set<Var> graphAcc = collector() ; Set<Var> subjAcc = collector() ; Set<Var> predAcc = collector() ; Set<Var> objAcc = collector() ; Set<Var> unknownAcc = collector() ; OpVarsPatternWithPositions visitor = new OpVarsPatternWithPositions(graphAcc, subjAcc, predAcc, objAcc, unknownAcc, false); for (Op op : ops) OpWalker.walk(op, visitor); return TupleFactory.tuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc); }
public VarUsageAnalyzerVisitor(Tree<Op> tree, Op current) { this(tree, current, OpVars.visibleVars(current)); }
public static Op transform(Op op) { Collection<Var> mentionedVars = OpVars.mentionedVars(op); Set<Var> oldVisibleVars = OpVars.visibleVars(op); Generator<Var> gen = VarGeneratorBlacklist.create("v", mentionedVars); Transform transform = new TransformReplaceConstants(gen, false); Op result = Transformer.transform(transform, op); // Ensure the correct projection // Set<Var> newVisibleVars = OpVars.visibleVars(op); // // if(!oldVisibleVars.equals(newVisibleVars)) { // result = new OpProject(result, new ArrayList<>(oldVisibleVars)); // } return result; }
public static Set<Var> _getVarsMentioned(OpQuadBlock op) { //return QuadUtils.getVarsMentioned(op.getPattern()); return SetUtils.asSet(OpVars.mentionedVars(op)); }
private static void fixed(String string, String... vars) { Op op = SSE.parseOp(string) ; Collection<Var> c = OpVars.fixedVars(op) ; check(vars, c) ; }