Skip to content

Commit 0d254b0

Browse files
committed
Added test for pg-native
1 parent a4952f1 commit 0d254b0

4 files changed

Lines changed: 44 additions & 4 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"kysely": "^0.29.2",
7171
"objection": "^3.1.3",
7272
"pg": "^8.6.0",
73+
"pg-native": "^3.8.0",
7374
"pg-promise": "^12.3.0",
7475
"postgres": "^3.3.4",
7576
"prisma": "^7.1.0",

src/pg/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { deprecate } from 'node:util';
2-
import { toSql } from '../index.js';
2+
import { fromSql, toSql } from '../index.js';
33
import { vectorFromSql, halfvecFromSql, sparsevecFromSql } from '../utils.js';
44

55
/** @import { ClientBase } from 'pg' */
@@ -38,6 +38,6 @@ async function registerTypes(client) {
3838

3939
const registerType = deprecate(registerTypes, 'registerType() is deprecated. Use registerTypes() instead.');
4040

41-
export { registerType, registerTypes, toSql };
41+
export { registerType, registerTypes, fromSql, toSql };
4242

43-
export default { registerType, registerTypes, toSql };
43+
export default { registerType, registerTypes, fromSql, toSql };

tests/pg-native.test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import assert from 'node:assert';
2+
import test from 'node:test';
3+
import Client from 'pg-native';
4+
import pgvector from 'pgvector/pg';
5+
import { SparseVector } from 'pgvector';
6+
7+
function isDeno() {
8+
return typeof Deno !== 'undefined';
9+
}
10+
11+
test('pg-native example', {skip: isDeno()}, () => {
12+
const client = new Client();
13+
client.connectSync('postgres://localhost/pgvector_node_test');
14+
15+
client.querySync('CREATE EXTENSION IF NOT EXISTS vector');
16+
client.querySync('DROP TABLE IF EXISTS pg_native_items');
17+
client.querySync('CREATE TABLE pg_native_items (id serial PRIMARY KEY, embedding vector(3), half_embedding halfvec(3), binary_embedding bit(3), sparse_embedding sparsevec(3))');
18+
19+
const params = [
20+
pgvector.toSql([1, 1, 1]), pgvector.toSql([1, 1, 1]), '000', new SparseVector([1, 1, 1]),
21+
pgvector.toSql([2, 2, 2]), pgvector.toSql([2, 2, 2]), '101', new SparseVector([2, 2, 2]),
22+
pgvector.toSql([1, 1, 2]), pgvector.toSql([1, 1, 2]), '111', new SparseVector([1, 1, 2]),
23+
null, null, null, null
24+
];
25+
client.querySync('INSERT INTO pg_native_items (embedding, half_embedding, binary_embedding, sparse_embedding) VALUES ($1, $2, $3, $4), ($5, $6, $7, $8), ($9, $10, $11, $12), ($13, $14, $15, $16)', params);
26+
27+
const rows = client.querySync('SELECT * FROM pg_native_items ORDER BY embedding <-> $1 LIMIT 5', [pgvector.toSql([1, 1, 1])]);
28+
assert.deepEqual(rows.map(v => v.id), [1, 3, 2, 4]);
29+
assert.deepEqual(pgvector.fromSql(rows[0].embedding), [1, 1, 1]);
30+
assert.deepEqual(pgvector.fromSql(rows[0].half_embedding), [1, 1, 1]);
31+
assert.deepEqual(rows[0].binary_embedding, '000');
32+
assert.deepEqual(pgvector.fromSql(rows[0].sparse_embedding).toArray(), [1, 1, 1]);
33+
34+
client.querySync('CREATE INDEX ON pg_native_items USING hnsw (embedding vector_l2_ops)');
35+
36+
client.end();
37+
});

types/pg/index.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
declare namespace _default {
22
export { registerType };
33
export { registerTypes };
4+
export { fromSql };
45
export { toSql };
56
}
67
export default _default;
78
export function registerType(client: ClientBase): Promise<void>;
89
export function registerTypes(client: ClientBase): Promise<void>;
10+
import { fromSql } from '../index.js';
911
import { toSql } from '../index.js';
1012
import type { ClientBase } from 'pg';
11-
export { toSql };
13+
export { fromSql, toSql };

0 commit comments

Comments
 (0)