PgVector Jackson Migration (#1692)

PgVector Jackson Migration
Fixes https://github.com/langchain4j/langchain4j/issues/1684
This commit is contained in:
humcqc 2024-09-04 14:09:44 +02:00 committed by GitHub
parent 507498f707
commit 673cf0c393
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 5 deletions

View File

@ -34,6 +34,11 @@
<version>${pgvector-java.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>

View File

@ -1,12 +1,15 @@
package dev.langchain4j.store.embedding.pgvector;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.langchain4j.data.document.Metadata;
import dev.langchain4j.internal.Json;
import dev.langchain4j.store.embedding.filter.Filter;
import java.sql.*;
import java.util.*;
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
import static dev.langchain4j.internal.ValidationUtils.ensureNotEmpty;
import static dev.langchain4j.internal.Utils.getOrDefault;
@ -14,6 +17,8 @@ import static dev.langchain4j.internal.Utils.getOrDefault;
* Handle metadata as JSON column.
*/
class JSONMetadataHandler implements MetadataHandler {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
.enable(INDENT_OUTPUT);
final MetadataColumDefinition columnDefinition;
final String columnName;
@ -63,8 +68,8 @@ class JSONMetadataHandler implements MetadataHandler {
public Metadata fromResultSet(ResultSet resultSet) {
try {
String metadataJson = getOrDefault(resultSet.getString(columnsNames().get(0)),"{}");
return new Metadata(Json.fromJson(metadataJson, Map.class));
} catch (SQLException e) {
return new Metadata(OBJECT_MAPPER.readValue(metadataJson, Map.class));
} catch (SQLException | JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@ -77,8 +82,9 @@ class JSONMetadataHandler implements MetadataHandler {
@Override
public void setMetadata(PreparedStatement upsertStmt, Integer parameterInitialIndex, Metadata metadata) {
try {
upsertStmt.setObject(parameterInitialIndex, Json.toJson(metadata.asMap()), Types.OTHER);
} catch (SQLException e) {
upsertStmt.setObject(parameterInitialIndex,
OBJECT_MAPPER.writeValueAsString(metadata.asMap()), Types.OTHER);
} catch (SQLException | JsonProcessingException e) {
throw new RuntimeException(e);
}
}