[ 
https://issues.apache.org/jira/browse/FLINK-6927?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16069906#comment-16069906
 ] 

ASF GitHub Bot commented on FLINK-6927:
---------------------------------------

Github user dawidwys commented on a diff in the pull request:

    https://github.com/apache/flink/pull/4153#discussion_r125005984
  
    --- Diff: 
flink-libraries/flink-cep/src/main/java/org/apache/flink/cep/nfa/compiler/NFACompiler.java
 ---
    @@ -455,6 +548,76 @@ private void addStopStateToLooping(final State<T> 
loopingState) {
                }
     
                /**
    +            * Create all the states for the group pattern.
    +            *
    +            * @param groupPattern the group pattern to create the states 
for
    +            * @param sinkState the state that the group pattern being 
converted should point to
    +            * @param proceedState the state that the group pattern being 
converted should proceed to
    +            * @param isOptional whether the group pattern being converted 
is optional
    +            * @return the first state of the states of the group pattern
    +            */
    +           private State<T> createGroupPatternState(
    +                   final GroupPattern<T, ?> groupPattern,
    +                   final State<T> sinkState,
    +                   final State<T> proceedState,
    +                   final boolean isOptional) {
    +                   final IterativeCondition<T> trueFunction = 
BooleanConditions.trueFunction();
    +
    +                   Pattern<T, ?> oldCurrentPattern = currentPattern;
    +                   Pattern<T, ?> oldFollowingPattern = followingPattern;
    +                   GroupPattern<T, ?> oldGroupPattern = 
currentGroupPattern;
    +                   try {
    +                           State<T> lastSink = sinkState;
    +                           currentGroupPattern = groupPattern;
    +                           currentPattern = groupPattern.getRawPattern();
    +                           lastSink = createMiddleStates(lastSink);
    +                           lastSink = convertPattern(lastSink);
    +                           if (isOptional) {
    +                                   // for the first state of a group 
pattern, its PROCEED edge should point to
    +                                   // the following state of that group 
pattern
    +                                   lastSink.addProceed(proceedState, 
trueFunction);
    +                           }
    +                           return lastSink;
    +                   } finally {
    +                           currentPattern = oldCurrentPattern;
    +                           followingPattern = oldFollowingPattern;
    +                           currentGroupPattern = oldGroupPattern;
    +                   }
    +           }
    +
    +           /**
    +            * Create the states for the group pattern as a looping one.
    +            *
    +            * @param groupPattern the group pattern to create the states 
for
    +            * @param sinkState the state that the group pattern being 
converted should point to
    +            * @return the first state of the states of the group pattern
    +            */
    +           private State<T> createLoopingGroupPatternState(
    +                   final GroupPattern<T, ?> groupPattern,
    +                   final State<T> sinkState) {
    +                   final IterativeCondition<T> trueFunction = 
BooleanConditions.trueFunction();
    +
    +                   Pattern<T, ?> oldCurrentPattern = currentPattern;
    +                   Pattern<T, ?> oldFollowingPattern = followingPattern;
    +                   GroupPattern<T, ?> oldGroupPattern = 
currentGroupPattern;
    +                   try {
    --- End diff --
    
    Same as above. Whyt `try`?


> Support pattern group in CEP
> ----------------------------
>
>                 Key: FLINK-6927
>                 URL: https://issues.apache.org/jira/browse/FLINK-6927
>             Project: Flink
>          Issue Type: Sub-task
>          Components: CEP
>            Reporter: Dian Fu
>            Assignee: Dian Fu
>
> We should add support for pattern group. This would enrich the set of 
> supported patterns. For example, users can write patterns like this with this 
> feature available:
> {code}
>  A --> (B --> C.times(3)).optional() --> D
> {code}
> or
> {code}
> A --> (B --> C).times(3) --> D
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to