[
https://issues.apache.org/jira/browse/FLINK-7147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16143360#comment-16143360
]
ASF GitHub Bot commented on FLINK-7147:
---------------------------------------
Github user dianfu commented on a diff in the pull request:
https://github.com/apache/flink/pull/4296#discussion_r135440842
--- Diff:
flink-libraries/flink-cep/src/main/java/org/apache/flink/cep/nfa/compiler/NFACompiler.java
---
@@ -526,18 +551,32 @@ private boolean isPatternOptional(Pattern<T, ?>
pattern) {
return createGroupPatternState((GroupPattern)
currentPattern, sinkState, proceedState, isOptional);
}
- final IterativeCondition<T> trueFunction =
getTrueFunction();
-
final State<T> singletonState =
createState(currentPattern.getName(), State.StateType.Normal);
// if event is accepted then all notPatterns previous
to the optional states are no longer valid
final State<T> sink =
copyWithoutTransitiveNots(sinkState);
singletonState.addTake(sink, takeCondition);
+ // if no element accepted the previous nots are still
valid.
+ final IterativeCondition<T> proceedCondition =
getTrueFunction();
+
// for the first state of a group pattern, its PROCEED
edge should point to the following state of
// that group pattern and the edge will be added at the
end of creating the NFA for that group pattern
if (isOptional && !headOfGroup(currentPattern)) {
- // if no element accepted the previous nots are
still valid.
- singletonState.addProceed(proceedState,
trueFunction);
+ if
(currentPattern.getQuantifier().hasProperty(Quantifier.QuantifierProperty.GREEDY))
{
+ final IterativeCondition<T>
untilCondition =
+ (IterativeCondition<T>)
currentPattern.getUntilCondition();
+ if (untilCondition != null) {
+ singletonState.addProceed(
+
originalStateMap.get(proceedState.getName()),
+ new
AndCondition<>(proceedCondition, untilCondition));
--- End diff --
When untilCondition holds, the loop should break and the state should
proceed to the next state. This is covered by the test case
GreedyITCase#testGreedyUntilWithDummyEventsBeforeQuantifier.
> Support greedy quantifier in CEP
> --------------------------------
>
> Key: FLINK-7147
> URL: https://issues.apache.org/jira/browse/FLINK-7147
> Project: Flink
> Issue Type: Sub-task
> Components: CEP, Table API & SQL
> Reporter: Dian Fu
> Assignee: Dian Fu
>
> Greedy quantifier will try to match the token as many times as possible. For
> example, for pattern {{a b* c}} (skip till next is used) and inputs {{a b1 b2
> c}}, if the quantifier for {{b}} is greedy, it will only output {{a b1 b2 c}}.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)