























@@ -107,7 +107,10 @@ function migrateCanonicalMemoryIndexSourcesPrimaryKey(db: DatabaseSync): void {
107107}
108108}
109109110-function migrateLegacyMemoryIndexTables(db: DatabaseSync): void {
110+function migrateLegacyMemoryIndexTables(
111+db: DatabaseSync,
112+preservedEmbeddingCacheTable?: string,
113+): void {
111114const hasLegacyCoreTables =
112115tableHasExactColumns(db, "meta", ["key", "value"]) &&
113116tableHasExactColumns(db, "files", ["path", "source", "hash", "mtime", "size"]) &&
@@ -186,6 +189,7 @@ function migrateLegacyMemoryIndexTables(db: DatabaseSync): void {
186189"chunks",
187190);
188191if (
192+preservedEmbeddingCacheTable !== "embedding_cache" &&
189193tableHasExactColumns(db, "embedding_cache", [
190194"provider",
191195"model",
@@ -253,10 +257,16 @@ function migrateLegacyMemoryIndexTables(db: DatabaseSync): void {
253257/** Ensure canonical memory index tables and the optional FTS table exist. */
254258export function ensureMemoryIndexSchema(params: {
255259db: DatabaseSync;
260+/** @deprecated Omit to use the canonical memory cache table. */
261+embeddingCacheTable?: string;
256262cacheEnabled: boolean;
263+/** @deprecated Omit to use the canonical memory FTS table. */
264+ftsTable?: string;
257265ftsEnabled: boolean;
258266ftsTokenizer?: "unicode61" | "trigram";
259267}): { ftsAvailable: boolean; ftsError?: string } {
268+const embeddingCacheTable = params.embeddingCacheTable ?? MEMORY_EMBEDDING_CACHE_TABLE;
269+const ftsTable = params.ftsTable ?? MEMORY_INDEX_FTS_TABLE;
260270params.db.exec(`
261271 CREATE TABLE IF NOT EXISTS ${MEMORY_INDEX_META_TABLE} (
262272 key TEXT PRIMARY KEY,
@@ -332,10 +342,14 @@ export function ensureMemoryIndexSchema(params: {
332342 CREATE INDEX IF NOT EXISTS idx_memory_index_chunks_source
333343 ON ${MEMORY_INDEX_CHUNKS_TABLE}(source);
334344 `);
335-migrateLegacyMemoryIndexTables(params.db);
345+migrateLegacyMemoryIndexTables(params.db, params.embeddingCacheTable);
336346if (params.cacheEnabled) {
347+const updatedAtIndex =
348+embeddingCacheTable === MEMORY_EMBEDDING_CACHE_TABLE
349+ ? "idx_memory_embedding_cache_updated_at"
350+ : "idx_embedding_cache_updated_at";
337351params.db.exec(`
338- CREATE TABLE IF NOT EXISTS ${MEMORY_EMBEDDING_CACHE_TABLE} (
352+ CREATE TABLE IF NOT EXISTS ${embeddingCacheTable} (
339353 provider TEXT NOT NULL,
340354 model TEXT NOT NULL,
341355 provider_key TEXT NOT NULL,
@@ -345,8 +359,8 @@ export function ensureMemoryIndexSchema(params: {
345359 updated_at INTEGER NOT NULL,
346360 PRIMARY KEY (provider, model, provider_key, hash)
347361 );
348- CREATE INDEX IF NOT EXISTS idx_memory_embedding_cache_updated_at
349- ON ${MEMORY_EMBEDDING_CACHE_TABLE}(updated_at);
362+ CREATE INDEX IF NOT EXISTS ${updatedAtIndex}
363+ ON ${embeddingCacheTable}(updated_at);
350364 `);
351365}
352366@@ -357,7 +371,7 @@ export function ensureMemoryIndexSchema(params: {
357371const tokenizer = params.ftsTokenizer ?? "unicode61";
358372const tokenizeClause = tokenizer === "trigram" ? `, tokenize='trigram case_sensitive 0'` : "";
359373params.db.exec(
360-`CREATE VIRTUAL TABLE IF NOT EXISTS ${MEMORY_INDEX_FTS_TABLE} USING fts5(\n` +
374+`CREATE VIRTUAL TABLE IF NOT EXISTS ${ftsTable} USING fts5(\n` +
361375` text,\n` +
362376` id UNINDEXED,\n` +
363377` path UNINDEXED,\n` +
@@ -370,12 +384,12 @@ export function ensureMemoryIndexSchema(params: {
370384// The shipped generic-table migration and a later FTS enablement both
371385// create an empty derived table beside already-canonical chunk rows.
372386params.db.exec(`
373- INSERT INTO ${MEMORY_INDEX_FTS_TABLE} (
387+ INSERT INTO ${ftsTable} (
374388 text, id, path, source, model, start_line, end_line
375389 )
376390 SELECT text, id, path, source, model, start_line, end_line
377391 FROM ${MEMORY_INDEX_CHUNKS_TABLE}
378- WHERE NOT EXISTS (SELECT 1 FROM ${MEMORY_INDEX_FTS_TABLE} LIMIT 1);
392+ WHERE NOT EXISTS (SELECT 1 FROM ${ftsTable} LIMIT 1);
379393 `);
380394ftsAvailable = true;
381395} catch (err) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。