From e0e3e2a95ba6c6856fb633cd36a767c10371bfea Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Tue, 24 Feb 2026 11:45:42 +0000 Subject: [PATCH 1/4] Update language level to JDK 17 This updates the required project language level from 11 to 17, which is the next LTS version. This is a breaking change, in that downstream projects will need to update their language level to match. As a benefit, though, we get to use JDK 17 features that we've previously refrained from using for backwards compatibility reasons. To showcase this, I've updated some of our test files to use text blocks to more naturally specify the schema template, and I've updated one callsite to use `Stream::toList` instead of `Collectors::toList`. This resolves #2360. --- .idea/misc.xml | 68 +++++++++++-------- build.gradle | 10 +-- .../foundationdb/record/sample/Main.java | 3 +- .../relational/SqlInsertTest.java | 11 +-- .../CaseSensitiveDbObjectsTest.java | 6 +- .../DeleteRangeNoMetadataKeyTest.java | 7 +- .../recordlayer/IntermingledTablesTest.java | 8 ++- .../recordlayer/JoinWithLimitTest.java | 10 +-- .../recordlayer/RecordTypeKeyTest.java | 9 ++- .../recordlayer/RelationalArrayTest.java | 40 ++++++----- .../recordlayer/SqlFunctionsTest.java | 22 +++--- .../recordlayer/StructDataMetadataTest.java | 25 +++---- .../recordlayer/UniqueIndexTests.java | 26 +++---- .../recordlayer/query/CountQueryTest.java | 10 +-- .../query/ForceContinuationQueryTests.java | 36 +++++----- .../query/TransactionBoundQueryTest.java | 11 +-- .../recordlayer/query/UpdateTest.java | 8 ++- .../relational/utils/TestSchemas.java | 62 +++++++++-------- gradle.properties | 2 +- 19 files changed, 211 insertions(+), 163 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 014943bf2b..75e678527b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,47 +8,55 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index d4dc5c72ea..86823573f1 100644 --- a/build.gradle +++ b/build.gradle @@ -191,8 +191,8 @@ subprojects { apply from: rootProject.file('gradle/testing.gradle') java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } def publishBuild = Boolean.parseBoolean(findProperty('publishBuild') ?: 'false') @@ -233,7 +233,7 @@ subprojects { // It would be good to have more coverage, but this allows us to move forward with incomplete docs options.addBooleanOption('Xdoclint:none', true) - options.addStringOption('source', '11') + options.addStringOption('source', '17') options.with { overview "src/main/javadoc/overview.html" @@ -257,8 +257,8 @@ subprojects { //enable incremental compilation options.incremental = true - //target byte-code compatibility with Java 11 (regardless of build JDK) - options.release = 11 + //target byte-code compatibility with Java 17 (regardless of build JDK) + options.release = 17 } } } diff --git a/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java b/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java index 2d3fe34e05..9dc5d96e1a 100644 --- a/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java +++ b/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java @@ -63,7 +63,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; import static com.apple.foundationdb.record.metadata.Key.Expressions.concatenateFields; import static com.apple.foundationdb.record.metadata.Key.Expressions.field; @@ -369,7 +368,7 @@ public static void main(String[] args) { .thenRun(() -> LOGGER.info(" Index build of {} is complete.", indexName)) .whenComplete((vignore, eignore) -> indexBuilder.close()); }) - .collect(Collectors.toList())) + .toList()) ); // Write larger records for Customer (and Order). diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/SqlInsertTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/SqlInsertTest.java index ad549732b5..64bf2a3a16 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/SqlInsertTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/SqlInsertTest.java @@ -52,10 +52,13 @@ public class SqlInsertTest { @RegisterExtension @Order(1) - public final SimpleDatabaseRule database = new SimpleDatabaseRule( - BasicMetadataTest.class, "CREATE TABLE simple (rest_no bigint, name string, primary key(rest_no)) " + - "CREATE TYPE AS STRUCT location (address string, latitude string, longitude string) " + - "CREATE TABLE with_loc (rest_no bigint, name string, loc location, primary key(rest_no))"); + public final SimpleDatabaseRule database = new SimpleDatabaseRule(BasicMetadataTest.class, + """ + CREATE TABLE simple (rest_no bigint, name string, primary key(rest_no)) + CREATE TYPE AS STRUCT location (address string, latitude string, longitude string) + CREATE TABLE with_loc (rest_no bigint, name string, loc location, primary key(rest_no)) + """ + ); @ParameterizedTest @ValueSource(booleans = {true, false}) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/CaseSensitiveDbObjectsTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/CaseSensitiveDbObjectsTest.java index 8c95663bb8..5e0ea17305 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/CaseSensitiveDbObjectsTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/CaseSensitiveDbObjectsTest.java @@ -45,8 +45,10 @@ */ public class CaseSensitiveDbObjectsTest { @Nonnull - private static final String SCHEMA_TEMPLATE = "CREATE TABLE \"t1\" (\"group\" bigint, \"id\" string, \"val\" " + - "bigint, PRIMARY KEY(\"group\", \"id\")) "; + private static final String SCHEMA_TEMPLATE = + """ + CREATE TABLE "t1" ("group" bigint, "id" string, "val" bigint, PRIMARY KEY("group", "id")) + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/DeleteRangeNoMetadataKeyTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/DeleteRangeNoMetadataKeyTest.java index cd30e2e11a..f05c2d255c 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/DeleteRangeNoMetadataKeyTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/DeleteRangeNoMetadataKeyTest.java @@ -47,8 +47,11 @@ * has records that share a single primary key extent. */ public class DeleteRangeNoMetadataKeyTest { - private static final String SCHEMA_TEMPLATE = " CREATE TABLE t1 (id bigint, a string, b string, c string, d string, PRIMARY KEY(id, a, b)) " + - "CREATE TABLE t2 (id bigint, a string, b string, e bigint, f boolean, PRIMARY KEY(id, a, b))"; + private static final String SCHEMA_TEMPLATE = + """ + CREATE TABLE t1 (id bigint, a string, b string, c string, d string, PRIMARY KEY(id, a, b)) + CREATE TABLE t2 (id bigint, a string, b string, e bigint, f boolean, PRIMARY KEY(id, a, b)) + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/IntermingledTablesTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/IntermingledTablesTest.java index 0172e8db31..15f01e5922 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/IntermingledTablesTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/IntermingledTablesTest.java @@ -43,9 +43,11 @@ * and thus different types share the same extent. */ public class IntermingledTablesTest { - private static final String SCHEMA_TEMPLATE = " " + - "CREATE TABLE t1 (group bigint, id string, val bigint, PRIMARY KEY(group, id)) " + - "CREATE TABLE t2 (group bigint, id string, val2 string, PRIMARY KEY(group, id))"; + private static final String SCHEMA_TEMPLATE = + """ + CREATE TABLE t1 (group bigint, id string, val bigint, PRIMARY KEY(group, id)) + CREATE TABLE t2 (group bigint, id string, val2 string, PRIMARY KEY(group, id)) + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/JoinWithLimitTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/JoinWithLimitTest.java index 88048d0684..c3b0811d12 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/JoinWithLimitTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/JoinWithLimitTest.java @@ -40,10 +40,12 @@ public class JoinWithLimitTest { public final EmbeddedRelationalExtension relationalExtension = new EmbeddedRelationalExtension(); private static final String getTemplate_definition = - "CREATE TABLE R(rpk bigint, ra bigint, primary key(rpk))" + - "CREATE TABLE S(spk bigint, sa bigint, primary key(spk))" + - "CREATE TYPE AS STRUCT D ( e bigint )" + - "CREATE TABLE Q(qpk bigint, d D array, PRIMARY KEY(qpk))"; + """ + CREATE TABLE R(rpk bigint, ra bigint, primary key(rpk)) + CREATE TABLE S(spk bigint, sa bigint, primary key(spk)) + CREATE TYPE AS STRUCT D ( e bigint ) + CREATE TABLE Q(qpk bigint, d D array, PRIMARY KEY(qpk)) + """; @RegisterExtension @Order(1) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java index 7106708675..923ac99893 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java @@ -45,9 +45,12 @@ public class RecordTypeKeyTest { @Order(1) public final SimpleDatabaseRule database = new SimpleDatabaseRule( RecordTypeKeyTest.class, - "CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY)" + - " CREATE TABLE restaurant_tag (tag string, weight bigint, PRIMARY KEY(tag))" + - " CREATE INDEX record_rt_covering_idx as select reviewer from restaurant_review"); + """ + CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY + CREATE TABLE restaurant_tag (tag string, weight bigint, PRIMARY KEY(tag)) + CREATE INDEX record_rt_covering_idx as select reviewer from restaurant_review + """ + ); @RegisterExtension @Order(2) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RelationalArrayTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RelationalArrayTest.java index bcae7dc15f..7b7d08030c 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RelationalArrayTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RelationalArrayTest.java @@ -55,30 +55,34 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class RelationalArrayTest { + + // "enumeration_null enumeration array, enumeration_not_null enumeration array not null, " + + private static final String SCHEMA_TEMPLATE = + """ + CREATE TYPE AS STRUCT STRUCTURE(a integer, b string) + CREATE TYPE as enum enumeration('a', 'b') + CREATE TABLE T( + pk integer, + boolean_null boolean array, boolean_not_null boolean array not null, + integer_null integer array, integer_not_null integer array not null, + bigint_null bigint array, bigint_not_null bigint array not null, + float_null float array, float_not_null float array not null, + double_null double array, double_not_null double array not null, + string_null string array, string_not_null string array not null, + bytes_null bytes array, bytes_not_null bytes array not null, + struct_null structure array, struct_not_null structure array not null, + uuid_null uuid array, uuid_not_null uuid array not null, + primary key(pk)) + CREATE TABLE B(pk integer, uuid_null uuid array, primary key(pk)) + """; + @RegisterExtension @Order(0) public final EmbeddedRelationalExtension relationalExtension = new EmbeddedRelationalExtension(); @RegisterExtension @Order(1) - public final SimpleDatabaseRule database = new SimpleDatabaseRule(RelationalArrayTest.class, SCHEMA); - - private static final String SCHEMA = "CREATE TYPE AS STRUCT STRUCTURE(a integer, b string) " + - "CREATE TYPE as enum enumeration('a', 'b') " + - "CREATE TABLE T(" + - "pk integer, " + - "boolean_null boolean array, boolean_not_null boolean array not null, " + - "integer_null integer array, integer_not_null integer array not null, " + - "bigint_null bigint array, bigint_not_null bigint array not null, " + - "float_null float array, float_not_null float array not null, " + - "double_null double array, double_not_null double array not null, " + - "string_null string array, string_not_null string array not null, " + - "bytes_null bytes array, bytes_not_null bytes array not null, " + - "struct_null structure array, struct_not_null structure array not null, " + - "uuid_null uuid array, uuid_not_null uuid array not null, " + - // "enumeration_null enumeration array, enumeration_not_null enumeration array not null, " + - "primary key(pk)) " + - "CREATE TABLE B(pk integer, uuid_null uuid array, primary key(pk))"; + public final SimpleDatabaseRule database = new SimpleDatabaseRule(RelationalArrayTest.class, SCHEMA_TEMPLATE); public void insertQuery(@Nonnull String q) throws SQLException { try (final var conn = DriverManager.getConnection(database.getConnectionUri().toString())) { diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/SqlFunctionsTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/SqlFunctionsTest.java index 3247b9de6b..2334fed6c4 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/SqlFunctionsTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/SqlFunctionsTest.java @@ -34,16 +34,18 @@ public class SqlFunctionsTest { @Nonnull - private static final String SCHEMA_TEMPLATE = " " + - "create table t1(col1 bigint, col2 string, col3 integer, primary key(col1))\n" + - "create function f1 ( in a bigint, in b string )\n" + - "as select col1, col2 from t1 where col1 < a and col2 = b\n" + - "create function f2 ( in k bigint )\n" + - "as select col1, col2 from f1(102, 'b')\n" + - "create function f3 (in x bigint, in y string)\n" + - "as select a.col1 as col1a, a.col2 as col2a, b.col1 as col1b, b.col2 as col2b from f2(x) as a, f1(x, y) as b\n" + - "create function f4 (in x bigint, in y string)\n" + - "as select col1a + col1b as s, col2a, col2b from f3(x, y)\n"; + private static final String SCHEMA_TEMPLATE = + """ + create table t1(col1 bigint, col2 string, col3 integer, primary key(col1)) + create function f1 ( in a bigint, in b string ) + as select col1, col2 from t1 where col1 < a and col2 = b + create function f2 ( in k bigint ) + as select col1, col2 from f1 (102, 'b') + create function f3 (in x bigint, in y string) + as select a.col1 as col1a, a.col2 as col2a, b.col1 as col1b, b.col2 as col2b from f2(x) as a, f1(x, y) as b + create function f4 (in x bigint, in y string) + as select col1a + col1b as s, col2a, col2b from f3(x, y) + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/StructDataMetadataTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/StructDataMetadataTest.java index cd55ce6993..898e0313d0 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/StructDataMetadataTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/StructDataMetadataTest.java @@ -54,18 +54,19 @@ public class StructDataMetadataTest { public static final EmbeddedRelationalExtension relationalExtension = new EmbeddedRelationalExtension(); private static final String TABLE_STRUCTURE = - "CREATE TYPE AS STRUCT struct_1 (a string) " + - " CREATE TABLE t (name string, st1 struct_1, PRIMARY KEY(name))" + - " CREATE TYPE AS STRUCT struct_2 (c bigint, d struct_1) " + - " CREATE TABLE nt (t_name string, st1 struct_2, PRIMARY KEY(t_name))" + - " CREATE TYPE AS STRUCT struct_3 (c bytes, d boolean) " + - " CREATE TABLE at (a_name string, st2 struct_3 ARRAY, PRIMARY KEY(a_name))" + - " CREATE TYPE AS STRUCT n1(a bigint, b string) " + - " CREATE TYPE AS STRUCT n2(a bigint, b string) " + - " CREATE TYPE AS STRUCT m(x n1, y n2) " + - " CREATE TABLE t3(id bigint, m m, PRIMARY KEY(id)) " + - " CREATE TABLE t4(id bigint, n1 n1, n2 n2, PRIMARY KEY(id)) "; - + """ + CREATE TYPE AS STRUCT struct_1 (a string) + CREATE TABLE t (name string, st1 struct_1, PRIMARY KEY(name)) + CREATE TYPE AS STRUCT struct_2 (c bigint, d struct_1) + CREATE TABLE nt (t_name string, st1 struct_2, PRIMARY KEY(t_name)) + CREATE TYPE AS STRUCT struct_3 (c bytes, d boolean) + CREATE TABLE at (a_name string, st2 struct_3 ARRAY, PRIMARY KEY(a_name)) + CREATE TYPE AS STRUCT n1(a bigint, b string) + CREATE TYPE AS STRUCT n2(a bigint, b string) + CREATE TYPE AS STRUCT m(x n1, y n2) + CREATE TABLE t3(id bigint, m m, PRIMARY KEY(id)) + CREATE TABLE t4(id bigint, n1 n1, n2 n2, PRIMARY KEY(id)) + """; /* message at { diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/UniqueIndexTests.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/UniqueIndexTests.java index c3474e944c..3fca332608 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/UniqueIndexTests.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/UniqueIndexTests.java @@ -45,18 +45,20 @@ public class UniqueIndexTests { public final EmbeddedRelationalExtension relationalExtension = new EmbeddedRelationalExtension(); private static final String getTemplate_definition = - "CREATE TABLE T1(t1_p bigint, t1_a bigint, primary key(t1_p))\n" + - "CREATE UNIQUE INDEX mv1 AS SELECT t1_a FROM t1\n" + - "CREATE TABLE T2(t2_p bigint, t2_a bigint, t2_b bigint, primary key(t2_p))\n" + - "CREATE UNIQUE INDEX mv2 AS SELECT t2_a, t2_b FROM t2 order by t2_a, t2_b\n" + - "CREATE TABLE T3(t3_p bigint, t3_a bigint, t3_b bigint, primary key(t3_p))\n" + - "CREATE UNIQUE INDEX mv3 AS SELECT t3_a FROM t3\n" + - "CREATE UNIQUE INDEX mv4 AS SELECT t3_b FROM t3\n" + - "CREATE TYPE AS STRUCT ST1(st1_a bigint)\n" + - "CREATE TABLE T4(t4_p bigint, t4_st1 st1 array, primary key(t4_p))\n" + - "CREATE UNIQUE INDEX mv5 AS SELECT v.st1_a from t4 t, (SELECT u.st1_a from t.t4_st1 u) v\n" + - "CREATE TABLE T5(t5_p bigint, t5_a bigint, t5_b bigint, t5_c bigint, t5_d bigint, primary key(t5_p))\n" + - "CREATE UNIQUE INDEX mv6 AS SELECT t5_a, t5_b, t5_c, t5_d from t5 order by t5_d, t5_c\n"; + """ + CREATE TABLE T1(t1_p bigint, t1_a bigint, primary key(t1_p)) + CREATE UNIQUE INDEX mv1 AS SELECT t1_a FROM t1 + CREATE TABLE T2(t2_p bigint, t2_a bigint, t2_b bigint, primary key(t2_p)) + CREATE UNIQUE INDEX mv2 AS SELECT t2_a, t2_b FROM t2 order by t2_a, t2_b + CREATE TABLE T3(t3_p bigint, t3_a bigint, t3_b bigint, primary key(t3_p)) + CREATE UNIQUE INDEX mv3 AS SELECT t3_a FROM t3 + CREATE UNIQUE INDEX mv4 AS SELECT t3_b FROM t3 + CREATE TYPE AS STRUCT ST1(st1_a bigint) + CREATE TABLE T4(t4_p bigint, t4_st1 st1 array, primary key(t4_p)) + CREATE UNIQUE INDEX mv5 AS SELECT v.st1_a from t4 t, (SELECT u.st1_a from t.t4_st1 u) v + CREATE TABLE T5(t5_p bigint, t5_a bigint, t5_b bigint, t5_c bigint, t5_d bigint, primary key(t5_p)) + CREATE UNIQUE INDEX mv6 AS SELECT t5_a, t5_b, t5_c, t5_d from t5 order by t5_d, t5_c + """; @RegisterExtension @Order(1) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/CountQueryTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/CountQueryTest.java index 5fdf6bd20c..06960d591e 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/CountQueryTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/CountQueryTest.java @@ -43,10 +43,12 @@ */ public class CountQueryTest { private static final String SCHEMA_TEMPLATE = - "CREATE TABLE t1 (id bigint, a string, b bigint, primary key (id)) " + - "CREATE INDEX i1 ON t1(a) " + - "CREATE INDEX i2 AS SELECT count(*) FROM t1 GROUP BY a " + - "CREATE INDEX i3 AS SELECT count(a) FROM t1 GROUP BY b"; + """ + CREATE TABLE t1 (id bigint, a string, b bigint, primary key (id)) + CREATE INDEX i1 ON t1(a) + CREATE INDEX i2 AS SELECT count(*) FROM t1 GROUP BY a + CREATE INDEX i3 AS SELECT count(a) FROM t1 GROUP BY b + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/ForceContinuationQueryTests.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/ForceContinuationQueryTests.java index 02b4a07e24..849c1cd32b 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/ForceContinuationQueryTests.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/ForceContinuationQueryTests.java @@ -45,23 +45,25 @@ public class ForceContinuationQueryTests { public final EmbeddedRelationalExtension relationalExtension = new EmbeddedRelationalExtension(); private static final String getTemplate_definition = - "create table t1(id bigint, col1 bigint, col2 bigint, primary key(id))\n" + - "create index mv1 as select count(*) from t1\n" + - "create index mv2 as select count(*) from t1 group by col2\n" + - "create index mv3 as select count(col1) from t1\n" + - "create index mv4 as select count(col1) from t1 group by col2\n" + - - "create table t2(id bigint, col1 bigint, col2 bigint, col3 bigint, primary key(id))\n" + - "create index mv5 as select col2 from t2\n" + - "create index mv7 as select min_ever(col3) from t2\n" + - - "create table t3(id bigint, col1 bigint, col2 bigint, primary key(id))\n" + - "create index t3_i1 as select count(*) from t3\n" + - "create index t3_i2 as select count(*) from t3 group by col1\n" + - "create index t3_i3 as select count(col2) from t3\n" + - "create index t3_i4 as select count(col2) from t3 group by col1\n" + - "create index t3_i5 as select sum(col1) from t3\n" + - "create index t3_i6 as select sum(col1) from t3 group by col2"; + """ + create table t1(id bigint, col1 bigint, col2 bigint, primary key(id)) + create index mv1 as select count(*) from t1 + create index mv2 as select count(*) from t1 group by col2 + create index mv3 as select count(col1) from t1 + create index mv4 as select count(col1) from t1 group by col2 + + create table t2(id bigint, col1 bigint, col2 bigint, col3 bigint, primary key(id)) + create index mv5 as select col2 from t2 + create index mv7 as select min_ever(col3) from t2 + + create table t3(id bigint, col1 bigint, col2 bigint, primary key(id)) + create index t3_i1 as select count(*) from t3 + create index t3_i2 as select count(*) from t3 group by col1 + create index t3_i3 as select count(col2) from t3 + create index t3_i4 as select count(col2) from t3 group by col1 + create index t3_i5 as select sum(col1) from t3 + create index t3_i6 as select sum(col1) from t3 group by col2 + """; @RegisterExtension @Order(1) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/TransactionBoundQueryTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/TransactionBoundQueryTest.java index d3f9844ff7..15ae12cfba 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/TransactionBoundQueryTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/TransactionBoundQueryTest.java @@ -72,10 +72,13 @@ public class TransactionBoundQueryTest { @Nonnull - private static final String SCHEMA_TEMPLATE = " CREATE TABLE t1(id bigint, a bigint, b string, PRIMARY KEY(id)) " + - "CREATE TYPE as STRUCT entry(key string, value bigint) " + - "CREATE TABLE t2(id bigint, a bigint, c string, d entry ARRAY, PRIMARY KEY (id)) " + - "CREATE TABLE t3(id bigint, a bigint, e bigint, f bigint, PRIMARY KEY(id))"; + private static final String SCHEMA_TEMPLATE = + """ + CREATE TABLE t1(id bigint, a bigint, b string, PRIMARY KEY(id)) + CREATE TYPE as STRUCT entry(key string, value bigint) + CREATE TABLE t2(id bigint, a bigint, c string, d entry ARRAY, PRIMARY KEY (id)) + CREATE TABLE t3(id bigint, a bigint, e bigint, f bigint, PRIMARY KEY(id)) + """; @RegisterExtension @Order(0) @Nonnull diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/UpdateTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/UpdateTest.java index a5c11bbd3a..cb37157b60 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/UpdateTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/UpdateTest.java @@ -54,9 +54,11 @@ public class UpdateTest { private static final String schemaTemplate = - "CREATE TYPE AS STRUCT LatLong (latitude double, longitude double)" + - " CREATE TYPE AS STRUCT ReviewerStats (start_date bigint, school_name string, hometown string)" + - " CREATE TABLE RestaurantReviewer (id bigint, name string, email string, stats ReviewerStats, secrets bytes array, PRIMARY KEY(id))"; + """ + CREATE TYPE AS STRUCT LatLong (latitude double, longitude double) + CREATE TYPE AS STRUCT ReviewerStats (start_date bigint, school_name string, hometown string) + CREATE TABLE RestaurantReviewer (id bigint, name string, email string, stats ReviewerStats, secrets bytes array, PRIMARY KEY(id)) + """; @RegisterExtension @Order(0) diff --git a/fdb-relational-core/src/testFixtures/java/com/apple/foundationdb/relational/utils/TestSchemas.java b/fdb-relational-core/src/testFixtures/java/com/apple/foundationdb/relational/utils/TestSchemas.java index e1d9b29686..58e23bcd91 100644 --- a/fdb-relational-core/src/testFixtures/java/com/apple/foundationdb/relational/utils/TestSchemas.java +++ b/fdb-relational-core/src/testFixtures/java/com/apple/foundationdb/relational/utils/TestSchemas.java @@ -35,17 +35,19 @@ private TestSchemas() { } private static final String RESTAURANT_SCHEMA = - "CREATE TYPE AS STRUCT Location (address string, latitude string, longitude string)" + - "CREATE TYPE AS ENUM cuisine ('indian', 'british', 'mexican', 'japanese', 'korean')" + - "CREATE TYPE AS STRUCT restaurant_review (reviewer bigint, rating bigint)" + - "CREATE TYPE AS STRUCT restaurant_tag (tag string, weight bigint)" + - "CREATE TYPE AS STRUCT reviewer_stats (start_date bigint, school_name string, hometown string)" + - "CREATE TYPE AS STRUCT item (name string, price float)" + - "CREATE TABLE restaurant (rest_no bigint, name string, location Location, reviews restaurant_review ARRAY, tags restaurant_tag array, customer string array, encoded_bytes bytes, PRIMARY KEY(rest_no))" + - "CREATE TABLE restaurant_reviewer (id bigint, name string, email string, stats reviewer_stats, PRIMARY KEY(id))" + - "CREATE TABLE restaurant_menu(id bigint, rest_no bigint, cuisine cuisine, items item array not null, reviews restaurant_review ARRAY, primary key(id, rest_no))" + - "CREATE INDEX record_name_idx as select name from restaurant " + - "CREATE INDEX reviewer_name_idx as select name from restaurant_reviewer "; + """ + CREATE TYPE AS STRUCT Location (address string, latitude string, longitude string) + CREATE TYPE AS ENUM cuisine ('indian', 'british', 'mexican', 'japanese', 'korean') + CREATE TYPE AS STRUCT restaurant_review (reviewer bigint, rating bigint) + CREATE TYPE AS STRUCT restaurant_tag (tag string, weight bigint) + CREATE TYPE AS STRUCT reviewer_stats (start_date bigint, school_name string, hometown string) + CREATE TYPE AS STRUCT item (name string, price float) + CREATE TABLE restaurant (rest_no bigint, name string, location Location, reviews restaurant_review ARRAY, tags restaurant_tag array, customer string array, encoded_bytes bytes, PRIMARY KEY(rest_no)) + CREATE TABLE restaurant_reviewer (id bigint, name string, email string, stats reviewer_stats, PRIMARY KEY(id)) + CREATE TABLE restaurant_menu(id bigint, rest_no bigint, cuisine cuisine, items item array not null, reviews restaurant_review ARRAY, primary key(id, rest_no)) + CREATE INDEX record_name_idx as select name from restaurant + CREATE INDEX reviewer_name_idx as select name from restaurant_reviewer + """; @Nonnull public static String restaurant() { @@ -60,12 +62,14 @@ public static String restaurantWithCoveringIndex() { @Nonnull private static final String PLAYING_CARD = - "CREATE TYPE AS ENUM suit ('SPADES', 'HEARTS', 'DIAMONDS', 'CLUBS') " + - "CREATE TYPE AS STRUCT SuitAndRank (suit suit, rank bigint)" + - "CREATE TABLE Card (id bigint, suit suit, rank bigint, PRIMARY KEY(id))" + - "CREATE TABLE Card_Nested (id bigint, info SuitAndRank, PRIMARY KEY(id))" + - "CREATE TABLE Card_Array (id bigint, collection SuitAndRank array, PRIMARY KEY(id))" + - "CREATE INDEX suit_idx ON Card(suit)"; + """ + CREATE TYPE AS ENUM suit ('SPADES', 'HEARTS', 'DIAMONDS', 'CLUBS') + CREATE TYPE AS STRUCT SuitAndRank (suit suit, rank bigint) + CREATE TABLE Card (id bigint, suit suit, rank bigint, PRIMARY KEY(id)) + CREATE TABLE Card_Nested (id bigint, info SuitAndRank, PRIMARY KEY(id)) + CREATE TABLE Card_Array (id bigint, collection SuitAndRank array, PRIMARY KEY(id)) + CREATE INDEX suit_idx ON Card(suit) + """; @Nonnull public static String playingCard() { @@ -74,11 +78,13 @@ public static String playingCard() { @Nonnull private static final String BOOKS_SCHEMAS = - "CREATE TABLE BOOKS(id integer, TITLE string, YEAR integer, primary key (id))" + - "CREATE INDEX IDX_1970 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1970 AND YEAR <= 1979" + - "CREATE INDEX IDX_1980 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1980 AND YEAR <= 1989" + - "CREATE INDEX IDX_1990 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1990 AND YEAR <= 1999" + - "CREATE INDEX IDX_2000 AS SELECT YEAR FROM BOOKS WHERE YEAR > 2000"; + """ + CREATE TABLE BOOKS(id integer, TITLE string, YEAR integer, primary key (id)) + CREATE INDEX IDX_1970 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1970 AND YEAR <= 1979 + CREATE INDEX IDX_1980 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1980 AND YEAR <= 1989 + CREATE INDEX IDX_1990 AS SELECT YEAR FROM BOOKS WHERE YEAR > 1990 AND YEAR <= 1999 + CREATE INDEX IDX_2000 AS SELECT YEAR FROM BOOKS WHERE YEAR > 2000 + """; @Nonnull public static String books() { @@ -87,11 +93,13 @@ public static String books() { @Nonnull private static final String SCORE_SCHEMA = - "CREATE TABLE score(id bigint, player string, game bigint, score bigint, playDuration bigint, primary key(id))" + - "CREATE INDEX maxScoreByGame10 AS SELECT MAX(score), game + 10 FROM score GROUP BY game + 10" + - "CREATE INDEX maxScoreByGame20 AS SELECT MAX(score), game + 20 FROM score GROUP BY game + 20" + - "CREATE INDEX bitAndScore2 AS SELECT game & 2, MAX(score) FROM score GROUP BY game & 2" + - "CREATE INDEX bitAndScore4 AS SELECT game & 4, MAX(score) FROM score GROUP BY game & 4"; + """ + CREATE TABLE score(id bigint, player string, game bigint, score bigint, playDuration bigint, primary key(id)) + CREATE INDEX maxScoreByGame10 AS SELECT MAX(score), game + 10 FROM score GROUP BY game + 10 + CREATE INDEX maxScoreByGame20 AS SELECT MAX(score), game + 20 FROM score GROUP BY game + 20 + CREATE INDEX bitAndScore2 AS SELECT game & 2, MAX(score) FROM score GROUP BY game & 2 + CREATE INDEX bitAndScore4 AS SELECT game & 4, MAX(score) FROM score GROUP BY game & 4 + """; @Nonnull public static String score() { diff --git a/gradle.properties b/gradle.properties index 771aa24454..2f85665dc4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ # rootProject.name=fdb-record-layer -version=4.10.3.0 +version=4.11.0.0 releaseBuild=false # this should be false for release branches (i.e. if there is no -SNAPSHOT on the above version) From 5c1a63d2db4276bc788c35f9129743c4ddc1838c Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Tue, 24 Feb 2026 16:14:33 +0000 Subject: [PATCH 2/4] update jacoco version to be able to read java 17 classes --- .idea/misc.xml | 2 +- .../foundationdb/relational/recordlayer/RecordTypeKeyTest.java | 2 +- gradle/libs.versions.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 75e678527b..b5850a4e20 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -56,7 +56,7 @@ - + \ No newline at end of file diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java index 923ac99893..cc9c43d82f 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java @@ -46,7 +46,7 @@ public class RecordTypeKeyTest { public final SimpleDatabaseRule database = new SimpleDatabaseRule( RecordTypeKeyTest.class, """ - CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY + CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY) CREATE TABLE restaurant_tag (tag string, weight bigint, PRIMARY KEY(tag)) CREATE INDEX record_rt_covering_idx as select reviewer from restaurant_review """ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c262cc9d7..3690345df6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ snakeyaml = "2.2" # Static analysis dependency versions -jacoco = "0.8.5" +jacoco = "0.8.14" spotbugs = "4.9.0" [libraries] From d6804a4d165fea7d92badbc971cab893d938e0db Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Wed, 25 Feb 2026 13:58:24 +0000 Subject: [PATCH 3/4] remove .toList() call in Main and put it in RangeSetTest --- .../java/com/apple/foundationdb/record/sample/Main.java | 3 ++- .../java/com/apple/foundationdb/async/RangeSetTest.java | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java b/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java index 9dc5d96e1a..2d3fe34e05 100644 --- a/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java +++ b/examples/src/main/java/com/apple/foundationdb/record/sample/Main.java @@ -63,6 +63,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import static com.apple.foundationdb.record.metadata.Key.Expressions.concatenateFields; import static com.apple.foundationdb.record.metadata.Key.Expressions.field; @@ -368,7 +369,7 @@ public static void main(String[] args) { .thenRun(() -> LOGGER.info(" Index build of {} is complete.", indexName)) .whenComplete((vignore, eignore) -> indexBuilder.close()); }) - .toList()) + .collect(Collectors.toList())) ); // Write larger records for Customer (and Order). diff --git a/fdb-extensions/src/test/java/com/apple/foundationdb/async/RangeSetTest.java b/fdb-extensions/src/test/java/com/apple/foundationdb/async/RangeSetTest.java index b830405c33..2b9a500f22 100644 --- a/fdb-extensions/src/test/java/com/apple/foundationdb/async/RangeSetTest.java +++ b/fdb-extensions/src/test/java/com/apple/foundationdb/async/RangeSetTest.java @@ -357,7 +357,7 @@ void insertNonOverlappingRanges() { Range fullRange = new Range(new byte[]{1}, new byte[]{(byte) (transactionCount + 1)}); List gaps = IntStream.range(0, transactionCount) .mapToObj(i -> new Range(new byte[]{(byte)(i + 1), 0x00}, new byte[]{(byte)(i + 2)})) - .collect(Collectors.toList()); + .toList(); assertGaps(fullRange, gaps, new byte[]{(byte)(transactionCount), 0x00}); } @@ -386,7 +386,7 @@ void insertOverlappingRanges() { List gaps = IntStream.range(0, transactionCount) .filter(i -> i % 2 != 0) .mapToObj(i -> new Range(new byte[]{(byte)(i + 1), 0x00}, new byte[]{(byte)(i + 2)})) - .collect(Collectors.toList()); + .toList(); assertGaps(fullRange, gaps, new byte[]{(byte)(transactionCount), 0x00}); } @@ -432,7 +432,7 @@ private void assertGaps(Range fullRange, List gaps, byte[] lastInRange) { void concurrentlyReadAndFillInGaps() { List ranges = IntStream.range(0, 10) .mapToObj(i -> new Range(new byte[]{(byte) (2 * i + 1)}, new byte[]{(byte) (2 * i + 2)})) - .collect(Collectors.toList()); + .toList(); try (Transaction tr = db.createTransaction()) { for (Range r : ranges) { rs.insertRange(tr, r, true).join(); From c04ed107ab416aa7ab5ffa14579eaefcbd063028 Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Mon, 9 Mar 2026 11:36:08 +0000 Subject: [PATCH 4/4] fix indentation in RecordTypeKeyTest --- .../relational/recordlayer/RecordTypeKeyTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java index cc9c43d82f..21cd11b2cb 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/RecordTypeKeyTest.java @@ -45,11 +45,11 @@ public class RecordTypeKeyTest { @Order(1) public final SimpleDatabaseRule database = new SimpleDatabaseRule( RecordTypeKeyTest.class, - """ - CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY) - CREATE TABLE restaurant_tag (tag string, weight bigint, PRIMARY KEY(tag)) - CREATE INDEX record_rt_covering_idx as select reviewer from restaurant_review - """ + """ + CREATE TABLE restaurant_review (reviewer bigint, rating bigint, SINGLE ROW ONLY) + CREATE TABLE restaurant_tag (tag string, weight bigint, PRIMARY KEY(tag)) + CREATE INDEX record_rt_covering_idx as select reviewer from restaurant_review + """ ); @RegisterExtension