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

  1. Remove generatedAlwaysAs from enum columns; use .default(...) with a literal enum value instead.
  2. If the enum must be derived, compute it in application code or via a trigger/stored procedure outside Drizzle's schema.
  3. 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

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


AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03). Data as JSON: /data/errors/c42d91285672cef7.json. Report an issue: GitHub.