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

  1. Implement streamQuery() in your driver subclass returning a stream.Readable
  2. Use query() or downloadQueryResults() instead of streaming
  3. Switch to a driver that supports streaming
  4. 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

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


AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02). Data as JSON: /api/errors/294dbc35f4d3c058. Report an issue: GitHub.