From 3a12ab114dd70ad3690fa9382b7ecb6e7caeffe8 Mon Sep 17 00:00:00 2001 From: kasiafi <30203062+kasiafi@users.noreply.github.com> Date: Sat, 11 May 2019 17:21:17 +0200 Subject: [PATCH] Allow simplified OFFSET syntax This change allows using simplified syntax `OFFSET x` instead of `OFFSET x ROW/ROWS` --- .../antlr4/io/prestosql/sql/parser/SqlBase.g4 | 2 +- .../prestosql/sql/parser/TestSqlParser.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/presto-parser/src/main/antlr4/io/prestosql/sql/parser/SqlBase.g4 b/presto-parser/src/main/antlr4/io/prestosql/sql/parser/SqlBase.g4 index 416d1fe1cdbf..d588d18c902d 100644 --- a/presto-parser/src/main/antlr4/io/prestosql/sql/parser/SqlBase.g4 +++ b/presto-parser/src/main/antlr4/io/prestosql/sql/parser/SqlBase.g4 @@ -149,7 +149,7 @@ property queryNoWith: queryTerm (ORDER BY sortItem (',' sortItem)*)? - (OFFSET offset=INTEGER_VALUE (ROW | ROWS))? + (OFFSET offset=INTEGER_VALUE (ROW | ROWS)?)? ((LIMIT limit=(INTEGER_VALUE | ALL)) | (FETCH (FIRST | NEXT) (fetchFirst=INTEGER_VALUE)? (ROW | ROWS) ONLY))? ; diff --git a/presto-parser/src/test/java/io/prestosql/sql/parser/TestSqlParser.java b/presto-parser/src/test/java/io/prestosql/sql/parser/TestSqlParser.java index e47800ca19b7..79406df48afa 100644 --- a/presto-parser/src/test/java/io/prestosql/sql/parser/TestSqlParser.java +++ b/presto-parser/src/test/java/io/prestosql/sql/parser/TestSqlParser.java @@ -946,6 +946,22 @@ public void testSelectWithOffset() Optional.empty(), Optional.empty())); + assertStatement("SELECT * FROM table1 OFFSET 2", + new Query( + Optional.empty(), + new QuerySpecification( + selectList(new AllColumns()), + Optional.of(new Table(QualifiedName.of("table1"))), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.of(new Offset("2")), + Optional.empty()), + Optional.empty(), + Optional.empty(), + Optional.empty())); + Query valuesQuery = query(values( row(new LongLiteral("1"), new StringLiteral("1")), row(new LongLiteral("2"), new StringLiteral("2")))); @@ -959,6 +975,16 @@ public void testSelectWithOffset() Optional.empty(), Optional.of(new Offset("2")), Optional.empty())); + + assertStatement("SELECT * FROM (VALUES (1, '1'), (2, '2')) OFFSET 2", + simpleQuery(selectList(new AllColumns()), + subquery(valuesQuery), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.of(new Offset("2")), + Optional.empty())); } @Test