private static GraphTraversal<?, ?> transform(final E_Equals expression) { final Object value = expression.getArg2().getConstant().getNode().getLiteralValue(); return __.as(expression.getArg1().getVarName()).is(P.eq(value)); }
public static Entry<Var, NodeValue> extractConstantConstraint(Expr expr) { if(expr instanceof E_Equals) { E_Equals e = (E_Equals)expr; return extractVarConstant(e.getArg1(), e.getArg2()); } return null; }
/** * Returns IsPrefixOf Constraints for equality expressions between variables and constants. * * Used for looking up view candidates. * Not used for satisfiability checks. * * * @param expr * @return */ public static VariableConstraint deriveViewLookupConstraint(Expr expr) { if(expr instanceof E_Equals) { E_Equals e = (E_Equals)expr; VariableConstraint c = deriveIsPrefixOfConstraint(e.getArg1(), e.getArg2()); if(c == null) { c = deriveIsPrefixOfConstraint(e.getArg2(), e.getArg1()); } return c; } else { return null; } }
/** * Returns IsPrefixOf Constraints for equality expressions between variables and constants. * * Used for looking up view candidates. * Not used for satisfiability checks. * * * @param expr * @return */ public static VariableConstraint deriveViewLookupConstraint(Expr expr) { if(expr instanceof E_Equals) { E_Equals e = (E_Equals)expr; VariableConstraint c = deriveIsPrefixOfConstraint(e.getArg1(), e.getArg2()); if(c == null) { c = deriveIsPrefixOfConstraint(e.getArg2(), e.getArg1()); } return c; } else { return null; } }
public static Entry<Var, Node> extractEquality(Collection<? extends Expr> clause) { Entry<Var, Node> result = null; if(clause.size() == 1) { Expr expr = clause.iterator().next(); if(expr instanceof E_Equals) { E_Equals eq = (E_Equals)expr; eq = normalize(eq); Expr a = eq.getArg1(); Expr b = eq.getArg2(); if(a.isVariable() && b.isConstant()) { Var v = a.asVar(); Node c = b.getConstant().getNode(); result = new SimpleEntry<>(v, c); } } } return result; }
public VarExprList getVarExprList() { VarExprList result = new VarExprList(); for(Expr item : this.getVarBindings()) { // if(!(item instanceof E_Equals)) { // throw new RuntimeException("Expected E_Equals"); // } E_Equals e = (E_Equals)item; Expr left = e.getArg1(); if(!left.isVariable()) { throw new RuntimeException("Variable expected, instead got: " + left); } Var var = left.asVar(); Expr expr = e.getArg2(); Expr previousValue = result.getExpr(var); if(previousValue != null) { throw new RuntimeException("Redefinition of variable " + var + " in view '" + "no name" + "' with: " + expr + ", was: " + previousValue); //continue; } result.add(var, expr); } return result; }
public VarExprList getVarExprList() { VarExprList result = new VarExprList(); for(Expr item : this.getVarBindings()) { // if(!(item instanceof E_Equals)) { // throw new RuntimeException("Expected E_Equals"); // } E_Equals e = (E_Equals)item; Expr left = e.getArg1(); if(!left.isVariable()) { throw new RuntimeException("Variable expected, instead got: " + left); } Var var = left.asVar(); Expr expr = e.getArg2(); Expr previousValue = result.getExpr(var); if(previousValue != null) { throw new RuntimeException("Redefinition of variable " + var + " in view '" + "no name" + "' with: " + expr + ", was: " + previousValue); //continue; } result.add(var, expr); } return result; }
RestrictionImpl b = getRestriction(e.getArg2());
public Boolean determineSatisfiability(Expr expr) { /* BindingMap bindingMap = new BindingMap(); for(Entry<Var, Node> entry : binding.entrySet()) { bindingMap.add(entry.getKey(), entry.getValue()); }*/ if(binding.keySet().containsAll(expr.getVarsMentioned())) { try { NodeValue value = ExprUtils.eval(expr, bindingMap); return value.getBoolean(); } catch(Exception e) { // Evaluation of the expression failed despite all variables were bound // Satisfiability unknown System.err.println(e); return null; } } else if(expr instanceof E_LogicalNot) { Boolean tmp = determineSatisfiability(((E_LogicalNot)expr).getArg()); return tmp == null ? null : !tmp; } else if(expr instanceof E_Equals) { E_Equals e = (E_Equals)expr; RestrictionSetImpl a = getRestriction(e.getArg1()); RestrictionSetImpl b = getRestriction(e.getArg2()); return determineSatisfiabilityEquals(a, b); } else { return null; } }
Expr b = expr.getArg2();
public static GraphTraversal<?, ?> transform(final E_Equals expression) { final Object value = expression.getArg2().getConstant().getNode().getLiteralValue(); return __.as(expression.getArg1().getVarName()).is(P.eq(value)); }
public static Expr optimize(E_Equals expr) { /* * for each optimization: apply. If something changed: reapply * optimization */ expr = new E_Equals(optimizeMM(expr.getArg1()), optimizeMM(expr.getArg2())); //Expr result = expr; // Optimize Equals(RdfTerm(.), RdfTerm(.)) Expr expr2 = SqlTranslationUtils.optimizeRdfTerm(expr); if(expr2 != expr) { return optimizeMM(expr2); } Expr result = SqlTranslationUtils.optimizeOpConcat(expr); if (result instanceof E_Equals) { result = SqlTranslationUtils.optimizeRdfTerm((E_Equals) result); } if (!result.equals(expr)) { result = optimizeMM(result); } return result; }