drizzle-team/drizzle-orm · error · Error

not implemented

Error message

not implemented

What it means

Thrown by SingleStoreVectorBuilder.generatedAlwaysAs() at vector.ts:41, which unconditionally raises `new Error('not implemented')`. The vector column type does not support generated/computed column expressions, so the override exists only to satisfy the builder base class signature while explicitly blocking the feature. Calling it is always a programmer error, not a runtime condition.

Source

Thrown at drizzle-orm/src/singlestore-core/columns/vector.ts:41

	constructor(name: T['name'], config: SingleStoreVectorConfig) {
		super(name, 'array', 'SingleStoreVector');
		this.config.dimensions = config.dimensions;
		this.config.elementType = config.elementType;
	}

	/** @internal */
	override build<TTableName extends string>(
		table: AnySingleStoreTable<{ name: TTableName }>,
	): SingleStoreVector<MakeColumnConfig<T, TTableName>> {
		return new SingleStoreVector<MakeColumnConfig<T, TTableName>>(
			table,
			this.config as ColumnBuilderRuntimeConfig<any, any>,
		);
	}

	/** @internal */
	override generatedAlwaysAs(as: SQL<unknown> | (() => SQL) | T['data'], config?: SingleStoreGeneratedColumnConfig) {
		throw new Error('not implemented');
	}
}

export class SingleStoreVector<T extends ColumnBaseConfig<'array', 'SingleStoreVector'>>
	extends SingleStoreColumn<T, SingleStoreVectorConfig>
{
	static override readonly [entityKind]: string = 'SingleStoreVector';

	dimensions: number = this.config.dimensions;
	elementType: ElementType | undefined = this.config.elementType;

	getSQLType(): string {
		return `vector(${this.dimensions}, ${this.elementType || 'F32'})`;
	}

	override mapToDriverValue(value: Array<number>) {
		return JSON.stringify(value);
	}

View on GitHub (pinned to b7862528fd)

Solutions

  1. Remove the `.generatedAlwaysAs(...)` call from the vector column builder; vector columns cannot be generated.
  2. If you need a derived vector, compute it in application code or a trigger/view outside Drizzle's column definition.
  3. If using a generic factory, skip generatedAlwaysAs when the column builder's columnType is 'SingleStoreVector'.

Example fix

// before
export const items = singlestoreTable('items', {
  embedding: vector('embedding', { dimensions: 128 }).generatedAlwaysAs(sql`...`),
});
// after
export const items = singlestoreTable('items', {
  embedding: vector('embedding', { dimensions: 128 }),
});
Defensive patterns

Strategy: validation

Validate before calling

import { is } from 'drizzle-orm/entity';
// Before applying generatedAlwaysAs generically, skip vector columns
function safeGenerated(builder, expr) {
  if (builder && builder.config && builder.config.columnType === 'SingleStoreVector') {
    return builder; // vector columns do not support generatedAlwaysAs
  }
  return builder.generatedAlwaysAs(expr);
}

Type guard

function supportsGeneratedAlwaysAs(builder): boolean {
  return builder?.config?.columnType !== 'SingleStoreVector';
}

Prevention

When it happens

Trigger: Defining a SingleStore vector column and chaining `.generatedAlwaysAs(...)` on the builder, e.g. `` vector('embedding', { dimensions: 128 }).generatedAlwaysAs(sql`...`) ``. Also reachable if generic column-processing code invokes generatedAlwaysAs on every column builder regardless of type.

Common situations: Copying a generated-column pattern from a non-vector column (integer/text/json) onto a vector column; generic schema factories that apply generatedAlwaysAs uniformly; migrating a schema that used generated columns and adding a new vector field with the same modifier.

Related errors


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