Skip to content

Commit d554780

Browse files
PGvector support (#3696)
* Add pgvector-types module. * Add missing binder definitions. Add missing PGbit type registration. Few tests. * Add cached bean test. * Prefer final classes, minor formating only --------- Co-authored-by: Rob Bygrave <[email protected]>
1 parent 5606c95 commit d554780

File tree

35 files changed

+1125
-7
lines changed

35 files changed

+1125
-7
lines changed

composites/ebean-pgvector/pom.xml

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<artifactId>ebean-parent</artifactId>
6+
<groupId>io.ebean</groupId>
7+
<version>16.1.1</version>
8+
<relativePath>../..</relativePath>
9+
</parent>
10+
11+
<name>ebean-pgvector</name>
12+
<description>ebean-pgvector composite</description>
13+
<artifactId>ebean-pgvector</artifactId>
14+
15+
<properties>
16+
<pgvector.version>0.1.6</pgvector.version>
17+
<postgres.jdbc.version>42.7.2</postgres.jdbc.version>
18+
</properties>
19+
20+
<dependencies>
21+
22+
<dependency>
23+
<groupId>io.ebean</groupId>
24+
<artifactId>ebean-api</artifactId>
25+
<version>16.1.1</version>
26+
</dependency>
27+
28+
<dependency>
29+
<groupId>io.ebean</groupId>
30+
<artifactId>ebean-core</artifactId>
31+
<version>16.1.1</version>
32+
</dependency>
33+
34+
<dependency>
35+
<groupId>io.ebean</groupId>
36+
<artifactId>ebean-datasource</artifactId>
37+
<version>${ebean-datasource.version}</version>
38+
</dependency>
39+
40+
<dependency>
41+
<groupId>io.ebean</groupId>
42+
<artifactId>ebean-migration</artifactId>
43+
<version>${ebean-migration.version}</version>
44+
</dependency>
45+
46+
<!-- Technically optional but most expected to use query beans -->
47+
<dependency>
48+
<groupId>io.ebean</groupId>
49+
<artifactId>ebean-querybean</artifactId>
50+
<version>16.1.1</version>
51+
</dependency>
52+
53+
<dependency>
54+
<groupId>io.ebean</groupId>
55+
<artifactId>ebean-platform-postgres</artifactId>
56+
<version>16.1.1</version>
57+
</dependency>
58+
59+
<dependency>
60+
<groupId>io.ebean</groupId>
61+
<artifactId>ebean-pgvector-types</artifactId>
62+
<version>16.1.1</version>
63+
</dependency>
64+
65+
<dependency>
66+
<groupId>org.postgresql</groupId>
67+
<artifactId>postgresql</artifactId>
68+
<version>${postgres.jdbc.version}</version>
69+
<exclusions>
70+
<!-- exclude unnecessary checker framework -->
71+
<exclusion>
72+
<groupId>*</groupId>
73+
<artifactId>*</artifactId>
74+
</exclusion>
75+
</exclusions>
76+
</dependency>
77+
78+
<dependency>
79+
<groupId>com.pgvector</groupId>
80+
<artifactId>pgvector</artifactId>
81+
<version>${pgvector.version}</version>
82+
</dependency>
83+
84+
</dependencies>
85+
</project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.ebean.pgvector.assembly;
2+
3+
/**
4+
* Nothing interesting here - required placeholder for javadoc.
5+
*/
6+
public class Assembly {
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module io.ebean.pgvector {
2+
3+
requires transitive io.ebean.api;
4+
requires transitive io.ebean.core;
5+
requires transitive io.ebean.datasource;
6+
requires transitive io.ebean.querybean;
7+
requires transitive io.ebean.platform.postgres;
8+
9+
}

composites/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<module>ebean-postgres</module>
2626
<module>ebean-postgis</module>
2727
<module>ebean-net-postgis</module>
28+
<module>ebean-pgvector</module>
2829
<!-- <module>sqlanywhere</module>-->
2930
<module>ebean-sqlite</module>
3031
<module>ebean-sqlserver</module>

ebean-api/src/main/java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ protected void renderLengthScale(int deployLength, int deployScale, StringBuilde
4646
private static final DbPlatformType MULTILINESTRING = new DbPlatformType("multilinestring");
4747
private static final DbPlatformType MULTIPOLYGON = new DbPlatformType("multipolygon");
4848

49+
private static final DbPlatformType VECTOR = new DbPlatformType("vector", 2000, null);
50+
private static final DbPlatformType VECTOR_HALF = new DbPlatformType("halfvec", 4000, null);
51+
private static final DbPlatformType VECTOR_BIT = new DbPlatformType("bit", 64000, null);
52+
private static final DbPlatformType VECTOR_SPARSE = new DbPlatformType("sparsevec", 1000, null);
53+
4954
private final Map<DbType, DbPlatformType> typeMap = new EnumMap<>(DbType.class);
5055

5156
/**
@@ -93,6 +98,10 @@ private void loadDefaults(boolean logicalTypes) {
9398
put(DbType.MULTIPOINT, MULTIPOINT);
9499
put(DbType.MULTILINESTRING, MULTILINESTRING);
95100
put(DbType.MULTIPOLYGON, MULTIPOLYGON);
101+
put(DbType.VECTOR, VECTOR);
102+
put(DbType.VECTOR_HALF, VECTOR_HALF);
103+
put(DbType.VECTOR_BIT, VECTOR_BIT);
104+
put(DbType.VECTOR_SPARSE, VECTOR_SPARSE);
96105

97106
if (logicalTypes) {
98107
// keep it logical for 2 layer DDL generation

ebean-api/src/main/java/io/ebean/config/dbplatform/DbType.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ public enum DbType {
5151
JSONB(ExtraDbTypes.JSONB),
5252
JSONCLOB(ExtraDbTypes.JSONClob),
5353
JSONBLOB(ExtraDbTypes.JSONBlob),
54-
JSONVARCHAR(ExtraDbTypes.JSONVarchar);
54+
JSONVARCHAR(ExtraDbTypes.JSONVarchar),
55+
56+
VECTOR(ExtraDbTypes.VECTOR),
57+
VECTOR_HALF(ExtraDbTypes.VECTOR_HALF),
58+
VECTOR_BIT(ExtraDbTypes.VECTOR_BIT),
59+
VECTOR_SPARSE(ExtraDbTypes.VECTOR_SPARSE);
5560

5661
private final int id;
5762

ebean-api/src/main/java/io/ebean/config/dbplatform/ExtraDbTypes.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,24 @@ public interface ExtraDbTypes {
7474
*/
7575
int MULTILINESTRING = 6007;
7676

77+
/**
78+
* PGVector base type
79+
*/
80+
int VECTOR = 7000;
81+
82+
/**
83+
* PGVector half precision float type
84+
*/
85+
int VECTOR_HALF = 7001;
86+
87+
/**
88+
* PGVector binary type (bit)
89+
*/
90+
int VECTOR_BIT = 7002;
91+
92+
/**
93+
* PGVector sparse type
94+
*/
95+
int VECTOR_SPARSE = 7003;
96+
7797
}

ebean-bom/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,18 @@
256256
<version>16.1.1</version>
257257
</dependency>
258258

259+
<dependency>
260+
<groupId>io.ebean</groupId>
261+
<artifactId>ebean-pgvector</artifactId>
262+
<version>16.1.1</version>
263+
</dependency>
264+
265+
<dependency>
266+
<groupId>io.ebean</groupId>
267+
<artifactId>ebean-pgvector-types</artifactId>
268+
<version>16.1.1</version>
269+
</dependency>
270+
259271
<dependency>
260272
<groupId>io.ebean</groupId>
261273
<artifactId>ebean-sqlite</artifactId>

ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,13 @@ private void bindSimpleData(DataBind b, int dataType, Object data) {
329329
geoTypeBinder.bind(b, dataType, data);
330330
break;
331331

332+
case DbPlatformType.VECTOR:
333+
case DbPlatformType.VECTOR_HALF:
334+
case DbPlatformType.VECTOR_BIT:
335+
case DbPlatformType.VECTOR_SPARSE:
336+
b.setObject(data);
337+
break;
338+
332339
case java.sql.Types.OTHER:
333340
b.setObject(data, dataType);
334341
break;

ebean-core/src/main/java/module-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
exports io.ebeaninternal.server.querydefn to io.ebean.autotune, io.ebean.querybean, io.ebean.test, io.ebean.elastic;
7070
exports io.ebeaninternal.server.rawsql to io.ebean.test;
7171
exports io.ebeaninternal.server.json to io.ebean.test, io.ebean.elastic;
72-
exports io.ebeaninternal.server.type to io.ebean.postgis, io.ebean.test, io.ebean.postgis.types;
72+
exports io.ebeaninternal.server.type to io.ebean.postgis, io.ebean.test, io.ebean.postgis.types, io.ebean.pgvector;
7373
exports io.ebeaninternal.server.transaction to io.ebean.test, io.ebean.elastic, io.ebean.spring.txn, io.ebean.k8scache;
7474
exports io.ebeaninternal.server.util to io.ebean.querybean;
7575

0 commit comments

Comments
 (0)