Skip to content

Commit

Permalink
Merge branch 'main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Rodriguespn committed Sep 6, 2024
2 parents 3400b04 + c8359a1 commit 38e865a
Show file tree
Hide file tree
Showing 40 changed files with 1,094 additions and 719 deletions.
6 changes: 0 additions & 6 deletions .github/workflows/release-feature-branch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -136,12 +136,6 @@ jobs:
cd drizzle-orm
pnpm prisma generate --schema src/prisma/schema.prisma
)
(
cd integration-tests
pnpm prisma generate --schema tests/prisma/pg/schema.prisma
pnpm prisma generate --schema tests/prisma/mysql/schema.prisma
pnpm prisma generate --schema tests/prisma/sqlite/schema.prisma
)
pnpm build
- name: Run tests
Expand Down
6 changes: 0 additions & 6 deletions .github/workflows/release-latest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,6 @@ jobs:
cd drizzle-orm
pnpm prisma generate --schema src/prisma/schema.prisma
)
(
cd integration-tests
pnpm prisma generate --schema tests/prisma/pg/schema.prisma
pnpm prisma generate --schema tests/prisma/mysql/schema.prisma
pnpm prisma generate --schema tests/prisma/sqlite/schema.prisma
)
pnpm build
- name: Run tests
Expand Down
32 changes: 32 additions & 0 deletions changelogs/drizzle-kit/0.24.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## Bug fixes

> 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
### What was fixed

1. The Drizzle Kit CLI was not working properly for the `introspect` command.
2. Added the ability to use column names with special characters for all dialects.
3. Included PostgreSQL sequences in the introspection process.
4. Reworked array type introspection and added all test cases.
5. Fixed all (we hope) default issues in PostgreSQL, where `::<type>` was included in the introspected output.
6. `preserve` casing option was broken

### Tickets that were closed

- [[BUG]: invalid schema generation with drizzle-kit introspect:pg](https://github.com/drizzle-team/drizzle-orm/issues/1210)
- [[BUG][mysql introspection]: TS error when introspect column including colon](https://github.com/drizzle-team/drizzle-orm/issues/1928)
- [[BUG]: Unhandled defaults when introspecting postgres db](https://github.com/drizzle-team/drizzle-orm/issues/1625)
- [[BUG]: PostgreSQL Enum Naming and Schema Typing Issue](https://github.com/drizzle-team/drizzle-orm/issues/2315)
- [[BUG]: drizzle-kit instrospect command generates syntax error on varchar column types](https://github.com/drizzle-team/drizzle-orm/issues/2714)
- [[BUG]: Introspecting varchar[] type produces syntactically invalid schema.ts](https://github.com/drizzle-team/drizzle-orm/issues/1633)
- [[BUG]: introspect:pg column not using generated enum name](https://github.com/drizzle-team/drizzle-orm/issues/1648)
- [[BUG]: drizzle-kit introspect casing "preserve" config not working](https://github.com/drizzle-team/drizzle-orm/issues/2773)
- [[BUG]: drizzle-kit introspect fails on required param that is defined](https://github.com/drizzle-team/drizzle-orm/issues/2719)
- [[BUG]: Error when running npx drizzle-kit introspect: "Expected object, received string"](https://github.com/drizzle-team/drizzle-orm/issues/2657)
- [[BUG]: Missing index names when running introspect command [MYSQL]](https://github.com/drizzle-team/drizzle-orm/issues/2525)
- [[BUG]: drizzle-kit introspect TypeError: Cannot read properties of undefined (reading 'toLowerCase')](https://github.com/drizzle-team/drizzle-orm/issues/2338)
- [[BUG]: Wrong column name when using PgEnum.array()](https://github.com/drizzle-team/drizzle-orm/issues/2100)
- [[BUG]: Incorrect Schema Generated when introspecting extisting pg database](https://github.com/drizzle-team/drizzle-orm/issues/1985)
- [[⚠️🐞BUG]: index() missing argument after introspection, causes tsc error that fails the build](https://github.com/drizzle-team/drizzle-orm/issues/1870)
- [[BUG]: drizzle-kit introspect small errors](https://github.com/drizzle-team/drizzle-orm/issues/1738)
- [[BUG]: Missing bigint import in drizzle-kit introspect](https://github.com/drizzle-team/drizzle-orm/issues/1020)
24 changes: 24 additions & 0 deletions changelogs/drizzle-kit/0.24.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## New Features

### 🎉 Support for `pglite` driver

You can now use pglite with all drizzle-kit commands, including Drizzle Studio!

```ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
dialect: "postgresql",
driver: "pglite",
schema: "./schema.ts",
dbCredentials: {
url: "local-pg.db",
},
verbose: true,
strict: true,
});
```

## Bug fixes

- mysql-kit: fix GENERATED ALWAYS AS ... NOT NULL - [#2824](https://github.com/drizzle-team/drizzle-orm/pull/2824)
1 change: 1 addition & 0 deletions drizzle-kit/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const driversPackages = [
'postgres',
'@vercel/postgres',
'@neondatabase/serverless',
'@electric-sql/pglite',
// mysql drivers
'mysql2',
'@planetscale/database',
Expand Down
6 changes: 3 additions & 3 deletions drizzle-kit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "drizzle-kit",
"version": "0.24.0",
"version": "0.24.2",
"homepage": "https://orm.drizzle.team",
"keywords": [
"drizzle",
Expand Down Expand Up @@ -42,7 +42,7 @@
"publish": "npm publish package.tgz"
},
"dependencies": {
"@drizzle-team/brocli": "^0.8.2",
"@drizzle-team/brocli": "^0.10.1",
"@esbuild-kit/esm-loader": "^2.5.5",
"esbuild": "^0.19.7",
"esbuild-register": "^3.5.0"
Expand Down Expand Up @@ -92,7 +92,7 @@
"hono": "^4.1.5",
"json-diff": "1.0.6",
"minimatch": "^7.4.3",
"mysql2": "^3.3.3",
"mysql2": "3.3.3",
"node-fetch": "^3.3.2",
"pg": "^8.11.5",
"pluralize": "^8.0.0",
Expand Down
14 changes: 7 additions & 7 deletions drizzle-kit/src/cli/commands/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export const safeRegister = async () => {
export const prepareCheckParams = async (
options: {
config?: string;
dialect: Dialect;
dialect?: Dialect;
out?: string;
},
from: 'cli' | 'config',
Expand Down Expand Up @@ -440,11 +440,11 @@ export const preparePullConfig = async (
dialect: 'postgresql',
out: config.out,
breakpoints: config.breakpoints,
casing: config.introspectCasing,
casing: config.casing,
credentials: parsed.data,
tablesFilter,
schemasFilter,
prefix: config.database?.prefix || 'index',
prefix: config.migrations?.prefix || 'index',
};
}

Expand All @@ -458,11 +458,11 @@ export const preparePullConfig = async (
dialect: 'mysql',
out: config.out,
breakpoints: config.breakpoints,
casing: config.introspectCasing,
casing: config.casing,
credentials: parsed.data,
tablesFilter,
schemasFilter,
prefix: config.database?.prefix || 'index',
prefix: config.migrations?.prefix || 'index',
};
}

Expand Down Expand Up @@ -495,11 +495,11 @@ export const preparePullConfig = async (
dialect: 'sqlite',
out: config.out,
breakpoints: config.breakpoints,
casing: config.introspectCasing,
casing: config.casing,
credentials: parsed.data,
tablesFilter,
schemasFilter,
prefix: config.database?.prefix || 'index',
prefix: config.migrations?.prefix || 'index',
};
}

Expand Down
64 changes: 61 additions & 3 deletions drizzle-kit/src/cli/connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import fetch from 'node-fetch';
import ws from 'ws';
import { assertUnreachable } from '../global';
import type { ProxyParams } from '../serializer/studio';
import { type DB, normaliseSQLiteUrl, type Proxy, type SQLiteDB, type SqliteProxy } from '../utils';
import { type DB, normalisePGliteUrl, normaliseSQLiteUrl, type Proxy, type SQLiteDB, type SqliteProxy } from '../utils';
import { assertPackages, checkPackage } from './utils';
import type { MysqlCredentials } from './validations/mysql';
import { withStyle } from './validations/outputs';
Expand All @@ -22,7 +22,8 @@ export const preparePostgresDB = async (
}
> => {
if ('driver' in credentials) {
if (credentials.driver === 'aws-data-api') {
const { driver } = credentials;
if (driver === 'aws-data-api') {
assertPackages('@aws-sdk/client-rds-data');
const { RDSDataClient, ExecuteStatementCommand, TypeHint } = await import(
'@aws-sdk/client-rds-data'
Expand Down Expand Up @@ -93,7 +94,45 @@ export const preparePostgresDB = async (
};
}

assertUnreachable(credentials.driver);
if (driver === 'pglite') {
assertPackages('@electric-sql/pglite');
const { PGlite } = await import('@electric-sql/pglite');
const { drizzle } = await import('drizzle-orm/pglite');
const { migrate } = await import('drizzle-orm/pglite/migrator');

const pglite = new PGlite(normalisePGliteUrl(credentials.url));
await pglite.waitReady;
const drzl = drizzle(pglite);
const migrateFn = async (config: MigrationConfig) => {
return migrate(drzl, config);
};

const query = async <T>(sql: string, params: any[] = []) => {
const result = await pglite.query(sql, params);
return result.rows as T[];
};

const proxy = async (params: ProxyParams) => {
const preparedParams = preparePGliteParams(params.params);
if (
params.method === 'values'
|| params.method === 'get'
|| params.method === 'all'
) {
const result = await pglite.query(params.sql, preparedParams, {
rowMode: params.mode,
});
return result.rows;
}

const result = await pglite.query(params.sql, preparedParams);
return result.rows;
};

return { query, proxy, migrate: migrateFn };
}

assertUnreachable(driver);
}

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

const preparePGliteParams = (params: any[]) => {
return params.map((param) => {
if (
param
&& typeof param === 'object'
&& 'type' in param
&& 'value' in param
&& param.type === 'binary'
) {
const value = typeof param.value === 'object'
? JSON.stringify(param.value)
: (param.value as string);

return value;
}
return param;
});
};

export const connectToSQLite = async (
credentials: SqliteCredentials,
): Promise<
Expand Down
1 change: 1 addition & 0 deletions drizzle-kit/src/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ const legacy = [
];

run([generate, migrate, pull, push, studio, up, check, drop, ...legacy], {
name: 'drizzle-kit',
version: version,
});
48 changes: 40 additions & 8 deletions drizzle-kit/src/cli/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,15 +108,23 @@ export const migrate = command({
try {
if (dialect === 'postgresql') {
if ('driver' in credentials) {
if (credentials.driver === 'aws-data-api') {
const { driver } = credentials;
if (driver === 'aws-data-api') {
if (!(await ormVersionGt('0.30.10'))) {
console.log(
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else if (driver === 'pglite') {
if (!(await ormVersionGt('0.30.6'))) {
console.log(
"To use 'pglite' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else {
assertUnreachable(credentials.driver);
assertUnreachable(driver);
}
}
const { preparePostgresDB } = await import('./connections');
Expand Down Expand Up @@ -256,15 +264,23 @@ export const push = command({
);
} else if (dialect === 'postgresql') {
if ('driver' in credentials) {
if (credentials.driver === 'aws-data-api') {
const { driver } = credentials;
if (driver === 'aws-data-api') {
if (!(await ormVersionGt('0.30.10'))) {
console.log(
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else if (driver === 'pglite') {
if (!(await ormVersionGt('0.30.6'))) {
console.log(
"To use 'pglite' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else {
assertUnreachable(credentials.driver);
assertUnreachable(driver);
}
}

Expand Down Expand Up @@ -417,15 +433,23 @@ export const pull = command({
try {
if (dialect === 'postgresql') {
if ('driver' in credentials) {
if (credentials.driver === 'aws-data-api') {
const { driver } = credentials;
if (driver === 'aws-data-api') {
if (!(await ormVersionGt('0.30.10'))) {
console.log(
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else if (driver === 'pglite') {
if (!(await ormVersionGt('0.30.6'))) {
console.log(
"To use 'pglite' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else {
assertUnreachable(credentials.driver);
assertUnreachable(driver);
}
}

Expand Down Expand Up @@ -525,15 +549,23 @@ export const studio = command({
try {
if (dialect === 'postgresql') {
if ('driver' in credentials) {
if (credentials.driver === 'aws-data-api') {
const { driver } = credentials;
if (driver === 'aws-data-api') {
if (!(await ormVersionGt('0.30.10'))) {
console.log(
"To use 'aws-data-api' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else if (driver === 'pglite') {
if (!(await ormVersionGt('0.30.6'))) {
console.log(
"To use 'pglite' driver - please update drizzle-orm to the latest version",
);
process.exit(1);
}
} else {
assertUnreachable(credentials.driver);
assertUnreachable(driver);
}
}

Expand Down
4 changes: 2 additions & 2 deletions drizzle-kit/src/cli/validations/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ export const pullParams = object({
.optional()
.default(['public']),
extensionsFilters: literal('postgis').array().optional(),
introspectCasing: casing,
casing,
breakpoints: boolean().optional().default(true),
database: object({
migrations: object({
prefix: prefix.optional().default('index'),
}).optional(),
}).passthrough();
Expand Down
Loading

0 comments on commit 38e865a

Please sign in to comment.