import { BaseSmartTags, PgColumn, PgFkColumn, PgTable, PgType, } from '../../abstractions'; import { buildName } from '../pg-sql-gen-utils'; export class FkColumn implements PgFkColumn { name: string; readonly table: PgTable; readonly type: PgType; readonly referencedPk: PgColumn; readonly targetPk: PgColumn; readonly fkName: string; /** * Constructor for FkColumn. * @param targetPk - PK to the 'target' table. * @param table - Reference to the parent table. */ constructor(targetPk: PgColumn, table: PgTable) { this.targetPk = targetPk; this.name = buildName(targetPk.table.name, targetPk.name); this.table = table; this.fkName = buildName(table.name, this.name, 'fkey'); this.type = targetPk.type; this.referencedPk = targetPk; } buildSmartTags(): BaseSmartTags { return {}; } buildExpression(): string { return `${this.name} ${this.type} REFERENCES ${this.referencedPk.table.name} ON DELETE CASCADE`; } buildAdditionalStatements(): string[] { return [`CREATE INDEX ON ${this.table.buildFullName()} (${this.name})`]; } }