|
1 | 1 | // Flags: --experimental-sqlite
|
2 | 2 | 'use strict';
|
3 | 3 | const { spawnPromisified } = require('../common');
|
| 4 | +const assert = require('node:assert'); |
4 | 5 | const tmpdir = require('../common/tmpdir');
|
5 | 6 | const { existsSync } = require('node:fs');
|
6 | 7 | const { join } = require('node:path');
|
@@ -161,6 +162,50 @@ suite('DatabaseSync.prototype.loadExtension()', () => {
|
161 | 162 | const ext = getExtension(platform, arch);
|
162 | 163 | const filePath = path('sqlite', `vec0${ext}`);
|
163 | 164 | t.assert.strictEqual(db.loadExtension(filePath), undefined);
|
| 165 | + |
| 166 | + const { vec_version } = db.prepare( |
| 167 | + 'select vec_version() as vec_version;' |
| 168 | + ).get(); |
| 169 | + assert.strictEqual(vec_version, 'v0.1.1'); |
| 170 | + |
| 171 | + const items = [ |
| 172 | + [1, [0.1, 0.1, 0.1, 0.1]], |
| 173 | + [2, [0.2, 0.2, 0.2, 0.2]], |
| 174 | + [3, [0.3, 0.3, 0.3, 0.3]], |
| 175 | + [4, [0.4, 0.4, 0.4, 0.4]], |
| 176 | + [5, [0.5, 0.5, 0.5, 0.5]], |
| 177 | + ]; |
| 178 | + const query = [0.3, 0.3, 0.3, 0.3]; |
| 179 | + |
| 180 | + db.exec('CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])'); |
| 181 | + |
| 182 | + const insertStmt = db.prepare( |
| 183 | + 'INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)' |
| 184 | + ); |
| 185 | + |
| 186 | + for (const [id, vector] of items) { |
| 187 | + const rowId = BigInt(id); |
| 188 | + const embedding = new Uint8Array(Float32Array.from(vector).buffer); |
| 189 | + insertStmt.run(rowId, embedding); |
| 190 | + } |
| 191 | + |
| 192 | + const rows = db.prepare( |
| 193 | + ` |
| 194 | + SELECT |
| 195 | + rowid, |
| 196 | + distance |
| 197 | + FROM vec_items |
| 198 | + WHERE embedding MATCH ? |
| 199 | + ORDER BY distance |
| 200 | + LIMIT 3 |
| 201 | +` |
| 202 | + ).all(new Uint8Array(Float32Array.from(query).buffer)); |
| 203 | + |
| 204 | + assert.deepStrictEqual(rows, [ |
| 205 | + { rowid: 3, distance: 0 }, |
| 206 | + { rowid: 4, distance: 0.19999998807907104 }, |
| 207 | + { rowid: 2, distance: 0.20000001788139343 }, |
| 208 | + ]); |
164 | 209 | });
|
165 | 210 | });
|
166 | 211 |
|
|
0 commit comments