{"record":{"id":"294dbc35f4d3c058","repo":"cube-js/cube","slug":"driver-s-streamquery-method-is-not-implemented","errorCode":null,"errorMessage":"Driver's .streamQuery() method is not implemented yet.","messagePattern":"Driver's \\.streamQuery\\(\\) method is not implemented yet\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/cubejs-base-driver/src/BaseDriver.ts","lineNumber":296,"sourceCode":"        },\n        {}\n      );\n\n      ssl.rejectUnauthorized = getEnv('dbSslRejectUnauthorized', { dataSource, preAggregations });\n\n      return ssl;\n    }\n\n    return undefined;\n  }\n\n  public abstract testConnection(): Promise<void>;\n\n  public abstract query<R = unknown>(_query: string, _values?: unknown[], _options?: QueryOptions): Promise<R[]>;\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  public async streamQuery(sql: string, values: string[]): Promise<stream.Readable> {\n    throw new TypeError('Driver\\'s .streamQuery() method is not implemented yet.');\n  }\n\n  public async downloadQueryResults(query: string, values: unknown[], _options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult> {\n    const rows = await this.query<Row>(query, values);\n    const types = detectTypesFromTabular(rows);\n\n    return {\n      rows,\n      types,\n    };\n  }\n\n  public readOnly(): boolean {\n    return false;\n  }\n\n  protected informationColumnsSchemaReducer(result: DatabaseStructure, i: InformationSchemaColumn): DatabaseStructure {\n    if (!result[i.table_schema]) {","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-base-driver/src/BaseDriver.ts#L278-L314","documentation":"BaseDriver.streamQuery() is a default implementation that throws; only drivers that implement streaming override it. Calling .streamQuery() on a driver lacking streaming support produces this TypeError.","triggerScenarios":"Invoking driver.streamQuery(sql, values) on a driver that does not override the base method (e.g. a custom or older driver).","commonSituations":"Custom driver implementations missing streamQuery, code paths requesting streamed results (e.g. export) on drivers without support, or upgrading orchestrator features that assume streaming.","solutions":["Implement streamQuery() in your driver subclass returning a stream.Readable","Use query() or downloadQueryResults() instead of streaming","Switch to a driver that supports streaming","Guard feature detection before calling streamQuery"],"exampleFix":"// before\nconst stream = await driver.streamQuery(sql, values); // throws\n// after\nif (driver.streamQuery !== BaseDriver.prototype.streamQuery) {\n  const stream = await driver.streamQuery(sql, values);\n} else {\n  const rows = await driver.query(sql, values);\n}","handlingStrategy":"fallback","validationCode":"const supportsStreaming = typeof (driver as any).streamQuery === 'function' && driver.streamQuery !== BaseDriver.prototype.streamQuery;","typeGuard":"function supportsStreamQuery(d: BaseDriver): d is BaseDriver & { streamQuery: NonNullable<BaseDriver['streamQuery']> } {\n  return d.streamQuery !== BaseDriver.prototype.streamQuery;\n}","tryCatchPattern":"try {\n  return await driver.streamQuery(sql, values);\n} catch (e) {\n  if (/not implemented/.test(e.message)) return rowFallbackStream(await driver.query(sql, values));\n  throw e;\n}","preventionTips":["Implement streamQuery in custom drivers","Feature-detect streaming before choosing an export path","Keep drivers updated if streaming support was added upstream","Prefer downloadQueryResults for non-streaming drivers"],"tags":["driver","streaming","not-implemented"],"backgroundTag":"method-not-implemented","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}