diff --git a/jest.e2e.ts b/jest.e2e.ts index c039a6d54..912063b6b 100644 --- a/jest.e2e.ts +++ b/jest.e2e.ts @@ -3,7 +3,7 @@ module.exports = { preset: './jest.preset.ts', globals: { 'ts-jest': { - tsconfig: './examples/tsconfig.spec.json' + tsconfig: process.cwd() + '/examples/tsconfig.spec.json' } }, testEnvironment: 'node', @@ -11,10 +11,8 @@ module.exports = { '^.+\\.[tj]s$': 'ts-jest' }, moduleFileExtensions: ['ts', 'js', 'html'], - testMatch: ['**/e2e/**/*.spec.ts'], - + testMatch: ['**/examples/**/e2e/**/*.spec.ts'], setupFilesAfterEnv: ['jest-extended'], snapshotSerializers: ['jest-snapshot-serializer-raw/always'], - - coverageDirectory: '../coverage/examples' + coverageDirectory: './coverage/examples' }; diff --git a/packages/query-typeorm/src/query/relation-query.builder.ts b/packages/query-typeorm/src/query/relation-query.builder.ts index 152a46ff4..674c317eb 100644 --- a/packages/query-typeorm/src/query/relation-query.builder.ts +++ b/packages/query-typeorm/src/query/relation-query.builder.ts @@ -264,19 +264,18 @@ export class RelationQueryBuilder { }).join(' AND '); const whereParams = {}; - const andSelect = []; const whereCondition = primaryColumns.map((column) => { const paramName = this.getParamName(aliasName); whereParams[paramName] = entities.map((entity) => column.getEntityValue(entity)); // Also select the columns, so we can use them to map later - andSelect.push(`${aliasName}.${column.propertyPath}`); + qb.addSelect(`${aliasName}.${column.propertyPath}`) + return `${aliasName}.${column.propertyPath} IN (:...${paramName})`; }).join(' AND '); return qb.leftJoin(relation.entityMetadata.target as Class, aliasName, joinCondition) - .addSelect(andSelect) .andWhere(whereCondition, whereParams); }, @@ -394,14 +393,14 @@ export class RelationQueryBuilder { batchSelect: (qb, entities: Entity[]) => { const params = {}; - const andSelect = []; const sql = relation.joinColumns.map((column) => { const paramName = this.getParamName(column.propertyName); params[paramName] = entities.map((entity) => column.referencedColumn!.getEntityValue(entity)); // We also want to select the field, so we can map them back in the mapper - andSelect.push(`${joinAlias}.${column.propertyName} AS ${joinAlias}_${column.propertyName}`); + qb.addSelect(`${joinAlias}.${column.propertyName}`, `${joinAlias}_${column.propertyName}`) + return `${joinAlias}.${column.propertyName} IN (:...${paramName})`; }).join(' AND '); @@ -411,7 +410,6 @@ export class RelationQueryBuilder { return qb.innerJoin(join.target, join.alias, conditions.join(' AND ')); }, qb) - .addSelect(andSelect) .andWhere(sql, params); }, @@ -469,10 +467,9 @@ export class RelationQueryBuilder { // First filter the raw relations with the PK of the entity, then filter the relations // with the PK of the raw relation return lodashFilter(rawRelations, rawFilter).reduce((entityRelations, rawRelation) => { - const filter = relation.inverseRelation.joinColumns.reduce((columns, column) => ({ + const filter = this.getRelationPrimaryKeysPropertyNameAndColumnsName().reduce((columns, column) => ({ ...columns, - - [column.referencedColumn.propertyName]: rawRelation[`${joinAlias}_${column.propertyName}`] + [column.propertyName]: rawRelation[column.columnName] }), {} as Partial); return entityRelations.concat(lodashFilter(relations, filter) as any); @@ -481,14 +478,14 @@ export class RelationQueryBuilder { batchSelect: (qb, entities: Entity[]) => { const params = {}; - const andSelect = []; const sql = relation.inverseRelation!.inverseJoinColumns.map((column) => { const paramName = this.getParamName(column.propertyName); params[paramName] = entities.map((entity) => column.referencedColumn!.getEntityValue(entity)); // We also want to select the field, so we can map them back in the mapper - andSelect.push(`${joinAlias}.${column.propertyName} AS ${joinAlias}_${column.propertyName}`); + qb.addSelect(`${joinAlias}.${column.propertyName}`, `${joinAlias}_${column.propertyName}`) + return `${joinAlias}.${column.propertyName} IN (:...${paramName})`; }).join(' AND '); @@ -498,7 +495,6 @@ export class RelationQueryBuilder { return qb.innerJoin(join.target, join.alias, conditions.join(' AND ')); }, qb) - .addSelect(andSelect) .andWhere(sql, params); },