From f7140ddab2020f84e904b9bdda78d1cfabc38226 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Fri, 12 Sep 2025 16:12:06 +0200 Subject: [PATCH 1/5] feat: always include ID into metadata response --- .../io/weaviate/integration/DataITest.java | 8 ++--- .../weaviate/integration/ReferencesITest.java | 11 ++----- .../io/weaviate/integration/SearchITest.java | 2 +- .../collections/query/BaseQueryOptions.java | 11 ++++--- .../v1/api/collections/query/ById.java | 33 +++++++++++++------ .../v1/api/collections/query/Metadata.java | 2 -- .../api/collections/query/QueryReference.java | 32 +++++++++++++----- 7 files changed, 59 insertions(+), 40 deletions(-) diff --git a/src/it/java/io/weaviate/integration/DataITest.java b/src/it/java/io/weaviate/integration/DataITest.java index 3bc1921c0..a3a377c64 100644 --- a/src/it/java/io/weaviate/integration/DataITest.java +++ b/src/it/java/io/weaviate/integration/DataITest.java @@ -51,7 +51,7 @@ public void testCreateGetDelete() throws IOException { var object = artists.query.byId(id, query -> query .returnProperties("name") .returnMetadata( - Metadata.UUID, Metadata.VECTOR, + Metadata.VECTOR, Metadata.CREATION_TIME_UNIX, Metadata.LAST_UPDATE_TIME_UNIX)); Assertions.assertThat(artists.data.exists(id)) @@ -259,8 +259,7 @@ public void testUpdate() throws IOException { query -> query .returnMetadata(Metadata.VECTOR) .returnReferences( - QueryReference.single("writtenBy", - writtenBy -> writtenBy.returnMetadata(Metadata.UUID)))); + QueryReference.single("writtenBy"))); Assertions.assertThat(updIvanhoe).get() .satisfies(book -> { @@ -387,8 +386,7 @@ public void testReferenceAddMany() throws IOException { var goodburgAirports = cities.query.byId(goodburg.metadata().uuid(), city -> city.returnReferences( - QueryReference.single("hasAirports", - airport -> airport.returnMetadata(Metadata.UUID)))); + QueryReference.single("hasAirports"))); Assertions.assertThat(goodburgAirports).get() .as("Goodburg has 3 airports") diff --git a/src/it/java/io/weaviate/integration/ReferencesITest.java b/src/it/java/io/weaviate/integration/ReferencesITest.java index b28bb907f..404a6adfe 100644 --- a/src/it/java/io/weaviate/integration/ReferencesITest.java +++ b/src/it/java/io/weaviate/integration/ReferencesITest.java @@ -16,7 +16,6 @@ import io.weaviate.client6.v1.api.collections.ReferenceProperty; import io.weaviate.client6.v1.api.collections.WeaviateObject; import io.weaviate.client6.v1.api.collections.data.Reference; -import io.weaviate.client6.v1.api.collections.query.Metadata; import io.weaviate.client6.v1.api.collections.query.QueryReference; import io.weaviate.containers.Container; @@ -94,10 +93,8 @@ public void testReferences() throws IOException { var gotAlex = artists.query.byId(alex.metadata().uuid(), opt -> opt.returnReferences( - QueryReference.multi("hasAwards", nsOscar, - ref -> ref.returnMetadata(Metadata.UUID)), - QueryReference.multi("hasAwards", nsGrammy, - ref -> ref.returnMetadata(Metadata.UUID)))); + QueryReference.multi("hasAwards", nsOscar), + QueryReference.multi("hasAwards", nsGrammy))); Assertions.assertThat(gotAlex).get() .as("Artists: fetch by id including hasAwards references") @@ -164,9 +161,7 @@ public void testNestedReferences() throws IOException { ref -> ref // Name of the CEO of the presenting academy .returnReferences( - QueryReference.single("presentedBy", r -> r.returnProperties("ceo"))) - // Grammy ID - .returnMetadata(Metadata.UUID)))); + QueryReference.single("presentedBy", r -> r.returnProperties("ceo")))))); Assertions.assertThat(gotAlex).get() .as("Artists: fetch by id including nested references") diff --git a/src/it/java/io/weaviate/integration/SearchITest.java b/src/it/java/io/weaviate/integration/SearchITest.java index 057501844..6b25bf230 100644 --- a/src/it/java/io/weaviate/integration/SearchITest.java +++ b/src/it/java/io/weaviate/integration/SearchITest.java @@ -362,7 +362,7 @@ public void testHybrid() throws IOException { // Act var winterSport = hobbies.query.hybrid("winter", hybrid -> hybrid - .returnMetadata(Metadata.UUID, Metadata.SCORE, Metadata.EXPLAIN_SCORE)); + .returnMetadata(Metadata.SCORE, Metadata.EXPLAIN_SCORE)); // Assert Assertions.assertThat(winterSport.objects()) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java index 052885427..e870a4fe4 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils; +import io.weaviate.client6.v1.api.collections.query.Metadata.MetadataField; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; @@ -47,6 +48,10 @@ public static abstract class Builder, T extends Ob private List returnReferences = new ArrayList<>(); private List returnMetadata = new ArrayList<>(); + protected Builder() { + returnMetadata(MetadataField.UUID); + } + public final SELF limit(int limit) { this.limit = limit; return (SELF) this; @@ -151,11 +156,7 @@ final void appendTo(WeaviateProtoSearchGet.SearchRequest.Builder req) { } var metadata = WeaviateProtoSearchGet.MetadataRequest.newBuilder(); - if (returnMetadata.isEmpty()) { - Metadata.UUID.appendTo(metadata); - } else { - returnMetadata.forEach(m -> m.appendTo(metadata)); - } + returnMetadata.forEach(m -> m.appendTo(metadata)); req.setMetadata(metadata); if (!returnProperties.isEmpty() || !returnReferences.isEmpty()) { diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java index 3c256b3b5..72e5be49b 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java @@ -2,9 +2,12 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.function.Function; +import io.weaviate.client6.v1.api.collections.query.Metadata.MetadataField; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; @@ -27,35 +30,48 @@ public static ById of(String uuid, Function> fn) { public ById(Builder builder) { this(builder.uuid, - builder.returnProperties, + new ArrayList<>(builder.returnProperties), builder.returnReferences, - builder.returnMetadata); + new ArrayList<>(builder.returnMetadata)); } public static class Builder implements ObjectBuilder { // Required query parameters. private final String uuid; - private List returnProperties = new ArrayList<>(); + private Set returnProperties = new HashSet<>(); private List returnReferences = new ArrayList<>(); - private List returnMetadata = new ArrayList<>(); + private Set returnMetadata = new HashSet<>(); public Builder(String uuid) { this.uuid = uuid; + returnMetadata(MetadataField.UUID); } public final Builder returnProperties(String... properties) { - this.returnProperties = Arrays.asList(properties); + return returnProperties(Arrays.asList(properties)); + } + + public final Builder returnProperties(List properties) { + this.returnProperties.addAll(properties); return this; } public final Builder returnReferences(QueryReference... references) { - this.returnReferences = Arrays.asList(references); + return returnReferences(Arrays.asList(references)); + } + + public final Builder returnReferences(List references) { + this.returnReferences.addAll(references); return this; } public final Builder returnMetadata(Metadata... metadata) { - this.returnMetadata = Arrays.asList(metadata); + return returnMetadata(Arrays.asList(metadata)); + } + + public final Builder returnMetadata(List metadata) { + this.returnMetadata.addAll(metadata); return this; } @@ -73,9 +89,6 @@ public void appendTo(WeaviateProtoSearchGet.SearchRequest.Builder req) { req.setFilters(filter); var metadata = WeaviateProtoSearchGet.MetadataRequest.newBuilder(); - if (returnMetadata.isEmpty()) { - returnMetadata.add(Metadata.UUID); - } returnMetadata.forEach(m -> m.appendTo(metadata)); req.setMetadata(metadata); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java index 3a0574b56..6b8123917 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java @@ -11,8 +11,6 @@ public interface Metadata { void appendTo(WeaviateProtoSearchGet.MetadataRequest.Builder metadata); - /** Include UUID of the object in the metadata response. */ - public static final Metadata UUID = MetadataField.UUID; /** Include associated vector in the metadata response. */ public static final Metadata VECTOR = MetadataField.VECTOR; /** Include object creation time in the metadata response. */ diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java index fdc8a1c01..4684db0ad 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.function.Function; +import io.weaviate.client6.v1.api.collections.query.Metadata.MetadataField; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; @@ -38,7 +39,7 @@ public static QueryReference single(String property, Function { private final String property; private final String collection; - public Builder(String collection, String property) { - this.property = property; - this.collection = collection; - } - private boolean includeVector; private List includeVectors = new ArrayList<>(); private List returnProperties = new ArrayList<>(); private List returnReferences = new ArrayList<>(); private List returnMetadata = new ArrayList<>(); + public Builder(String collection, String property) { + this.property = property; + this.collection = collection; + returnMetadata(MetadataField.UUID); + } + public final Builder includeVector() { this.includeVector = true; return this; @@ -72,17 +74,29 @@ public final Builder includeVectors(String... vectors) { } public final Builder returnProperties(String... properties) { - this.returnProperties = Arrays.asList(properties); + return returnProperties(Arrays.asList(properties)); + } + + public final Builder returnProperties(List properties) { + this.returnProperties.addAll(properties); return this; } public final Builder returnReferences(QueryReference... references) { - this.returnReferences = Arrays.asList(references); + return returnReferences(Arrays.asList(references)); + } + + public final Builder returnReferences(List references) { + this.returnReferences.addAll(references); return this; } public final Builder returnMetadata(Metadata... metadata) { - this.returnMetadata = Arrays.asList(metadata); + return returnMetadata(Arrays.asList(metadata)); + } + + public final Builder returnMetadata(List metadata) { + this.returnMetadata.addAll(metadata); return this; } From 162f860dc20b440f9e23013fa9b5ce62f8c3318a Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Fri, 12 Sep 2025 16:35:20 +0200 Subject: [PATCH 2/5] feat: request all metadata with Metadata.ALL --- .../io/weaviate/integration/SearchITest.java | 45 +++++++++++++++++++ .../v1/api/collections/query/Metadata.java | 9 ++++ 2 files changed, 54 insertions(+) diff --git a/src/it/java/io/weaviate/integration/SearchITest.java b/src/it/java/io/weaviate/integration/SearchITest.java index 6b25bf230..ba3b1fba6 100644 --- a/src/it/java/io/weaviate/integration/SearchITest.java +++ b/src/it/java/io/weaviate/integration/SearchITest.java @@ -415,4 +415,49 @@ public void testBadRequest_async() throws Throwable { } } } + + @Test + public void testMetadataAll() throws IOException { + // Arrange + var nsThings = ns("Things"); + client.collections.create(nsThings, + c -> c + .properties(Property.text("name")) + .vectors(Vectorizers.text2vecContextionary( + t2v -> t2v.sourceProperties("name")))); + + var things = client.collections.use(nsThings); + var frisbee = things.data.insert(Map.of("name", "orange disc")); + + // Act + var gotHybrid = things.query.hybrid("orange", q -> q + .queryProperties("name") + .returnMetadata(Metadata.ALL)); + + var gotNearText = things.query.nearText("frisbee", q -> q + .returnMetadata(Metadata.ALL)); + + // Assert + var metadataHybrid = Assertions.assertThat(gotHybrid.objects()) + .hasSize(1) + .extracting(WeaviateObject::metadata) + .first().actual(); + + Assertions.assertThat(metadataHybrid.uuid()).as("uuid").isNotNull().isEqualTo(frisbee.uuid()); + Assertions.assertThat(metadataHybrid.creationTimeUnix()).as("creationTimeUnix").isNotNull(); + Assertions.assertThat(metadataHybrid.lastUpdateTimeUnix()).as("lastUpdateTimeUnix").isNotNull(); + Assertions.assertThat(metadataHybrid.score()).as("score").isNotNull(); + Assertions.assertThat(metadataHybrid.explainScore()).as("explainScore").isNotNull().isNotEqualTo(""); + + var metadataNearText = Assertions.assertThat(gotNearText.objects()) + .hasSize(1) + .extracting(WeaviateObject::metadata) + .first().actual(); + + Assertions.assertThat(metadataNearText.uuid()).as("uuid").isNotNull().isEqualTo(frisbee.uuid()); + Assertions.assertThat(metadataNearText.creationTimeUnix()).as("creationTimeUnix").isNotNull(); + Assertions.assertThat(metadataNearText.lastUpdateTimeUnix()).as("lastUpdateTimeUnix").isNotNull(); + Assertions.assertThat(metadataNearText.distance()).as("distance").isNotNull(); + Assertions.assertThat(metadataNearText.certainty()).as("certainty").isNotNull(); + } } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java index 6b8123917..67491365f 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java @@ -11,6 +11,8 @@ public interface Metadata { void appendTo(WeaviateProtoSearchGet.MetadataRequest.Builder metadata); + /** Include metadata in the metadata response. */ + public static final Metadata ALL = MetadataField.ALL; /** Include associated vector in the metadata response. */ public static final Metadata VECTOR = MetadataField.VECTOR; /** Include object creation time in the metadata response. */ @@ -68,6 +70,7 @@ public interface Metadata { * MetadataField are collection properties that can be requested for any object. */ enum MetadataField implements Metadata { + ALL, UUID, VECTOR, CREATION_TIME_UNIX, @@ -79,6 +82,12 @@ enum MetadataField implements Metadata { public void appendTo(WeaviateProtoSearchGet.MetadataRequest.Builder metadata) { switch (this) { + case ALL: // fallthrough to add all + for (final var f : MetadataField.values()) { + if (f != ALL) { + f.appendTo(metadata); + } + } case UUID: metadata.setUuid(true); break; From afff617c462fe0ba78188de5b8c815a64fd1ed4b Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Fri, 12 Sep 2025 16:45:44 +0200 Subject: [PATCH 3/5] feat: add .includeVector() shortcut like the other clients have --- .../io/weaviate/integration/DataITest.java | 5 ++-- .../collections/query/BaseQueryOptions.java | 4 +++ .../v1/api/collections/query/ById.java | 4 +++ .../api/collections/query/QueryReference.java | 29 +++++++++---------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/it/java/io/weaviate/integration/DataITest.java b/src/it/java/io/weaviate/integration/DataITest.java index a3a377c64..7db8e6b40 100644 --- a/src/it/java/io/weaviate/integration/DataITest.java +++ b/src/it/java/io/weaviate/integration/DataITest.java @@ -257,9 +257,8 @@ public void testUpdate() throws IOException { var updIvanhoe = books.query.byId( ivanhoe.metadata().uuid(), query -> query - .returnMetadata(Metadata.VECTOR) - .returnReferences( - QueryReference.single("writtenBy"))); + .includeVector() + .returnReferences(QueryReference.single("writtenBy"))); Assertions.assertThat(updIvanhoe).get() .satisfies(book -> { diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java index e870a4fe4..ad8d71b24 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java @@ -117,6 +117,10 @@ public final SELF returnMetadata(List metadata) { return (SELF) this; } + public final SELF includeVector() { + return returnMetadata(Metadata.VECTOR); + } + final BaseQueryOptions baseOptions() { return _build(); } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java index 72e5be49b..5a2bee979 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/ById.java @@ -75,6 +75,10 @@ public final Builder returnMetadata(List metadata) { return this; } + public final Builder includeVector() { + return returnMetadata(Metadata.VECTOR); + } + @Override public ById build() { return new ById(this); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java index 4684db0ad..f0a2c84a5 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/QueryReference.java @@ -2,7 +2,9 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.function.Function; import io.weaviate.client6.v1.api.collections.query.Metadata.MetadataField; @@ -12,7 +14,6 @@ public record QueryReference( String property, String collection, - boolean includeVector, List includeVectors, List returnProperties, List returnReferences, @@ -22,11 +23,10 @@ public QueryReference(Builder options) { this( options.property, options.collection, - options.includeVector, - options.includeVectors, - options.returnProperties, + new ArrayList<>(options.includeVectors), + new ArrayList<>(options.returnProperties), options.returnReferences, - options.returnMetadata); + new ArrayList<>(options.returnMetadata)); } public static QueryReference single(String property) { @@ -51,11 +51,10 @@ public static class Builder implements ObjectBuilder { private final String property; private final String collection; - private boolean includeVector; - private List includeVectors = new ArrayList<>(); - private List returnProperties = new ArrayList<>(); + private Set includeVectors = new HashSet<>(); + private Set returnProperties = new HashSet<>(); private List returnReferences = new ArrayList<>(); - private List returnMetadata = new ArrayList<>(); + private Set returnMetadata = new HashSet<>(); public Builder(String collection, String property) { this.property = property; @@ -63,13 +62,8 @@ public Builder(String collection, String property) { returnMetadata(MetadataField.UUID); } - public final Builder includeVector() { - this.includeVector = true; - return this; - } - public final Builder includeVectors(String... vectors) { - this.includeVectors = Arrays.asList(vectors); + this.includeVectors.addAll(Arrays.asList(vectors)); return this; } @@ -100,6 +94,10 @@ public final Builder returnMetadata(List metadata) { return this; } + public final Builder includeVector() { + return returnMetadata(Metadata.VECTOR); + } + @Override public QueryReference build() { return new QueryReference(this); @@ -115,6 +113,7 @@ public void appendTo(WeaviateProtoSearchGet.RefPropertiesRequest.Builder referen if (!returnMetadata.isEmpty()) { var metadata = WeaviateProtoSearchGet.MetadataRequest.newBuilder(); returnMetadata.forEach(m -> m.appendTo(metadata)); + metadata.addAllVectors(includeVectors); references.setMetadata(metadata); } From 34b411b2751dbd98927976e078f62a9f0973a8a5 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Fri, 12 Sep 2025 17:11:47 +0200 Subject: [PATCH 4/5] test: add test+assertion to pagination Assert cursor is always advancing after an iteration --- .../io/weaviate/integration/PaginationITest.java | 12 +++++++++--- .../v1/api/collections/pagination/AsyncPage.java | 8 +++++++- .../collections/pagination/CursorSpliterator.java | 9 ++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/it/java/io/weaviate/integration/PaginationITest.java b/src/it/java/io/weaviate/integration/PaginationITest.java index 5044bdb73..3cb3d8784 100644 --- a/src/it/java/io/weaviate/integration/PaginationITest.java +++ b/src/it/java/io/weaviate/integration/PaginationITest.java @@ -21,6 +21,7 @@ import io.weaviate.client6.v1.api.collections.WeaviateMetadata; import io.weaviate.client6.v1.api.collections.WeaviateObject; import io.weaviate.client6.v1.api.collections.pagination.PaginationException; +import io.weaviate.client6.v1.api.collections.query.Metadata; import io.weaviate.containers.Container; public class PaginationITest extends ConcurrentTest { @@ -117,11 +118,16 @@ public void testWithQueryOptions() throws IOException { } // Act / Assert - var withSomeProperties = things.paginate(p -> p.returnProperties("fetch_me")); + var withSomeProperties = things.paginate(p -> p + .returnMetadata(Metadata.CREATION_TIME_UNIX) + .returnProperties("fetch_me")); for (var thing : withSomeProperties) { Assertions.assertThat(thing.properties()) - .as("uuid=" + thing.metadata().uuid()) + .as("uuid=" + thing.uuid()) .doesNotContainKey("dont_fetch"); + + Assertions.assertThat(thing.metadata().creationTimeUnix()) + .isNotNull(); } } @@ -140,7 +146,7 @@ public void testAsyncPaginator() throws Exception, InterruptedException, Executi var inserted = new ArrayList(); for (var i = 0; i < count; i++) { futures[i] = things.data.insert(Collections.emptyMap()) - .thenAccept(object -> inserted.add(object.metadata().uuid())); + .thenAccept(object -> inserted.add(object.uuid())); } CompletableFuture.allOf(futures).get(); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/pagination/AsyncPage.java b/src/main/java/io/weaviate/client6/v1/api/collections/pagination/AsyncPage.java index b4deb0bf2..baddef6f1 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/pagination/AsyncPage.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/pagination/AsyncPage.java @@ -56,7 +56,13 @@ public CompletableFuture> fetchNextPage() { return new AsyncPage<>(null, pageSize, fetch, nextPage); } var last = nextPage.get(nextPage.size() - 1); - return new AsyncPage<>(last.metadata().uuid(), pageSize, fetch, nextPage); + var nextCursor = last.uuid(); + // The cursor can only be null on the first iteration. + // If it is null after the first iteration it is + // because we haven't requested Metadata.UUID, in which + // case pagination will continue to run unbounded. + assert nextCursor != null : "page cursor is null"; + return new AsyncPage<>(nextCursor, pageSize, fetch, nextPage); }); } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/pagination/CursorSpliterator.java b/src/main/java/io/weaviate/client6/v1/api/collections/pagination/CursorSpliterator.java index 6d474c16a..27132fc2e 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/pagination/CursorSpliterator.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/pagination/CursorSpliterator.java @@ -39,7 +39,14 @@ public boolean tryAdvance(Consumer Date: Mon, 15 Sep 2025 17:53:51 +0200 Subject: [PATCH 5/5] refactor: break after handling Metadata.ALL case --- .../io/weaviate/client6/v1/api/collections/query/Metadata.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java index 67491365f..3ec629c00 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Metadata.java @@ -82,12 +82,13 @@ enum MetadataField implements Metadata { public void appendTo(WeaviateProtoSearchGet.MetadataRequest.Builder metadata) { switch (this) { - case ALL: // fallthrough to add all + case ALL: for (final var f : MetadataField.values()) { if (f != ALL) { f.appendTo(metadata); } } + break; case UUID: metadata.setUuid(true); break;