typeorm 0.3.13 → 0.3.14-dev.daf1b47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/browser/data-source/DataSource.d.ts +5 -0
  2. package/browser/data-source/DataSource.js +34 -16
  3. package/browser/data-source/DataSource.js.map +1 -1
  4. package/browser/driver/DriverUtils.d.ts +1 -1
  5. package/browser/driver/DriverUtils.js +13 -9
  6. package/browser/driver/DriverUtils.js.map +1 -1
  7. package/browser/entity-manager/EntityManager.d.ts +2 -1
  8. package/browser/entity-manager/EntityManager.js +7 -6
  9. package/browser/entity-manager/EntityManager.js.map +1 -1
  10. package/browser/query-builder/DeleteQueryBuilder.js +1 -1
  11. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  12. package/browser/query-builder/InsertQueryBuilder.js +1 -1
  13. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  14. package/browser/query-builder/JoinAttribute.js +11 -4
  15. package/browser/query-builder/JoinAttribute.js.map +1 -1
  16. package/browser/query-builder/QueryBuilder.d.ts +6 -1
  17. package/browser/query-builder/QueryBuilder.js +57 -26
  18. package/browser/query-builder/QueryBuilder.js.map +1 -1
  19. package/browser/query-builder/RelationIdLoader.js +7 -7
  20. package/browser/query-builder/RelationIdLoader.js.map +1 -1
  21. package/browser/query-builder/SelectQueryBuilder.js +75 -46
  22. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  23. package/browser/query-builder/SoftDeleteQueryBuilder.js +1 -1
  24. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  25. package/browser/query-builder/UpdateQueryBuilder.js +1 -1
  26. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  27. package/browser/query-builder/relation-id/RelationIdLoader.js +4 -4
  28. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  29. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +7 -7
  30. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  31. package/browser/util/InstanceChecker.d.ts +0 -2
  32. package/browser/util/InstanceChecker.js +0 -9
  33. package/browser/util/InstanceChecker.js.map +1 -1
  34. package/browser/util/ObjectUtils.d.ts +8 -0
  35. package/browser/util/ObjectUtils.js +8 -0
  36. package/browser/util/ObjectUtils.js.map +1 -1
  37. package/browser/util/StringUtils.js +1 -1
  38. package/browser/util/StringUtils.js.map +1 -1
  39. package/commands/InitCommand.js +2 -2
  40. package/commands/InitCommand.js.map +1 -1
  41. package/data-source/DataSource.d.ts +5 -0
  42. package/data-source/DataSource.js +34 -16
  43. package/data-source/DataSource.js.map +1 -1
  44. package/driver/DriverUtils.d.ts +1 -1
  45. package/driver/DriverUtils.js +13 -9
  46. package/driver/DriverUtils.js.map +1 -1
  47. package/entity-manager/EntityManager.d.ts +2 -1
  48. package/entity-manager/EntityManager.js +7 -6
  49. package/entity-manager/EntityManager.js.map +1 -1
  50. package/package.json +1 -272
  51. package/query-builder/DeleteQueryBuilder.js +1 -1
  52. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  53. package/query-builder/InsertQueryBuilder.js +1 -1
  54. package/query-builder/InsertQueryBuilder.js.map +1 -1
  55. package/query-builder/JoinAttribute.js +11 -4
  56. package/query-builder/JoinAttribute.js.map +1 -1
  57. package/query-builder/QueryBuilder.d.ts +6 -1
  58. package/query-builder/QueryBuilder.js +57 -26
  59. package/query-builder/QueryBuilder.js.map +1 -1
  60. package/query-builder/RelationIdLoader.js +7 -7
  61. package/query-builder/RelationIdLoader.js.map +1 -1
  62. package/query-builder/SelectQueryBuilder.js +75 -46
  63. package/query-builder/SelectQueryBuilder.js.map +1 -1
  64. package/query-builder/SoftDeleteQueryBuilder.js +1 -1
  65. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  66. package/query-builder/UpdateQueryBuilder.js +1 -1
  67. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  68. package/query-builder/relation-id/RelationIdLoader.js +4 -4
  69. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  70. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +7 -7
  71. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  72. package/util/InstanceChecker.d.ts +0 -2
  73. package/util/InstanceChecker.js +0 -9
  74. package/util/InstanceChecker.js.map +1 -1
  75. package/util/ObjectUtils.d.ts +8 -0
  76. package/util/ObjectUtils.js +8 -0
  77. package/util/ObjectUtils.js.map +1 -1
  78. package/util/StringUtils.js +1 -1
  79. package/util/StringUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\n\n/**\n * Loads relation ids for the given entities.\n */\nexport class RelationIdLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: DataSource) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids of the given entity or entities.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n relatedEntityOrRelatedEntities?: ObjectLiteral | ObjectLiteral[],\n ): Promise<any[]> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const relatedEntities = Array.isArray(relatedEntityOrRelatedEntities)\n ? relatedEntityOrRelatedEntities\n : relatedEntityOrRelatedEntities\n ? [relatedEntityOrRelatedEntities]\n : undefined\n\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return this.loadForManyToMany(relation, entities, relatedEntities)\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadForManyToOneAndOneToOneOwner(\n relation,\n entities,\n relatedEntities,\n )\n } else {\n // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadForOneToManyAndOneToOneNotOwner(\n relation,\n entities,\n relatedEntities,\n )\n }\n }\n\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n async loadManyToManyRelationIdsAndGroup<\n E1 extends ObjectLiteral,\n E2 extends ObjectLiteral,\n >(\n relation: RelationMetadata,\n entitiesOrEntities: E1 | E1[],\n relatedEntityOrEntities?: E2 | E2[],\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<{ entity: E1; related?: E2 | E2[] }[]> {\n // console.log(\"relation:\", relation.propertyName);\n // console.log(\"entitiesOrEntities\", entitiesOrEntities);\n const isMany = relation.isManyToMany || relation.isOneToMany\n const entities: E1[] = Array.isArray(entitiesOrEntities)\n ? entitiesOrEntities\n : [entitiesOrEntities]\n\n if (!relatedEntityOrEntities) {\n relatedEntityOrEntities = await this.connection.relationLoader.load(\n relation,\n entitiesOrEntities,\n undefined,\n queryBuilder,\n )\n if (!relatedEntityOrEntities.length)\n return entities.map((entity) => ({\n entity: entity,\n related: isMany ? [] : undefined,\n }))\n }\n // const relationIds = await this.load(relation, relatedEntityOrEntities!, entitiesOrEntities);\n const relationIds = await this.load(\n relation,\n entitiesOrEntities,\n relatedEntityOrEntities,\n )\n // console.log(\"entities\", entities);\n // console.log(\"relatedEntityOrEntities\", relatedEntityOrEntities);\n // console.log(\"relationIds\", relationIds);\n\n const relatedEntities: E2[] = Array.isArray(relatedEntityOrEntities)\n ? relatedEntityOrEntities\n : [relatedEntityOrEntities!]\n\n let columns: ColumnMetadata[] = [],\n inverseColumns: ColumnMetadata[] = []\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns =\n relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.entityMetadata.primaryColumns\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.entityMetadata.primaryColumns\n inverseColumns = relation.inverseRelation!.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n } else {\n }\n\n return entities.map((entity) => {\n const group: { entity: E1; related?: E2 | E2[] } = {\n entity: entity,\n related: isMany ? [] : undefined,\n }\n\n const entityRelationIds = relationIds.filter((relationId) => {\n return inverseColumns.every((column) => {\n return column.compareEntityValue(\n entity,\n relationId[\n column.entityMetadata.name +\n \"_\" +\n column.propertyAliasName\n ],\n )\n })\n })\n if (!entityRelationIds.length) return group\n\n relatedEntities.forEach((relatedEntity) => {\n entityRelationIds.forEach((relationId) => {\n const relatedEntityMatched = columns.every((column) => {\n return column.compareEntityValue(\n relatedEntity,\n relationId[\n DriverUtils.buildAlias(\n this.connection.driver,\n column.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n column.propertyPath.replace(\".\", \"_\"),\n )\n ],\n )\n })\n if (relatedEntityMatched) {\n if (isMany) {\n ;(group.related as E2[]).push(relatedEntity)\n } else {\n group.related = relatedEntity\n }\n }\n })\n })\n return group\n })\n }\n\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise<void> {\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids for the many-to-many relation.\n */\n protected loadForManyToMany(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const junctionMetadata = relation.junctionEntityMetadata!\n const mainAlias = junctionMetadata.name\n const columns = relation.isOwning\n ? junctionMetadata.ownerColumns\n : junctionMetadata.inverseColumns\n const inverseColumns = relation.isOwning\n ? junctionMetadata.inverseColumns\n : junctionMetadata.ownerColumns\n const qb = this.connection.createQueryBuilder()\n\n // select all columns from junction table\n columns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n inverseColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add conditions for the given entities\n let condition1 = \"\"\n if (columns.length === 1) {\n const values = entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition1 = `${mainAlias}.${\n columns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values1\", values)\n condition1 =\n mainAlias +\n \".\" +\n columns[0].propertyPath +\n \" IN (:...values1)\" // todo: use ANY for postgres\n }\n } else {\n condition1 =\n \"(\" +\n entities\n .map((entity, entityIndex) => {\n return columns\n .map((column) => {\n const paramName =\n \"entity1_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n\n // add conditions for the given inverse entities\n let condition2 = \"\"\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n const values = relatedEntities.map((entity) =>\n inverseColumns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition2 = `${mainAlias}.${\n inverseColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values2\", values)\n condition2 =\n mainAlias +\n \".\" +\n inverseColumns[0].propertyPath +\n \" IN (:...values2)\" // todo: use ANY for postgres\n }\n } else {\n condition2 =\n \"(\" +\n relatedEntities\n .map((entity, entityIndex) => {\n return inverseColumns\n .map((column) => {\n const paramName =\n \"entity2_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n }\n\n // qb.from(junctionMetadata.target, mainAlias)\n // .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"));\n //\n // // execute query\n // const { values1, values2 } = qb.getParameters();\n // console.log(`I can do it`, { values1, values2 });\n // if (inverseColumns.length === 1 &&\n // columns.length === 1 &&\n // this.connection.driver instanceof SqliteDriver &&\n // (values1.length + values2.length) > 500 &&\n // values1.length === values2.length) {\n // console.log(`I can do it`);\n // return qb.getRawMany();\n //\n // } else {\n // return qb.getRawMany();\n // }\n\n // execute query\n const condition = [condition1, condition2]\n .filter((v) => v.length > 0)\n .join(\" AND \")\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n protected loadForManyToOneAndOneToOneOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const mainAlias = relation.entityMetadata.targetName\n\n // console.log(\"entitiesx\", entities);\n // console.log(\"relatedEntitiesx\", relatedEntities);\n const hasAllJoinColumnsInEntity = relation.joinColumns.every(\n (joinColumn) => {\n return !!relation.entityMetadata.nonVirtualColumns.find(\n (column) => column === joinColumn,\n )\n },\n )\n if (relatedEntities && hasAllJoinColumnsInEntity) {\n let relationIdMaps: ObjectLiteral[] = []\n entities.forEach((entity) => {\n let relationIdMap: ObjectLiteral = {}\n relation.entityMetadata.primaryColumns.forEach(\n (primaryColumn) => {\n const key =\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\")\n relationIdMap[key] =\n primaryColumn.getEntityValue(entity)\n },\n )\n\n relatedEntities.forEach((relatedEntity) => {\n relation.joinColumns.forEach((joinColumn) => {\n const entityColumnValue =\n joinColumn.getEntityValue(entity)\n const relatedEntityColumnValue =\n joinColumn.referencedColumn!.getEntityValue(\n relatedEntity,\n )\n if (\n entityColumnValue === undefined ||\n relatedEntityColumnValue === undefined\n )\n return\n\n if (entityColumnValue === relatedEntityColumnValue) {\n const key =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n relationIdMap[key] = relatedEntityColumnValue\n }\n })\n })\n if (\n Object.keys(relationIdMap).length ===\n relation.entityMetadata.primaryColumns.length +\n relation.joinColumns.length\n ) {\n relationIdMaps.push(relationIdMap)\n }\n })\n // console.log(\"relationIdMap\", relationIdMaps);\n // console.log(\"entities.length\", entities.length);\n if (relationIdMaps.length === entities.length)\n return Promise.resolve(relationIdMaps)\n }\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder()\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.entityMetadata.primaryColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.entityMetadata.primaryColumns[0].getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.entityMetadata.primaryColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.entityMetadata.primaryColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.entityMetadata.primaryColumns\n .map((column, columnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n protected loadForOneToManyAndOneToOneNotOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n relation = relation.inverseRelation!\n\n if (\n relation.entityMetadata.primaryColumns.length ===\n relation.joinColumns.length\n ) {\n const sameReferencedColumns =\n relation.entityMetadata.primaryColumns.every((column) => {\n return relation.joinColumns.indexOf(column) !== -1\n })\n if (sameReferencedColumns) {\n return Promise.resolve(\n entities.map((entity) => {\n const result: ObjectLiteral = {}\n relation.joinColumns.forEach(function (joinColumn) {\n const value =\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n )\n const joinColumnName =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n const primaryColumnName =\n joinColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n joinColumn.propertyPath.replace(\".\", \"_\")\n result[joinColumnName] = value\n result[primaryColumnName] = value\n })\n return result\n }),\n )\n }\n }\n\n const mainAlias = relation.entityMetadata.targetName\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder()\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n primaryColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.joinColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.joinColumns[0].referencedColumn!.getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.joinColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.joinColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.joinColumns\n .map((joinColumn, joinColumnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + joinColumnIndex\n qb.setParameter(\n paramName,\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n joinColumn.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\n\n/**\n * Loads relation ids for the given entities.\n */\nexport class RelationIdLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: DataSource) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids of the given entity or entities.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n relatedEntityOrRelatedEntities?: ObjectLiteral | ObjectLiteral[],\n ): Promise<any[]> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const relatedEntities = Array.isArray(relatedEntityOrRelatedEntities)\n ? relatedEntityOrRelatedEntities\n : relatedEntityOrRelatedEntities\n ? [relatedEntityOrRelatedEntities]\n : undefined\n\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return this.loadForManyToMany(relation, entities, relatedEntities)\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadForManyToOneAndOneToOneOwner(\n relation,\n entities,\n relatedEntities,\n )\n } else {\n // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadForOneToManyAndOneToOneNotOwner(\n relation,\n entities,\n relatedEntities,\n )\n }\n }\n\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n async loadManyToManyRelationIdsAndGroup<\n E1 extends ObjectLiteral,\n E2 extends ObjectLiteral,\n >(\n relation: RelationMetadata,\n entitiesOrEntities: E1 | E1[],\n relatedEntityOrEntities?: E2 | E2[],\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<{ entity: E1; related?: E2 | E2[] }[]> {\n // console.log(\"relation:\", relation.propertyName);\n // console.log(\"entitiesOrEntities\", entitiesOrEntities);\n const isMany = relation.isManyToMany || relation.isOneToMany\n const entities: E1[] = Array.isArray(entitiesOrEntities)\n ? entitiesOrEntities\n : [entitiesOrEntities]\n\n if (!relatedEntityOrEntities) {\n relatedEntityOrEntities = await this.connection.relationLoader.load(\n relation,\n entitiesOrEntities,\n undefined,\n queryBuilder,\n )\n if (!relatedEntityOrEntities.length)\n return entities.map((entity) => ({\n entity: entity,\n related: isMany ? [] : undefined,\n }))\n }\n // const relationIds = await this.load(relation, relatedEntityOrEntities!, entitiesOrEntities);\n const relationIds = await this.load(\n relation,\n entitiesOrEntities,\n relatedEntityOrEntities,\n )\n // console.log(\"entities\", entities);\n // console.log(\"relatedEntityOrEntities\", relatedEntityOrEntities);\n // console.log(\"relationIds\", relationIds);\n\n const relatedEntities: E2[] = Array.isArray(relatedEntityOrEntities)\n ? relatedEntityOrEntities\n : [relatedEntityOrEntities!]\n\n let columns: ColumnMetadata[] = [],\n inverseColumns: ColumnMetadata[] = []\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns =\n relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.entityMetadata.primaryColumns\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.entityMetadata.primaryColumns\n inverseColumns = relation.inverseRelation!.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n } else {\n }\n\n return entities.map((entity) => {\n const group: { entity: E1; related?: E2 | E2[] } = {\n entity: entity,\n related: isMany ? [] : undefined,\n }\n\n const entityRelationIds = relationIds.filter((relationId) => {\n return inverseColumns.every((column) => {\n return column.compareEntityValue(\n entity,\n relationId[\n column.entityMetadata.name +\n \"_\" +\n column.propertyAliasName\n ],\n )\n })\n })\n if (!entityRelationIds.length) return group\n\n relatedEntities.forEach((relatedEntity) => {\n entityRelationIds.forEach((relationId) => {\n const relatedEntityMatched = columns.every((column) => {\n return column.compareEntityValue(\n relatedEntity,\n relationId[\n DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n column.propertyPath.replace(\".\", \"_\"),\n )\n ],\n )\n })\n if (relatedEntityMatched) {\n if (isMany) {\n ;(group.related as E2[]).push(relatedEntity)\n } else {\n group.related = relatedEntity\n }\n }\n })\n })\n return group\n })\n }\n\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise<void> {\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids for the many-to-many relation.\n */\n protected loadForManyToMany(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const junctionMetadata = relation.junctionEntityMetadata!\n const mainAlias = junctionMetadata.name\n const columns = relation.isOwning\n ? junctionMetadata.ownerColumns\n : junctionMetadata.inverseColumns\n const inverseColumns = relation.isOwning\n ? junctionMetadata.inverseColumns\n : junctionMetadata.ownerColumns\n const qb = this.connection.createQueryBuilder()\n\n // select all columns from junction table\n columns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n inverseColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add conditions for the given entities\n let condition1 = \"\"\n if (columns.length === 1) {\n const values = entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition1 = `${mainAlias}.${\n columns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values1\", values)\n condition1 =\n mainAlias +\n \".\" +\n columns[0].propertyPath +\n \" IN (:...values1)\" // todo: use ANY for postgres\n }\n } else {\n condition1 =\n \"(\" +\n entities\n .map((entity, entityIndex) => {\n return columns\n .map((column) => {\n const paramName =\n \"entity1_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n\n // add conditions for the given inverse entities\n let condition2 = \"\"\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n const values = relatedEntities.map((entity) =>\n inverseColumns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition2 = `${mainAlias}.${\n inverseColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values2\", values)\n condition2 =\n mainAlias +\n \".\" +\n inverseColumns[0].propertyPath +\n \" IN (:...values2)\" // todo: use ANY for postgres\n }\n } else {\n condition2 =\n \"(\" +\n relatedEntities\n .map((entity, entityIndex) => {\n return inverseColumns\n .map((column) => {\n const paramName =\n \"entity2_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n }\n\n // qb.from(junctionMetadata.target, mainAlias)\n // .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"));\n //\n // // execute query\n // const { values1, values2 } = qb.getParameters();\n // console.log(`I can do it`, { values1, values2 });\n // if (inverseColumns.length === 1 &&\n // columns.length === 1 &&\n // this.connection.driver instanceof SqliteDriver &&\n // (values1.length + values2.length) > 500 &&\n // values1.length === values2.length) {\n // console.log(`I can do it`);\n // return qb.getRawMany();\n //\n // } else {\n // return qb.getRawMany();\n // }\n\n // execute query\n const condition = [condition1, condition2]\n .filter((v) => v.length > 0)\n .join(\" AND \")\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n protected loadForManyToOneAndOneToOneOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const mainAlias = relation.entityMetadata.targetName\n\n // console.log(\"entitiesx\", entities);\n // console.log(\"relatedEntitiesx\", relatedEntities);\n const hasAllJoinColumnsInEntity = relation.joinColumns.every(\n (joinColumn) => {\n return !!relation.entityMetadata.nonVirtualColumns.find(\n (column) => column === joinColumn,\n )\n },\n )\n if (relatedEntities && hasAllJoinColumnsInEntity) {\n let relationIdMaps: ObjectLiteral[] = []\n entities.forEach((entity) => {\n let relationIdMap: ObjectLiteral = {}\n relation.entityMetadata.primaryColumns.forEach(\n (primaryColumn) => {\n const key =\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\")\n relationIdMap[key] =\n primaryColumn.getEntityValue(entity)\n },\n )\n\n relatedEntities.forEach((relatedEntity) => {\n relation.joinColumns.forEach((joinColumn) => {\n const entityColumnValue =\n joinColumn.getEntityValue(entity)\n const relatedEntityColumnValue =\n joinColumn.referencedColumn!.getEntityValue(\n relatedEntity,\n )\n if (\n entityColumnValue === undefined ||\n relatedEntityColumnValue === undefined\n )\n return\n\n if (entityColumnValue === relatedEntityColumnValue) {\n const key =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n relationIdMap[key] = relatedEntityColumnValue\n }\n })\n })\n if (\n Object.keys(relationIdMap).length ===\n relation.entityMetadata.primaryColumns.length +\n relation.joinColumns.length\n ) {\n relationIdMaps.push(relationIdMap)\n }\n })\n // console.log(\"relationIdMap\", relationIdMaps);\n // console.log(\"entities.length\", entities.length);\n if (relationIdMaps.length === entities.length)\n return Promise.resolve(relationIdMaps)\n }\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder()\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.entityMetadata.primaryColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.entityMetadata.primaryColumns[0].getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.entityMetadata.primaryColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.entityMetadata.primaryColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.entityMetadata.primaryColumns\n .map((column, columnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n protected loadForOneToManyAndOneToOneNotOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n relation = relation.inverseRelation!\n\n if (\n relation.entityMetadata.primaryColumns.length ===\n relation.joinColumns.length\n ) {\n const sameReferencedColumns =\n relation.entityMetadata.primaryColumns.every((column) => {\n return relation.joinColumns.indexOf(column) !== -1\n })\n if (sameReferencedColumns) {\n return Promise.resolve(\n entities.map((entity) => {\n const result: ObjectLiteral = {}\n relation.joinColumns.forEach(function (joinColumn) {\n const value =\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n )\n const joinColumnName =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n const primaryColumnName =\n joinColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n joinColumn.propertyPath.replace(\".\", \"_\")\n result[joinColumnName] = value\n result[primaryColumnName] = value\n })\n return result\n }),\n )\n }\n }\n\n const mainAlias = relation.entityMetadata.targetName\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder()\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.joinColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.joinColumns[0].referencedColumn!.getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.joinColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.joinColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.joinColumns\n .map((joinColumn, joinColumnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + joinColumnIndex\n qb.setParameter(\n paramName,\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n joinColumn.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n}\n"],"sourceRoot":".."}
@@ -60,7 +60,7 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
60
60
  sql = sql.trim();
61
61
  if (this.expressionMap.subQuery)
62
62
  sql = "(" + sql + ")";
63
- return sql;
63
+ return this.replacePropertyNamesForTheWholeQuery(sql);
64
64
  }
65
65
  // -------------------------------------------------------------------------
66
66
  // Public Methods
@@ -339,10 +339,11 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
339
339
  where(where, parameters) {
340
340
  this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions
341
341
  const condition = this.getWhereCondition(where);
342
- if (condition)
342
+ if (condition) {
343
343
  this.expressionMap.wheres = [
344
344
  { type: "simple", condition: condition },
345
345
  ];
346
+ }
346
347
  if (parameters)
347
348
  this.setParameters(parameters);
348
349
  return this;
@@ -946,20 +947,23 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
946
947
  // Protected Methods
947
948
  // -------------------------------------------------------------------------
948
949
  join(direction, entityOrProperty, aliasName, condition, parameters, mapToProperty, isMappingMany, mapAsEntity) {
949
- this.setParameters(parameters || {});
950
+ if (parameters) {
951
+ this.setParameters(parameters);
952
+ }
950
953
  const joinAttribute = new JoinAttribute_1.JoinAttribute(this.connection, this.expressionMap);
951
954
  joinAttribute.direction = direction;
952
955
  joinAttribute.mapAsEntity = mapAsEntity;
953
956
  joinAttribute.mapToProperty = mapToProperty;
954
957
  joinAttribute.isMappingMany = isMappingMany;
955
958
  joinAttribute.entityOrProperty = entityOrProperty; // relationName
956
- joinAttribute.condition = condition ? condition : undefined; // joinInverseSideCondition
959
+ joinAttribute.condition = condition; // joinInverseSideCondition
957
960
  // joinAttribute.junctionAlias = joinAttribute.relation.isOwning ? parentAlias + "_" + destinationTableAlias : destinationTableAlias + "_" + parentAlias;
958
961
  this.expressionMap.joinAttributes.push(joinAttribute);
959
- if (joinAttribute.metadata) {
960
- if (joinAttribute.metadata.deleteDateColumn &&
962
+ const joinAttributeMetadata = joinAttribute.metadata;
963
+ if (joinAttributeMetadata) {
964
+ if (joinAttributeMetadata.deleteDateColumn &&
961
965
  !this.expressionMap.withDeleted) {
962
- const conditionDeleteColumn = `${aliasName}.${joinAttribute.metadata.deleteDateColumn.propertyName} IS NULL`;
966
+ const conditionDeleteColumn = `${aliasName}.${joinAttributeMetadata.deleteDateColumn.propertyName} IS NULL`;
963
967
  joinAttribute.condition = joinAttribute.condition
964
968
  ? ` ${joinAttribute.condition} AND ${conditionDeleteColumn}`
965
969
  : `${conditionDeleteColumn}`;
@@ -968,7 +972,7 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
968
972
  joinAttribute.alias = this.expressionMap.createAlias({
969
973
  type: "join",
970
974
  name: aliasName,
971
- metadata: joinAttribute.metadata,
975
+ metadata: joinAttributeMetadata,
972
976
  });
973
977
  if (joinAttribute.relation &&
974
978
  joinAttribute.relation.junctionEntityMetadata) {
@@ -1293,25 +1297,37 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1293
1297
  */
1294
1298
  createOrderByExpression() {
1295
1299
  const orderBys = this.expressionMap.allOrderBys;
1296
- if (Object.keys(orderBys).length > 0)
1297
- return (" ORDER BY " +
1298
- Object.keys(orderBys)
1299
- .map((columnName) => {
1300
- if (typeof orderBys[columnName] === "string") {
1301
- return (this.replacePropertyNames(columnName) +
1302
- " " +
1303
- orderBys[columnName]);
1304
- }
1305
- else {
1306
- return (this.replacePropertyNames(columnName) +
1307
- " " +
1308
- orderBys[columnName].order +
1309
- " " +
1310
- orderBys[columnName].nulls);
1300
+ if (Object.keys(orderBys).length === 0)
1301
+ return "";
1302
+ return (" ORDER BY " +
1303
+ Object.keys(orderBys)
1304
+ .map((columnName) => {
1305
+ const orderValue = typeof orderBys[columnName] === "string"
1306
+ ? orderBys[columnName]
1307
+ : orderBys[columnName].order +
1308
+ " " +
1309
+ orderBys[columnName].nulls;
1310
+ const selection = this.expressionMap.selects.find((s) => s.selection === columnName);
1311
+ if (selection &&
1312
+ !selection.aliasName &&
1313
+ columnName.indexOf(".") !== -1) {
1314
+ const criteriaParts = columnName.split(".");
1315
+ const aliasName = criteriaParts[0];
1316
+ const propertyPath = criteriaParts.slice(1).join(".");
1317
+ const alias = this.expressionMap.aliases.find((alias) => alias.name === aliasName);
1318
+ if (alias) {
1319
+ const column = alias.metadata.findColumnWithPropertyPath(propertyPath);
1320
+ if (column) {
1321
+ const orderAlias = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, aliasName, column.databaseName);
1322
+ return (this.escape(orderAlias) +
1323
+ " " +
1324
+ orderBys[columnName]);
1325
+ }
1311
1326
  }
1312
- })
1313
- .join(", "));
1314
- return "";
1327
+ }
1328
+ return (this.replacePropertyNames(columnName) + " " + orderValue);
1329
+ })
1330
+ .join(", "));
1315
1331
  }
1316
1332
  /**
1317
1333
  * Creates "LIMIT" and "OFFSET" parts of SQL query.
@@ -1594,7 +1610,7 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1594
1610
  selection: selectionPath,
1595
1611
  aliasName: selection.aliasName
1596
1612
  ? selection.aliasName
1597
- : DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, aliasName, column.databaseName),
1613
+ : DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, aliasName, column.databaseName),
1598
1614
  // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!
1599
1615
  virtual: selection.virtual,
1600
1616
  });
@@ -1603,7 +1619,7 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1603
1619
  else {
1604
1620
  finalSelects.push({
1605
1621
  selection: selectionPath,
1606
- aliasName: DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, aliasName, column.databaseName),
1622
+ aliasName: DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, aliasName, column.databaseName),
1607
1623
  // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!
1608
1624
  virtual: hasMainAlias,
1609
1625
  });
@@ -1945,11 +1961,11 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1945
1961
  const mainAliasName = this.expressionMap.mainAlias.name;
1946
1962
  const querySelects = metadata.primaryColumns.map((primaryColumn) => {
1947
1963
  const distinctAlias = this.escape("distinctAlias");
1948
- const columnAlias = this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, mainAliasName, primaryColumn.databaseName));
1964
+ const columnAlias = this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, mainAliasName, primaryColumn.databaseName));
1949
1965
  if (!orderBys[columnAlias])
1950
1966
  // make sure we aren't overriding user-defined order in inverse direction
1951
1967
  orderBys[columnAlias] = "ASC";
1952
- const alias = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, "ids_" + mainAliasName, primaryColumn.databaseName);
1968
+ const alias = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, "ids_" + mainAliasName, primaryColumn.databaseName);
1953
1969
  return `${distinctAlias}.${columnAlias} AS ${this.escape(alias)}`;
1954
1970
  });
1955
1971
  const originalQuery = this.clone();
@@ -1990,7 +2006,7 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1990
2006
  .join(" OR ");
1991
2007
  }
1992
2008
  else {
1993
- const alias = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, "ids_" + mainAliasName, metadata.primaryColumns[0].databaseName);
2009
+ const alias = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, "ids_" + mainAliasName, metadata.primaryColumns[0].databaseName);
1994
2010
  const ids = rawResults.map((result) => result[alias]);
1995
2011
  const areAllNumbers = ids.every((id) => typeof id === "number");
1996
2012
  if (areAllNumbers) {
@@ -2087,12 +2103,14 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2087
2103
  const column = alias.metadata.findColumnWithPropertyPath(propertyPath);
2088
2104
  return (this.escape(parentAlias) +
2089
2105
  "." +
2090
- this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, aliasName, column.databaseName)));
2106
+ this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, aliasName, column.databaseName)));
2091
2107
  }
2092
2108
  else {
2093
2109
  if (this.expressionMap.selects.find((select) => select.selection === orderCriteria ||
2094
2110
  select.aliasName === orderCriteria))
2095
- return this.escape(parentAlias) + "." + orderCriteria;
2111
+ return (this.escape(parentAlias) +
2112
+ "." +
2113
+ this.escape(orderCriteria));
2096
2114
  return "";
2097
2115
  }
2098
2116
  })
@@ -2107,12 +2125,14 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2107
2125
  const column = alias.metadata.findColumnWithPropertyPath(propertyPath);
2108
2126
  orderByObject[this.escape(parentAlias) +
2109
2127
  "." +
2110
- this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, aliasName, column.databaseName))] = orderBys[orderCriteria];
2128
+ this.escape(DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, undefined, aliasName, column.databaseName))] = orderBys[orderCriteria];
2111
2129
  }
2112
2130
  else {
2113
2131
  if (this.expressionMap.selects.find((select) => select.selection === orderCriteria ||
2114
2132
  select.aliasName === orderCriteria)) {
2115
- orderByObject[this.escape(parentAlias) + "." + orderCriteria] = orderBys[orderCriteria];
2133
+ orderByObject[this.escape(parentAlias) +
2134
+ "." +
2135
+ this.escape(orderCriteria)] = orderBys[orderCriteria];
2116
2136
  }
2117
2137
  else {
2118
2138
  orderByObject[orderCriteria] = orderBys[orderCriteria];
@@ -2370,17 +2390,26 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2370
2390
  ? "NULLS LAST"
2371
2391
  : undefined;
2372
2392
  let aliasPath = `${alias}.${propertyPath}`;
2373
- if (column.isVirtualProperty && column.query) {
2374
- const selection = this.expressionMap.selects.find((s) => s.selection === aliasPath);
2375
- if (selection) {
2376
- // this is not building correctly now???
2377
- aliasPath = DriverUtils_1.DriverUtils.buildAlias(this.connection.driver, alias, column.databaseName);
2378
- selection.aliasName = aliasPath;
2379
- }
2380
- else {
2381
- aliasPath = `(${column.query(alias)})`;
2382
- }
2383
- }
2393
+ // const selection = this.expressionMap.selects.find(
2394
+ // (s) => s.selection === aliasPath,
2395
+ // )
2396
+ // if (selection) {
2397
+ // // this is not building correctly now???
2398
+ // aliasPath = this.escape(
2399
+ // DriverUtils.buildAlias(
2400
+ // this.connection.driver,
2401
+ // undefined,
2402
+ // alias,
2403
+ // column.databaseName,
2404
+ // ),
2405
+ // )
2406
+ // // selection.aliasName = aliasPath
2407
+ // } else {
2408
+ // if (column.isVirtualProperty && column.query) {
2409
+ // aliasPath = `(${column.query(alias)})`
2410
+ // }
2411
+ // }
2412
+ // console.log("add sort", selection, aliasPath, direction, nulls)
2384
2413
  this.addOrderBy(aliasPath, direction, nulls);
2385
2414
  // this.orderBys.push({ alias: alias + "." + propertyPath, direction, nulls });
2386
2415
  }