chore: group database diagram tables by module
This commit is contained in:
@@ -201,9 +201,53 @@ dot_label_escape() {
|
|||||||
printf '%s' "$value"
|
printf '%s' "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table_module() {
|
||||||
|
local table_name="${1#public.}"
|
||||||
|
|
||||||
|
case "$table_name" in
|
||||||
|
AspNet*) printf 'Identity' ;;
|
||||||
|
OrganizationMemberships | Organizations) printf 'Organizations' ;;
|
||||||
|
Workspaces | WorkspaceInvites) printf 'Workspaces' ;;
|
||||||
|
Clients) printf 'Clients' ;;
|
||||||
|
Campaigns) printf 'Campaigns' ;;
|
||||||
|
Channels) printf 'Channels' ;;
|
||||||
|
ContentItems | ContentItemRevisions | ContentItemActivityEntries) printf 'ContentItems' ;;
|
||||||
|
Assets | AssetRevisions) printf 'Assets' ;;
|
||||||
|
Comments) printf 'Comments' ;;
|
||||||
|
ApprovalDecisions | ApprovalRequests | ApprovalWorkflowInstances | WorkspaceApprovalStepConfigurations) printf 'Approvals' ;;
|
||||||
|
NotificationEvents) printf 'Notifications' ;;
|
||||||
|
Feedback*) printf 'Feedback' ;;
|
||||||
|
CalendarCatalogEntries | CalendarEvents | CalendarSources | UserCalendarExportFeeds) printf 'CalendarIntegrations' ;;
|
||||||
|
*) printf 'Other' ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster_id() {
|
||||||
|
local value="$1"
|
||||||
|
value="${value//[^[:alnum:]]/_}"
|
||||||
|
printf 'cluster_%s' "$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
write_table_node() {
|
||||||
|
local table_name="$1"
|
||||||
|
local id title
|
||||||
|
|
||||||
|
id="$(node_id "$table_name")"
|
||||||
|
title="$(html_escape "${table_name#public.}")"
|
||||||
|
printf ' %s [label=<\n' "$id"
|
||||||
|
printf ' <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0" CELLPADDING="6" COLOR="#94a3b8">\n'
|
||||||
|
printf ' <TR><TD BGCOLOR="#0f766e" COLSPAN="3"><FONT COLOR="white"><B>%s</B></FONT></TD></TR>\n' "$title"
|
||||||
|
printf '%s' "${TABLE_COLUMNS[$table_name]}"
|
||||||
|
printf ' </TABLE>\n'
|
||||||
|
printf ' >];\n\n'
|
||||||
|
}
|
||||||
|
|
||||||
declare -A TABLE_COLUMNS
|
declare -A TABLE_COLUMNS
|
||||||
declare -A TABLE_SEEN
|
declare -A TABLE_SEEN
|
||||||
|
declare -A MODULE_SEEN
|
||||||
|
declare -A MODULE_TABLES
|
||||||
declare -a TABLE_ORDER
|
declare -a TABLE_ORDER
|
||||||
|
declare -a MODULE_ORDER
|
||||||
|
|
||||||
while IFS=$'\t' read -r table_name column_name column_type nullable column_markers; do
|
while IFS=$'\t' read -r table_name column_name column_type nullable column_markers; do
|
||||||
[[ -n "$table_name" ]] || continue
|
[[ -n "$table_name" ]] || continue
|
||||||
@@ -211,6 +255,12 @@ while IFS=$'\t' read -r table_name column_name column_type nullable column_marke
|
|||||||
if [[ -z "${TABLE_SEEN[$table_name]:-}" ]]; then
|
if [[ -z "${TABLE_SEEN[$table_name]:-}" ]]; then
|
||||||
TABLE_SEEN["$table_name"]=1
|
TABLE_SEEN["$table_name"]=1
|
||||||
TABLE_ORDER+=("$table_name")
|
TABLE_ORDER+=("$table_name")
|
||||||
|
module_name="$(table_module "$table_name")"
|
||||||
|
if [[ -z "${MODULE_SEEN[$module_name]:-}" ]]; then
|
||||||
|
MODULE_SEEN["$module_name"]=1
|
||||||
|
MODULE_ORDER+=("$module_name")
|
||||||
|
fi
|
||||||
|
MODULE_TABLES["$module_name"]+="${table_name}"$'\n'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
label="$(html_escape "$column_name")"
|
label="$(html_escape "$column_name")"
|
||||||
@@ -267,15 +317,25 @@ digraph database {
|
|||||||
|
|
||||||
DOT
|
DOT
|
||||||
|
|
||||||
for table_name in "${TABLE_ORDER[@]}"; do
|
for module_name in "${MODULE_ORDER[@]}"; do
|
||||||
id="$(node_id "$table_name")"
|
id="$(cluster_id "$module_name")"
|
||||||
title="$(html_escape "${table_name#public.}")"
|
label="$(html_escape "$module_name")"
|
||||||
printf ' %s [label=<\n' "$id"
|
printf ' subgraph %s {\n' "$id"
|
||||||
printf ' <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0" CELLPADDING="6" COLOR="#94a3b8">\n'
|
printf ' label=< <B>%s</B> >;\n' "$label"
|
||||||
printf ' <TR><TD BGCOLOR="#0f766e" COLSPAN="3"><FONT COLOR="white"><B>%s</B></FONT></TD></TR>\n' "$title"
|
printf ' color="#cbd5e1";\n'
|
||||||
printf '%s' "${TABLE_COLUMNS[$table_name]}"
|
printf ' penwidth=1.5;\n'
|
||||||
printf ' </TABLE>\n'
|
printf ' style="rounded";\n'
|
||||||
printf ' >];\n\n'
|
printf ' margin=18;\n'
|
||||||
|
printf ' fontname="Arial";\n'
|
||||||
|
printf ' fontsize=16;\n'
|
||||||
|
printf ' fontcolor="#334155";\n\n'
|
||||||
|
|
||||||
|
while IFS= read -r table_name; do
|
||||||
|
[[ -n "$table_name" ]] || continue
|
||||||
|
write_table_node "$table_name"
|
||||||
|
done <<< "${MODULE_TABLES[$module_name]}"
|
||||||
|
|
||||||
|
printf ' }\n\n'
|
||||||
done
|
done
|
||||||
|
|
||||||
while IFS=$'\t' read -r constraint_name child_table child_column parent_table parent_column nullable child_column_is_unique; do
|
while IFS=$'\t' read -r constraint_name child_table child_column parent_table parent_column nullable child_column_is_unique; do
|
||||||
|
|||||||
Reference in New Issue
Block a user