in packages/cli/src/generators/drizzle.ts [37:115]
function getType(name: string, field: FieldAttribute) {
// Not possible to reach, it's here to make typescript happy
if (!databaseType) {
throw new Error(
`Database provider type is undefined during Drizzle schema generation. Please define a \`provider\` in the Drizzle adapter config. Read more at https://better-auth.com/docs/adapters/drizzle`,
);
}
name = convertToSnakeCase(name);
if (field.references?.field === "id") {
if (options.advanced?.database?.useNumberId) {
if (databaseType === "pg") {
return `serial('${name}').primaryKey()`;
} else if (databaseType === "mysql") {
return `int('${name}').autoIncrement().primaryKey()`;
} else {
// using sqlite
return `integer({ mode: 'number' }).primaryKey({ autoIncrement: true })`;
}
}
return `text('${name}')`;
}
const type = field.type as
| "string"
| "number"
| "boolean"
| "date"
| `${"string" | "number"}[]`;
const typeMap: Record<
typeof type,
Record<typeof databaseType, string>
> = {
string: {
sqlite: `text('${name}')`,
pg: `text('${name}')`,
mysql: field.unique
? `varchar('${name}', { length: 255 })`
: field.references
? `varchar('${name}', { length: 36 })`
: `text('${name}')`,
},
boolean: {
sqlite: `integer('${name}', { mode: 'boolean' })`,
pg: `boolean('${name}')`,
mysql: `boolean('${name}')`,
},
number: {
sqlite: `integer('${name}')`,
pg: field.bigint
? `bigint('${name}', { mode: 'number' })`
: `integer('${name}')`,
mysql: field.bigint
? `bigint('${name}', { mode: 'number' })`
: `int('${name}')`,
},
date: {
sqlite: `integer('${name}', { mode: 'timestamp' })`,
pg: `timestamp('${name}')`,
mysql: `timestamp('${name}')`,
},
"number[]": {
sqlite: `integer('${name}').array()`,
pg: field.bigint
? `bigint('${name}', { mode: 'number' }).array()`
: `integer('${name}').array()`,
mysql: field.bigint
? `bigint('${name}', { mode: 'number' }).array()`
: `int('${name}').array()`,
},
"string[]": {
sqlite: `text('${name}').array()`,
pg: `text('${name}').array()`,
mysql: `text('${name}').array()`,
},
} as const;
return typeMap[type][databaseType];
}