11package io .weaviate .client6 .v1 .api .collections .pagination ;
22
33import java .util .Iterator ;
4+ import java .util .List ;
45import java .util .Spliterator ;
56import java .util .Spliterators ;
67import java .util .function .Function ;
78import java .util .stream .Stream ;
89import java .util .stream .StreamSupport ;
910
1011import 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 ;
1114import io .weaviate .client6 .v1 .api .collections .query .QueryMetadata ;
15+ import io .weaviate .client6 .v1 .api .collections .query .QueryReference ;
1216import io .weaviate .client6 .v1 .api .collections .query .WeaviateQueryClient ;
1317import io .weaviate .client6 .v1 .internal .ObjectBuilder ;
1418
1519public 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 );
0 commit comments