Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drizzle seed/bug fixes #4222

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open

Drizzle seed/bug fixes #4222

wants to merge 6 commits into from

Conversation

OleksiiKH0240
Copy link
Collaborator

@OleksiiKH0240 OleksiiKH0240 commented Mar 6, 2025

Bug fixes

Both the seed and reset functions didn't include LibSQLDatabase<any> in their generic type parameters.
As a result, the seed function accepts a db parameter like this:

import { drizzle } from "drizzle-orm/libsql";
import * as schema from "./schema.ts";

const db = drizzle({
  connection: {
    url: "",
    authToken: "",
  },
});

await seed(db, schema);

But it will reject a db parameter defined like this:

import { drizzle } from "drizzle-orm/libsql";
import * as schema from "./schema.ts";

const db = drizzle({
  schema,
  connection: {
    url: "",
    authToken: "",
  },
});

await seed(db, schema);

drizzle-seed misinterpreted realEstateTypeEnum enum as a real type.

Features

  • ignore column in refinements

Now you can let drizzle-seed know if you want to ignore column during seeding.

// schema.ts
import { integer, pgTable, text } from "drizzle-orm/pg-core";

export const users = pgTable("users", {
  id: integer().primaryKey(),
  name: text().notNull(),
  age: integer(),
  photo: text(),
});
// index.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { seed } from "drizzle-seed";
import * as schema from "./schema.ts";

async function main() {
  const db = drizzle(process.env["DATABASE_URL"]!);
  await seed(db, schema).refine((f) => ({
    users: {
      count: 5,
      columns: {
        name: f.fullName(),
        photo: false, // the photo column will not be seeded, allowing the database to use its default value.
      },
    },
  }));
}

main();

Improvements

  • added minTime, maxTime parameters to time generator
await seed(db, { timeTable: schema.timeTable }).refine((funcs) => ({
  timeTable: {
    count,
    columns: {
      time: funcs.time({
        minTime: "13:12:13",
        maxTime: "15:12:13",
      }),
    },
  },
}));
  • added minTimestamp, maxTimestamp parameters to timestamp generator
await seed(db, { timestampTable: schema.timestampTable }).refine((funcs) => ({
  timestampTable: {
    count,
    columns: {
      timestamp: funcs.timestamp({
        minTimestamp: "2025-03-07 13:12:13.123Z",
        maxTimestamp: "2025-03-09 15:12:13.456Z",
      }),
    },
  },
}));
  • added minDatetime, maxDatetime parameters to datetime generator
await seed(db, { datetimeTable: schema.datetimeTable }).refine((funcs) => ({
  datetimeTable: {
    count,
    columns: {
      datetime: funcs.datetime({
        minDatetime: "2025-03-07 13:12:13Z",
        maxDatetime: "2025-03-09 15:12:13Z",
      }),
    },
  },
}));
  • exported AbstractGenerator so that users can build their own custom generator classes.

updated tests for using these generators(+date generator) with parameters,
added feature to ignore column in refinements
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant