Skip to content

Commit 1cb0559

Browse files
Remove deprecated WITH CONTINUATION syntax. (#3765)
`WITH CONTINUATION` was replaced by `EXECUTE CONTINUATION`. This removes some older code.
1 parent 403d6ff commit 1cb0559

File tree

18 files changed

+165
-449
lines changed

18 files changed

+165
-449
lines changed

fdb-relational-core/src/main/antlr/RelationalParser.g4

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ selectStatement
341341
;
342342

343343
query
344-
: ctes? queryExpressionBody continuation?
344+
: ctes? queryExpressionBody
345345
;
346346

347347
ctes
@@ -369,10 +369,6 @@ tableFunctionName
369369
: fullId
370370
;
371371

372-
continuation
373-
: WITH CONTINUATION continuationAtom
374-
;
375-
376372
// done
377373
queryExpressionBody
378374
: queryTerm #queryTermDefault // done
@@ -402,7 +398,6 @@ updateStatement
402398
SET updatedElement (',' updatedElement)*
403399
(WHERE whereExpr)?
404400
(RETURNING selectElements)?
405-
(WITH CONTINUATION continuationAtom)?
406401
queryOptions?
407402
;
408403

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/AstNormalizer.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,17 +271,9 @@ public Object visitQuery(@Nonnull RelationalParser.QueryContext ctx) {
271271
visit(ctx.ctes());
272272
}
273273
ctx.queryExpressionBody().accept(this);
274-
if (ctx.continuation() != null) {
275-
ctx.continuation().accept(this);
276-
}
277274
return null;
278275
}
279276

280-
@Override
281-
public Object visitContinuation(@Nonnull RelationalParser.ContinuationContext ctx) {
282-
return ctx.continuationAtom().accept(this);
283-
}
284-
285277
@Override
286278
public RelationalExpression visitQueryOptions(@Nonnull RelationalParser.QueryOptionsContext ctx) {
287279
for (final var opt : ctx.queryOption()) {

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/visitors/BaseVisitor.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -624,12 +624,6 @@ public Identifier visitTableFunctionName(final RelationalParser.TableFunctionNam
624624
return identifierVisitor.visitTableFunctionName(ctx);
625625
}
626626

627-
@Nonnull
628-
@Override
629-
public Expression visitContinuation(RelationalParser.ContinuationContext ctx) {
630-
return expressionVisitor.visitContinuation(ctx);
631-
}
632-
633627
@Nonnull
634628
@Override
635629
public Expression visitContinuationAtom(@Nonnull RelationalParser.ContinuationAtomContext ctx) {

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/visitors/DelegatingVisitor.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -476,12 +476,6 @@ public Identifier visitTableFunctionName(@Nonnull RelationalParser.TableFunction
476476
return getDelegate().visitTableFunctionName(ctx);
477477
}
478478

479-
@Nonnull
480-
@Override
481-
public Expression visitContinuation(@Nonnull RelationalParser.ContinuationContext ctx) {
482-
return getDelegate().visitContinuation(ctx);
483-
}
484-
485479
@Nonnull
486480
@Override
487481
public Expression visitContinuationAtom(@Nonnull RelationalParser.ContinuationAtomContext ctx) {

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/visitors/ExpressionVisitor.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,6 @@ public Expression visitNamedFunctionArg(@Nonnull final RelationalParser.NamedFun
121121
return expression.toNamedArgument(name);
122122
}
123123

124-
@Nonnull
125-
@Override
126-
public Expression visitContinuation(@Nonnull RelationalParser.ContinuationContext ctx) {
127-
return visitContinuationAtom(ctx.continuationAtom());
128-
}
129-
130124
@Nonnull
131125
@Override
132126
public Expression visitContinuationAtom(@Nonnull RelationalParser.ContinuationAtomContext ctx) {

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/visitors/QueryVisitor.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.apple.foundationdb.record.query.plan.cascades.predicates.CompatibleTypeEvolutionPredicate;
3232
import com.apple.foundationdb.record.query.plan.cascades.typing.Type;
3333
import com.apple.foundationdb.record.query.plan.cascades.values.FieldValue;
34-
import com.apple.foundationdb.record.query.plan.cascades.values.LiteralValue;
3534
import com.apple.foundationdb.record.query.plan.cascades.values.Value;
3635
import com.apple.foundationdb.record.util.pair.NonnullPair;
3736
import com.apple.foundationdb.relational.api.exceptions.ErrorCode;
@@ -58,7 +57,6 @@
5857
import com.google.common.collect.ImmutableSet;
5958
import com.google.common.collect.Iterables;
6059
import com.google.common.collect.Streams;
61-
import com.google.protobuf.ByteString;
6260
import org.antlr.v4.runtime.ParserRuleContext;
6361

6462
import javax.annotation.Nonnull;
@@ -98,12 +96,6 @@ public QueryPlan.LogicalQueryPlan visitDmlStatement(@Nonnull RelationalParser.Dm
9896
@Nonnull
9997
@Override
10098
public LogicalOperator visitQuery(@Nonnull RelationalParser.QueryContext ctx) {
101-
if (ctx.continuation() != null) {
102-
final var continuationExpression = visitContinuation(ctx.continuation());
103-
final var continuationValue = Assert.castUnchecked(continuationExpression.getUnderlying(), LiteralValue.class);
104-
final var continuationBytes = Assert.castUnchecked(continuationValue.getLiteralValue(), ByteString.class);
105-
getDelegate().getPlanGenerationContext().setContinuation(continuationBytes.toByteArray());
106-
}
10799
if (ctx.ctes() != null) {
108100
final var currentPlanFragment = getDelegate().pushPlanFragment();
109101
visitCtes(ctx.ctes()).forEach(currentPlanFragment::addOperator);

fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/query/visitors/TypedVisitor.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,6 @@ public interface TypedVisitor extends RelationalParserVisitor<Object> {
266266
@Override
267267
Identifier visitTableFunctionName(RelationalParser.TableFunctionNameContext ctx);
268268

269-
@Nonnull
270-
@Override
271-
Expression visitContinuation(RelationalParser.ContinuationContext ctx);
272-
273269
@Nonnull
274270
@Override
275271
Expression visitContinuationAtom(@Nonnull RelationalParser.ContinuationAtomContext ctx);

fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/CursorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public void continuationWithReturnRowLimit() throws SQLException, RelationalExce
176176
} catch (SQLException e) {
177177
throw new RuntimeException(e);
178178
}
179-
try (final var preparedStatement = conn.prepareStatement("select * from RESTAURANT with continuation ?param")) {
179+
try (final var preparedStatement = conn.prepareStatement("EXECUTE CONTINUATION ?param")) {
180180
preparedStatement.setBytes("param", continuation.serialize());
181181
try (final var resultSet = preparedStatement.executeQuery()) {
182182
Assertions.assertThrows(SQLException.class, resultSet::getContinuation);
@@ -218,7 +218,7 @@ public void continuationWithScanRowLimit() throws SQLException, RelationalExcept
218218
// 2. Further count the rows in other execution without limits and see if total number of rows is 10
219219
try (final var conn = DriverManager.getConnection(database.getConnectionUri().toString()).unwrap(RelationalConnection.class)) {
220220
conn.setSchema(database.getSchemaName());
221-
try (final var preparedStatement = conn.prepareStatement("select * from RESTAURANT with continuation ?param")) {
221+
try (final var preparedStatement = conn.prepareStatement("EXECUTE CONTINUATION ?param")) {
222222
preparedStatement.setBytes("param", continuation.serialize());
223223
try (final var resultSet = preparedStatement.executeQuery()) {
224224
Assertions.assertThrows(SQLException.class, resultSet::getContinuation);

fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/PlanGenerationStackTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ public Stream<? extends Arguments> provideArguments(final ExtensionContext conte
143143
Arguments.of(57, "select * from restaurant where (((42 + 3) - 2) + 6 is not null OR ((42 + 3) - 2) + 6 > rest_no) OR (name = 'foo')", null),
144144
Arguments.of(58, "select * from restaurant where rest_no is null", null),
145145
Arguments.of(59, "select * from restaurant where rest_no is not null", null),
146-
Arguments.of(60, "select * from restaurant with continuation b64'abc'", null),
146+
Arguments.of(60, "select * from restaurant with continuation b64'abc'", "syntax error"),
147147
Arguments.of(61, "select * from restaurant USE INDEX (record_name_idx) where rest_no > 10 ", null),
148148
Arguments.of(62, "select * from restaurant USE INDEX (record_name_idx, reviewer_name_idx) where rest_no > 10 ", "Unknown index(es) REVIEWER_NAME_IDX"),
149149
Arguments.of(63, "select * from restaurant USE INDEX (record_name_idx), USE INDEX (reviewer_name_idx) where rest_no > 10 ", "Unknown index(es) REVIEWER_NAME_IDX"),
150-
Arguments.of(64, "select * from restaurant with continuation", "syntax error[[]]select * from restaurant with continuation[[]] ^^"),
150+
Arguments.of(64, "select * from restaurant with continuation", "syntax error"),
151151
Arguments.of(65, "select X.rest_no from (select rest_no from restaurant where 42 >= rest_no OR 42 > rest_no) X", null),
152152
Arguments.of( 66, "select X.UNKNOWN from (select rest_no from restaurant where 42 >= rest_no OR 42 > rest_no) X", "Attempting to query non existing column 'X.UNKNOWN'"),
153153
Arguments.of(67, "select X.rest_no from (select Y.rest_no from (select rest_no from restaurant where 42 >= rest_no OR 42 > rest_no) Y where 42 >= Y.rest_no OR 42 > Y.rest_no) X", null),

fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/SimpleDirectAccessInsertionTests.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040

4141
import java.sql.DriverManager;
4242
import java.sql.SQLException;
43-
import java.util.Base64;
4443
import java.util.Collections;
4544
import java.util.List;
4645

@@ -70,8 +69,9 @@ void useScanContinuationInQueryShouldNotWork() throws Exception {
7069
rrs.next();
7170
continuation1 = rrs.getContinuation();
7271
}
73-
String continuationString = Base64.getEncoder().encodeToString(continuation1.serialize());
74-
org.junit.jupiter.api.Assertions.assertThrows(ContextualSQLException.class, () -> s.executeQuery("SELECT * FROM RESTAURANT_REVIEWER LIMIT 1 WITH CONTINUATION B64'" + continuationString + "'"), "Continuation binding does not match query");
72+
// Try to use scan continuation with EXECUTE CONTINUATION - should fail
73+
String continuationString = java.util.Base64.getEncoder().encodeToString(continuation1.serialize());
74+
org.junit.jupiter.api.Assertions.assertThrows(ContextualSQLException.class, () -> s.executeQuery("EXECUTE CONTINUATION B64'" + continuationString + "'"), "Continuation binding does not match query");
7575
}
7676

7777
// get
@@ -81,8 +81,9 @@ void useScanContinuationInQueryShouldNotWork() throws Exception {
8181
rrs.next();
8282
continuation1 = rrs.getContinuation();
8383
}
84-
String continuationString = Base64.getEncoder().encodeToString(continuation1.serialize());
85-
org.junit.jupiter.api.Assertions.assertThrows(ContextualSQLException.class, () -> s.executeQuery("SELECT * FROM RESTAURANT_REVIEWER LIMIT 1 WITH CONTINUATION B64'" + continuationString + "'"), "Continuation binding does not match query");
84+
// Try to use get continuation with EXECUTE CONTINUATION - should fail
85+
String continuationString = java.util.Base64.getEncoder().encodeToString(continuation1.serialize());
86+
org.junit.jupiter.api.Assertions.assertThrows(ContextualSQLException.class, () -> s.executeQuery("EXECUTE CONTINUATION B64'" + continuationString + "'"), "Continuation binding does not match query");
8687
}
8788
}
8889
}

0 commit comments

Comments
 (0)