mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-02-06 05:23:08 +00:00
chore: update n8n to v1.101.1
- Updated n8n from 1.100.1 to 1.101.1 - Updated n8n-core from 1.99.0 to 1.100.0 - Updated n8n-workflow from 1.97.0 to 1.98.0 - Updated @n8n/n8n-nodes-langchain from 1.99.0 to 1.100.1 - Rebuilt node database with 528 nodes - All validation tests passing - Bumped version to 2.7.12 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
130
scripts/migrate-nodes-fts.ts
Normal file
130
scripts/migrate-nodes-fts.ts
Normal file
@@ -0,0 +1,130 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import * as path from 'path';
|
||||
import { createDatabaseAdapter } from '../src/database/database-adapter';
|
||||
import { logger } from '../src/utils/logger';
|
||||
|
||||
/**
|
||||
* Migrate existing database to add FTS5 support for nodes
|
||||
*/
|
||||
async function migrateNodesFTS() {
|
||||
logger.info('Starting nodes FTS5 migration...');
|
||||
|
||||
const dbPath = path.join(process.cwd(), 'data', 'nodes.db');
|
||||
const db = await createDatabaseAdapter(dbPath);
|
||||
|
||||
try {
|
||||
// Check if nodes_fts already exists
|
||||
const tableExists = db.prepare(`
|
||||
SELECT name FROM sqlite_master
|
||||
WHERE type='table' AND name='nodes_fts'
|
||||
`).get();
|
||||
|
||||
if (tableExists) {
|
||||
logger.info('nodes_fts table already exists, skipping migration');
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info('Creating nodes_fts virtual table...');
|
||||
|
||||
// Create the FTS5 virtual table
|
||||
db.prepare(`
|
||||
CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5(
|
||||
node_type,
|
||||
display_name,
|
||||
description,
|
||||
documentation,
|
||||
operations,
|
||||
content=nodes,
|
||||
content_rowid=rowid,
|
||||
tokenize='porter'
|
||||
)
|
||||
`).run();
|
||||
|
||||
// Populate the FTS table with existing data
|
||||
logger.info('Populating nodes_fts with existing data...');
|
||||
|
||||
const nodes = db.prepare('SELECT rowid, * FROM nodes').all() as any[];
|
||||
logger.info(`Migrating ${nodes.length} nodes to FTS index...`);
|
||||
|
||||
const insertStmt = db.prepare(`
|
||||
INSERT INTO nodes_fts(rowid, node_type, display_name, description, documentation, operations)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
|
||||
for (const node of nodes) {
|
||||
insertStmt.run(
|
||||
node.rowid,
|
||||
node.node_type,
|
||||
node.display_name,
|
||||
node.description || '',
|
||||
node.documentation || '',
|
||||
node.operations || ''
|
||||
);
|
||||
}
|
||||
|
||||
// Create triggers to keep FTS in sync
|
||||
logger.info('Creating synchronization triggers...');
|
||||
|
||||
db.prepare(`
|
||||
CREATE TRIGGER IF NOT EXISTS nodes_fts_insert AFTER INSERT ON nodes
|
||||
BEGIN
|
||||
INSERT INTO nodes_fts(rowid, node_type, display_name, description, documentation, operations)
|
||||
VALUES (new.rowid, new.node_type, new.display_name, new.description, new.documentation, new.operations);
|
||||
END
|
||||
`).run();
|
||||
|
||||
db.prepare(`
|
||||
CREATE TRIGGER IF NOT EXISTS nodes_fts_update AFTER UPDATE ON nodes
|
||||
BEGIN
|
||||
UPDATE nodes_fts
|
||||
SET node_type = new.node_type,
|
||||
display_name = new.display_name,
|
||||
description = new.description,
|
||||
documentation = new.documentation,
|
||||
operations = new.operations
|
||||
WHERE rowid = new.rowid;
|
||||
END
|
||||
`).run();
|
||||
|
||||
db.prepare(`
|
||||
CREATE TRIGGER IF NOT EXISTS nodes_fts_delete AFTER DELETE ON nodes
|
||||
BEGIN
|
||||
DELETE FROM nodes_fts WHERE rowid = old.rowid;
|
||||
END
|
||||
`).run();
|
||||
|
||||
// Test the FTS search
|
||||
logger.info('Testing FTS search...');
|
||||
|
||||
const testResults = db.prepare(`
|
||||
SELECT n.* FROM nodes n
|
||||
JOIN nodes_fts ON n.rowid = nodes_fts.rowid
|
||||
WHERE nodes_fts MATCH 'webhook'
|
||||
ORDER BY rank
|
||||
LIMIT 5
|
||||
`).all();
|
||||
|
||||
logger.info(`FTS test search found ${testResults.length} results for 'webhook'`);
|
||||
|
||||
// Persist if using sql.js
|
||||
if ('persist' in db) {
|
||||
logger.info('Persisting database changes...');
|
||||
(db as any).persist();
|
||||
}
|
||||
|
||||
logger.info('✅ FTS5 migration completed successfully!');
|
||||
|
||||
} catch (error) {
|
||||
logger.error('Migration failed:', error);
|
||||
throw error;
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Run migration
|
||||
migrateNodesFTS().catch(error => {
|
||||
logger.error('Migration error:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user