diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eeb11eb2..74eff90d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.8.0](https://github.com/googleapis/java-datastore/compare/v2.7.0...v2.8.0) (2022-06-09) + + +### Features + +* support IN/NOT_IN/NOT_EQUAL operators ([#688](https://github.com/googleapis/java-datastore/issues/688)) ([f8a84ff](https://github.com/googleapis/java-datastore/commit/f8a84ffa6d743501f5cfb71ac271d8a9b764705c)) + ## [2.7.0](https://github.com/googleapis/java-datastore/compare/v2.6.0...v2.7.0) (2022-06-02) diff --git a/README.md b/README.md index cc6f5854f..3b3853f06 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import @@ -41,7 +41,7 @@ If you are using Maven without BOM, add this to your dependencies: com.google.cloud google-cloud-datastore - 2.6.0 + 2.7.0 ``` @@ -49,20 +49,20 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies ```Groovy -implementation platform('com.google.cloud:libraries-bom:25.3.0') +implementation platform('com.google.cloud:libraries-bom:25.4.0') implementation 'com.google.cloud:google-cloud-datastore' ``` If you are using Gradle without BOM, add this to your dependencies ```Groovy -implementation 'com.google.cloud:google-cloud-datastore:2.6.0' +implementation 'com.google.cloud:google-cloud-datastore:2.7.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.6.0" +libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.7.0" ``` ## Authentication diff --git a/datastore-v1-proto-client/pom.xml b/datastore-v1-proto-client/pom.xml index d6dce089b..8dd942d71 100644 --- a/datastore-v1-proto-client/pom.xml +++ b/datastore-v1-proto-client/pom.xml @@ -19,12 +19,12 @@ 4.0.0 com.google.cloud.datastore datastore-v1-proto-client - 2.7.0 + 2.8.0 com.google.cloud google-cloud-datastore-parent - 2.7.0 + 2.8.0 jar diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index a1ec96109..f452f3022 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-datastore-bom - 2.7.0 + 2.8.0 pom com.google.cloud @@ -52,22 +52,22 @@ com.google.cloud google-cloud-datastore - 2.7.0 + 2.8.0 com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.98.0 + 0.99.0 com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml index 47481a1a6..49778e706 100644 --- a/google-cloud-datastore/pom.xml +++ b/google-cloud-datastore/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-datastore - 2.7.0 + 2.8.0 jar Google Cloud Datastore https://github.com/googleapis/java-datastore @@ -12,7 +12,7 @@ com.google.cloud google-cloud-datastore-parent - 2.7.0 + 2.8.0 google-cloud-datastore diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java index 63318a090..8e50d0867 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java @@ -272,7 +272,10 @@ public Operator apply(String constant) { static final Operator GREATER_THAN = type.createAndRegister("GREATER_THAN"); static final Operator GREATER_THAN_OR_EQUAL = type.createAndRegister("GREATER_THAN_OR_EQUAL"); static final Operator EQUAL = type.createAndRegister("EQUAL"); + static final Operator IN = type.createAndRegister("IN"); + static final Operator NOT_EQUAL = type.createAndRegister("NOT_EQUAL"); static final Operator HAS_ANCESTOR = type.createAndRegister("HAS_ANCESTOR"); + static final Operator NOT_IN = type.createAndRegister("NOT_IN"); com.google.datastore.v1.PropertyFilter.Operator toPb() { return com.google.datastore.v1.PropertyFilter.Operator.valueOf(name()); @@ -502,6 +505,46 @@ public static PropertyFilter eq(String property, Blob value) { return new PropertyFilter(property, Operator.EQUAL, of(value)); } + public static PropertyFilter neq(String property, Value value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, value); + } + + public static PropertyFilter neq(String property, String value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, long value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, double value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, boolean value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, Timestamp value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, Key value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter neq(String property, Blob value) { + return new PropertyFilter(property, Operator.NOT_EQUAL, of(value)); + } + + public static PropertyFilter in(String property, ListValue value) { + return new PropertyFilter(property, Operator.IN, value); + } + + public static PropertyFilter not_in(String property, ListValue value) { + return new PropertyFilter(property, Operator.NOT_IN, value); + } + public static PropertyFilter hasAncestor(Key key) { return new PropertyFilter(KEY_PROPERTY_NAME, Operator.HAS_ANCESTOR, of(key)); } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java index 21acf598c..869984932 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java @@ -583,6 +583,83 @@ public void testRunStructuredQuery() throws InterruptedException { assertFalse(results4.hasNext()); } + @Test + public void testInNotInNeqFilters() throws InterruptedException { + Entity e1 = + Entity.newBuilder(ENTITY1) + .setKey(Key.newBuilder(INCOMPLETE_KEY1, "e1").build()) + .set("v_int", 10) + .build(); + Entity e2 = + Entity.newBuilder(ENTITY1) + .setKey(Key.newBuilder(INCOMPLETE_KEY1, "e2").build()) + .set("v_int", 20) + .build(); + DATASTORE.put(e1, e2); + + Query queryIn = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.in("v_int", ListValue.of(10, 20))) + .build(); + + Query scQueryIn = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.hasAncestor(ROOT_KEY)) + .setFilter(PropertyFilter.in("v_int", ListValue.of(10, 20))) + .build(); + + Iterator resultIn = getStronglyConsistentResults(scQueryIn, queryIn); + + assertTrue(resultIn.hasNext()); + assertEquals(e1, resultIn.next()); + assertTrue(resultIn.hasNext()); + assertEquals(e2, resultIn.next()); + assertFalse(resultIn.hasNext()); + + Query queryNotIn = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.not_in("v_int", ListValue.of(20, 30))) + .build(); + + Query scQueryNotIn = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.hasAncestor(ROOT_KEY)) + .setFilter(PropertyFilter.not_in("v_int", ListValue.of(20, 30))) + .build(); + + Iterator resultNotIn = getStronglyConsistentResults(scQueryNotIn, queryNotIn); + + assertTrue(resultNotIn.hasNext()); + assertEquals(e1, resultNotIn.next()); + assertFalse(resultNotIn.hasNext()); + + Query queryNeq = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.neq("v_int", 10)) + .build(); + + Query scQueryNeq = + Query.newEntityQueryBuilder() + .setKind(KIND1) + .setFilter(PropertyFilter.hasAncestor(ROOT_KEY)) + .setFilter(PropertyFilter.neq("v_int", 10)) + .build(); + + Iterator resultNeq = getStronglyConsistentResults(scQueryNeq, queryNeq); + + assertTrue(resultNeq.hasNext()); + assertEquals(e2, resultNeq.next()); + assertFalse(resultNeq.hasNext()); + + DATASTORE.delete(e1.getKey()); + DATASTORE.delete(e2.getKey()); + } + @Test public void testAllocateId() { KeyFactory keyFactory = DATASTORE.newKeyFactory().setKind(KIND1); diff --git a/grpc-google-cloud-datastore-admin-v1/pom.xml b/grpc-google-cloud-datastore-admin-v1/pom.xml index e5b1ba8c1..6e2eb88fd 100644 --- a/grpc-google-cloud-datastore-admin-v1/pom.xml +++ b/grpc-google-cloud-datastore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 grpc-google-cloud-datastore-admin-v1 GRPC library for google-cloud-datastore com.google.cloud google-cloud-datastore-parent - 2.7.0 + 2.8.0 diff --git a/pom.xml b/pom.xml index 7cd990fd3..b10de9616 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-datastore-parent pom - 2.7.0 + 2.8.0 Google Cloud Datastore Parent https://github.com/googleapis/java-datastore @@ -159,27 +159,27 @@ com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 com.google.cloud google-cloud-datastore - 2.7.0 + 2.8.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.98.0 + 0.99.0 com.google.cloud.datastore datastore-v1-proto-client - 2.7.0 + 2.8.0 com.google.api.grpc diff --git a/proto-google-cloud-datastore-admin-v1/pom.xml b/proto-google-cloud-datastore-admin-v1/pom.xml index bc010fd3b..81fe70639 100644 --- a/proto-google-cloud-datastore-admin-v1/pom.xml +++ b/proto-google-cloud-datastore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.7.0 + 2.8.0 proto-google-cloud-datastore-admin-v1 Proto library for google-cloud-datastore com.google.cloud google-cloud-datastore-parent - 2.7.0 + 2.8.0 diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml index e88bf74b0..2cd67b83c 100644 --- a/proto-google-cloud-datastore-v1/pom.xml +++ b/proto-google-cloud-datastore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.98.0 + 0.99.0 proto-google-cloud-datastore-v1 PROTO library for proto-google-cloud-datastore-v1 com.google.cloud google-cloud-datastore-parent - 2.7.0 + 2.8.0 diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index bd84bbd28..e410952e4 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-datastore - 2.6.0 + 2.7.0 diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml index 93eb45f2b..7e9801d03 100644 --- a/samples/native-image-sample/pom.xml +++ b/samples/native-image-sample/pom.xml @@ -28,7 +28,7 @@ com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index fa891d634..0643927f1 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-datastore - 2.6.0 + 2.7.0 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 0df17e88b..720a81c88 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 25.3.0 + 25.4.0 pom import diff --git a/versions.txt b/versions.txt index 9db4188a8..9e1dc1b27 100644 --- a/versions.txt +++ b/versions.txt @@ -1,9 +1,9 @@ # Format: # module:released-version:current-version -google-cloud-datastore:2.7.0:2.7.0 -google-cloud-datastore-bom:2.7.0:2.7.0 -proto-google-cloud-datastore-v1:0.98.0:0.98.0 -datastore-v1-proto-client:2.7.0:2.7.0 -proto-google-cloud-datastore-admin-v1:2.7.0:2.7.0 -grpc-google-cloud-datastore-admin-v1:2.7.0:2.7.0 +google-cloud-datastore:2.8.0:2.8.0 +google-cloud-datastore-bom:2.8.0:2.8.0 +proto-google-cloud-datastore-v1:0.99.0:0.99.0 +datastore-v1-proto-client:2.8.0:2.8.0 +proto-google-cloud-datastore-admin-v1:2.8.0:2.8.0 +grpc-google-cloud-datastore-admin-v1:2.8.0:2.8.0