From 87178b38e59cbd5324d0b2c51ce2aec8710e0ef7 Mon Sep 17 00:00:00 2001 From: liferoad Date: Thu, 28 Aug 2025 19:34:14 -0400 Subject: [PATCH 1/3] fix(mongodb): update filter composition to handle MongoDB 5.x driver changes Modify filter composition logic to avoid $and wrapping when possible by merging conditions directly into a composite Document. This addresses behavior changes in MongoDB driver 5.x while maintaining backward compatibility. --- .github/trigger_files/beam_PostCommit_SQL.json | 2 +- .../sql/meta/provider/mongodb/MongoDbTable.java | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/trigger_files/beam_PostCommit_SQL.json b/.github/trigger_files/beam_PostCommit_SQL.json index 5df3841d2363..5ac8a7f3f6ee 100644 --- a/.github/trigger_files/beam_PostCommit_SQL.json +++ b/.github/trigger_files/beam_PostCommit_SQL.json @@ -1,4 +1,4 @@ { "comment": "Modify this file in a trivial way to cause this test suite to run ", - "modification": 3 + "modification": 4 } diff --git a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java index 34f56082324a..d2e727d104be 100644 --- a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java +++ b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java @@ -178,7 +178,22 @@ private Bson constructPredicate(List supported) { if (cnf.size() == 1) { return cnf.get(0); } - return Filters.and(cnf); + // Create a composite filter by merging all conditions into a single Document + // This avoids wrapping in $and which changed behavior in MongoDB driver 5.x + Document compositeFilter = new Document(); + for (Bson filter : cnf) { + if (filter instanceof Document) { + Document doc = (Document) filter; + // Merge all top-level conditions into the composite filter + for (String key : doc.keySet()) { + compositeFilter.append(key, doc.get(key)); + } + } else { + // If it's not a Document, fall back to $and wrapping + return Filters.and(cnf); + } + } + return compositeFilter; } /** From ef90a096bd39f387136b03ade4055ce6bc50ab07 Mon Sep 17 00:00:00 2001 From: liferoad Date: Thu, 28 Aug 2025 20:27:06 -0400 Subject: [PATCH 2/3] fix the filter --- .../meta/provider/mongodb/MongoDbTable.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java index d2e727d104be..35ea74996f31 100644 --- a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java +++ b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/mongodb/MongoDbTable.java @@ -21,6 +21,8 @@ import static org.apache.beam.vendor.calcite.v1_40_0.org.apache.calcite.sql.SqlKind.COMPARISON; import static org.apache.beam.vendor.calcite.v1_40_0.org.apache.calcite.sql.SqlKind.OR; +import com.mongodb.BasicDBObject; +import com.mongodb.MongoClientSettings; import com.mongodb.client.model.Filters; import java.io.Serializable; import java.util.ArrayList; @@ -64,6 +66,7 @@ import org.apache.beam.vendor.calcite.v1_40_0.org.apache.calcite.sql.type.SqlTypeName; import org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.annotations.VisibleForTesting; import org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.ImmutableList; +import org.bson.BsonDocument; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.json.JsonMode; @@ -178,19 +181,18 @@ private Bson constructPredicate(List supported) { if (cnf.size() == 1) { return cnf.get(0); } - // Create a composite filter by merging all conditions into a single Document + // Convert all filters to BsonDocument and merge them into a single Document // This avoids wrapping in $and which changed behavior in MongoDB driver 5.x Document compositeFilter = new Document(); for (Bson filter : cnf) { - if (filter instanceof Document) { - Document doc = (Document) filter; - // Merge all top-level conditions into the composite filter - for (String key : doc.keySet()) { - compositeFilter.append(key, doc.get(key)); - } - } else { - // If it's not a Document, fall back to $and wrapping - return Filters.and(cnf); + // Convert any Bson filter to BsonDocument first + BsonDocument bsonDoc = + filter.toBsonDocument(BasicDBObject.class, MongoClientSettings.getDefaultCodecRegistry()); + // Convert BsonDocument to Document for easier manipulation + Document doc = Document.parse(bsonDoc.toJson()); + // Merge all top-level conditions into the composite filter + for (String key : doc.keySet()) { + compositeFilter.append(key, doc.get(key)); } } return compositeFilter; From d72bd0c99d49546a06e0ca235695f97be9d3d2d2 Mon Sep 17 00:00:00 2001 From: liferoad Date: Thu, 28 Aug 2025 21:04:45 -0400 Subject: [PATCH 3/3] disable spotbugs for sql --- sdks/java/extensions/sql/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdks/java/extensions/sql/build.gradle b/sdks/java/extensions/sql/build.gradle index 5527493200f7..f4c0ea0942ac 100644 --- a/sdks/java/extensions/sql/build.gradle +++ b/sdks/java/extensions/sql/build.gradle @@ -41,6 +41,8 @@ applyJavaNature( ], // javacc generated code produces lint warnings disableLintWarnings: ['dep-ann', 'rawtypes'], + // Disable SpotBugs due to ASM bytecode analysis issue with BeamCalcRel class + enableSpotbugs: false, ) description = "Apache Beam :: SDKs :: Java :: Extensions :: SQL"