diff --git a/src/ModelCustomization.ts b/src/ModelCustomization.ts index 10edab1..8c12c82 100644 --- a/src/ModelCustomization.ts +++ b/src/ModelCustomization.ts @@ -21,11 +21,20 @@ export default function modelCustomizationPhase( } else { namingStrategy = new NamingStrategy(); } - let retVal = applyNamingStrategy(namingStrategy, dbModel); + let retVal = removeColumnsInRelation(dbModel); + retVal = applyNamingStrategy(namingStrategy, dbModel); retVal = addImportsAndGenerationOptions(retVal, generationOptions); retVal = removeColumnDefaultProperties(retVal, defaultValues); return retVal; } +function removeColumnsInRelation(dbModel: Entity[]): Entity[] { + dbModel.forEach(entity => { + entity.columns = entity.columns.filter( + col => !col.isUsedInRelation || col.primary + ); + }); + return dbModel; +} function removeColumnDefaultProperties( dbModel: Entity[], defaultValues: DataTypeDefaults diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index d27b212..47dfe9e 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -88,6 +88,8 @@ export default abstract class AbstractDriver { ) && entity.relations[0].relatedTable !== entity.relations[1].relatedTable && + entity.relations[0].joinColumnOptions!.length === + entity.relations[1].joinColumnOptions!.length && entity.columns.length === entity.columns.filter(c => c.primary).length && entity.columns @@ -315,16 +317,12 @@ export default abstract class AbstractDriver { ); isOneToMany = !index; - ownerEntity.columns = ownerEntity.columns.filter( - v => - !relationTmp.ownerColumns.some(u => u === v.tscName) || - v.primary - ); - relationTmp.relatedTable.columns = relationTmp.relatedTable.columns.filter( - v => - !relationTmp.relatedColumns.some(u => u === v.tscName) || - v.primary - ); + ownerColumns.forEach(column => { + column.isUsedInRelation = true; + }); + relatedColumns.forEach(column => { + column.isUsedInRelation = true; + }); let fieldName = ""; if (ownerColumns.length === 1) { fieldName = TomgUtils.findNameForNewField( diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 4b639fa..4adf75e 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -226,7 +226,8 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG default: defaultValue, options, tscName, - tscType + tscType, + isUsedInRelation: false }); } }); diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 75aab4a..44b5acd 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -257,7 +257,8 @@ export default class MysqlDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, + isUsedInRelation: false }); } }); diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 38cf79b..16b255c 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -208,7 +208,8 @@ export default class OracleDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, + isUsedInRelation: false }); } }); diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index c34402f..0aae984 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -159,7 +159,8 @@ export default class PostgresDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, + isUsedInRelation: false }); } }); diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 64ce684..1d07aba 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -226,7 +226,8 @@ export default class SqliteDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, + isUsedInRelation: false }); } }); diff --git a/src/models/Column.ts b/src/models/Column.ts index bde92ce..b14fd41 100644 --- a/src/models/Column.ts +++ b/src/models/Column.ts @@ -3,7 +3,8 @@ import { ColumnType } from "typeorm"; export type Column = { tscType: string; tscName: string; - type: ColumnType | string; // todo: remove ? + type: ColumnType | string; // TODO: remove ? + isUsedInRelation: boolean; // TODO: move to separate object/calulate when us primary?: boolean; generated?: true | "increment" | "uuid"; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index bfa577f..c7a5a2d 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -106,7 +106,8 @@ describe("MssqlDriver", () => { generated: true, default: `() => "'a'"`, tscName: "name", - tscType: "number" + tscType: "number", + isUsedInRelation: false }); const result = await driver.GetCoulmnsFromEntity( diff --git a/test/modelCustomization/modelCustomization.test.ts b/test/modelCustomization/modelCustomization.test.ts index 5ba0ff1..207f20c 100644 --- a/test/modelCustomization/modelCustomization.test.ts +++ b/test/modelCustomization/modelCustomization.test.ts @@ -21,13 +21,15 @@ describe("Model customization phase", async () => { options: { name: "id" }, tscName: "id", tscType: "number", - primary: true + primary: true, + isUsedInRelation: false }, { type: "character varying", options: { name: "name" }, tscName: "name", - tscType: "string" + tscType: "string", + isUsedInRelation: false } ], indices: [ @@ -61,19 +63,22 @@ describe("Model customization phase", async () => { options: { name: "id" }, tscName: "id", tscType: "number", - primary: true + primary: true, + isUsedInRelation: false }, { type: "character varying", options: { name: "title" }, tscName: "title", - tscType: "string" + tscType: "string", + isUsedInRelation: false }, { type: "character varying", options: { name: "text" }, tscName: "text", - tscType: "string" + tscType: "string", + isUsedInRelation: false } ], indices: [