use of io.confluent.ksql.execution.windows.KsqlWindowExpression in project ksql by confluentinc.
the class RewrittenAnalysis method getWindowExpression.
@Override
public Optional<WindowExpression> getWindowExpression() {
final Optional<WindowExpression> windowExpression = original.getWindowExpression();
final Optional<RefinementInfo> refinementInfo = original.getRefinementInfo();
/* Return the original window expression, unless there is no grace period provided during a
suppression, in which case we rewrite the window expression to have a default grace period
of zero.
*/
if (!(windowExpression.isPresent() && !windowExpression.get().getKsqlWindowExpression().getGracePeriod().isPresent() && refinementInfo.isPresent() && refinementInfo.get().getOutputRefinement() == OutputRefinement.FINAL)) {
return original.getWindowExpression();
}
final WindowExpression window = original.getWindowExpression().get();
final KsqlWindowExpression ksqlWindowNew;
final KsqlWindowExpression ksqlWindowOld = window.getKsqlWindowExpression();
final Optional<NodeLocation> location = ksqlWindowOld.getLocation();
final Optional<WindowTimeClause> retention = ksqlWindowOld.getRetention();
if (ksqlWindowOld instanceof HoppingWindowExpression) {
ksqlWindowNew = new HoppingWindowExpression(location, ((HoppingWindowExpression) ksqlWindowOld).getSize(), ((HoppingWindowExpression) ksqlWindowOld).getAdvanceBy(), retention, Optional.of(zeroGracePeriod));
} else if (ksqlWindowOld instanceof TumblingWindowExpression) {
ksqlWindowNew = new TumblingWindowExpression(location, ((TumblingWindowExpression) ksqlWindowOld).getSize(), retention, Optional.of(zeroGracePeriod));
} else if (ksqlWindowOld instanceof SessionWindowExpression) {
ksqlWindowNew = new SessionWindowExpression(location, ((SessionWindowExpression) ksqlWindowOld).getGap(), retention, Optional.of(zeroGracePeriod));
} else {
throw new KsqlException("WINDOW type must be HOPPING, TUMBLING, or SESSION");
}
return Optional.of(new WindowExpression(original.getWindowExpression().get().getWindowName(), ksqlWindowNew));
}
use of io.confluent.ksql.execution.windows.KsqlWindowExpression in project ksql by confluentinc.
the class LogicalPlanner method getWindowInfo.
private Optional<WindowInfo> getWindowInfo() {
final KsqlTopic srcTopic = analysis.getFrom().getDataSource().getKsqlTopic();
final Optional<WindowInfo> explicitWindowInfo = analysis.getWindowExpression().map(WindowExpression::getKsqlWindowExpression).map(KsqlWindowExpression::getWindowInfo);
return explicitWindowInfo.isPresent() ? explicitWindowInfo : srcTopic.getKeyFormat().getWindowInfo();
}
use of io.confluent.ksql.execution.windows.KsqlWindowExpression in project ksql by confluentinc.
the class ExpressionParserTest method shouldParseWindowExpressionWithRetention.
@Test
public void shouldParseWindowExpressionWithRetention() {
// When:
final KsqlWindowExpression parsed = ExpressionParser.parseWindowExpression("TUMBLING (SIZE 1 DAYS, RETENTION 2 DAYS, GRACE PERIOD 2 DAYS)");
// Then:
assertThat(parsed, equalTo(new TumblingWindowExpression(parsed.getLocation(), new WindowTimeClause(1, TimeUnit.DAYS), Optional.of(new WindowTimeClause(2, TimeUnit.DAYS)), Optional.of(new WindowTimeClause(2, TimeUnit.DAYS)))));
}
use of io.confluent.ksql.execution.windows.KsqlWindowExpression in project ksql by confluentinc.
the class StatementRewriterTest method shouldRewriteWindowExpression.
@Test
public void shouldRewriteWindowExpression() {
// Given:
final KsqlWindowExpression ksqlWindowExpression = mock(KsqlWindowExpression.class);
final WindowExpression windowExpression = new WindowExpression(location, "name", ksqlWindowExpression);
// When:
final AstNode rewritten = rewriter.rewrite(windowExpression, context);
// Then:
assertThat(rewritten, equalTo(new WindowExpression(location, "name", ksqlWindowExpression)));
}
use of io.confluent.ksql.execution.windows.KsqlWindowExpression in project ksql by confluentinc.
the class ExpressionParser method parseWindowExpression.
public static KsqlWindowExpression parseWindowExpression(final String expressionText) {
final ParserRuleContext parseTree = GrammarParseUtil.getParseTree(expressionText, SqlBaseParser::windowExpression);
final WindowExpression windowExpression = new AstBuilder(TypeRegistry.EMPTY).buildWindowExpression(parseTree);
return windowExpression.getKsqlWindowExpression();
}
Aggregations