UNPKG

11.9 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/query-builder/JoinAttribute.ts"],"names":[],"mappings":"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","file":"JoinAttribute.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {QueryBuilderUtils} from \"./QueryBuilderUtils\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {Alias} from \"./Alias\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\n\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nexport class JoinAttribute {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Join direction.\n */\n direction: \"LEFT\"|\"INNER\";\n\n /**\n * Alias of the joined (destination) table.\n */\n alias: Alias;\n\n /**\n * Joined table, entity target, or relation in \"post.category\" format.\n */\n entityOrProperty: Function|string;\n\n /**\n * Extra condition applied to \"ON\" section of join.\n */\n condition?: string;\n\n /**\n * Property + alias of the object where to joined data should be mapped.\n */\n mapToProperty?: string;\n\n /**\n * Indicates if user maps one or many objects from the join.\n */\n isMappingMany?: boolean;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: Connection,\n private queryExpressionMap: QueryExpressionMap,\n joinAttribute?: JoinAttribute) {\n ObjectUtils.assign(this, joinAttribute || {});\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n get isMany(): boolean {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n\n return false;\n }\n\n \n isSelectedCache: boolean;\n isSelectedEvalueated: boolean = false;\n /**\n * Indicates if this join is selected.\n */\n get isSelected(): boolean {\n if (!this.isSelectedEvalueated) {\n let getValue = () => {\n for (const select of this.queryExpressionMap.selects) {\n if (select.selection === this.alias.name)\n return true;\n\n if (this.metadata && !!this.metadata.columns.find(column => select.selection === this.alias.name + \".\" + column.propertyPath))\n return true;\n }\n\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvalueated = true;\n }\n return this.isSelectedCache;\n\n }\n\n /**\n * Name of the table which we should join.\n */\n get tablePath(): string {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty as string;\n }\n\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get parentAlias(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n }\n\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get relationPropertyPath(): string|undefined {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n }\n\n relationCache: RelationMetadata|undefined;\n relationEvalueated: boolean = false;\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get relation(): RelationMetadata | undefined {\n if (!this.relationEvalueated) {\n let getValue = () => {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n\n const relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias!);\n let relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n\n if (relation) {\n return relation;\n }\n\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(this.relationPropertyPath!);\n if (relation) {\n return relation;\n }\n }\n\n throw new Error(`Relation with property path ${this.relationPropertyPath} in entity was not found.`);\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvalueated = true;\n }\n return this.relationCache;\n }\n\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get metadata(): EntityMetadata|undefined {\n\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n\n return undefined;\n\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n\n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n\n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n }\n\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get junctionAlias(): string {\n if (!this.relation)\n throw new Error(`Cannot get junction table for join without relation.`);\n\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n }\n\n get mapToPropertyParentAlias(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[0];\n }\n\n get mapToPropertyPropertyName(): string|undefined {\n if (!this.mapToProperty)\n return undefined;\n\n return this.mapToProperty!.split(\".\")[1];\n }\n\n}"],"sourceRoot":".."}
\No newline at end of file