Skip to content

Commit f7197e3

Browse files
committed
feat: set query options in Paginator
ObjectBuilder.partial is a new util for composing ObjectBuilder-style functions.
1 parent b2badd1 commit f7197e3

4 files changed

Lines changed: 94 additions & 6 deletions

File tree

src/it/java/io/weaviate/integration/PaginationITest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import io.weaviate.ConcurrentTest;
1313
import io.weaviate.client6.v1.api.WeaviateClient;
14+
import io.weaviate.client6.v1.api.collections.Property;
1415
import io.weaviate.client6.v1.api.collections.WeaviateMetadata;
1516
import io.weaviate.client6.v1.api.collections.WeaviateObject;
1617
import io.weaviate.containers.Container;
@@ -89,4 +90,31 @@ public void testResumePagination() throws IOException {
8990
// Assert
9091
Assertions.assertThat(remaining).isEqualTo(5);
9192
}
93+
94+
@Test
95+
public void testWithQueryOptions() throws IOException {
96+
// Arrange
97+
var nsThings = ns("Things");
98+
var count = 10;
99+
100+
client.collections.create(nsThings,
101+
c -> c.properties(
102+
Property.text("fetch_me"),
103+
Property.integer("dont_fetch")));
104+
105+
var things = client.collections.use(nsThings);
106+
var inserted = new ArrayList<String>();
107+
for (var i = 0; i < count; i++) {
108+
var object = things.data.insert(Collections.emptyMap());
109+
inserted.add(object.metadata().uuid());
110+
}
111+
112+
// Act / Assert
113+
var withSomeProperties = things.paginate(p -> p.returnProperties("fetch_me"));
114+
for (var thing : withSomeProperties) {
115+
Assertions.assertThat(thing.properties())
116+
.as("uuid=" + thing.metadata().uuid())
117+
.doesNotContainKey("dont_fetch");
118+
}
119+
}
92120
}

src/main/java/io/weaviate/client6/v1/api/collections/pagination/Paginator.java

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
package io.weaviate.client6.v1.api.collections.pagination;
22

33
import java.util.Iterator;
4+
import java.util.List;
45
import java.util.Spliterator;
56
import java.util.Spliterators;
67
import java.util.function.Function;
78
import java.util.stream.Stream;
89
import java.util.stream.StreamSupport;
910

1011
import io.weaviate.client6.v1.api.collections.WeaviateObject;
12+
import io.weaviate.client6.v1.api.collections.query.FetchObjects;
13+
import io.weaviate.client6.v1.api.collections.query.Metadata;
1114
import io.weaviate.client6.v1.api.collections.query.QueryMetadata;
15+
import io.weaviate.client6.v1.api.collections.query.QueryReference;
1216
import io.weaviate.client6.v1.api.collections.query.WeaviateQueryClient;
1317
import io.weaviate.client6.v1.internal.ObjectBuilder;
1418

1519
public class Paginator<T> implements Iterable<WeaviateObject<T, Object, QueryMetadata>> {
1620
private static final int DEFAULT_PAGE_SIZE = 100;
1721

1822
private final WeaviateQueryClient<T> query;
23+
private final Function<FetchObjects.Builder, ObjectBuilder<FetchObjects>> queryOptions;
1924
private final int pageSize;
2025
private final String cursor;
2126

@@ -30,7 +35,10 @@ public Stream<WeaviateObject<T, Object, QueryMetadata>> stream() {
3035

3136
public Spliterator<WeaviateObject<T, Object, QueryMetadata>> spliterator() {
3237
return new CursorSpliterator<T>(cursor, pageSize,
33-
(after, limit) -> query.fetchObjects(q -> q.after(after).limit(limit)).objects());
38+
(after, limit) -> {
39+
var fn = ObjectBuilder.partial(queryOptions, q -> q.after(after).limit(limit));
40+
return query.fetchObjects(fn).objects();
41+
});
3442
}
3543

3644
public static <T> Paginator<T> of(WeaviateQueryClient<T> query) {
@@ -44,20 +52,24 @@ public static <T> Paginator<T> of(WeaviateQueryClient<T> query,
4452

4553
Paginator(Builder<T> builder) {
4654
this.query = builder.query;
55+
this.queryOptions = builder.queryOptions;
4756
this.cursor = builder.cursor;
4857
this.pageSize = builder.pageSize;
4958
}
5059

5160
public static class Builder<T> implements ObjectBuilder<Paginator<T>> {
5261
private final WeaviateQueryClient<T> query;
5362

54-
int pageSize = DEFAULT_PAGE_SIZE;
55-
String cursor;
63+
private Function<FetchObjects.Builder, ObjectBuilder<FetchObjects>> queryOptions = ObjectBuilder.identity();
64+
private int pageSize = DEFAULT_PAGE_SIZE;
65+
private String cursor;
5666

5767
public Builder(WeaviateQueryClient<T> query) {
5868
this.query = query;
5969
}
6070

71+
// Pagination options -----------------------------------------------------
72+
6173
public Builder<T> pageSize(int pageSize) {
6274
this.pageSize = pageSize;
6375
return this;
@@ -68,6 +80,37 @@ public Builder<T> resumeFrom(String uuid) {
6880
return this;
6981
}
7082

83+
// Query options ----------------------------------------------------------
84+
85+
public final Builder<T> returnProperties(String... properties) {
86+
return applyQueryOption(q -> q.returnProperties(properties));
87+
}
88+
89+
public final Builder<T> returnProperties(List<String> properties) {
90+
return applyQueryOption(q -> q.returnProperties(properties));
91+
}
92+
93+
public final Builder<T> returnReferences(QueryReference... references) {
94+
return applyQueryOption(q -> q.returnReferences(references));
95+
}
96+
97+
public final Builder<T> returnReferences(List<QueryReference> references) {
98+
return applyQueryOption(q -> q.returnReferences(references));
99+
}
100+
101+
public final Builder<T> returnMetadata(Metadata... metadata) {
102+
return applyQueryOption(q -> q.returnMetadata(metadata));
103+
}
104+
105+
public final Builder<T> returnMetadata(List<Metadata> metadata) {
106+
return applyQueryOption(q -> q.returnMetadata(metadata));
107+
}
108+
109+
private final Builder<T> applyQueryOption(Function<FetchObjects.Builder, FetchObjects.Builder> options) {
110+
this.queryOptions = ObjectBuilder.partial(this.queryOptions, options);
111+
return this;
112+
}
113+
71114
@Override
72115
public Paginator<T> build() {
73116
return new Paginator<>(this);

src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,29 @@ public final SELF where(Where where) {
8686
}
8787

8888
public final SELF returnProperties(String... properties) {
89-
this.returnProperties = Arrays.asList(properties);
89+
return returnProperties(Arrays.asList(properties));
90+
}
91+
92+
public final SELF returnProperties(List<String> properties) {
93+
this.returnProperties.addAll(properties);
9094
return (SELF) this;
9195
}
9296

9397
public final SELF returnReferences(QueryReference... references) {
94-
this.returnReferences = Arrays.asList(references);
98+
return returnReferences(Arrays.asList(references));
99+
}
100+
101+
public final SELF returnReferences(List<QueryReference> references) {
102+
this.returnReferences.addAll(references);
95103
return (SELF) this;
96104
}
97105

98106
public final SELF returnMetadata(Metadata... metadata) {
99-
this.returnMetadata = Arrays.asList(metadata);
107+
return returnMetadata(metadata);
108+
}
109+
110+
public final SELF returnMetadata(List<Metadata> metadata) {
111+
this.returnMetadata.addAll(metadata);
100112
return (SELF) this;
101113
}
102114

src/main/java/io/weaviate/client6/v1/internal/ObjectBuilder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@ public interface ObjectBuilder<T> {
88
static <B extends ObjectBuilder<T>, T> Function<B, ObjectBuilder<T>> identity() {
99
return builder -> builder;
1010
}
11+
12+
static <B extends ObjectBuilder<T>, T> Function<B, ObjectBuilder<T>> partial(Function<B, ObjectBuilder<T>> fn,
13+
Function<B, B> partialFn) {
14+
return partialFn.andThen(fn);
15+
}
1116
}

0 commit comments

Comments
 (0)