{"id":"762e9f4da87bab29","repo":"drizzle-team/drizzle-orm","slug":"you-have-an-empty-array-for-name-enum-values","errorCode":null,"errorMessage":"You have an empty array for \"${name}\" enum values","messagePattern":"You have an empty array for \"(.+?)\" enum values","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"drizzle-orm/src/mysql-core/columns/enum.ts","lineNumber":120,"sourceCode":"): MySqlEnumColumnBuilderInitial<TName, Writable<T>>;\nexport function mysqlEnum<E extends Record<string, string>>(\n\tenumObj: NonArray<E>,\n): MySqlEnumObjectColumnBuilderInitial<'', E>;\nexport function mysqlEnum<TName extends string, E extends Record<string, string>>(\n\tname: TName,\n\tvalues: NonArray<E>,\n): MySqlEnumObjectColumnBuilderInitial<TName, E>;\nexport function mysqlEnum(\n\ta?: string | readonly [string, ...string[]] | [string, ...string[]] | Record<string, string>,\n\tb?: readonly [string, ...string[]] | [string, ...string[]] | Record<string, string>,\n): any {\n\t// if name + array or just array - it means we have string union passed\n\tif (typeof a === 'string' && Array.isArray(b) || Array.isArray(a)) {\n\t\tconst name = typeof a === 'string' && a.length > 0 ? a : '';\n\t\tconst values = (typeof a === 'string' ? b : a) ?? [];\n\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error(`You have an empty array for \"${name}\" enum values`);\n\t\t}\n\n\t\treturn new MySqlEnumColumnBuilder(name, values as any);\n\t}\n\n\tif (typeof a === 'string' && typeof b === 'object' || typeof a === 'object') {\n\t\tconst name = typeof a === 'object' ? '' : a;\n\t\tconst values = typeof a === 'object' ? Object.values(a) : typeof b === 'object' ? Object.values(b) : [];\n\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error(`You have an empty array for \"${name}\" enum values`);\n\t\t}\n\n\t\treturn new MySqlEnumObjectColumnBuilder(name, values as any);\n\t}\n}\n","sourceCodeStart":102,"sourceCodeEnd":137,"githubUrl":"https://github.com/drizzle-team/drizzle-orm/blob/b7862528fd8fc39bc2653a6c18dad7c1f4e68d10/drizzle-orm/src/mysql-core/columns/enum.ts#L102-L137","documentation":"Thrown by the mysqlEnum factory (line 120) in string-union mode when the provided values array is empty. MySQL ENUM requires at least one value; Drizzle enforces this at schema definition time to avoid generating invalid `enum()` DDL.","triggerScenarios":"Calling mysqlEnum('columnName', []) or mysqlEnum([]) with an empty array (or a readonly tuple typed as empty). The check `values.length === 0` fires before constructing MySqlEnumColumnBuilder.","commonSituations":"Enum values loaded from a config/env that resolved to an empty array; refactoring that temporarily empties an enum; dynamic enum construction where the source list is empty at module load.","solutions":["Provide at least one enum value: mysqlEnum('status', ['active', 'inactive']).","If values come from a dynamic source, validate non-empty before passing to mysqlEnum and fall back to a default value.","Reconsider whether the column should be an enum at all if the value set is truly empty/variable."],"exampleFix":"// before\nconst statuses: string[] = loadFromConfig(); // []\nconst t = mysqlTable('t', {\n  status: mysqlEnum('status', statuses as [string, ...string[]]),\n});\n\n// after - guard with a default\nconst statuses = loadFromConfig();\nif (statuses.length === 0) statuses.push('unknown');\nconst t = mysqlTable('t', {\n  status: mysqlEnum('status', statuses as [string, ...string[]]),\n});","handlingStrategy":"validation","validationCode":"if (!Array.isArray(values) || values.length === 0) {\n  throw new Error('mysqlEnum requires a non-empty values array');\n}\n// values is non-empty here\nmysqlEnum('status', values as [string, ...string[]]);","typeGuard":"function isNonEmptyStringArray(v: unknown): v is [string, ...string[]] {\n  return Array.isArray(v) && v.every((x) => typeof x === 'string') && v.length > 0;\n}","tryCatchPattern":null,"preventionTips":["Always supply at least one enum value in the schema.","Validate dynamic enum sources for non-emptiness at module load.","Reconsider enum vs free-text if the value set is variable."],"tags":["mysql","schema","enum","validation"],"analyzedSha":"b7862528fd8fc39bc2653a6c18dad7c1f4e68d10","analyzedAt":"2026-08-03T18:11:14.318Z","schemaVersion":2}