Skip to content

Commit

Permalink
Update SQLite and MySQL table declaration to match PG
Browse files Browse the repository at this point in the history
  • Loading branch information
L-Mario564 committed Nov 29, 2024
1 parent 7be6f7b commit a7c23f9
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 13 deletions.
2 changes: 1 addition & 1 deletion drizzle-orm/src/mysql-core/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export class MySqlSchema<TName extends string = string> {
) {}

table: MySqlTableFn<TName> = (name, columns, extraConfig) => {
return mysqlTableWithSchema(name, columns, extraConfig, this.schemaName);
return mysqlTableWithSchema(name, columns, extraConfig as any, this.schemaName);
};

view = ((name, columns) => {
Expand Down
55 changes: 49 additions & 6 deletions drizzle-orm/src/mysql-core/table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ import type { AnyIndexBuilder } from './indexes.ts';
import type { PrimaryKeyBuilder } from './primary-keys.ts';
import type { UniqueConstraintBuilder } from './unique-constraint.ts';

export type MySqlTableExtraConfigValue =
| AnyIndexBuilder
| CheckBuilder
| ForeignKeyBuilder
| PrimaryKeyBuilder
| UniqueConstraintBuilder;

export type MySqlTableExtraConfig = Record<
string,
| AnyIndexBuilder
Expand Down Expand Up @@ -62,7 +69,9 @@ export function mysqlTableWithSchema<
>(
name: TTableName,
columns: TColumnsMap | ((columnTypes: MySqlColumnBuilders) => TColumnsMap),
extraConfig: ((self: BuildColumns<TTableName, TColumnsMap, 'mysql'>) => MySqlTableExtraConfig) | undefined,
extraConfig:
| ((self: BuildColumns<TTableName, TColumnsMap, 'mysql'>) => MySqlTableExtraConfig | MySqlTableExtraConfigValue[])
| undefined,
schema: TSchemaName,
baseName = name,
): MySqlTableWithColumns<{
Expand Down Expand Up @@ -100,15 +109,16 @@ export function mysqlTableWithSchema<
>;

if (extraConfig) {
table[MySqlTable.Symbol.ExtraConfigBuilder] = extraConfig as unknown as (
self: Record<string, MySqlColumn>,
) => MySqlTableExtraConfig;
table[MySqlTable.Symbol.ExtraConfigBuilder] = extraConfig as any;
}

return table;
}

export interface MySqlTableFn<TSchemaName extends string | undefined = undefined> {
/**
* @deprecated This overload is deprecated. Use the other method overload instead.
*/
<
TTableName extends string,
TColumnsMap extends Record<string, MySqlColumnBuilderBase>,
Expand All @@ -123,6 +133,9 @@ export interface MySqlTableFn<TSchemaName extends string | undefined = undefined
dialect: 'mysql';
}>;

/**
* @deprecated This overload is deprecated. Use the other method overload instead.
*/
<
TTableName extends string,
TColumnsMap extends Record<string, MySqlColumnBuilderBase>,
Expand All @@ -136,14 +149,44 @@ export interface MySqlTableFn<TSchemaName extends string | undefined = undefined
columns: BuildColumns<TTableName, TColumnsMap, 'mysql'>;
dialect: 'mysql';
}>;

<
TTableName extends string,
TColumnsMap extends Record<string, MySqlColumnBuilderBase>,
>(
name: TTableName,
columns: TColumnsMap,
extraConfig?: (
self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'mysql'>,
) => MySqlTableExtraConfigValue[],
): MySqlTableWithColumns<{
name: TTableName;
schema: TSchemaName;
columns: BuildColumns<TTableName, TColumnsMap, 'mysql'>;
dialect: 'mysql';
}>;

<
TTableName extends string,
TColumnsMap extends Record<string, MySqlColumnBuilderBase>,
>(
name: TTableName,
columns: (columnTypes: MySqlColumnBuilders) => TColumnsMap,
extraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'sqlite'>) => MySqlTableExtraConfigValue[],
): MySqlTableWithColumns<{
name: TTableName;
schema: TSchemaName;
columns: BuildColumns<TTableName, TColumnsMap, 'mysql'>;
dialect: 'mysql';
}>;
}

export const mysqlTable: MySqlTableFn = (name, columns, extraConfig) => {
return mysqlTableWithSchema(name, columns, extraConfig, undefined, name);
return mysqlTableWithSchema(name, columns, extraConfig as any, undefined, name);
};

export function mysqlTableCreator(customizeTableName: (name: string) => string): MySqlTableFn {
return (name, columns, extraConfig) => {
return mysqlTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);
return mysqlTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig as any, undefined, name);
};
}
55 changes: 49 additions & 6 deletions drizzle-orm/src/sqlite-core/table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ import type { IndexBuilder } from './indexes.ts';
import type { PrimaryKeyBuilder } from './primary-keys.ts';
import type { UniqueConstraintBuilder } from './unique-constraint.ts';

export type SQLiteTableExtraConfigValue =
| IndexBuilder
| CheckBuilder
| ForeignKeyBuilder
| PrimaryKeyBuilder
| UniqueConstraintBuilder;

export type SQLiteTableExtraConfig = Record<
string,
| IndexBuilder
Expand Down Expand Up @@ -54,6 +61,9 @@ export type SQLiteTableWithColumns<T extends TableConfig> =
};

export interface SQLiteTableFn<TSchema extends string | undefined = undefined> {
/**
* @deprecated This overload is deprecated. Use the other method overload instead.
*/
<
TTableName extends string,
TColumnsMap extends Record<string, SQLiteColumnBuilderBase>,
Expand All @@ -68,6 +78,9 @@ export interface SQLiteTableFn<TSchema extends string | undefined = undefined> {
dialect: 'sqlite';
}>;

/**
* @deprecated This overload is deprecated. Use the other method overload instead.
*/
<
TTableName extends string,
TColumnsMap extends Record<string, SQLiteColumnBuilderBase>,
Expand All @@ -81,6 +94,36 @@ export interface SQLiteTableFn<TSchema extends string | undefined = undefined> {
columns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;
dialect: 'sqlite';
}>;

<
TTableName extends string,
TColumnsMap extends Record<string, SQLiteColumnBuilderBase>,
>(
name: TTableName,
columns: TColumnsMap,
extraConfig?: (
self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'sqlite'>,
) => SQLiteTableExtraConfigValue[],
): SQLiteTableWithColumns<{
name: TTableName;
schema: TSchema;
columns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;
dialect: 'sqlite';
}>;

<
TTableName extends string,
TColumnsMap extends Record<string, SQLiteColumnBuilderBase>,
>(
name: TTableName,
columns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,
extraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfigValue[],
): SQLiteTableWithColumns<{
name: TTableName;
schema: TSchema;
columns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;
dialect: 'sqlite';
}>;
}

function sqliteTableBase<
Expand All @@ -90,7 +133,9 @@ function sqliteTableBase<
>(
name: TTableName,
columns: TColumnsMap | ((columnTypes: SQLiteColumnBuilders) => TColumnsMap),
extraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,
extraConfig?: (
self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,
) => SQLiteTableExtraConfig | SQLiteTableExtraConfigValue[],
schema?: TSchema,
baseName = name,
): SQLiteTableWithColumns<{
Expand Down Expand Up @@ -128,20 +173,18 @@ function sqliteTableBase<
>;

if (extraConfig) {
table[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as (
self: Record<string, SQLiteColumn>,
) => SQLiteTableExtraConfig;
table[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as any;
}

return table;
}

export const sqliteTable: SQLiteTableFn = (name, columns, extraConfig) => {
return sqliteTableBase(name, columns, extraConfig);
return sqliteTableBase(name, columns, extraConfig as any);
};

export function sqliteTableCreator(customizeTableName: (name: string) => string): SQLiteTableFn {
return (name, columns, extraConfig) => {
return sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);
return sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig as any, undefined, name);
};
}

0 comments on commit a7c23f9

Please sign in to comment.