use of io.confluent.ksql.parser.NodeLocation 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.parser.NodeLocation in project ksql by confluentinc.
the class SqlTypeParser method getType.
public Type getType(final SqlBaseParser.TypeContext type) {
final Optional<NodeLocation> location = ParserUtil.getLocation(type);
final SqlType sqlType = getSqlType(type);
return new Type(location, sqlType);
}
use of io.confluent.ksql.parser.NodeLocation in project ksql by confluentinc.
the class ParserUtil method visitIntegerLiteral.
public static Literal visitIntegerLiteral(final IntegerLiteralContext context) {
final Optional<NodeLocation> location = getLocation(context);
final long valueAsLong;
try {
valueAsLong = Long.parseLong(context.getText());
} catch (final NumberFormatException e) {
throw new ParsingException("Invalid numeric literal: " + context.getText(), location);
}
if (valueAsLong <= Integer.MAX_VALUE && valueAsLong >= Integer.MIN_VALUE) {
return new IntegerLiteral(location, (int) valueAsLong);
} else {
return new LongLiteral(location, valueAsLong);
}
}
use of io.confluent.ksql.parser.NodeLocation in project ksql by confluentinc.
the class DirectiveParser method parse.
public static TestDirective parse(final Token comment) {
final NodeLocation loc = new NodeLocation(comment.getLine(), comment.getCharPositionInLine());
final Matcher matcher = DIRECTIVE_REGEX.matcher(comment.getText().trim());
if (!matcher.find()) {
throw new ParsingException("Expected directive matching pattern " + DIRECTIVE_REGEX + " but got " + comment, null, loc.getLineNumber(), loc.getColumnNumber());
}
final Type type = Type.from(matcher.group("type").toLowerCase());
final String contents = matcher.group("contents");
return new TestDirective(type, contents, loc);
}
use of io.confluent.ksql.parser.NodeLocation in project ksql by confluentinc.
the class ColumnReferenceValidatorTest method shouldIncludeLocationInErrorIfKnown.
@Test
public void shouldIncludeLocationInErrorIfKnown() {
// Given:
final Expression expression = new UnqualifiedColumnReferenceExp(Optional.of(new NodeLocation(10, 23)), ColumnName.of("just-name"));
when(sourceSchemas.sourcesWithField(any(), any())).thenReturn(ImmutableSet.of());
// When:
final Exception e = assertThrows(UnknownColumnException.class, () -> analyzer.analyzeExpression(expression, CLAUSE_TYPE));
// Then:
assertThat(e.getMessage(), containsString("Line: 10, Col: 24: " + CLAUSE_TYPE));
}
Aggregations