Skip to content

Commit 599da5e

Browse files
drizzle-seed bug fixes (#3614)
Fixed a few seed bugs --------- Co-authored-by: AndriiSherman <andreysherman11@gmail.com>
1 parent 03f6239 commit 599da5e

File tree

9 files changed

+121
-25
lines changed

9 files changed

+121
-25
lines changed

changelogs/drizzle-seed/0.1.2.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- Fixed: [[BUG]: drizzle-seed reset fails without @electric-sql/pglite installed](https://github.com/drizzle-team/drizzle-orm/issues/3603)
2+
- Fixed: [[BUG]: TypeScript type error in drizzle-seed with schema passed to drizzle in IDE](https://github.com/drizzle-team/drizzle-orm/issues/3599)

drizzle-seed/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
{
22
"name": "drizzle-seed",
3-
"version": "0.1.1",
3+
"version": "0.1.2",
44
"main": "index.js",
55
"type": "module",
66
"scripts": {
77
"build": "tsx scripts/build.ts",
88
"pack": "(cd dist && npm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
99
"test": "vitest --config ./src/tests/vitest.config.ts",
10+
"test:types": "cd src/type-tests && tsc",
1011
"generate-for-tests:pg": "drizzle-kit generate --config=./src/tests/pg/drizzle.config.ts",
1112
"generate-for-tests:mysql": "drizzle-kit generate --config=./src/tests/mysql/drizzle.config.ts",
1213
"generate-for-tests:sqlite": "drizzle-kit generate --config=./src/tests/sqlite/drizzle.config.ts",

drizzle-seed/src/index.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ import type { Relation, Table } from './types/tables.ts';
1818

1919
type InferCallbackType<
2020
DB extends
21-
| PgDatabase<any>
21+
| PgDatabase<any, any>
2222
| MySqlDatabase<any, any>
2323
| BaseSQLiteDatabase<any, any>,
2424
SCHEMA extends {
2525
[key: string]: PgTable | PgSchema | MySqlTable | MySqlSchema | SQLiteTable;
2626
},
27-
> = DB extends PgDatabase<any> ? SCHEMA extends {
27+
> = DB extends PgDatabase<any, any> ? SCHEMA extends {
2828
[key: string]:
2929
| PgTable
3030
| PgSchema
@@ -124,7 +124,7 @@ type InferCallbackType<
124124

125125
class SeedPromise<
126126
DB extends
127-
| PgDatabase<any>
127+
| PgDatabase<any, any>
128128
| MySqlDatabase<any, any>
129129
| BaseSQLiteDatabase<any, any>,
130130
SCHEMA extends {
@@ -311,7 +311,7 @@ export async function seedForDrizzleStudio(
311311
*/
312312
export function seed<
313313
DB extends
314-
| PgDatabase<any>
314+
| PgDatabase<any, any>
315315
| MySqlDatabase<any, any>
316316
| BaseSQLiteDatabase<any, any>,
317317
SCHEMA extends {
@@ -328,7 +328,7 @@ export function seed<
328328
}
329329

330330
const seedFunc = async (
331-
db: PgDatabase<any> | MySqlDatabase<any, any> | BaseSQLiteDatabase<any, any>,
331+
db: PgDatabase<any, any> | MySqlDatabase<any, any> | BaseSQLiteDatabase<any, any>,
332332
schema: {
333333
[key: string]:
334334
| PgTable
@@ -341,7 +341,7 @@ const seedFunc = async (
341341
options: { count?: number; seed?: number } = {},
342342
refinements?: RefinementsType,
343343
) => {
344-
if (is(db, PgDatabase<any>)) {
344+
if (is(db, PgDatabase<any, any>)) {
345345
const { pgSchema } = filterPgTables(schema);
346346

347347
await seedPostgres(db, pgSchema, options, refinements);
@@ -404,7 +404,7 @@ const seedFunc = async (
404404
*/
405405
export async function reset<
406406
DB extends
407-
| PgDatabase<any>
407+
| PgDatabase<any, any>
408408
| MySqlDatabase<any, any>
409409
| BaseSQLiteDatabase<any, any>,
410410
SCHEMA extends {
@@ -417,7 +417,7 @@ export async function reset<
417417
| any;
418418
},
419419
>(db: DB, schema: SCHEMA) {
420-
if (is(db, PgDatabase<any>)) {
420+
if (is(db, PgDatabase<any, any>)) {
421421
const { pgSchema } = filterPgTables(schema);
422422

423423
if (Object.entries(pgSchema).length > 0) {
@@ -444,7 +444,7 @@ export async function reset<
444444

445445
// Postgres-----------------------------------------------------------------------------------------------------------
446446
const resetPostgres = async (
447-
db: PgDatabase<any>,
447+
db: PgDatabase<any, any>,
448448
schema: { [key: string]: PgTable },
449449
) => {
450450
const tablesToTruncate = Object.entries(schema).map(([_, table]) => {
@@ -474,7 +474,7 @@ const filterPgTables = (schema: {
474474
};
475475

476476
const seedPostgres = async (
477-
db: PgDatabase<any>,
477+
db: PgDatabase<any, any>,
478478
schema: { [key: string]: PgTable },
479479
options: { count?: number; seed?: number } = {},
480480
refinements?: RefinementsType,

drizzle-seed/src/services/SeedService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { MySqlTable } from 'drizzle-orm/mysql-core';
33
import { MySqlDatabase } from 'drizzle-orm/mysql-core';
44
import type { PgTable } from 'drizzle-orm/pg-core';
55
import { PgDatabase } from 'drizzle-orm/pg-core';
6-
import { PgliteSession } from 'drizzle-orm/pglite';
76
import type { SQLiteTable } from 'drizzle-orm/sqlite-core';
87
import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
98
import type {
@@ -1037,7 +1036,8 @@ class SeedService {
10371036
}
10381037
let maxParametersNumber: number;
10391038
if (is(db, PgDatabase<any>)) {
1040-
maxParametersNumber = is(db._.session, PgliteSession)
1039+
// @ts-ignore
1040+
maxParametersNumber = db.constructor[entityKind] === 'PgliteDatabase'
10411041
? this.postgresPgLiteMaxParametersNumber
10421042
: this.postgresMaxParametersNumber;
10431043
} else if (is(db, MySqlDatabase<any, any>)) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { MySqlColumn } from 'drizzle-orm/mysql-core';
2+
import { int, mysqlTable, text } from 'drizzle-orm/mysql-core';
3+
import { drizzle as mysql2Drizzle } from 'drizzle-orm/mysql2';
4+
import { reset, seed } from '../index.ts';
5+
6+
const mysqlUsers = mysqlTable('users', {
7+
id: int().primaryKey().autoincrement(),
8+
name: text(),
9+
inviteId: int('invite_id').references((): MySqlColumn => mysqlUsers.id),
10+
});
11+
12+
{
13+
const db = mysql2Drizzle('');
14+
15+
await seed(db, { users: mysqlUsers });
16+
await reset(db, { users: mysqlUsers });
17+
}

drizzle-seed/src/type-tests/pg.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { drizzle as nodePostgresDrizzle } from 'drizzle-orm/node-postgres';
2+
import type { PgColumn } from 'drizzle-orm/pg-core';
3+
import { integer, pgTable, text } from 'drizzle-orm/pg-core';
4+
import { drizzle as pgliteDrizzle } from 'drizzle-orm/pglite';
5+
import { drizzle as postgresJsDrizzle } from 'drizzle-orm/postgres-js';
6+
import { reset, seed } from '../index.ts';
7+
8+
const pgUsers = pgTable('users', {
9+
id: integer().primaryKey().generatedAlwaysAsIdentity(),
10+
name: text(),
11+
inviteId: integer('invite_id').references((): PgColumn => pgUsers.id),
12+
});
13+
14+
{
15+
const db0 = nodePostgresDrizzle('', { schema: { users: pgUsers } });
16+
17+
await seed(db0, { users: pgUsers });
18+
await reset(db0, { users: pgUsers });
19+
20+
const db1 = nodePostgresDrizzle('');
21+
22+
await seed(db1, { users: pgUsers });
23+
await reset(db1, { users: pgUsers });
24+
}
25+
26+
{
27+
const db0 = pgliteDrizzle('', { schema: { users: pgUsers } });
28+
29+
await seed(db0, { users: pgUsers });
30+
await reset(db0, { users: pgUsers });
31+
32+
const db1 = pgliteDrizzle('');
33+
34+
await seed(db1, { users: pgUsers });
35+
await reset(db1, { users: pgUsers });
36+
}
37+
38+
{
39+
const db0 = postgresJsDrizzle('', { schema: { users: pgUsers } });
40+
41+
await seed(db0, { users: pgUsers });
42+
await reset(db0, { users: pgUsers });
43+
44+
const db1 = postgresJsDrizzle('');
45+
46+
await seed(db1, { users: pgUsers });
47+
await reset(db1, { users: pgUsers });
48+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { drizzle as betterSqlite3Drizzle } from 'drizzle-orm/better-sqlite3';
2+
import type { SQLiteColumn } from 'drizzle-orm/sqlite-core';
3+
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
4+
import { reset, seed } from '../index.ts';
5+
6+
const mysqlUsers = sqliteTable('users', {
7+
id: int().primaryKey(),
8+
name: text(),
9+
inviteId: int('invite_id').references((): SQLiteColumn => mysqlUsers.id),
10+
});
11+
12+
{
13+
const db = betterSqlite3Drizzle('');
14+
15+
await seed(db, { users: mysqlUsers });
16+
await reset(db, { users: mysqlUsers });
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"extends": "../../tsconfig.build.json",
3+
"compilerOptions": {
4+
"composite": false,
5+
"noEmit": true,
6+
"rootDir": "..",
7+
"outDir": "./.cache"
8+
},
9+
"include": [".", "../src"],
10+
"exclude": ["**/playground"]
11+
}

pnpm-lock.yaml

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)