UNPKG

20.7 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../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\"|\"dirty_read\";\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 = Object.assign({}, this.nativeParameters);\n return map;\n }\n\n}\n"],"sourceRoot":".."}
\No newline at end of file