Skip to content

Commit

Permalink
Merge pull request #13 from rorz/main
Browse files Browse the repository at this point in the history
fix: Support new Postgres index API
  • Loading branch information
L-Mario564 authored Jun 5, 2024
2 parents 91ea10d + c26ac68 commit 57cc2d4
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 25 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@
"vitest": "^0.34.3"
},
"dependencies": {
"drizzle-orm": "^0.29.0"
"drizzle-orm": "^0.31.1"
}
}
36 changes: 27 additions & 9 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions src/__tests__/pg/_pg.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import {
} from 'drizzle-orm/pg-core';
import { compareContents } from '../utils';
import { pgGenerate } from '~/generators';
import { relations } from 'drizzle-orm';
import { relations, sql } from 'drizzle-orm';

const pathPrefix = './src/__tests__/pg/';

Expand Down Expand Up @@ -158,10 +158,12 @@ async function indexesTest() {
compositePk: primaryKey(tbl.f1, tbl.f2),
unique1: unique('key_1').on(tbl.f1),
unique2: unique('key_2').on(tbl.f1, tbl.f2),
unique3: uniqueIndex('key_3').on(tbl.f2),
index1: index('key_4').on(tbl.f3),
unique3: uniqueIndex('key_3').on(tbl.f2.asc()),
index1: index('key_4').on(tbl.f3.desc()),
index2: index('key_5').on(tbl.f3, tbl.f4),
index3: index().on(tbl.f4)
index3: index('key_6').on(tbl.f1.nullsFirst().desc()),
index4: index().on(tbl.f4),
index5: index('key_7').using('btree', tbl.f1.asc(), sql`lower(${tbl.f2})`)
})
);

Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/pg/indexes.dbml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ table table {
f2 [name: 'key_3', unique]
f3 [name: 'key_4']
(f3, f4) [name: 'key_5']
f1 [name: 'key_6']
f4
(f1, f2) [name: 'key_7']
}
}
32 changes: 22 additions & 10 deletions src/generators/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,17 @@ import {
createOne,
getTableColumns,
is,
isTable
isTable,
Table,
Column
} from 'drizzle-orm';
import { AnyInlineForeignKeys, ExtraConfigBuilder, Schema, TableName } from '~/symbols';
import {
AnyInlineForeignKeys,
ExtraConfigBuilder,
ExtraConfigColumns,
Schema,
TableName
} from '~/symbols';
import {
ForeignKey as PgForeignKey,
Index as PgIndex,
Expand Down Expand Up @@ -38,7 +46,7 @@ import type {
MySqlInlineForeignKeys,
SQLiteInlineForeignKeys
} from '~/symbols';
import type { AnyColumn, BuildQueryConfig, Table } from 'drizzle-orm';
import type { AnyColumn, BuildQueryConfig } from 'drizzle-orm';
import type { AnyBuilder, AnySchema, AnyTable } from '~/types';

export abstract class BaseGenerator<
Expand Down Expand Up @@ -142,11 +150,11 @@ export abstract class BaseGenerator<
const columnDBML = this.generateColumn(column as Column);
dbml.insert(columnDBML).newLine();
}
const extraConfigBuilder = table[ExtraConfigBuilder];
const extraConfigColumns = table[ExtraConfigColumns];
const extraConfig = extraConfigBuilder?.(extraConfigColumns ?? {});

const extraConfig = table[ExtraConfigBuilder];
const builtIndexes = Object.values(table[ExtraConfigBuilder]?.(table) || {}).map(
(b: AnyBuilder) => b.build(table)
);
const builtIndexes = Object.values(extraConfig ?? {}).map((b: AnyBuilder) => b.build(table));
const fks = builtIndexes.filter(
(index) =>
is(index, PgForeignKey) || is(index, MySqlForeignKey) || is(index, SQLiteForeignKey)
Expand All @@ -156,8 +164,8 @@ export abstract class BaseGenerator<
this.generateForeignKeys(fks);
}

if (extraConfig && builtIndexes.length > fks.length) {
const indexes = extraConfig(table);
if (extraConfigBuilder && builtIndexes.length > fks.length) {
const indexes = extraConfig;

dbml.newLine().tab().insert('indexes {').newLine();

Expand All @@ -166,8 +174,12 @@ export abstract class BaseGenerator<
dbml.tab(2);

if (is(index, PgIndex) || is(index, MySqlIndex) || is(index, SQLiteIndex)) {
const configColumns = index.config.columns.flatMap((entry) =>
is(entry, SQL) ? entry.queryChunks.filter((v) => is(v, Column)) : entry
);

const idxColumns = wrapColumns(
index.config.columns as AnyColumn[],
configColumns as AnyColumn[],
this.buildQueryConfig.escapeName
);
const idxProperties = index.config.name
Expand Down
1 change: 1 addition & 0 deletions src/symbols.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ export const SQLiteInlineForeignKeys = Symbol.for('drizzle:SQLiteInlineForeignKe
export const TableName = Symbol.for('drizzle:Name');
export const Schema = Symbol.for('drizzle:Schema');
export const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');
export const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');
4 changes: 3 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import type {
AnyInlineForeignKeys,
TableName,
Schema as SchemaSymbol,
ExtraConfigBuilder
ExtraConfigBuilder,
ExtraConfigColumns
} from './symbols';

export type AnyTable = Table['_']['columns'] & {
Expand All @@ -14,6 +15,7 @@ export type AnyTable = Table['_']['columns'] & {
[ExtraConfigBuilder]:
| ((self: Record<string, AnyColumn>) => Record<string, AnyBuilder>)
| undefined;
[ExtraConfigColumns]: Record<string, AnyColumn> | undefined;
};

export type AnyBuilder = {
Expand Down

0 comments on commit 57cc2d4

Please sign in to comment.