Skip to content

Commit 38e865a

Browse files
authored
Merge branch 'main' into main
2 parents 3400b04 + c8359a1 commit 38e865a

40 files changed

+1094
-719
lines changed

.github/workflows/release-feature-branch.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,6 @@ jobs:
136136
cd drizzle-orm
137137
pnpm prisma generate --schema src/prisma/schema.prisma
138138
)
139-
(
140-
cd integration-tests
141-
pnpm prisma generate --schema tests/prisma/pg/schema.prisma
142-
pnpm prisma generate --schema tests/prisma/mysql/schema.prisma
143-
pnpm prisma generate --schema tests/prisma/sqlite/schema.prisma
144-
)
145139
pnpm build
146140
147141
- name: Run tests

.github/workflows/release-latest.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,6 @@ jobs:
139139
cd drizzle-orm
140140
pnpm prisma generate --schema src/prisma/schema.prisma
141141
)
142-
(
143-
cd integration-tests
144-
pnpm prisma generate --schema tests/prisma/pg/schema.prisma
145-
pnpm prisma generate --schema tests/prisma/mysql/schema.prisma
146-
pnpm prisma generate --schema tests/prisma/sqlite/schema.prisma
147-
)
148142
pnpm build
149143
150144
- name: Run tests

changelogs/drizzle-kit/0.24.1.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Bug fixes
2+
3+
> Big thanks to @L-Mario564 for his [PR](https://github.com/drizzle-team/drizzle-orm/pull/2804). It conflicted in most cases with a PR that was merged, but we incorporated some of his logic. Merging it would have caused more problems and taken more time to resolve, so we just took a few things from his PR, like removing "::<type>" mappings in introspect and some array type default handlers
4+
5+
### What was fixed
6+
7+
1. The Drizzle Kit CLI was not working properly for the `introspect` command.
8+
2. Added the ability to use column names with special characters for all dialects.
9+
3. Included PostgreSQL sequences in the introspection process.
10+
4. Reworked array type introspection and added all test cases.
11+
5. Fixed all (we hope) default issues in PostgreSQL, where `::<type>` was included in the introspected output.
12+
6. `preserve` casing option was broken
13+
14+
### Tickets that were closed
15+
16+
- [[BUG]: invalid schema generation with drizzle-kit introspect:pg](https://github.com/drizzle-team/drizzle-orm/issues/1210)
17+
- [[BUG][mysql introspection]: TS error when introspect column including colon](https://github.com/drizzle-team/drizzle-orm/issues/1928)
18+
- [[BUG]: Unhandled defaults when introspecting postgres db](https://github.com/drizzle-team/drizzle-orm/issues/1625)
19+
- [[BUG]: PostgreSQL Enum Naming and Schema Typing Issue](https://github.com/drizzle-team/drizzle-orm/issues/2315)
20+
- [[BUG]: drizzle-kit instrospect command generates syntax error on varchar column types](https://github.com/drizzle-team/drizzle-orm/issues/2714)
21+
- [[BUG]: Introspecting varchar[] type produces syntactically invalid schema.ts](https://github.com/drizzle-team/drizzle-orm/issues/1633)
22+
- [[BUG]: introspect:pg column not using generated enum name](https://github.com/drizzle-team/drizzle-orm/issues/1648)
23+
- [[BUG]: drizzle-kit introspect casing "preserve" config not working](https://github.com/drizzle-team/drizzle-orm/issues/2773)
24+
- [[BUG]: drizzle-kit introspect fails on required param that is defined](https://github.com/drizzle-team/drizzle-orm/issues/2719)
25+
- [[BUG]: Error when running npx drizzle-kit introspect: "Expected object, received string"](https://github.com/drizzle-team/drizzle-orm/issues/2657)
26+
- [[BUG]: Missing index names when running introspect command [MYSQL]](https://github.com/drizzle-team/drizzle-orm/issues/2525)
27+
- [[BUG]: drizzle-kit introspect TypeError: Cannot read properties of undefined (reading 'toLowerCase')](https://github.com/drizzle-team/drizzle-orm/issues/2338)
28+
- [[BUG]: Wrong column name when using PgEnum.array()](https://github.com/drizzle-team/drizzle-orm/issues/2100)
29+
- [[BUG]: Incorrect Schema Generated when introspecting extisting pg database](https://github.com/drizzle-team/drizzle-orm/issues/1985)
30+
- [[⚠️🐞BUG]: index() missing argument after introspection, causes tsc error that fails the build](https://github.com/drizzle-team/drizzle-orm/issues/1870)
31+
- [[BUG]: drizzle-kit introspect small errors](https://github.com/drizzle-team/drizzle-orm/issues/1738)
32+
- [[BUG]: Missing bigint import in drizzle-kit introspect](https://github.com/drizzle-team/drizzle-orm/issues/1020)

changelogs/drizzle-kit/0.24.2.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## New Features
2+
3+
### 🎉 Support for `pglite` driver
4+
5+
You can now use pglite with all drizzle-kit commands, including Drizzle Studio!
6+
7+
```ts
8+
import { defineConfig } from "drizzle-kit";
9+
10+
export default defineConfig({
11+
dialect: "postgresql",
12+
driver: "pglite",
13+
schema: "./schema.ts",
14+
dbCredentials: {
15+
url: "local-pg.db",
16+
},
17+
verbose: true,
18+
strict: true,
19+
});
20+
```
21+
22+
## Bug fixes
23+
24+
- mysql-kit: fix GENERATED ALWAYS AS ... NOT NULL - [#2824](https://github.com/drizzle-team/drizzle-orm/pull/2824)

drizzle-kit/build.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const driversPackages = [
99
'postgres',
1010
'@vercel/postgres',
1111
'@neondatabase/serverless',
12+
'@electric-sql/pglite',
1213
// mysql drivers
1314
'mysql2',
1415
'@planetscale/database',

drizzle-kit/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "drizzle-kit",
3-
"version": "0.24.0",
3+
"version": "0.24.2",
44
"homepage": "https://orm.drizzle.team",
55
"keywords": [
66
"drizzle",
@@ -42,7 +42,7 @@
4242
"publish": "npm publish package.tgz"
4343
},
4444
"dependencies": {
45-
"@drizzle-team/brocli": "^0.8.2",
45+
"@drizzle-team/brocli": "^0.10.1",
4646
"@esbuild-kit/esm-loader": "^2.5.5",
4747
"esbuild": "^0.19.7",
4848
"esbuild-register": "^3.5.0"
@@ -92,7 +92,7 @@
9292
"hono": "^4.1.5",
9393
"json-diff": "1.0.6",
9494
"minimatch": "^7.4.3",
95-
"mysql2": "^3.3.3",
95+
"mysql2": "3.3.3",
9696
"node-fetch": "^3.3.2",
9797
"pg": "^8.11.5",
9898
"pluralize": "^8.0.0",

drizzle-kit/src/cli/commands/utils.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export const safeRegister = async () => {
8484
export const prepareCheckParams = async (
8585
options: {
8686
config?: string;
87-
dialect: Dialect;
87+
dialect?: Dialect;
8888
out?: string;
8989
},
9090
from: 'cli' | 'config',
@@ -440,11 +440,11 @@ export const preparePullConfig = async (
440440
dialect: 'postgresql',
441441
out: config.out,
442442
breakpoints: config.breakpoints,
443-
casing: config.introspectCasing,
443+
casing: config.casing,
444444
credentials: parsed.data,
445445
tablesFilter,
446446
schemasFilter,
447-
prefix: config.database?.prefix || 'index',
447+
prefix: config.migrations?.prefix || 'index',
448448
};
449449
}
450450

@@ -458,11 +458,11 @@ export const preparePullConfig = async (
458458
dialect: 'mysql',
459459
out: config.out,
460460
breakpoints: config.breakpoints,
461-
casing: config.introspectCasing,
461+
casing: config.casing,
462462
credentials: parsed.data,
463463
tablesFilter,
464464
schemasFilter,
465-
prefix: config.database?.prefix || 'index',
465+
prefix: config.migrations?.prefix || 'index',
466466
};
467467
}
468468

@@ -495,11 +495,11 @@ export const preparePullConfig = async (
495495
dialect: 'sqlite',
496496
out: config.out,
497497
breakpoints: config.breakpoints,
498-
casing: config.introspectCasing,
498+
casing: config.casing,
499499
credentials: parsed.data,
500500
tablesFilter,
501501
schemasFilter,
502-
prefix: config.database?.prefix || 'index',
502+
prefix: config.migrations?.prefix || 'index',
503503
};
504504
}
505505

drizzle-kit/src/cli/connections.ts

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import fetch from 'node-fetch';
55
import ws from 'ws';
66
import { assertUnreachable } from '../global';
77
import type { ProxyParams } from '../serializer/studio';
8-
import { type DB, normaliseSQLiteUrl, type Proxy, type SQLiteDB, type SqliteProxy } from '../utils';
8+
import { type DB, normalisePGliteUrl, normaliseSQLiteUrl, type Proxy, type SQLiteDB, type SqliteProxy } from '../utils';
99
import { assertPackages, checkPackage } from './utils';
1010
import type { MysqlCredentials } from './validations/mysql';
1111
import { withStyle } from './validations/outputs';
@@ -22,7 +22,8 @@ export const preparePostgresDB = async (
2222
}
2323
> => {
2424
if ('driver' in credentials) {
25-
if (credentials.driver === 'aws-data-api') {
25+
const { driver } = credentials;
26+
if (driver === 'aws-data-api') {
2627
assertPackages('@aws-sdk/client-rds-data');
2728
const { RDSDataClient, ExecuteStatementCommand, TypeHint } = await import(
2829
'@aws-sdk/client-rds-data'
@@ -93,7 +94,45 @@ export const preparePostgresDB = async (
9394
};
9495
}
9596

96-
assertUnreachable(credentials.driver);
97+
if (driver === 'pglite') {
98+
assertPackages('@electric-sql/pglite');
99+
const { PGlite } = await import('@electric-sql/pglite');
100+
const { drizzle } = await import('drizzle-orm/pglite');
101+
const { migrate } = await import('drizzle-orm/pglite/migrator');
102+
103+
const pglite = new PGlite(normalisePGliteUrl(credentials.url));
104+
await pglite.waitReady;
105+
const drzl = drizzle(pglite);
106+
const migrateFn = async (config: MigrationConfig) => {
107+
return migrate(drzl, config);
108+
};
109+
110+
const query = async <T>(sql: string, params: any[] = []) => {
111+
const result = await pglite.query(sql, params);
112+
return result.rows as T[];
113+
};
114+
115+
const proxy = async (params: ProxyParams) => {
116+
const preparedParams = preparePGliteParams(params.params);
117+
if (
118+
params.method === 'values'
119+
|| params.method === 'get'
120+
|| params.method === 'all'
121+
) {
122+
const result = await pglite.query(params.sql, preparedParams, {
123+
rowMode: params.mode,
124+
});
125+
return result.rows;
126+
}
127+
128+
const result = await pglite.query(params.sql, preparedParams);
129+
return result.rows;
130+
};
131+
132+
return { query, proxy, migrate: migrateFn };
133+
}
134+
135+
assertUnreachable(driver);
97136
}
98137

99138
if (await checkPackage('pg')) {
@@ -416,6 +455,25 @@ const prepareSqliteParams = (params: any[], driver?: string) => {
416455
});
417456
};
418457

458+
const preparePGliteParams = (params: any[]) => {
459+
return params.map((param) => {
460+
if (
461+
param
462+
&& typeof param === 'object'
463+
&& 'type' in param
464+
&& 'value' in param
465+
&& param.type === 'binary'
466+
) {
467+
const value = typeof param.value === 'object'
468+
? JSON.stringify(param.value)
469+
: (param.value as string);
470+
471+
return value;
472+
}
473+
return param;
474+
});
475+
};
476+
419477
export const connectToSQLite = async (
420478
credentials: SqliteCredentials,
421479
): Promise<

drizzle-kit/src/cli/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@ const legacy = [
4343
];
4444

4545
run([generate, migrate, pull, push, studio, up, check, drop, ...legacy], {
46+
name: 'drizzle-kit',
4647
version: version,
4748
});

drizzle-kit/src/cli/schema.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,23 @@ export const migrate = command({
108108
try {
109109
if (dialect === 'postgresql') {
110110
if ('driver' in credentials) {
111-
if (credentials.driver === 'aws-data-api') {
111+
const { driver } = credentials;
112+
if (driver === 'aws-data-api') {
112113
if (!(await ormVersionGt('0.30.10'))) {
113114
console.log(
114115
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
115116
);
116117
process.exit(1);
117118
}
119+
} else if (driver === 'pglite') {
120+
if (!(await ormVersionGt('0.30.6'))) {
121+
console.log(
122+
"To use 'pglite' driver - please update drizzle-orm to the latest version",
123+
);
124+
process.exit(1);
125+
}
118126
} else {
119-
assertUnreachable(credentials.driver);
127+
assertUnreachable(driver);
120128
}
121129
}
122130
const { preparePostgresDB } = await import('./connections');
@@ -256,15 +264,23 @@ export const push = command({
256264
);
257265
} else if (dialect === 'postgresql') {
258266
if ('driver' in credentials) {
259-
if (credentials.driver === 'aws-data-api') {
267+
const { driver } = credentials;
268+
if (driver === 'aws-data-api') {
260269
if (!(await ormVersionGt('0.30.10'))) {
261270
console.log(
262271
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
263272
);
264273
process.exit(1);
265274
}
275+
} else if (driver === 'pglite') {
276+
if (!(await ormVersionGt('0.30.6'))) {
277+
console.log(
278+
"To use 'pglite' driver - please update drizzle-orm to the latest version",
279+
);
280+
process.exit(1);
281+
}
266282
} else {
267-
assertUnreachable(credentials.driver);
283+
assertUnreachable(driver);
268284
}
269285
}
270286

@@ -417,15 +433,23 @@ export const pull = command({
417433
try {
418434
if (dialect === 'postgresql') {
419435
if ('driver' in credentials) {
420-
if (credentials.driver === 'aws-data-api') {
436+
const { driver } = credentials;
437+
if (driver === 'aws-data-api') {
421438
if (!(await ormVersionGt('0.30.10'))) {
422439
console.log(
423440
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
424441
);
425442
process.exit(1);
426443
}
444+
} else if (driver === 'pglite') {
445+
if (!(await ormVersionGt('0.30.6'))) {
446+
console.log(
447+
"To use 'pglite' driver - please update drizzle-orm to the latest version",
448+
);
449+
process.exit(1);
450+
}
427451
} else {
428-
assertUnreachable(credentials.driver);
452+
assertUnreachable(driver);
429453
}
430454
}
431455

@@ -525,15 +549,23 @@ export const studio = command({
525549
try {
526550
if (dialect === 'postgresql') {
527551
if ('driver' in credentials) {
528-
if (credentials.driver === 'aws-data-api') {
552+
const { driver } = credentials;
553+
if (driver === 'aws-data-api') {
529554
if (!(await ormVersionGt('0.30.10'))) {
530555
console.log(
531556
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
532557
);
533558
process.exit(1);
534559
}
560+
} else if (driver === 'pglite') {
561+
if (!(await ormVersionGt('0.30.6'))) {
562+
console.log(
563+
"To use 'pglite' driver - please update drizzle-orm to the latest version",
564+
);
565+
process.exit(1);
566+
}
535567
} else {
536-
assertUnreachable(credentials.driver);
568+
assertUnreachable(driver);
537569
}
538570
}
539571

0 commit comments

Comments
 (0)