From 921acb7ce2874e9e04abff48c943c70833473e42 Mon Sep 17 00:00:00 2001 From: Sebastian Haracz Date: Wed, 14 Jun 2023 20:02:58 +0200 Subject: [PATCH 1/4] Fix nested arrayFilters in Mongo driver --- .../avsystem/commons/mongo/typed/MongoUpdate.scala | 12 +++++++++--- .../commons/mongo/typed/MongoUpdateTest.scala | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala b/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala index 66b0f5d1c..748782b5f 100644 --- a/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala +++ b/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala @@ -45,9 +45,15 @@ sealed trait MongoUpdate[T] { case ArrayElementsQualifier.FirstMatching() => "$" case ArrayElementsQualifier.Each() => "$[]" case ArrayElementsQualifier.Filtered(filter) => - val name = s"filter${arrayFilters.size}" - arrayFilters.add(Bson.document(name, filter.toBson)) - s"$$[$name]" + val identifier = s"filter${arrayFilters.size}" + val (name, query) = filter match { + case MongoFilter.PropertyValueFilter(prop, filter) => + identifier + MongoPropertyRef.Separator + prop.rawPath -> filter + case filter => + identifier -> filter + } + arrayFilters.add(Bson.document(name, query.toBson)) + s"$$[$identifier]" } val newPath = path + MongoPropertyRef.Separator + rawQualifier diff --git a/mongo/jvm/src/test/scala/com/avsystem/commons/mongo/typed/MongoUpdateTest.scala b/mongo/jvm/src/test/scala/com/avsystem/commons/mongo/typed/MongoUpdateTest.scala index 61d9a4a7f..e5b75f9d5 100644 --- a/mongo/jvm/src/test/scala/com/avsystem/commons/mongo/typed/MongoUpdateTest.scala +++ b/mongo/jvm/src/test/scala/com/avsystem/commons/mongo/typed/MongoUpdateTest.scala @@ -68,6 +68,10 @@ class MongoUpdateTest extends AnyFunSuite { """{"$set": {"intList.$[filter0]": 5}}, [{"filter0": {"$lt": 0}}]""") assert(toString(Rte.ref(_.innerList).updateAll(_.ref(_.int).set(5))) == """{"$set": {"innerList.$[].int": 5}}, []""") + assert(toString(Rte.ref(_.innerList).updateFiltered(_.ref(_.int).lt(0), _.ref(_.int).set(5))) == + """{"$set": {"innerList.$[filter0].int": 5}}, [{"filter0.int": {"$lt": 0}}]""") + assert(toString(Rte.ref(_.innerList).updateFiltered(_.ref(_.intMap("abc")).lt(0), _.ref(_.int).set(5))) == + """{"$set": {"innerList.$[filter0].int": 5}}, [{"filter0.intMap.abc": {"$lt": 0}}]""") } test("compound updates") { From 92ec2f3bc7119c9509ac022b2e8282aedad4e73e Mon Sep 17 00:00:00 2001 From: Sebastian Haracz Date: Thu, 15 Jun 2023 10:40:42 +0200 Subject: [PATCH 2/4] Redis 6.2.12 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ad5c71b1..bdb607b8f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ on: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REDIS_VERSION: 6.2.6 + REDIS_VERSION: 6.2.12 jobs: build: From 94f999e5e3bb5350325108fc5a084233d810ebe1 Mon Sep 17 00:00:00 2001 From: Sebastian Haracz Date: Thu, 15 Jun 2023 10:45:29 +0200 Subject: [PATCH 3/4] Redis 6.2.12 --- project/Commons.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Commons.scala b/project/Commons.scala index 11668a62c..860e2b385 100644 --- a/project/Commons.scala +++ b/project/Commons.scala @@ -78,7 +78,7 @@ object Commons extends ProjectGroup("commons") { githubWorkflowTargetTags ++= Seq("v*"), githubWorkflowEnv ++= Map( - "REDIS_VERSION" -> "6.2.6", + "REDIS_VERSION" -> "6.2.12", ), githubWorkflowJavaVersions := Seq(JavaSpec.graalvm("21.1.0", "11"), JavaSpec.temurin("17")), githubWorkflowBuildPreamble ++= Seq( From 23249051ae719bb75d76f1da027849f88e061dbf Mon Sep 17 00:00:00 2001 From: Sebastian Haracz Date: Thu, 15 Jun 2023 15:01:45 +0200 Subject: [PATCH 4/4] Rename --- .../scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala b/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala index 748782b5f..a8e240003 100644 --- a/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala +++ b/mongo/jvm/src/main/scala/com/avsystem/commons/mongo/typed/MongoUpdate.scala @@ -47,8 +47,9 @@ sealed trait MongoUpdate[T] { case ArrayElementsQualifier.Filtered(filter) => val identifier = s"filter${arrayFilters.size}" val (name, query) = filter match { - case MongoFilter.PropertyValueFilter(prop, filter) => - identifier + MongoPropertyRef.Separator + prop.rawPath -> filter + case MongoFilter.PropertyValueFilter(prop, propertyFilter) => + // https://www.mongodb.com/docs/manual/reference/operator/update/positional-filtered/#update-all-documents-that-match-arrayfilters-in-an-array + identifier + MongoPropertyRef.Separator + prop.rawPath -> propertyFilter case filter => identifier -> filter }