protected Op transformExprConstantFolding(Op op) { return Transformer.transform(new TransformCopy(), new ExprTransformConstantFold(), op); }
@Test public void nested_01() { testOp( "(filter (?A) (filter (?B) (table unit)))", new TransformCopy(), (String[])null) ; }
@Test public void nested_02() { Transform tableChanger = new TransformCopy() { @Override public Op transform(OpTable opTable) { // Always a new object return OpTable.create(opTable.getTable()) ; } }; testOp( "(filter (?A) (filter (?B) (table unit)))", tableChanger, "(filter (exprlist ?B ?A) (table unit))") ; }
@Override public Expr transform(ExprFunctionOp funcOp, ExprList args, Op opArg) { // Manually transform each argument Op op = Transformer.transform(new TransformCopy(), this, funcOp.getGraphPattern()); ExprList newArgs = new ExprList(); for (int i = 0; i < args.size(); i++) { Expr curr = args.get(i); Expr newArg = ExprTransformer.transform(this, curr) ; newArgs.add(newArg); } return funcOp.copy(newArgs, op); }
private void test(String input, String expected, ExprTransform transform) { Op opOrig = SSE.parseOp(input); Op opExpected = SSE.parseOp(expected != null ? expected : input); Op opOptimized = Transformer.transform(new TransformCopy(), transform, opOrig); Assert.assertEquals(opExpected, opOptimized); }
/** Transform an algebra expression except skip (leave alone) any OpService nodes */ public static Op transformSkipService(Transform opTransform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor) { if ( true ) { // XXX XXX Better work with Walker. if ( opTransform == null ) opTransform = new TransformCopy() ; if ( exprTransform == null ) exprTransform = new ExprTransformCopy() ; Transform transform2 = new TransformSkipService(opTransform) ; transform2 = opTransform ; ApplyTransformVisitor atv = new ApplyTransformVisitor(transform2, exprTransform, false, beforeVisitor, afterVisitor) ; return Walker.transformSkipService(op, atv, beforeVisitor, afterVisitor) ; } Transform transform = new TransformSkipService(opTransform) ; return Transformer.transform(transform, exprTransform, op, beforeVisitor, afterVisitor) ; // // OLD // // Simplest way but still walks the OpService subtree (and throws away the // // transformation). // Transform transform = new TransformSkipService(opTransform) ; // return Transformer.transform(transform, exprTransform, op, beforeVisitor, afterVisitor) ; }
@Test public void equality_expression_1() { // Need to fold to a string or URI to trigger equality. Op op = SSE.parseOp("(filter (= ?o (+ 'a' 'b')) (bgp (?x <http://p2> ?o)))") ; // Fold constants. Op op1 = Transformer.transform(new TransformCopy(), new ExprTransformConstantFold(), op); // Then apply filter-equality. check(op1, t_equality, "(assign ((?o 'ab')) (bgp (?x <http://p2> 'ab')) )") ; }