schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
{"version":3,"sources":["../browser/src/query-builder/QueryExpressionMap.ts"],"names":[],"mappings":"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","file":"QueryExpressionMap.js","sourcesContent":["import {Alias} from \"./Alias\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {JoinAttribute} from \"./JoinAttribute\";\nimport {RelationIdAttribute} from \"./relation-id/RelationIdAttribute\";\nimport {RelationCountAttribute} from \"./relation-count/RelationCountAttribute\";\nimport {Connection} from \"../connection/Connection\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {SelectQuery} from \"./SelectQuery\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {SelectQueryBuilderOption} from \"./SelectQueryBuilderOption\";\n\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nexport class QueryExpressionMap {\n\n    // -------------------------------------------------------------------------\n    // Public Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Indicates if QueryBuilder used to select entities and not a raw results.\n     */\n    queryEntity: boolean = false;\n\n    /**\n     * Main alias is a main selection object selected by QueryBuilder.\n     */\n    mainAlias?: Alias;\n\n    /**\n     * All aliases (including main alias) used in the query.\n     */\n    aliases: Alias[] = [];\n\n    /**\n     * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n     */\n    queryType: \"select\"|\"update\"|\"delete\"|\"insert\"|\"relation\" = \"select\";\n\n    /**\n     * Data needs to be SELECT-ed.\n     */\n    selects: SelectQuery[] = [];\n\n    /**\n     * FROM-s to be selected.\n     */\n    // froms: { target: string, alias: string }[] = [];\n\n    /**\n     * If update query was used, it needs \"update set\" - properties which will be updated by this query.\n     * If insert query was used, it needs \"insert set\" - values that needs to be inserted.\n     */\n    valuesSet?: ObjectLiteral|ObjectLiteral[];\n\n    /**\n     * Optional returning (or output) clause for insert, update or delete queries.\n     */\n    returning: string|string[];\n\n    /**\n     * Extra returning columns to be added to the returning statement if driver supports it.\n     */\n    extraReturningColumns: ColumnMetadata[] = [];\n\n    /**\n     * Optional on conflict statement used in insertion query in postgres.\n     */\n    onConflict: string = \"\";\n\n    /**\n     * Optional on ignore statement used in insertion query in databases.\n     */\n    onIgnore: string | boolean = false;\n\n    /**\n     * Optional on update statement used in insertion query in databases.\n     */\n    onUpdate: { columns?: string, conflict?: string, overwrite?: string };\n\n    /**\n     * JOIN queries.\n     */\n    joinAttributes: JoinAttribute[] = [];\n\n    /**\n     * RelationId queries.\n     */\n    relationIdAttributes: RelationIdAttribute[] = [];\n\n    /**\n     * Relation count queries.\n     */\n    relationCountAttributes: RelationCountAttribute[] = [];\n\n    /**\n     * WHERE queries.\n     */\n    wheres: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n    /**\n     * HAVING queries.\n     */\n    havings: { type: \"simple\"|\"and\"|\"or\", condition: string }[] = [];\n\n    /**\n     * ORDER BY queries.\n     */\n    orderBys: OrderByCondition = {};\n\n    /**\n     * GROUP BY queries.\n     */\n    groupBys: string[] = [];\n\n    /**\n     * LIMIT query.\n     */\n    limit?: number;\n\n    /**\n     * OFFSET query.\n     */\n    offset?: number;\n\n    /**\n     * Number of rows to skip of result using pagination.\n     */\n    skip?: number;\n\n    /**\n     * Number of rows to take using pagination.\n     */\n    take?: number;\n\n    /**\n     * Locking mode.\n     */\n    lockMode?: \"optimistic\"|\"pessimistic_read\"|\"pessimistic_write\";\n\n    /**\n     * Current version of the entity, used for locking.\n     */\n    lockVersion?: number|Date;\n\n    /**\n     * Parameters used to be escaped in final query.\n     */\n    parameters: ObjectLiteral = {};\n\n    /**\n     * Indicates if alias, table names and column names will be ecaped by driver, or not.\n     *\n     * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n     */\n    disableEscaping: boolean = true;\n\n    /**\n     * Indicates if virtual columns should be included in entity result.\n     *\n     * todo: what to do with it? is it properly used? what about persistence?\n     */\n    enableRelationIdValues: boolean = false;\n\n    /**\n     * Extra where condition appended to the end of original where conditions with AND keyword.\n     * Original condition will be wrapped into brackets.\n     */\n    extraAppendedAndWhereCondition: string = \"\";\n\n    /**\n     * Indicates if query builder creates a subquery.\n     */\n    subQuery: boolean = false;\n\n    /**\n     * If QueryBuilder was created in a subquery mode then its parent QueryBuilder (who created subquery) will be stored here.\n     */\n    parentQueryBuilder: QueryBuilder<any>;\n\n    /**\n     * Indicates if property names are prefixed with alias names during property replacement.\n     * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n     * but user can use them in WHERE expressions.\n     */\n    aliasNamePrefixingEnabled: boolean = true;\n\n    /**\n     * Indicates if query result cache is enabled or not.\n     */\n    cache: boolean = false;\n\n    /**\n     * Time in milliseconds in which cache will expire.\n     * If not set then global caching time will be used.\n     */\n    cacheDuration: number;\n\n    /**\n     * Cache id.\n     * Used to identifier your cache queries.\n     */\n    cacheId: string;\n\n    /**\n     * Options that define QueryBuilder behaviour.\n     */\n    options: SelectQueryBuilderOption[] = [];\n\n    /**\n     * Property path of relation to work with.\n     * Used in relational query builder.\n     */\n    relationPropertyPath: string;\n\n    /**\n     * Entity (target) which relations will be updated.\n     */\n    of: any|any[];\n\n    /**\n     * List of columns where data should be inserted.\n     * Used in INSERT query.\n     */\n    insertColumns: string[] = [];\n\n    /**\n     * Used if user wants to update or delete a specific entities.\n     */\n    whereEntities: ObjectLiteral[] = [];\n\n    /**\n     * Indicates if entity must be updated after insertion / updation.\n     * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n     */\n    updateEntity: boolean = true;\n\n    /**\n     * Indicates if listeners and subscribers must be called before and after query execution.\n     */\n    callListeners: boolean = true;\n\n    /**\n     * Indicates if query must be wrapped into transaction.\n     */\n    useTransaction: boolean = false;\n\n    /**\n     * Extra parameters.\n     * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n     */\n    nativeParameters: ObjectLiteral = {};\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(protected connection: Connection) {\n    }\n\n    // -------------------------------------------------------------------------\n    // Accessors\n    // -------------------------------------------------------------------------\n\n    /**\n     * Get all ORDER BY queries - if order by is specified by user then it uses them,\n     * otherwise it uses default entity order by if it was set.\n     */\n    get allOrderBys() {\n        if (!Object.keys(this.orderBys).length && this.mainAlias!.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n            const entityOrderBy = this.mainAlias!.metadata.orderBy || {};\n            return Object.keys(entityOrderBy).reduce((orderBy, key) => {\n                orderBy[this.mainAlias!.name + \".\" + key] = entityOrderBy[key];\n                return orderBy;\n            }, {} as OrderByCondition);\n        }\n\n        return this.orderBys;\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates a main alias and adds it to the current expression map.\n     */\n    setMainAlias(alias: Alias): Alias {\n\n        // if main alias is already set then remove it from the array\n        // if (this.mainAlias)\n        //     this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n\n        // set new main alias\n        this.mainAlias = alias;\n\n        return alias;\n    }\n\n    /**\n     * Creates a new alias and adds it to the current expression map.\n     */\n    createAlias(options: { type: \"from\"|\"select\"|\"join\"|\"other\", name?: string, target?: Function|string, tablePath?: string, subQuery?: string, metadata?: EntityMetadata }): Alias {\n\n        let aliasName = options.name;\n        if (!aliasName && options.tablePath)\n            aliasName = options.tablePath;\n        if (!aliasName && options.target instanceof Function)\n            aliasName = options.target.name;\n        if (!aliasName && typeof options.target === \"string\")\n            aliasName = options.target;\n\n        const alias = new Alias();\n        alias.type = options.type;\n        if (aliasName)\n            alias.name = aliasName;\n        if (options.metadata)\n            alias.metadata = options.metadata;\n        if (options.target && !alias.hasMetadata)\n            alias.metadata = this.connection.getMetadata(options.target);\n        if (options.tablePath)\n            alias.tablePath = options.tablePath;\n        if (options.subQuery)\n            alias.subQuery = options.subQuery;\n\n        this.aliases.push(alias);\n        return alias;\n    }\n\n    /**\n     * Finds alias with the given name.\n     * If alias was not found it throw an exception.\n     */\n    findAliasByName(aliasName: string): Alias {\n        const alias = this.aliases.find(alias => alias.name === aliasName);\n        if (!alias)\n            throw new Error(`\"${aliasName}\" alias was not found. Maybe you forgot to join it?`);\n\n        return alias;\n    }\n\n    findColumnByAliasExpression(aliasExpression: string): ColumnMetadata|undefined {\n        const [aliasName, propertyPath] = aliasExpression.split(\".\");\n        const alias = this.findAliasByName(aliasName);\n        return alias.metadata.findColumnWithPropertyName(propertyPath);\n    }\n\n    /**\n     * Gets relation metadata of the relation this query builder works with.\n     *\n     * todo: add proper exceptions\n     */\n    get relationMetadata(): RelationMetadata {\n        if (!this.mainAlias)\n            throw new Error(`Entity to work with is not specified!`); // todo: better message\n\n        const relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n        if (!relationMetadata)\n            throw new Error(`Relation ${this.relationPropertyPath} was not found in entity ${this.mainAlias.name}`); // todo: better message\n\n        return relationMetadata;\n    }\n\n    /**\n     * Copies all properties of the current QueryExpressionMap into a new one.\n     * Useful when QueryBuilder needs to create a copy of itself.\n     */\n    clone(): QueryExpressionMap {\n        const map = new QueryExpressionMap(this.connection);\n        map.queryType = this.queryType;\n        map.selects = this.selects.map(select => select);\n        this.aliases.forEach(alias => map.aliases.push(new Alias(alias)));\n        map.mainAlias = this.mainAlias;\n        map.valuesSet = this.valuesSet;\n        map.returning = this.returning;\n        map.onConflict = this.onConflict;\n        map.onIgnore = this.onIgnore;\n        map.onUpdate = this.onUpdate;\n        map.joinAttributes = this.joinAttributes.map(join => new JoinAttribute(this.connection, this, join));\n        map.relationIdAttributes = this.relationIdAttributes.map(relationId => new RelationIdAttribute(this, relationId));\n        map.relationCountAttributes = this.relationCountAttributes.map(relationCount => new RelationCountAttribute(this, relationCount));\n        map.wheres = this.wheres.map(where => ({ ...where }));\n        map.havings = this.havings.map(having => ({ ...having }));\n        map.orderBys = Object.assign({}, this.orderBys);\n        map.groupBys = this.groupBys.map(groupBy => groupBy);\n        map.limit = this.limit;\n        map.offset = this.offset;\n        map.skip = this.skip;\n        map.take = this.take;\n        map.lockMode = this.lockMode;\n        map.lockVersion = this.lockVersion;\n        map.parameters = Object.assign({}, this.parameters);\n        map.disableEscaping = this.disableEscaping;\n        map.enableRelationIdValues = this.enableRelationIdValues;\n        map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n        map.subQuery = this.subQuery;\n        map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n        map.cache = this.cache;\n        map.cacheId = this.cacheId;\n        map.cacheDuration = this.cacheDuration;\n        map.relationPropertyPath = this.relationPropertyPath;\n        map.of = this.of;\n        map.insertColumns = this.insertColumns;\n        map.whereEntities = this.whereEntities;\n        map.updateEntity = this.updateEntity;\n        map.callListeners = this.callListeners;\n        map.useTransaction = this.useTransaction;\n        map.nativeParameters = this.nativeParameters;\n        return map;\n    }\n\n}\n"],"sourceRoot":".."}