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

Generated #2607

Merged
merged 55 commits into from
Jul 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
434cfe2
[All] Added new `generated` configuration key to columns and column b…
Angelelz Nov 5, 2023
0b2bb5e
[MySql] Added generatedAlwaysAs method to all column builders and fix…
Angelelz Nov 5, 2023
4787fcb
[Pg] Added `generatedAlwaysAs` and `generatedAsIdentity` methods to a…
Angelelz Nov 5, 2023
862fd2f
[SQLite] Added `generatedAlwaysAs` method to all SQLite column builde…
Angelelz Nov 5, 2023
148f1c0
[All] Fixed type tests
Angelelz Nov 5, 2023
e20b29b
[All] fixed update set types and added type tests
Angelelz Nov 5, 2023
7499703
[All] fixed insert that now bypasses the generated columns and added …
Angelelz Nov 6, 2023
3cffb98
[Pg] Completed implementation of generated as identity
Angelelz Nov 6, 2023
6061a63
[Pg] Deleted config param not needed for generated always as
Angelelz Nov 6, 2023
21b48e1
[All] Deleted old debug coments
Angelelz Nov 19, 2023
6cc364f
Merge branch 'beta' into feat-generated-columns
Angelelz Dec 2, 2023
c201bce
Merge branch 'beta' into feat-generated-columns
AndriiSherman Dec 15, 2023
d0d4011
Merge branch 'beta' into feat-generated-columns
Angelelz Jan 2, 2024
933db61
Merge branch 'beta' into feat-generated-columns
AndriiSherman Mar 25, 2024
dbb1fe0
Add pgSequence, move identity to common, fix type-tests
AndriiSherman Mar 27, 2024
43a5ab9
Move to class for using is with sequences
AndriiSherman Mar 28, 2024
23c870c
Fix test setups for new API
AndriiSherman Mar 28, 2024
25f8d88
Fix import
AndriiSherman Mar 28, 2024
451219c
Merge branch 'main' into generated-internal
AndriiSherman Mar 29, 2024
d5cc3ce
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into gener…
AndriiSherman Mar 29, 2024
a658624
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into feat-…
AndriiSherman Mar 29, 2024
18854f0
expose generated identity
AndriiSherman Apr 1, 2024
169dab4
Merge branch 'feat-generated-columns' into generated-internal
AndriiSherman Apr 1, 2024
0c4b492
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into feat-…
AndriiSherman Apr 3, 2024
5f598e2
Fix shouldDisableInsert part
AndriiSherman Apr 3, 2024
e78f396
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into gener…
AndriiSherman Jun 7, 2024
0d48b64
Fixed new typed configs
AndriiSherman Jun 7, 2024
3739dfc
Add isPgSequence
AndriiSherman Jun 11, 2024
a020011
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into gener…
AndriiSherman Jun 11, 2024
857ba54
Update int.common types
AndriiSherman Jun 11, 2024
f4b4750
Update isPgSequence
AndriiSherman Jun 12, 2024
4ed01aa
Fix imports in sequences
AndriiSherman Jun 12, 2024
0055471
Update PgSequence creation
AndriiSherman Jun 12, 2024
0a6885d
Allow numbers ans strings for sequences properties
AndriiSherman Jun 13, 2024
af7ce99
Add callback option to mysql and sqlite generated
AndriiSherman Jun 17, 2024
81cb794
Update identity behavior
AndriiSherman Jun 22, 2024
7721c7c
Remove seq as an option for identity column
AndriiSherman Jun 22, 2024
b3c3f7c
identity columns has default by default
AndriiSherman Jun 24, 2024
85c8008
Make not null for identity
AndriiSherman Jun 24, 2024
0fdaa9e
Update compatibilityVersion to 8
AndriiSherman Jun 25, 2024
e7cf338
Get version 7 back
AndriiSherman Jun 25, 2024
6b0a11e
Merge branch 'generated-internal' into feat-generated-columns
AndriiSherman Jun 27, 2024
3245641
Merge pull request #1471 from Angelelz/feat-generated-columns
AndriiSherman Jun 27, 2024
d0d6436
Fix column default for sqlite
AndriiSherman Jun 27, 2024
5cc2ae0
Make sequence options optional
AndriiSherman Jun 27, 2024
e6a212b
Add beta release notes
AndriiSherman Jul 2, 2024
4d0047d
Add returning ids to mysql insert
AndriiSherman Jul 4, 2024
6cb7091
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into retur…
AndriiSherman Jul 8, 2024
8e4735d
Fix a few tests for returning in a new structure
AndriiSherman Jul 8, 2024
4c9a51d
Update planetscale and mysql-proxy returning runtime
AndriiSherman Jul 9, 2024
ee8277f
Update typo
AndriiSherman Jul 9, 2024
50dca32
Add 1 more test for infer insert for mysql package
AndriiSherman Jul 9, 2024
c160852
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into gener…
AndriiSherman Jul 9, 2024
7612dda
Update release notes
AndriiSherman Jul 9, 2024
aaf764c
Open all tests
AndriiSherman Jul 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion changelogs/drizzle-orm/0.30.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ const usersOnUpdate = pgTable('users_on_update', {

- [BUG]: insertions on columns with the smallserial datatype are not optional - #1848

Thanks @Angelelz and @gabrielDonnantuoni!
Thanks @Angelelz and @gabrielDonnantuoni!
10 changes: 10 additions & 0 deletions changelogs/drizzle-orm/0.30.7-preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
- 🎉 Added custom schema support to enums in Postgres:
```ts
import { pgSchema } from 'drizzle-orm/pg-core';

const mySchema = pgSchema('mySchema');
const colors = mySchema.enum('colors', ['red', 'green', 'blue']);
```

- 🐛 Split `where` clause in Postgres `.onConflictDoUpdate` method into `setWhere` and `targetWhere` clauses, to support both `where` cases in `on conflict ...` clause (#1628, #1302)
- 🐛 Fix query generation for `where` clause in Postgres `.onConflictDoNothing` method, as it was placed in a wrong spot (#1628)
184 changes: 184 additions & 0 deletions changelogs/drizzle-orm/0.32.0-beta.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
# Preview release for `drizzle-orm@0.32.0` and `drizzle-kit@0.23.0`

> It's not mandatory to upgrade both packages, but if you want to use the new features in both queries and migrations, you will need to upgrade both packages

## New Features

### 🎉 PostgreSQL Sequences

You can now specify sequences in Postgres within any schema you need and define all the available properties

##### **Example**

```ts
import { pgSchema, pgSequence } from "drizzle-orm/pg-core";

// No params specified
export const customSequence = pgSequence("name");

// Sequence with params
export const customSequence = pgSequence("name", {
startWith: 100,
maxValue: 10000,
minValue: 100,
cycle: true,
cache: 10,
increment: 2
});

// Sequence in custom schema
export const customSchema = pgSchema('custom_schema');

export const customSequence = customSchema.sequence("name");
```

### 🎉 PostgreSQL Identity Columns

[Source](https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_serial): As mentioned, the `serial` type in Postgres is outdated and should be deprecated. Ideally, you should not use it. `Identity columns` are the recommended way to specify sequences in your schema, which is why we are introducing the `identity columns` feature

##### **Example**

```ts
import { pgTable, integer, text } from 'drizzle-orm/pg-core'

export const ingredients = pgTable("ingredients", {
id: integer("id").primaryKey().generatedAlwaysAsIdentity({ startWith: 1000 }),
name: text("name").notNull(),
description: text("description"),
});
```

You can specify all properties available for sequences in the `.generatedAlwaysAsIdentity()` function. Additionally, you can specify custom names for these sequences

PostgreSQL docs [reference](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-GENERATED-IDENTITY).

### 🎉 PostgreSQL Generated Columns

You can now specify generated columns on any column supported by PostgreSQL to use with generated columns

##### **Example** with generated column for `tsvector`

> Note: we will add `tsVector` column type before latest release

```ts
import { SQL, sql } from "drizzle-orm";
import { customType, index, integer, pgTable, text } from "drizzle-orm/pg-core";

const tsVector = customType<{ data: string }>({
dataType() {
return "tsvector";
},
});

export const test = pgTable(
"test",
{
id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
content: text("content"),
contentSearch: tsVector("content_search", {
dimensions: 3,
}).generatedAlwaysAs(
(): SQL => sql`to_tsvector('english', ${test.content})`
),
},
(t) => ({
idx: index("idx_content_search").using("gin", t.contentSearch),
})
);
```

In case you don't need to reference any columns from your table, you can use just `sql` template or a `string`

```ts
export const users = pgTable("users", {
id: integer("id"),
name: text("name"),
generatedName: text("gen_name").generatedAlwaysAs(sql`hello world!`),
generatedName1: text("gen_name1").generatedAlwaysAs("hello world!"),
}),
```

### 🎉 MySQL Generated Columns

You can now specify generated columns on any column supported by MySQL to use with generated columns

You can specify both `stored` and `virtual` options, for more info you can check [MySQL docs](https://dev.mysql.com/doc/refman/8.4/en/create-table-generated-columns.html)

Also MySQL has a few limitation for such columns usage, which is described [here](https://dev.mysql.com/doc/refman/8.4/en/alter-table-generated-columns.html)

Drizzle Kit will also have limitations for `push` command:

1. You can't change the generated constraint expression and type using `push`. Drizzle-kit will ignore this change. To make it work, you would need to `drop the column`, `push`, and then `add a column with a new expression`. This was done due to the complex mapping from the database side, where the schema expression will be modified on the database side and, on introspection, we will get a different string. We can't be sure if you changed this expression or if it was changed and formatted by the database. As long as these are generated columns and `push` is mostly used for prototyping on a local database, it should be fast to `drop` and `create` generated columns. Since these columns are `generated`, all the data will be restored

2. `generate` should have no limitations

##### **Example**

```ts
export const users = mysqlTable("users", {
id: int("id"),
id2: int("id2"),
name: text("name"),
generatedName: text("gen_name").generatedAlwaysAs(
(): SQL => sql`${schema2.users.name} || 'hello'`,
{ mode: "stored" }
),
generatedName1: text("gen_name1").generatedAlwaysAs(
(): SQL => sql`${schema2.users.name} || 'hello'`,
{ mode: "virtual" }
),
}),
```

In case you don't need to reference any columns from your table, you can use just `sql` template or a `string` in `.generatedAlwaysAs()`

### 🎉 SQLite Generated Columns

You can now specify generated columns on any column supported by SQLite to use with generated columns

You can specify both `stored` and `virtual` options, for more info you can check [SQLite docs](https://www.sqlite.org/gencol.html)

Also SQLite has a few limitation for such columns usage, which is described [here](https://www.sqlite.org/gencol.html)

Drizzle Kit will also have limitations for `push` and `generate` command:

1. You can't change the generated constraint expression with the stored type in an existing table. You would need to delete this table and create it again. This is due to SQLite limitations for such actions. We will handle this case in future releases (it will involve the creation of a new table with data migration).

2. You can't add a `stored` generated expression to an existing column for the same reason as above. However, you can add a `virtual` expression to an existing column.

3. You can't change a `stored` generated expression in an existing column for the same reason as above. However, you can change a `virtual` expression.

4. You can't change the generated constraint type from `virtual` to `stored` for the same reason as above. However, you can change from `stored` to `virtual`.

## New Drizzle Kit features

### 🎉 Migrations support for all the new orm features

PostgreSQL sequences, identity columns and generated columns for all dialects

### 🎉 New flag `--force` for `drizzle-kit push`

You can auto-accept all data-loss statements using the push command. It's only available in CLI parameters. Make sure you always use it if you are fine with running data-loss statements on your database

### 🎉 New `migrations` flag `prefix`

You can now customize migration file prefixes to make the format suitable for your migration tools:

- `index` is the default type and will result in `0001_name.sql` file names;
- `supabase` and `timestamp` are equal and will result in `20240627123900_name.sql` file names;
- `unix` will result in unix seconds prefixes `1719481298_name.sql` file names;
- `none` will omit the prefix completely;


##### **Example**: Supabase migrations format
```ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
dialect: "postgresql",
migrations: {
prefix: 'supabase'
}
});

```
Loading