in packages/better-auth/src/db/get-migration.ts [162:227]
const migrations: (
| AlterTableColumnAlteringBuilder
| CreateTableBuilder<string, string>
)[] = [];
function getType(field: FieldAttribute, fieldName: string) {
const type = field.type;
const typeMap = {
string: {
sqlite: "text",
postgres: "text",
mysql: field.unique
? "varchar(255)"
: field.references
? "varchar(36)"
: "text",
mssql:
field.unique || field.sortable
? "varchar(255)"
: field.references
? "varchar(36)"
: "text",
},
boolean: {
sqlite: "integer",
postgres: "boolean",
mysql: "boolean",
mssql: "smallint",
},
number: {
sqlite: field.bigint ? "bigint" : "integer",
postgres: field.bigint ? "bigint" : "integer",
mysql: field.bigint ? "bigint" : "integer",
mssql: field.bigint ? "bigint" : "integer",
},
date: {
sqlite: "date",
postgres: "timestamp",
mysql: "datetime",
mssql: "datetime",
},
id: {
postgres: config.advanced?.database?.useNumberId ? "serial" : "text",
mysql: config.advanced?.database?.useNumberId
? "integer"
: "varchar(36)",
mssql: config.advanced?.database?.useNumberId
? "integer"
: "varchar(36)",
sqlite: config.advanced?.database?.useNumberId ? "integer" : "text",
},
} as const;
if (fieldName === "id" || field.references?.field === "id") {
return typeMap.id[dbType!];
}
if (dbType === "sqlite" && (type === "string[]" || type === "number[]")) {
return "text";
}
if (type === "string[]" || type === "number[]") {
return "jsonb";
}
if (Array.isArray(type)) {
return "text";
}
return typeMap[type][dbType || "sqlite"];
}