feat: 白龙马数字意识框架 v2.2.0 - 3D意识空间、多技能协同、自我进化系统
This commit is contained in:
100
scripts/test-fts-trigger.mjs
Normal file
100
scripts/test-fts-trigger.mjs
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* 测试 memories_au (AFTER UPDATE) trigger 是否正常工作。
|
||||
* 验证:更新记忆后,新关键词能被 FTS5 搜到。
|
||||
*
|
||||
* 用法:node scripts/test-fts-trigger.mjs
|
||||
*/
|
||||
|
||||
import Database from 'better-sqlite3'
|
||||
import path from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
import fs from 'fs'
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
const dbPath = path.resolve(__dirname, '../data/jarvis.db')
|
||||
|
||||
if (!fs.existsSync(dbPath)) {
|
||||
console.error('数据库不存在:', dbPath)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const db = new Database(dbPath)
|
||||
db.pragma('journal_mode = WAL')
|
||||
|
||||
const TEST_MEM_ID = 'fact_fts_trigger_test_' + Date.now()
|
||||
let passed = 0
|
||||
let failed = 0
|
||||
|
||||
function check(label, value) {
|
||||
if (value) {
|
||||
console.log(` ✅ ${label}`)
|
||||
passed++
|
||||
} else {
|
||||
console.log(` ❌ ${label}`)
|
||||
failed++
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n── FTS5 Trigger 测试 ──\n')
|
||||
|
||||
// 1. 插入一条测试记忆
|
||||
const ts = new Date().toISOString()
|
||||
const insertResult = db.prepare(`
|
||||
INSERT INTO memories (event_type, content, detail, title, mem_id, entities, concepts, tags, links, source_ref, timestamp)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`).run('fact', '测试关键词_插入阶段_UNIQUE123', '详情内容_插入', '测试标题', TEST_MEM_ID, '[]', '[]', '[]', '[]', null, ts)
|
||||
|
||||
const newId = insertResult.lastInsertRowid
|
||||
console.log(`[1] 插入记忆 id=${newId} mem_id=${TEST_MEM_ID}`)
|
||||
|
||||
// 2. 验证 INSERT trigger:能搜到插入阶段的关键词
|
||||
const afterInsert = db.prepare(`
|
||||
SELECT m.* FROM memories m
|
||||
JOIN memories_fts ON memories_fts.rowid = m.id
|
||||
WHERE memories_fts MATCH 'UNIQUE123'
|
||||
LIMIT 5
|
||||
`).all()
|
||||
check('INSERT trigger:能搜到 UNIQUE123', afterInsert.some(r => r.id === newId))
|
||||
|
||||
// 3. 更新这条记忆,换成完全不同的关键词
|
||||
db.prepare(`
|
||||
UPDATE memories SET content = '测试关键词_更新阶段_UPDATED456', detail = '详情内容_更新', timestamp = ?
|
||||
WHERE id = ?
|
||||
`).run(new Date().toISOString(), newId)
|
||||
console.log(`\n[2] 更新记忆 id=${newId},内容换成 UPDATED456`)
|
||||
|
||||
// 4. 验证 UPDATE trigger:能搜到新关键词
|
||||
const afterUpdate_new = db.prepare(`
|
||||
SELECT m.* FROM memories m
|
||||
JOIN memories_fts ON memories_fts.rowid = m.id
|
||||
WHERE memories_fts MATCH 'UPDATED456'
|
||||
LIMIT 5
|
||||
`).all()
|
||||
check('UPDATE trigger:能搜到新关键词 UPDATED456', afterUpdate_new.some(r => r.id === newId))
|
||||
|
||||
// 5. 验证旧关键词不应该再被搜到(FTS 已删除旧条目)
|
||||
const afterUpdate_old = db.prepare(`
|
||||
SELECT m.* FROM memories m
|
||||
JOIN memories_fts ON memories_fts.rowid = m.id
|
||||
WHERE memories_fts MATCH 'UNIQUE123'
|
||||
LIMIT 5
|
||||
`).all()
|
||||
check('UPDATE trigger:旧关键词 UNIQUE123 已从索引移除', !afterUpdate_old.some(r => r.id === newId))
|
||||
|
||||
// 6. 清理测试数据
|
||||
db.prepare(`DELETE FROM memories WHERE id = ?`).run(newId)
|
||||
console.log(`\n[3] 已清理测试数据`)
|
||||
|
||||
// 验证 DELETE trigger
|
||||
const afterDelete = db.prepare(`
|
||||
SELECT m.* FROM memories m
|
||||
JOIN memories_fts ON memories_fts.rowid = m.id
|
||||
WHERE memories_fts MATCH 'UPDATED456'
|
||||
LIMIT 5
|
||||
`).all()
|
||||
check('DELETE trigger:删除后搜不到', !afterDelete.some(r => r.id === newId))
|
||||
|
||||
db.close()
|
||||
|
||||
console.log(`\n── 结果:${passed} 通过 / ${failed} 失败 ──\n`)
|
||||
process.exit(failed > 0 ? 1 : 0)
|
||||
Reference in New Issue
Block a user