{"record":{"id":"29661ae41dde1921","repo":"FlowiseAI/Flowise","slug":"no-datasource-options-provided-29661a","errorCode":null,"errorMessage":"No datasource options provided","messagePattern":"No datasource options provided","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/components/nodes/recordmanager/SQLiteRecordManager/SQLiteRecordManager.ts","lineNumber":173,"sourceCode":"    tableName: string\n    namespace: string\n    config: SQLiteRecordManagerOptions\n\n    constructor(namespace: string, config: SQLiteRecordManagerOptions) {\n        const { tableName } = config\n        this.namespace = namespace\n        this.tableName = tableName || 'upsertion_records'\n        this.config = config\n    }\n\n    sanitizeTableName(tableName: string): string {\n        return sanitizeRecordManagerTableName(tableName)\n    }\n\n    private async getDataSource(): Promise<DataSource> {\n        const { sqliteOptions } = this.config\n        if (!sqliteOptions) {\n            throw new Error('No datasource options provided')\n        }\n        const dataSource = new DataSource(sqliteOptions)\n        await dataSource.initialize()\n        return dataSource\n    }\n\n    async createSchema(): Promise<void> {\n        const dataSource = await this.getDataSource()\n        try {\n            const queryRunner = dataSource.createQueryRunner()\n            const tableName = this.sanitizeTableName(this.tableName)\n\n            await queryRunner.manager.query(`\nCREATE TABLE IF NOT EXISTS \"${tableName}\" (\n  uuid TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),\n  key TEXT NOT NULL,\n  namespace TEXT NOT NULL,\n  updated_at REAL NOT NULL,","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/recordmanager/SQLiteRecordManager/SQLiteRecordManager.ts#L155-L191","documentation":"SQLite analog of errors 261/266 but with no port guard. Thrown by SQLiteRecordManager.getDataSource when config.sqliteOptions is falsy. SQLite needs at least a database file path; without options, TypeORM cannot construct the DataSource.","triggerScenarios":"Config object omits sqliteOptions; the init path's validateSQLitePath / mergeDataSourceOptions produced nothing assigned to sqliteOptions; programmatic construction forgot the options argument.","commonSituations":"Record Manager node has no SQLite configuration filled; DATABASE_PATH env var unset and getUserHome() unreachable so the default path invalid - though that path throws elsewhere; misnamed key in additionalConfig.","solutions":["Supply sqliteOptions: { database: '/path/to/database.sqlite', type: 'sqlite' }.","Set DATABASE_PATH env var so the default resolves to a writable directory.","Confirm the credential / additionalConfig JSON parsed (a parse error throws earlier) and includes the database path."],"exampleFix":"// before\nconst mgr = new SQLiteRecordManager({ tableName: 'records' }, {})\n// after\nconst mgr = new SQLiteRecordManager(\n  { tableName: 'records' },\n  { sqliteOptions: { type: 'sqlite', database: '/data/flowise.sqlite' } }\n)","handlingStrategy":"validation","validationCode":"function hasSqliteOptions(cfg: unknown): cfg is { sqliteOptions: { database: string } } {\n  const o = (cfg as any)?.sqliteOptions\n  return !!o && typeof o.database === 'string' && o.database.length > 0\n}\nif (!hasSqliteOptions(config)) {\n  throw new Error('sqliteOptions.database path is required.')\n}","typeGuard":"function isSqliteConfig(cfg: unknown): cfg is { sqliteOptions: { type: 'sqlite'; database: string } } {\n  const o = (cfg as any)?.sqliteOptions\n  return !!o && o.type === 'sqlite' && typeof o.database === 'string'\n}","tryCatchPattern":"try {\n  await manager.createSchema()\n} catch (e) {\n  if (e instanceof Error && e.message === 'No datasource options provided') {\n    // prompt for sqlite database path or DATABASE_PATH env\n  }\n  throw e\n}","preventionTips":["Set DATABASE_PATH to a writable directory in production.","In Docker, mount a volume for the SQLite file.","Validate the database path is writable before starting ingestion."],"tags":["sqlite","record-manager","config","datasource","missing-path"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}