diff --git a/core/trino-parser/src/main/java/io/trino/sql/jsonpath/PathParser.java b/core/trino-parser/src/main/java/io/trino/sql/jsonpath/PathParser.java index c4f54eaa5a3f..e3be63349577 100644 --- a/core/trino-parser/src/main/java/io/trino/sql/jsonpath/PathParser.java +++ b/core/trino-parser/src/main/java/io/trino/sql/jsonpath/PathParser.java @@ -28,12 +28,12 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.atn.PredictionMode; import org.antlr.v4.runtime.misc.Pair; -import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.Arrays; import java.util.List; +import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; public final class PathParser @@ -44,8 +44,8 @@ public PathParser(Location startLocation) { requireNonNull(startLocation, "startLocation is null"); - int pathStartLine = startLocation.line; - int pathStartColumn = startLocation.column; + int pathStartLine = startLocation.line(); + int pathStartColumn = startLocation.column(); this.errorListener = new BaseErrorListener() { @Override @@ -83,7 +83,7 @@ public PathNode parseJsonPath(String path) parser.getInterpreter().setPredictionMode(PredictionMode.SLL); tree = parser.path(); } - catch (ParseCancellationException ex) { + catch (ParsingException ex) { // if we fail, parse with LL mode tokenStream.seek(0); // rewind input stream parser.reset(); @@ -135,33 +135,12 @@ public void exitNonReserved(JsonPathParser.NonReservedContext context) } } - public static class Location + public record Location(int line, int column) { - private final int line; - private final int column; - - public Location(int line, int column) - { - if (line < 1) { - throw new IllegalArgumentException("line must be at least 1"); - } - - if (column < 0) { - throw new IllegalArgumentException("column must be at least 0"); - } - - this.line = line; - this.column = column; - } - - public int getLine() - { - return line; - } - - public int getColumn() + public Location { - return column; + checkArgument(line >= 1, "line must be at least 1"); + checkArgument(column >= 0, "column must be at least 0"); } } } diff --git a/core/trino-parser/src/main/java/io/trino/sql/parser/SqlParser.java b/core/trino-parser/src/main/java/io/trino/sql/parser/SqlParser.java index a2263559b421..d155aec06bfb 100644 --- a/core/trino-parser/src/main/java/io/trino/sql/parser/SqlParser.java +++ b/core/trino-parser/src/main/java/io/trino/sql/parser/SqlParser.java @@ -23,6 +23,7 @@ import io.trino.sql.tree.PathSpecification; import io.trino.sql.tree.RowPattern; import io.trino.sql.tree.Statement; +import org.antlr.v4.runtime.ANTLRErrorListener; import org.antlr.v4.runtime.BaseErrorListener; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonToken; @@ -36,7 +37,6 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.atn.PredictionMode; import org.antlr.v4.runtime.misc.Pair; -import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.Arrays; @@ -49,7 +49,7 @@ public class SqlParser { - private static final BaseErrorListener LEXER_ERROR_LISTENER = new BaseErrorListener() + private static final ANTLRErrorListener LEXER_ERROR_LISTENER = new BaseErrorListener() { @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String message, RecognitionException e) @@ -152,17 +152,19 @@ public Token recoverInline(Parser recognizer) ParserRuleContext tree; try { - // first, try parsing with potentially faster SLL mode - parser.getInterpreter().setPredictionMode(PredictionMode.SLL); - tree = parseFunction.apply(parser); - } - catch (ParseCancellationException ex) { - // if we fail, parse with LL mode - tokenStream.seek(0); // rewind input stream - parser.reset(); + try { + // first, try parsing with potentially faster SLL mode + parser.getInterpreter().setPredictionMode(PredictionMode.SLL); + tree = parseFunction.apply(parser); + } + catch (ParsingException ex) { + // if we fail, parse with LL mode + tokenStream.seek(0); // rewind input stream + parser.reset(); - parser.getInterpreter().setPredictionMode(PredictionMode.LL); - tree = parseFunction.apply(parser); + parser.getInterpreter().setPredictionMode(PredictionMode.LL); + tree = parseFunction.apply(parser); + } } catch (ParsingException e) { location.ifPresent(statementLocation -> { diff --git a/core/trino-parser/src/main/java/io/trino/type/TypeCalculation.java b/core/trino-parser/src/main/java/io/trino/type/TypeCalculation.java index ee9029d0a3ba..df797ffbcb9e 100644 --- a/core/trino-parser/src/main/java/io/trino/type/TypeCalculation.java +++ b/core/trino-parser/src/main/java/io/trino/type/TypeCalculation.java @@ -25,6 +25,7 @@ import io.trino.grammar.type.TypeCalculationParser.ParenthesizedExpressionContext; import io.trino.grammar.type.TypeCalculationParser.TypeCalculationContext; import io.trino.sql.parser.ParsingException; +import org.antlr.v4.runtime.ANTLRErrorListener; import org.antlr.v4.runtime.BaseErrorListener; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -32,7 +33,6 @@ import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Recognizer; import org.antlr.v4.runtime.atn.PredictionMode; -import org.antlr.v4.runtime.misc.ParseCancellationException; import java.math.BigInteger; import java.util.Map; @@ -48,7 +48,7 @@ public final class TypeCalculation { - private static final BaseErrorListener ERROR_LISTENER = new BaseErrorListener() + private static final ANTLRErrorListener ERROR_LISTENER = new BaseErrorListener() { @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String message, RecognitionException e) @@ -92,7 +92,7 @@ private static ParserRuleContext parseTypeCalculation(String calculation) parser.getInterpreter().setPredictionMode(PredictionMode.SLL); tree = parser.typeCalculation(); } - catch (ParseCancellationException ex) { + catch (ParsingException ex) { // if we fail, parse with LL mode tokenStream.seek(0); // rewind input stream parser.reset(); @@ -103,34 +103,6 @@ private static ParserRuleContext parseTypeCalculation(String calculation) return tree; } - private static class IsSimpleExpressionVisitor - extends TypeCalculationBaseVisitor - { - @Override - public Boolean visitArithmeticBinary(ArithmeticBinaryContext ctx) - { - return false; - } - - @Override - public Boolean visitArithmeticUnary(ArithmeticUnaryContext ctx) - { - return false; - } - - @Override - protected Boolean defaultResult() - { - return true; - } - - @Override - protected Boolean aggregateResult(Boolean aggregate, Boolean nextResult) - { - return aggregate && nextResult; - } - } - private static class CalculateTypeVisitor extends TypeCalculationBaseVisitor { diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/expression/ExpressionMappingParser.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/expression/ExpressionMappingParser.java index ac975cef7567..f06e20be4a76 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/expression/ExpressionMappingParser.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/expression/ExpressionMappingParser.java @@ -14,6 +14,7 @@ package io.trino.plugin.jdbc.expression; import com.google.common.collect.ImmutableMap; +import org.antlr.v4.runtime.ANTLRErrorListener; import org.antlr.v4.runtime.BaseErrorListener; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -21,7 +22,6 @@ import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Recognizer; import org.antlr.v4.runtime.atn.PredictionMode; -import org.antlr.v4.runtime.misc.ParseCancellationException; import java.util.Map; import java.util.Set; @@ -32,7 +32,7 @@ public class ExpressionMappingParser { - private static final BaseErrorListener ERROR_LISTENER = new BaseErrorListener() + private static final ANTLRErrorListener ERROR_LISTENER = new BaseErrorListener() { @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String message, RecognitionException e) @@ -77,7 +77,7 @@ public Object invokeParser(String input, Function recognizer, Object offendingSymbol, int line, int charPositionInLine, String message, RecognitionException e) @@ -76,7 +76,7 @@ private static Object invokeParser(String input, Function