public GraphAssert( ExpressionGraph expressionGraph, String message, AssertionType assertionType ) { this.finder = new GraphFinder( expressionGraph ); this.message = message; if( assertionType != null ) this.assertionType = assertionType; }
public SubGraphTransformer( GraphTransformer graphTransformer, ExpressionGraph subGraphMatcher ) { this.graphTransformer = graphTransformer; this.subGraphMatcher = subGraphMatcher; this.subGraphFinder = new GraphFinder( subGraphMatcher ); this.findAllPrimaries = subGraphMatcher.supportsNonRecursiveMatch(); }
protected RecursiveGraphTransformer( ExpressionGraph expressionGraph ) { this.expressionGraph = expressionGraph; this.finder = new GraphFinder( expressionGraph ); this.findAllPrimaries = expressionGraph.supportsNonRecursiveMatch(); }
public ExpressionSubGraphIterator( PlannerContext plannerContext, ExpressionGraph contractionExpression, ExpressionGraph matchExpression, boolean firstOnly, ElementGraph elementGraph, Collection<FlowElement> elementExcludes ) { this.plannerContext = plannerContext; this.firstOnly = firstOnly; this.elementGraph = elementGraph; if( elementExcludes != null ) this.elementExcludes.addAll( elementExcludes ); if( contractionExpression != null ) contractedTransformer = new ContractedTransformer( contractionExpression ); else contractedGraph = elementGraph; graphFinder = new GraphFinder( matchExpression ); }
@Test public void testFind2() { ElementGraph graph = new HashJoinSameSourceGraph(); graph = new ContractedTransformer( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); FlowElementExpression sharedTap = new FlowElementExpression( Tap.class, TypeExpression.Topo.SplitOnly ); FlowElementExpression sharedHashJoin = new FlowElementExpression( HashJoin.class ); ExpressionGraph expressionGraph = new ExpressionGraph() .arc( sharedTap, ScopeExpression.ALL, sharedHashJoin ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findFirstMatch( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }
@Test public void testFind() { ElementGraph graph = new HashJoinSameSourceGraph(); graph = new ContractedTransformer( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); FlowElementExpression SHARED_TAP = new FlowElementExpression( Tap.class, TypeExpression.Topo.SplitOnly ); FlowElementExpression SHARED_HASHJOIN = new FlowElementExpression( HashJoin.class ); ExpressionGraph expressionGraph = new ExpressionGraph() .arcs( SHARED_TAP, SHARED_HASHJOIN ) .arcs( SHARED_TAP, SHARED_HASHJOIN ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findFirstMatch( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }
@Test public void testFindAllMatched() { // ElementGraph graph = new HashJoinSameSourceGraph(); ElementGraph graph = new JoinAroundJoinRightMostGraph(); graph.writeDOT( getPlanPath() + "/full.dot" ); // graph = new ContractedTransform( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); graph = new ContractedTransformer( new NoGroupTapExpressionGraph() ).transform( graph ).getEndGraph(); graph.writeDOT( getPlanPath() + "/contracted.dot" ); ExpressionGraph expressionGraph = new ExpressionGraph( new FlowElementExpression( ElementCapture.Primary, Tap.class ) ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findAllMatches( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); } }
@Test public void testFindAllOnPrimary() { // ElementGraph graph = new HashJoinSameSourceGraph(); ElementGraph graph = new JoinAroundJoinRightMostGraph(); graph.writeDOT( getPlanPath() + "/full.dot" ); // graph = new ContractedTransform( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); graph = new ContractedTransformer( new NoGroupTapExpressionGraph() ).transform( graph ).getEndGraph(); graph.writeDOT( getPlanPath() + "/contracted.dot" ); ExpressionGraph expressionGraph = new ExpressionGraph() .arc( new FlowElementExpression( Tap.class ), ScopeExpression.ALL, new FlowElementExpression( ElementCapture.Primary, HashJoin.class ) ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findAllMatchesOnPrimary( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }