diff --git a/src/IGenerationOptions.ts b/src/IGenerationOptions.ts index f41563e..a9812f3 100644 --- a/src/IGenerationOptions.ts +++ b/src/IGenerationOptions.ts @@ -23,6 +23,7 @@ export default interface IGenerationOptions { skipSchema: boolean; indexFile: boolean; exportType: "named" | "default"; + skipNonPrimaryKeyIndexes: boolean; } export const eolConverter = { @@ -49,6 +50,7 @@ export function getDefaultGenerationOptions(): IGenerationOptions { skipSchema: false, indexFile: false, exportType: "named", + skipNonPrimaryKeyIndexes: false, }; return generationOptions; } diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 71cd969..3338351 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -184,7 +184,8 @@ export default abstract class AbstractDriver { await this.GetIndexesFromEntity( dbModel, connectionOptions.schemaNames, - connectionOptions.databaseNames + connectionOptions.databaseNames, + generationOptions, ); AbstractDriver.FindPrimaryColumnsFromIndexes(dbModel); dbModel = await this.GetRelations( @@ -385,7 +386,8 @@ export default abstract class AbstractDriver { public abstract GetIndexesFromEntity( entities: Entity[], schemas: string[], - dbNames: string[] + dbNames: string[], + generationOptions: IGenerationOptions ): Promise; public abstract GetRelations( diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index cdae412..904fabd 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -272,7 +272,8 @@ export default class MssqlDriver extends AbstractDriver { public async GetIndexesFromEntity( entities: Entity[], schemas: string[], - dbNames: string[] + dbNames: string[], + generationOptions: IGenerationOptions, ): Promise { const request = new this.MSSQL.Request(this.Connection); /* eslint-disable camelcase */ @@ -340,7 +341,9 @@ export default class MssqlDriver extends AbstractDriver { records.forEach((record) => { indexInfo.columns.push(record.ColumnName); }); - ent.indices.push(indexInfo); + if (!generationOptions.skipNonPrimaryKeyIndexes || indexInfo.primary) { + ent.indices.push(indexInfo); + } }); }); diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 7a79ae6..49e734d 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -319,7 +319,8 @@ export default class MysqlDriver extends AbstractDriver { public async GetIndexesFromEntity( entities: Entity[], schemas: string[], - dbNames: string[] + dbNames: string[], + generationOptions: IGenerationOptions, ): Promise { /* eslint-disable camelcase */ const response = await this.ExecQuery<{ @@ -359,7 +360,9 @@ export default class MysqlDriver extends AbstractDriver { records.forEach((record) => { indexInfo.columns.push(record.ColumnName); }); - ent.indices.push(indexInfo); + if (!generationOptions.skipNonPrimaryKeyIndexes || indexInfo.primary) { + ent.indices.push(indexInfo); + } }); }); diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 8765506..de07ccd 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -236,7 +236,12 @@ export default class OracleDriver extends AbstractDriver { return entities; } - public async GetIndexesFromEntity(entities: Entity[]): Promise { + public async GetIndexesFromEntity( + entities: Entity[], + schemas: string[], + dbNames: string[], + generationOptions: IGenerationOptions, + ): Promise { const response = ( await this.Connection.execute<{ COLUMN_NAME: string; @@ -271,7 +276,9 @@ export default class OracleDriver extends AbstractDriver { records.forEach((record) => { indexInfo.columns.push(record.COLUMN_NAME); }); - ent.indices.push(indexInfo); + if (!generationOptions.skipNonPrimaryKeyIndexes || indexInfo.primary) { + ent.indices.push(indexInfo); + } }); }); diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index cde7480..c33b64a 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -451,7 +451,9 @@ export default class PostgresDriver extends AbstractDriver { public async GetIndexesFromEntity( entities: Entity[], - schemas: string[] + schemas: string[], + dbNames: string[], + generationOptions: IGenerationOptions, ): Promise { const response: { tablename: string; @@ -506,7 +508,9 @@ export default class PostgresDriver extends AbstractDriver { records.forEach((record) => { indexInfo.columns.push(record.columnname); }); - ent.indices.push(indexInfo); + if (!generationOptions.skipNonPrimaryKeyIndexes || indexInfo.primary) { + ent.indices.push(indexInfo); + } }); }); diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 3f37ce6..d421a25 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -258,7 +258,12 @@ export default class SqliteDriver extends AbstractDriver { return entities; } - public async GetIndexesFromEntity(entities: Entity[]): Promise { + public async GetIndexesFromEntity( + entities: Entity[], + schemas: string[], + dbNames: string[], + generationOptions: IGenerationOptions, + ): Promise { await Promise.all( entities.map(async (ent) => { const response = await this.ExecQuery<{ @@ -299,7 +304,9 @@ export default class SqliteDriver extends AbstractDriver { v.options.unique = true; }); } - ent.indices.push(indexInfo); + if (!generationOptions.skipNonPrimaryKeyIndexes || indexInfo.primary) { + ent.indices.push(indexInfo); + } }) ); }) diff --git a/src/index.ts b/src/index.ts index e42ced2..e5c9ff2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -277,6 +277,11 @@ function checkYargsParameters(options: options): options { describe: "Skip schema generation for specific tables. You can pass multiple values separated by comma", }, + skipNonPrimaryKeyIndexes: { + boolean: true, + default: options.generationOptions.skipNonPrimaryKeyIndexes, + describe: "Skip generation of non-primary key indexes", + }, tables: { string: true, default: options.connectionOptions.onlyTables.join(","), @@ -297,7 +302,7 @@ function checkYargsParameters(options: options): options { boolean: true, default: options.generationOptions.exportType === "default", describe: "Generate index file", - }, + } }); options.connectionOptions.databaseNames = argv.d.split(","); @@ -342,6 +347,7 @@ function checkYargsParameters(options: options): options { argv.pv as IGenerationOptions["propertyVisibility"]; options.generationOptions.relationIds = argv.relationIds; options.generationOptions.skipSchema = argv.skipSchema; + options.generationOptions.skipNonPrimaryKeyIndexes = argv.skipNonPrimaryKeyIndexes; options.generationOptions.resultsPath = argv.o; options.generationOptions.pluralizeNames = !argv.disablePluralization; options.generationOptions.strictMode = @@ -615,6 +621,11 @@ async function useInquirer(options: options): Promise { options.generationOptions.exportType === "default", }, + { + name: "Skip generation of non-primary key indexes", + value: "skipNonPrimaryKeyIndexes", + checked: options.generationOptions.skipNonPrimaryKeyIndexes, + } ], message: "Available customizations", name: "selected", @@ -667,6 +678,7 @@ async function useInquirer(options: options): Promise { ) ? "default" : "named"; + options.generationOptions.skipNonPrimaryKeyIndexes = customizations.includes("skipNonPrimaryKeyIndexes"); if (customizations.includes("namingStrategy")) { const namingStrategyPath = (