Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ export interface MermaidDiagramHighlight {

const ADDED_CLASS_NAME = 'addedEntity';
const ADDED_CLASS_DEF = ` classDef ${ADDED_CLASS_NAME} fill:#d4edda,stroke:#28a745,color:#155724`;
const ADDED_COLUMN_MARKER = 'NEW';
const ADDED_FK_MARKER = '[NEW]';
const ADDED_MARKER = '[NEW]';

Comment on lines 23 to 26
export function buildMermaidErDiagram(
databaseName: string | null,
Expand Down Expand Up @@ -60,12 +59,12 @@ export function buildMermaidErDiagram(
for (const column of table.structure) {
const dataType = toAttributeWord(column.data_type || column.udt_name || 'unknown');
const colName = toAttributeWord(column.column_name);
const markers: Array<string> = [];
if (pkColumnNames.has(column.column_name)) markers.push('PK');
if (fkColumnNames.has(column.column_name)) markers.push('FK');
if (tableAddedCols.has(normalizeIdent(column.column_name))) markers.push(ADDED_COLUMN_MARKER);
const comment = buildColumnComment(column);
const tail = [markers.join(','), comment].filter((p) => p && p.length > 0).join(' ');
const keyMarkers: Array<string> = [];
if (pkColumnNames.has(column.column_name)) keyMarkers.push('PK');
if (fkColumnNames.has(column.column_name)) keyMarkers.push('FK');
const isAdded = tableAddedCols.has(normalizeIdent(column.column_name));
const comment = buildColumnComment(column, isAdded);
const tail = [keyMarkers.join(','), comment].filter((p) => p && p.length > 0).join(' ');
Comment on lines +62 to +67
lines.push(` ${dataType} ${colName}${tail ? ' ' + tail : ''}`);
}
}
Expand All @@ -80,7 +79,7 @@ export function buildMermaidErDiagram(
const targetAlias = aliasByTable.get(fk.referenced_table_name);
if (!targetAlias) continue;
const isAdded = tableAddedFks.has(fkKey(fk));
const labelText = `${sanitizeQuotedText(fk.column_name)} -> ${sanitizeQuotedText(fk.referenced_column_name)}${isAdded ? ' ' + ADDED_FK_MARKER : ''}`;
const labelText = `${sanitizeQuotedText(fk.column_name)} -> ${sanitizeQuotedText(fk.referenced_column_name)}${isAdded ? ' ' + ADDED_MARKER : ''}`;
lines.push(` ${sourceAlias} }o--|| ${targetAlias} : "${labelText}"`);
Comment on lines 81 to 83
relationshipCount++;
}
Expand Down Expand Up @@ -154,7 +153,7 @@ function pluralize(n: number, singular: string, plural: string): string {
return n === 1 ? singular : plural;
}

function buildColumnComment(column: TableStructureDS): string {
function buildColumnComment(column: TableStructureDS, isAdded: boolean): string {
const parts: Array<string> = [];
if (column.column_default !== null && column.column_default !== undefined && column.column_default !== '') {
parts.push(`default: ${String(column.column_default)}`);
Expand All @@ -163,6 +162,9 @@ function buildColumnComment(column: TableStructureDS): string {
if (column.character_maximum_length) {
parts.push(`max length: ${column.character_maximum_length}`);
}
if (isAdded) {
parts.push(ADDED_MARKER);
}
Comment on lines 156 to +167
const text = parts.join('; ');
return text ? `"${sanitizeQuotedText(text)}"` : '';
}
Expand Down
Loading