cube-js/cube · error · TypeError
Driver's .streamQuery() method is not implemented yet.
Error message
Driver's .streamQuery() method is not implemented yet.
What it means
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.
Source
Thrown at packages/cubejs-base-driver/src/BaseDriver.ts:296
},
{}
);
ssl.rejectUnauthorized = getEnv('dbSslRejectUnauthorized', { dataSource, preAggregations });
return ssl;
}
return undefined;
}
public abstract testConnection(): Promise<void>;
public abstract query<R = unknown>(_query: string, _values?: unknown[], _options?: QueryOptions): Promise<R[]>;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
public async streamQuery(sql: string, values: string[]): Promise<stream.Readable> {
throw new TypeError('Driver\'s .streamQuery() method is not implemented yet.');
}
public async downloadQueryResults(query: string, values: unknown[], _options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult> {
const rows = await this.query<Row>(query, values);
const types = detectTypesFromTabular(rows);
return {
rows,
types,
};
}
public readOnly(): boolean {
return false;
}
protected informationColumnsSchemaReducer(result: DatabaseStructure, i: InformationSchemaColumn): DatabaseStructure {
if (!result[i.table_schema]) {View on GitHub (pinned to 7d981676b3)
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
Example fix
// before
const stream = await driver.streamQuery(sql, values); // throws
// after
if (driver.streamQuery !== BaseDriver.prototype.streamQuery) {
const stream = await driver.streamQuery(sql, values);
} else {
const rows = await driver.query(sql, values);
} Defensive patterns
Strategy: fallback
Validate before calling
const supportsStreaming = typeof (driver as any).streamQuery === 'function' && driver.streamQuery !== BaseDriver.prototype.streamQuery;
Type guard
function supportsStreamQuery(d: BaseDriver): d is BaseDriver & { streamQuery: NonNullable<BaseDriver['streamQuery']> } {
return d.streamQuery !== BaseDriver.prototype.streamQuery;
} Try / catch
try {
return await driver.streamQuery(sql, values);
} catch (e) {
if (/not implemented/.test(e.message)) return rowFallbackStream(await driver.query(sql, values));
throw e;
} Prevention
- 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
When it happens
Trigger: Invoking driver.streamQuery(sql, values) on a driver that does not override the base method (e.g. a custom or older driver).
Common situations: Custom driver implementations missing streamQuery, code paths requesting streamed results (e.g. export) on drivers without support, or upgrading orchestrator features that assume streaming.
Related errors
- options.stream must be a function
- ${this.constructor} driver supports only rows upload
- Unexpected stream end before row with names
- Unexpected stream end before row with types
- Unexpected names and types length mismatch; names ${names.le
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/294dbc35f4d3c058.
Report an issue: GitHub.