Back to Drizzle Orm

drizzle-orm-mysql 0.15.1

changelogs/drizzle-orm-mysql/0.15.1.md

0.45.22.7 KB
Original Source

drizzle-orm-mysql 0.15.1

Add support for schemas -> MySQL schemas

Warning If you will have tables with same names in different schemas then drizzle will respond with never[] error in result types and error from database

In this case you may use alias syntax


Usage example

typescript
// Table in default schema
const publicUsersTable = mysqlTable('users', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	verified: boolean('verified').notNull().default(false),
	jsonb: json<string[]>('jsonb'),
	createdAt: timestamp('created_at', { fsp: 2 }).notNull().defaultNow(),
});


// Table in custom schema
const mySchema = mysqlSchema('mySchema');

const mySchemaUsersTable = mySchema('users', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	verified: boolean('verified').notNull().default(false),
	jsonb: json<string[]>('jsonb'),
	createdAt: timestamp('created_at', { fsp: 2 }).notNull().defaultNow(),
});

Breaking changes

  • foreignKey() function api changes. Previously you need to pass callback function with table columns for FK. Right now no need for callback, just object with data for FK

Before

typescript
export const usersTable = mysqlTable('userstest', {
	id: serial('id').primaryKey(),
	homeCity: text('name').notNull(),
	createdAt: timestamp('created_at', { fsp: 2 }).notNull().defaultNow(),
}, (users) => ({
	// foreignKey has a callback as param
	usersCityFK: foreignKey(() => { columns: [users.homeCity], foreignColumns: [cities.id] }),
}));

Now

typescript
export const usersTable = mysqlTable('userstest', {
	id: serial('id').primaryKey(),
	homeCity: text('name').notNull(),
	createdAt: timestamp('created_at', { fsp: 2 }).notNull().defaultNow(),
}, (users) => ({
	// foreignKey has a callback as param
	usersCityFK: foreignKey({ columns: [users.homeCity], foreignColumns: [cities.id] }),
}));

  • Change enum initializing strategy for mysql

You should use

typescript
mysqlEnum('popularity', ['unknown', 'known', 'popular']).notNull().default('known')

instead of

typescript
export const popularityEnum = mysqlEnum('popularity', ['unknown', 'known', 'popular']);
popularityEnum('column_name');

Usage example in table schema

typescript
const tableWithEnums = mysqlTable('enums_test_case', {
	id: serial('id').primaryKey(),
	enum1: mysqlEnum('enum1', ['a', 'b', 'c']).notNull(),
	enum2: mysqlEnum('enum2', ['a', 'b', 'c']).default('a'),
	enum3: mysqlEnum('enum3', ['a', 'b', 'c']).notNull().default('b'),
});