Skip to content

Commit 7fc6318

Browse files
committed
Improved toSql function
1 parent d71597a commit 7fc6318

3 files changed

Lines changed: 10 additions & 5 deletions

File tree

src/utils/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,15 @@ function fromSql(value) {
4545
}
4646

4747
function toSql(value) {
48-
if (Array.isArray(value)) {
48+
if (value === null) {
49+
return null;
50+
} else if (Array.isArray(value)) {
4951
return vectorToSql(value);
50-
}
51-
if (value instanceof SparseVector) {
52+
} else if (value instanceof SparseVector) {
5253
return sparsevecToSql(value);
54+
} else {
55+
throw new Error('expected array or sparse vector');
5356
}
54-
return value;
5557
}
5658

5759
function typeWithDimensions(name, dimensions) {

tests/sequelize/index.test.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Sequelize, DataTypes, Model } from 'sequelize';
22
import pgvector from 'pgvector/sequelize';
33
import { l2Distance, maxInnerProduct, cosineDistance, l1Distance, hammingDistance, jaccardDistance } from 'pgvector/sequelize';
4+
import { SparseVector } from 'pgvector';
45

56
test('example', async () => {
67
pgvector.registerType(Sequelize);
@@ -66,7 +67,7 @@ test('example', async () => {
6667

6768
// L2 distance - sparsevec
6869
items = await Item.findAll({
69-
order: l2Distance('sparse_embedding', '{1:1,2:1,3:1}/3', sequelize),
70+
order: l2Distance('sparse_embedding', new SparseVector([1, 1, 1]), sequelize),
7071
limit: 5
7172
});
7273
expect(items.map(v => v.id)).toStrictEqual([1, 3, 2]);

tests/utils/index.test.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ test('fromSql', () => {
55
expect(pgvector.fromSql('[1,2,3]')).toStrictEqual([1, 2, 3]);
66
expect(pgvector.fromSql('{1:1,2:2,3:3}/3').toArray()).toStrictEqual([1, 2, 3]);
77
expect(pgvector.fromSql(null)).toBeNull();
8+
expect(() => pgvector.fromSql('')).toThrowError('invalid text representation');
89
});
910

1011
test('toSql', () => {
1112
expect(pgvector.toSql([1, 2, 3])).toEqual('[1,2,3]');
1213
expect(pgvector.toSql(new SparseVector([1, 2, 3]))).toEqual('{1:1,2:2,3:3}/3');
1314
expect(pgvector.toSql(null)).toBeNull();
15+
expect(() => pgvector.toSql({})).toThrowError('expected array or sparse vector');
1416
});
1517

1618
test('sqlType', () => {

0 commit comments

Comments
 (0)