import {EntityMetadata} from "./EntityMetadata"; import {NamingStrategyInterface} from "../naming-strategy/NamingStrategyInterface"; import {CheckMetadataArgs} from "../metadata-args/CheckMetadataArgs"; /** * Check metadata contains all information about table's check constraints. */ export class CheckMetadata { // --------------------------------------------------------------------- // Public Properties // --------------------------------------------------------------------- /** * Entity metadata of the class to which this check constraint is applied. */ entityMetadata: EntityMetadata; /** * Target class to which metadata is applied. */ target?: Function|string; /** * Check expression. */ expression: string; /** * User specified check constraint name. */ givenName?: string; /** * Final check constraint name. * If check constraint name was given by a user then it stores normalized (by naming strategy) givenName. * If check constraint name was not given then its generated. */ name: string; // --------------------------------------------------------------------- // Constructor // --------------------------------------------------------------------- constructor(options: { entityMetadata: EntityMetadata, args?: CheckMetadataArgs }) { this.entityMetadata = options.entityMetadata; if (options.args) { this.target = options.args.target; this.expression = options.args.expression; this.givenName = options.args.name; } } // --------------------------------------------------------------------- // Public Build Methods // --------------------------------------------------------------------- /** * Builds some depend check constraint properties. * Must be called after all entity metadata's properties map, columns and relations are built. */ build(namingStrategy: NamingStrategyInterface): this { this.name = this.givenName ? this.givenName : namingStrategy.checkConstraintName(this.entityMetadata.tablePath, this.expression); return this; } }