schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
{"version":3,"sources":["../../src/repository/TreeRepository.ts"],"names":[],"mappings":"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","file":"TreeRepository.js","sourcesContent":["import {Repository} from \"./Repository\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\n\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nexport class TreeRepository<Entity> extends Repository<Entity> {\n\n    // todo: implement moving\n    // todo: implement removing\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Gets complete trees for all roots in the table.\n     */\n    async findTrees(): Promise<Entity[]> {\n        const roots = await this.findRoots();\n        await Promise.all(roots.map(root => this.findDescendantsTree(root)));\n        return roots;\n    }\n\n    /**\n     * Roots are entities that have no ancestors. Finds them all.\n     */\n    findRoots(): Promise<Entity[]> {\n        const escapeAlias = (alias: string) => this.manager.connection.driver.escape(alias);\n        const escapeColumn = (column: string) => this.manager.connection.driver.escape(column);\n        const parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(\n          this.metadata.treeParentRelation!.propertyName, \"id\"\n        );\n\n        return this.createQueryBuilder(\"treeEntity\")\n            .where(`${escapeAlias(\"treeEntity\")}.${escapeColumn(parentPropertyName)} IS NULL`)\n            .getMany();\n    }\n\n    /**\n     * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n     */\n    findDescendants(entity: Entity): Promise<Entity[]> {\n        return this\n            .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getMany();\n    }\n\n    /**\n     * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n     */\n    findDescendantsTree(entity: Entity): Promise<Entity> {\n        // todo: throw exception if there is no column of this relation?\n        return this\n            .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getRawAndEntities()\n            .then(entitiesAndScalars => {\n                const relationMaps = this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n                this.buildChildrenEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n                return entity;\n            });\n    }\n\n    /**\n     * Gets number of descendants of the entity.\n     */\n    countDescendants(entity: Entity): Promise<number> {\n        return this\n            .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getCount();\n    }\n\n    /**\n     * Creates a query builder used to get descendants of the entities in a tree.\n     */\n    createDescendantsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n        // create shortcuts for better readability\n        const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n        if (this.metadata.treeType === \"closure-table\") {\n\n            const joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n                return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn!.propertyPath);\n            }).join(\" AND \");\n\n            const parameters: ObjectLiteral = {};\n            const whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n                parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n                return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn!.propertyName;\n            }).join(\" AND \");\n\n            return this\n                .createQueryBuilder(alias)\n                .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n                .where(whereCondition)\n                .setParameters(parameters);\n\n        } else if (this.metadata.treeType === \"nested-set\") {\n\n            const whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n                \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn!.propertyPath;\n            const parameters: ObjectLiteral = {};\n            const joinCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n                const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n                parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n                return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n            }).join(\" AND \");\n\n            return this\n                .createQueryBuilder(alias)\n                .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n                .where(joinCondition, parameters);\n\n        } else if (this.metadata.treeType === \"materialized-path\") {\n            return this\n                .createQueryBuilder(alias)\n                .where(qb => {\n                    const subQuery = qb.subQuery()\n                        .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n                        .from(this.metadata.target, this.metadata.targetName)\n                        .whereInIds(this.metadata.getEntityIdMap(entity));\n\n                    qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n                    if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n                        return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE ${subQuery.getQuery()} || '%'`;\n                    } else {\n                        return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE CONCAT(${subQuery.getQuery()}, '%')`;\n                    }\n                });\n        }\n\n        throw new Error(`Supported only in tree entities`);\n    }\n\n    /**\n     * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n     */\n    findAncestors(entity: Entity): Promise<Entity[]> {\n        return this\n            .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getMany();\n    }\n\n    /**\n     * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n     */\n    findAncestorsTree(entity: Entity): Promise<Entity> {\n        // todo: throw exception if there is no column of this relation?\n        return this\n            .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getRawAndEntities()\n            .then(entitiesAndScalars => {\n                const relationMaps = this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n                this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n                return entity;\n            });\n    }\n\n    /**\n     * Gets number of ancestors of the entity.\n     */\n    countAncestors(entity: Entity): Promise<number> {\n        return this\n            .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n            .getCount();\n    }\n\n    /**\n     * Creates a query builder used to get ancestors of the entities in the tree.\n     */\n    createAncestorsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n        // create shortcuts for better readability\n        // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n        if (this.metadata.treeType === \"closure-table\") {\n            const joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n                return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn!.propertyPath;\n            }).join(\" AND \");\n\n            const parameters: ObjectLiteral = {};\n            const whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n                parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n                return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn!.propertyName;\n            }).join(\" AND \");\n\n            return this\n                .createQueryBuilder(alias)\n                .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n                .where(whereCondition)\n                .setParameters(parameters);\n\n        } else if (this.metadata.treeType === \"nested-set\") {\n\n            const joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n                alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn!.propertyPath;\n            const parameters: ObjectLiteral = {};\n            const whereCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n                const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n                parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n                return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n            }).join(\" AND \");\n\n            return this\n                .createQueryBuilder(alias)\n                .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n                .where(whereCondition, parameters);\n\n\n        } else if (this.metadata.treeType === \"materialized-path\") {\n            // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n            return this\n                .createQueryBuilder(alias)\n                .where(qb => {\n                    const subQuery = qb.subQuery()\n                        .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n                        .from(this.metadata.target, this.metadata.targetName)\n                        .whereInIds(this.metadata.getEntityIdMap(entity));\n\n                    qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n                    if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n                        return `${subQuery.getQuery()} LIKE ${alias}.${this.metadata.materializedPathColumn!.propertyPath} || '%'`;\n\n                    } else {\n                        return `${subQuery.getQuery()} LIKE CONCAT(${alias}.${this.metadata.materializedPathColumn!.propertyPath}, '%')`;\n                    }\n                });\n        }\n\n        throw new Error(`Supported only in tree entities`);\n    }\n\n    /**\n     * Moves entity to the children of then given entity.\n     *\n    move(entity: Entity, to: Entity): Promise<void> {\n        return Promise.resolve();\n    } */\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    protected createRelationMaps(alias: string, rawResults: any[]): { id: any, parentId: any }[] {\n        return rawResults.map(rawResult => {\n            const joinColumn = this.metadata.treeParentRelation!.joinColumns[0];\n            // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n            const joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n            const id = rawResult[alias + \"_\" + this.metadata.primaryColumns[0].databaseName];\n            const parentId = rawResult[alias + \"_\" + joinColumnName];\n            return {\n                id: this.manager.connection.driver.prepareHydratedValue(id, this.metadata.primaryColumns[0]),\n                parentId: this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n            };\n        });\n    }\n\n    protected buildChildrenEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n        const childProperty = this.metadata.treeChildrenRelation!.propertyName;\n        const parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n        const childRelationMaps = relationMaps.filter(relationMap => relationMap.parentId === parentEntityId);\n        const childIds = childRelationMaps.map(relationMap => relationMap.id);\n        entity[childProperty] = entities.filter(entity => childIds.indexOf(entity.id) !== -1);\n        entity[childProperty].forEach((childEntity: any) => {\n            this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n        });\n    }\n\n    protected buildParentEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n        const parentProperty = this.metadata.treeParentRelation!.propertyName;\n        const entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n        const parentRelationMap = relationMaps.find(relationMap => relationMap.id === entityId);\n        const parentEntity = entities.find(entity => {\n            if (!parentRelationMap)\n                return false;\n\n            return entity[this.metadata.primaryColumns[0].propertyName] === parentRelationMap.parentId;\n        });\n        if (parentEntity) {\n            entity[parentProperty] = parentEntity;\n            this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n        }\n    }\n\n}\n"],"sourceRoot":".."}