Merge Memory V2 runtime facade
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
buildPgvectorMemorySchemaSql,
|
||||
ensurePgvectorMemorySchema,
|
||||
} from './memory-v2-pgvector-schema.mjs';
|
||||
|
||||
test('buildPgvectorMemorySchemaSql creates idempotent table SQL without extension by default', () => {
|
||||
const statements = buildPgvectorMemorySchemaSql({
|
||||
tableName: 'memory_embeddings',
|
||||
dimensions: 1536,
|
||||
});
|
||||
|
||||
assert.equal(statements.length, 3);
|
||||
assert.doesNotMatch(statements.join('\n'), /CREATE EXTENSION/i);
|
||||
assert.match(statements[0], /CREATE TABLE IF NOT EXISTS "memory_embeddings"/);
|
||||
assert.match(statements[0], /embedding vector\(1536\) NOT NULL/);
|
||||
assert.match(statements[0], /source_memory_id TEXT/);
|
||||
assert.match(statements[1], /CREATE INDEX IF NOT EXISTS "memory_embeddings_user_created_idx"/);
|
||||
assert.match(statements[2], /CREATE UNIQUE INDEX IF NOT EXISTS "memory_embeddings_source_memory_id_uidx"/);
|
||||
});
|
||||
|
||||
test('buildPgvectorMemorySchemaSql can include extension and vector index for controlled setup', () => {
|
||||
const statements = buildPgvectorMemorySchemaSql({
|
||||
tableName: 'memory_embeddings',
|
||||
dimensions: 768,
|
||||
createExtension: true,
|
||||
createVectorIndex: true,
|
||||
});
|
||||
|
||||
assert.equal(statements.length, 5);
|
||||
assert.equal(statements[0], 'CREATE EXTENSION IF NOT EXISTS vector');
|
||||
assert.match(statements[1], /embedding vector\(768\) NOT NULL/);
|
||||
assert.match(statements[4], /USING ivfflat \(embedding vector_cosine_ops\)/);
|
||||
});
|
||||
|
||||
test('buildPgvectorMemorySchemaSql validates identifiers and dimensions', () => {
|
||||
assert.throws(
|
||||
() => buildPgvectorMemorySchemaSql({ tableName: 'memory_embeddings;drop table users' }),
|
||||
/Invalid PostgreSQL identifier/,
|
||||
);
|
||||
assert.throws(
|
||||
() => buildPgvectorMemorySchemaSql({ dimensions: 0 }),
|
||||
/Invalid pgvector dimensions/,
|
||||
);
|
||||
});
|
||||
|
||||
test('ensurePgvectorMemorySchema executes generated statements in order', async () => {
|
||||
const executed = [];
|
||||
const result = await ensurePgvectorMemorySchema(
|
||||
{
|
||||
async query(sql) {
|
||||
executed.push(sql);
|
||||
return { rows: [] };
|
||||
},
|
||||
},
|
||||
{
|
||||
tableName: 'memory_embeddings',
|
||||
dimensions: 1536,
|
||||
createExtension: true,
|
||||
createVectorIndex: true,
|
||||
},
|
||||
);
|
||||
|
||||
assert.equal(result.ok, true);
|
||||
assert.equal(result.statements, 5);
|
||||
assert.equal(executed[0], 'CREATE EXTENSION IF NOT EXISTS vector');
|
||||
assert.match(executed[1], /CREATE TABLE IF NOT EXISTS "memory_embeddings"/);
|
||||
assert.match(executed[2], /memory_embeddings_user_created_idx/);
|
||||
assert.match(executed[3], /memory_embeddings_source_memory_id_uidx/);
|
||||
assert.match(executed[4], /memory_embeddings_embedding_idx/);
|
||||
});
|
||||
Reference in New Issue
Block a user