Skip to content

Commit b7c2020

Browse files
committed
fix: adjust as per failing tests
1 parent aa5ebec commit b7c2020

5 files changed

Lines changed: 47 additions & 28 deletions

File tree

src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ public static <T> void buildObject(WeaviateProtoBatch.BatchObject.Builder object
9797
CollectionHandleDefaults defaults) {
9898
object.setCollection(collection.collectionName());
9999

100-
object.setUuid(insert.uuid());
100+
if (insert.uuid() != null) {
101+
object.setUuid(insert.uuid());
102+
}
101103

102104
if (insert.vectors() != null) {
103105
var vectors = insert.vectors().asMap()
@@ -125,21 +127,23 @@ public static <T> void buildObject(WeaviateProtoBatch.BatchObject.Builder object
125127
var singleRef = new ArrayList<WeaviateProtoBatch.BatchObject.SingleTargetRefProps>();
126128
var multiRef = new ArrayList<WeaviateProtoBatch.BatchObject.MultiTargetRefProps>();
127129

128-
insert.references().entrySet().stream().forEach(entry -> {
129-
var references = entry.getValue();
130-
131-
// dyma: How are we supposed to know if the reference
132-
// is single- or multi-target?
133-
for (var ref : references) {
134-
if (ref.collection() == null) {
135-
singleRef.add(WeaviateProtoBatch.BatchObject.SingleTargetRefProps.newBuilder().addAllUuids(ref.uuids())
136-
.setPropName(entry.getKey()).build());
137-
} else {
138-
multiRef.add(WeaviateProtoBatch.BatchObject.MultiTargetRefProps.newBuilder()
139-
.setTargetCollection(ref.collection()).addAllUuids(ref.uuids()).setPropName(entry.getKey()).build());
130+
if (insert.references() != null) {
131+
insert.references().entrySet().stream().forEach(entry -> {
132+
var references = entry.getValue();
133+
134+
// dyma: How are we supposed to know if the reference
135+
// is single- or multi-target?
136+
for (var ref : references) {
137+
if (ref.collection() == null) {
138+
singleRef.add(WeaviateProtoBatch.BatchObject.SingleTargetRefProps.newBuilder().addAllUuids(ref.uuids())
139+
.setPropName(entry.getKey()).build());
140+
} else {
141+
multiRef.add(WeaviateProtoBatch.BatchObject.MultiTargetRefProps.newBuilder()
142+
.setTargetCollection(ref.collection()).addAllUuids(ref.uuids()).setPropName(entry.getKey()).build());
143+
}
140144
}
141-
}
142-
});
145+
});
146+
}
143147

144148
var properties = WeaviateProtoBatch.BatchObject.Properties.newBuilder()
145149
.addAllSingleTargetRefProps(singleRef)

src/main/java/io/weaviate/client6/v1/api/collections/data/InsertObjectRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static final <PropertiesT> Endpoint<InsertObjectRequest<PropertiesT>, Wri
3232
request -> JSON.serialize(
3333
new WriteWeaviateObject<>(
3434
request.object.uuid(),
35-
request.object.collection(),
35+
collection.collectionName(),
3636
defaults.tenant(),
3737
request.object.properties(),
3838
request.object.vectors(),

src/main/java/io/weaviate/client6/v1/api/collections/data/Reference.java

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

77
import com.google.gson.TypeAdapter;
88
import com.google.gson.stream.JsonReader;
9+
import com.google.gson.stream.JsonToken;
910
import com.google.gson.stream.JsonWriter;
1011

1112
import io.weaviate.client6.v1.api.collections.WeaviateObject;
@@ -80,6 +81,12 @@ public Reference read(JsonReader in) throws IOException {
8081
in.beginObject();
8182
in.nextName(); // expect "beacon"?
8283
var beacon = in.nextString();
84+
85+
// Skip to the end of the object. There's going to be the "href"
86+
// key too, which is irrelevant for us.
87+
while (in.peek() != JsonToken.END_OBJECT) {
88+
in.skipValue();
89+
}
8390
in.endObject();
8491

8592
beacon = beacon.replaceFirst("weaviate://localhost/", "");

src/main/java/io/weaviate/client6/v1/api/collections/data/ReferenceAddRequest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,5 @@ public static final Endpoint<ReferenceAddRequest, Void> endpoint(
1717
+ request.fromProperty,
1818
request -> defaults.queryParameters(),
1919
request -> JSON.serialize(request.reference));
20-
2120
}
2221
}

src/main/java/io/weaviate/client6/v1/api/collections/data/WriteWeaviateObject.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import java.io.IOException;
44
import java.lang.reflect.ParameterizedType;
55
import java.util.ArrayList;
6+
import java.util.HashMap;
67
import java.util.List;
78
import java.util.Map;
9+
import java.util.UUID;
810
import java.util.function.Function;
911

1012
import com.google.gson.Gson;
@@ -19,8 +21,8 @@
1921
import com.google.gson.stream.JsonReader;
2022
import com.google.gson.stream.JsonWriter;
2123

22-
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2324
import io.weaviate.client6.v1.api.collections.Vectors;
25+
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2426
import io.weaviate.client6.v1.internal.ObjectBuilder;
2527

2628
public record WriteWeaviateObject<PropertiesT>(
@@ -52,12 +54,18 @@ public WriteWeaviateObject(Builder<PropertiesT> builder) {
5254
}
5355

5456
public static class Builder<PropertiesT> implements ObjectBuilder<WriteWeaviateObject<PropertiesT>> {
55-
private String uuid;
57+
/**
58+
* The server <i>should be</i> providing default UUIDs, but it does not do that
59+
* during batch inserts and we have to provide our own.
60+
* Rather than make this behaviour special to {@code insertMany}, we are going
61+
* to provide a fallback UUID "globally".
62+
*/
63+
private String uuid = UUID.randomUUID().toString();
5664
private String collection;
5765
private String tenant;
5866
private PropertiesT properties;
5967
private Vectors vectors;
60-
private Map<String, List<Reference>> references;
68+
private Map<String, List<Reference>> references = new HashMap<>();
6169

6270
public Builder<PropertiesT> uuid(String uuid) {
6371
this.uuid = uuid;
@@ -122,28 +130,28 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
122130
var rawType = typeToken.getRawType();
123131
if (rawType != WriteWeaviateObject.class ||
124132
!(type instanceof ParameterizedType parameterized)
125-
|| parameterized.getActualTypeArguments().length < 1) {
133+
|| parameterized.getActualTypeArguments().length != 1) {
126134
return null;
127135
}
128136

129137
var typeParams = parameterized.getActualTypeArguments();
130138
final var propertiesType = typeParams[0];
131139

132-
final TypeAdapter<WriteWeaviateObject<?>> delegate = (TypeAdapter<WriteWeaviateObject<?>>) gson
140+
final var delegate = (TypeAdapter<WriteWeaviateObject<?>>) gson
133141
.getDelegateAdapter(this, typeToken);
134-
final var propertiesAdapter = gson.getAdapter(TypeToken.get(propertiesType));
142+
final var propertiesAdapter = (TypeAdapter<Object>) gson.getAdapter(TypeToken.get(propertiesType));
135143
final var referencesAdapter = gson.getAdapter(Reference.class);
136144

137145
return (TypeAdapter<T>) new TypeAdapter<WriteWeaviateObject<?>>() {
138146

139147
@Override
140148
public void write(JsonWriter out, WriteWeaviateObject<?> value) throws IOException {
141149
var json = delegate.toJsonTree(value).getAsJsonObject();
142-
var properties = ((TypeAdapter<Object>) propertiesAdapter)
143-
.toJsonTree(value.properties())
144-
.getAsJsonObject();
150+
var properties = value.properties() != null
151+
? propertiesAdapter.toJsonTree(value.properties()).getAsJsonObject()
152+
: new JsonObject();
145153

146-
if (!value.references().isEmpty()) {
154+
if (value.references() != null && !value.references().isEmpty()) {
147155
for (var refEntry : value.references().entrySet()) {
148156
var beacons = new JsonArray();
149157
for (var reference : refEntry.getValue()) {
@@ -154,7 +162,7 @@ public void write(JsonWriter out, WriteWeaviateObject<?> value) throws IOExcepti
154162
}
155163
}
156164

157-
json.add("properties", json);
165+
json.add("properties", properties);
158166
json.remove("references");
159167
Streams.write(json, out);
160168
}
@@ -185,6 +193,7 @@ public WriteWeaviateObject<?> read(JsonReader in) throws IOException {
185193
}
186194

187195
json.add("references", objectReferences);
196+
json.add("properties", objectProperties);
188197
return delegate.fromJsonTree(json);
189198
}
190199
}.nullSafe();

0 commit comments

Comments
 (0)