{"record":{"id":"9e3fcb0422e18122","repo":"mem0ai/mem0","slug":"must-provide-at-least-one-of-connectionparams-an","errorCode":null,"errorMessage":"Must provide at least one of `connectionParams` and `client`","messagePattern":"Must provide at least one of `connectionParams` and `client`","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"mem0-ts/src/oss/src/vector_stores/oracledb.ts","lineNumber":329,"sourceCode":"\nexport class OracleAIVectorSearch implements VectorStore {\n  private readonly collectionName: string;\n  private readonly indexName: string;\n  private readonly embeddingModelDims: number;\n  private readonly distanceMetric: DistanceMetric;\n  private readonly indexType: IndexType;\n  private readonly indexParameters: Record<string, number>;\n  private readonly indexAccuracy?: number;\n  private readonly doCreateIndex: boolean;\n  private readonly config: OracleDBConfig;\n  private oracledb: any;\n  private client?: Connection | Pool;\n  private ownsClient = false;\n  private _initPromise?: Promise<void>;\n\n  constructor(config: OracleDBConfig) {\n    if (!config.connectionParams && !config.client) {\n      throw new Error(\n        \"Must provide at least one of `connectionParams` and `client`\",\n      );\n    }\n\n    this.collectionName = quoteIdentifier(config.collectionName || \"mem0\");\n    this.indexName = quoteIdentifier(\n      config.indexName || `${config.collectionName || \"mem0\"}_VEC_IDX`,\n    );\n\n    this.embeddingModelDims = config.embeddingModelDims ?? 1536;\n    if (\n      !Number.isInteger(this.embeddingModelDims) ||\n      this.embeddingModelDims <= 0\n    ) {\n      throw new Error(\"`embeddingModelDims` must be a positive integer\");\n    }\n\n    const distanceMetric = (config.distanceMetric ??","sourceCodeStart":311,"sourceCodeEnd":347,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0-ts/src/oss/src/vector_stores/oracledb.ts#L311-L347","documentation":"The OracleDB vector store constructor requires either connectionParams (so it can create its own pool/connection) or a pre-existing client (Connection or Pool from the node-oracledb driver). With neither, the store has no way to reach the database, so it fails fast at construction time.","triggerScenarios":"new OracleDB({ collectionName: 'mem0' } as any) with no connectionParams and no client; passing credentials under a misspelled key such as connectParams, connectionString-only configs, or config objects typed loosely (any) that silently omit both fields.","commonSituations":"Copy-pasting a config template and deleting the credentials block; refactoring env-var loading so ORACLE_* variables never populate connectionParams; passing a pool under an wrong property name (e.g. pool instead of client).","solutions":["Supply connectionParams: new OracleDB({ collectionName, connectionParams: { user, password, connectString } }).","Or inject an existing driver object as client: new OracleDB({ collectionName, client: await oracledb.createPool(...) }).","Check for typos — the keys must be exactly connectionParams and client.","If loading from env, fail loudly when required ORACLE connection variables are missing rather than passing a partial config."],"exampleFix":"// before\nconst vs = new OracleDB({ collectionName: 'mem0' });\n\n// after\nconst vs = new OracleDB({\n  collectionName: 'mem0',\n  connectionParams: {\n    user: process.env.ORACLE_USER!,\n    password: process.env.ORACLE_PASSWORD!,\n    connectString: process.env.ORACLE_CONNECT_STRING!,\n  },\n});","handlingStrategy":"type-guard","validationCode":"function makeOracleConfig(env = process.env) {\n  const connectionParams = env.ORACLE_USER && env.ORACLE_PASSWORD && env.ORACLE_CONNECT_STRING\n    ? { user: env.ORACLE_USER, password: env.ORACLE_PASSWORD, connectString: env.ORACLE_CONNECT_STRING }\n    : undefined;\n  if (!connectionParams && !existingClient) {\n    throw new Error('Missing ORACLE_USER/ORACLE_PASSWORD/ORACLE_CONNECT_STRING and no client provided');\n  }\n  return { collectionName: 'mem0', ...(connectionParams ? { connectionParams } : { client: existingClient }) }; \n}","typeGuard":"function hasConnectionInput(cfg: unknown): cfg is { connectionParams: object } | { client: object } {\n  const c = cfg as Record<string, unknown>;\n  return (!!c.connectionParams && typeof c.connectionParams === 'object') || (!!c.client && typeof c.client === 'object');\n}","tryCatchPattern":"try { store = new OracleDB(config); } catch (e) { if (e instanceof Error && e.message.includes('connectionParams')) { /* fix config keys / load env, then retry construction */ } else throw e; }","preventionTips":["Fail loudly at startup when connection env vars are missing.","Use exact keys: connectionParams or client.","Centralize vector store config creation in one function covered by tests."],"tags":["oracle","config","constructor","validation","typescript"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}