drizzle-team/drizzle-orm · error · Error
Method not implemented.
Error message
Method not implemented.
What it means
SingleStoreEnumColumnBuilder.generatedAlwaysAs() throws 'Method not implemented.' SingleStore enum columns do not yet support generated/computed values; the builder override deliberately throws to prevent generating invalid migrations/DDL for an unsupported combination.
Source
Thrown at drizzle-orm/src/singlestore-core/columns/enum.ts:34
SingleStoreEnumColumnBuilder<{
name: TName;
dataType: 'string';
columnType: 'SingleStoreEnumColumn';
data: TEnum[number];
driverParam: string;
enumValues: TEnum;
generated: undefined;
}>;
export class SingleStoreEnumColumnBuilder<T extends ColumnBuilderBaseConfig<'string', 'SingleStoreEnumColumn'>>
extends SingleStoreColumnBuilder<T, { enumValues: T['enumValues'] }>
{
// eslint-disable-next-line @typescript-eslint/no-unused-vars
override generatedAlwaysAs(
as: SQL<unknown> | (() => SQL) | T['data'],
config?: Partial<GeneratedColumnConfig<unknown>>,
): HasGenerated<this, {}> {
throw new Error('Method not implemented.');
}
static override readonly [entityKind]: string = 'SingleStoreEnumColumnBuilder';
constructor(name: T['name'], values: T['enumValues']) {
super(name, 'string', 'SingleStoreEnumColumn');
this.config.enumValues = values;
}
/** @internal */
override build<TTableName extends string>(
table: AnySingleStoreTable<{ name: TTableName }>,
): SingleStoreEnumColumn<MakeColumnConfig<T, TTableName> & { enumValues: T['enumValues'] }> {
return new SingleStoreEnumColumn<MakeColumnConfig<T, TTableName> & { enumValues: T['enumValues'] }>(
table,
this.config as ColumnBuilderRuntimeConfig<any, any>,
);
}
}View on GitHub (pinned to b7862528fd)
Solutions
- Remove generatedAlwaysAs from enum columns; use .default(...) with a literal enum value instead.
- If the enum must be derived, compute it in application code or via a trigger/stored procedure outside Drizzle's schema.
- Track upstream SingleStore support; until then do not declare generated enum columns.
Example fix
// before (throws)
role: singlestoreEnum('role', ['admin', 'user']).generatedAlwaysAs(sql`'user'`),
// after
role: singlestoreEnum('role', ['admin', 'user']).default('user'), Defensive patterns
Strategy: type-guard
Validate before calling
import { entityKind } from 'drizzle-orm/entity';
function isSingleStoreEnumBuilder(b: any): boolean {
return b?.[entityKind] === 'SingleStoreEnumColumnBuilder';
}
// For SingleStore enum columns, use .default('value') instead of generatedAlwaysAs. Type guard
function isSingleStoreEnumColumnBuilder(b: unknown): boolean {
return (b as any)?.[Symbol.for('drizzle:entityKind')] === 'SingleStoreEnumColumnBuilder';
} Try / catch
try {
const col = singlestoreEnum('role', ['admin', 'user']).generatedAlwaysAs(sql`'user'`);
} catch (e) {
if (e instanceof Error && e.message === 'Method not implemented.') {
const col = singlestoreEnum('role', ['admin', 'user']).default('user');
} else throw e;
} Prevention
- Do not declare generated SingleStore enum columns; use .default('value').
- When porting schemas, convert generated enum columns to defaults.
- Track upstream SingleStore generated-column support.
When it happens
Trigger: Defining a SingleStore enum column with .generatedAlwaysAs(...): singlestoreEnum('role', ['admin','user']).generatedAlwaysAs(sql`...`).
Common situations: Porting a schema that uses generated enum defaults. Copying Postgres/MySQL enum patterns that include generated columns into SingleStore.
Related errors
- Method not implemented.
- You have an empty array for "${name}" enum values
- You have an empty array for "${name}" enum values
- Your "${f.path.join('->')}" field references a column "${tab
- No fields selected for table "${tableConfig.tsName}" ("${tab
AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03).
Data as JSON: /data/errors/c42d91285672cef7.json.
Report an issue: GitHub.