# hrabe/odbc-on-macos architecture

> Architecture diagram of the GitHub repository hrabe/odbc-on-macos, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hrabe/odbc-on-macos
- Repository: https://github.com/hrabe/odbc-on-macos

## Overview

This repository automates configuring macOS ODBC drivers and testing them against database servers, with manual setup guides as an alternative. The documented workflow uses setup.yml to define database-specific settings, then install tasks prepare Docker containers and ODBC drivers; start/stop tasks manage containers, and test tasks attempt connections with isql. The sampled helpers show configuration loading, driver/DSN registration, and optional binary installation paths. The Rake task implementation and several subsystems were not sampled, so those links rely on README statements; the database-specific manual guides are represented without inferring their internals.

Main entry points: [`Rakefile`](https://github.com/hrabe/odbc-on-macos/blob/master/Rakefile) (Rake tasks), [`rakelib/helper/odbc_binaries.rb`](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_binaries.rb) (Binary installer), [`setup.yml`](https://github.com/hrabe/odbc-on-macos/blob/master/setup.yml) (Setup workbook), [`rakelib/helper/odbc.rb`](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc.rb) (ODBC config helpers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Setup workflow"]
  node_rake_tasks["Rake tasks"]
  node_workbook["Setup workbook<br/>[setup.yml]"]
  node_setup_loader["Workbook loader<br/>[setup.rb]"]
  node_connection_test["Connection test"]
end

subgraph group_containers["Database containers"]
  node_docker_lifecycle["Container lifecycle<br/>[docker.rb]"]
  node_docker_service["Docker"]
  node_db_servers[("Database servers")]
end

subgraph group_odbc["ODBC configuration"]
  node_odbc_core["ODBC config helpers<br/>[odbc.rb]"]
  node_driver_registration["Driver registration<br/>[odbc_driver.rb]"]
  node_dsn_registration["DSN registration<br/>[odbc_dsn.rb]"]
  node_freetds_config["FreeTDS config<br/>[odbc_freetds.rb]"]
  node_db2_config["DB2 CLI config<br/>[odbc_db2cli.rb]"]
  node_unixodbc["unixODBC tools"]
end

subgraph group_drivers["Driver installation"]
  node_binary_installer["Binary installer<br/>[odbc_binaries.rb]"]
  node_driver_sources["Driver sources"]
  node_driver_builds["Driver build scripts"]
end

subgraph group_guides["Manual guides"]
  node_manual_guides["Vendor setup guides"]
end

node_operator(("Operator"))

node_operator -->|"runs tasks"| node_rake_tasks
node_rake_tasks -->|"uses configuration"| node_workbook
node_rake_tasks -->|"manages containers"| node_docker_lifecycle
node_rake_tasks -->|"installs drivers"| node_binary_installer
node_rake_tasks -.->|"registers drivers"| node_driver_registration
node_rake_tasks -.->|"registers DSNs"| node_dsn_registration
node_rake_tasks -.->|"configures FreeTDS"| node_freetds_config
node_rake_tasks -.->|"configures DB2"| node_db2_config
node_rake_tasks -->|"runs tests"| node_connection_test
node_connection_test -->|"tests with isql"| node_unixodbc
node_docker_lifecycle -->|"runs commands"| node_docker_service
node_docker_service -->|"hosts containers"| node_db_servers
node_docker_lifecycle -->|"reads settings"| node_workbook
node_setup_loader -->|"loads YAML"| node_workbook
node_driver_registration -->|"formats entries"| node_odbc_core
node_dsn_registration -->|"formats entries"| node_odbc_core
node_freetds_config -->|"formats entries"| node_odbc_core
node_db2_config -->|"formats entries"| node_odbc_core
node_driver_registration -->|"registers driver"| node_unixodbc
node_dsn_registration -->|"registers DSN"| node_unixodbc
node_freetds_config -->|"registers DSN"| node_unixodbc
node_binary_installer -->|"reads install options"| node_workbook
node_binary_installer -->|"unpacks sources"| node_driver_sources
node_binary_installer -->|"runs build script"| node_driver_builds
node_operator -->|"follows guides"| node_manual_guides

click node_rake_tasks "https://github.com/hrabe/odbc-on-macos/blob/master/Rakefile"
click node_workbook "https://github.com/hrabe/odbc-on-macos/blob/master/setup.yml"
click node_setup_loader "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/setup.rb"
click node_connection_test "https://github.com/hrabe/odbc-on-macos/blob/master/Rakefile"
click node_docker_lifecycle "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/docker.rb"
click node_odbc_core "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc.rb"
click node_driver_registration "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_driver.rb"
click node_dsn_registration "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_dsn.rb"
click node_freetds_config "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_freetds.rb"
click node_db2_config "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_db2cli.rb"
click node_binary_installer "https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_binaries.rb"
click node_driver_sources "https://github.com/hrabe/odbc-on-macos/tree/master/binaries/source"
click node_driver_builds "https://github.com/hrabe/odbc-on-macos/tree/master/binaries/build"
click node_manual_guides "https://github.com/hrabe/odbc-on-macos/tree/master/docs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rake_tasks,node_workbook,node_setup_loader,node_connection_test toneBlue
class node_docker_lifecycle,node_docker_service,node_db_servers toneAmber
class node_odbc_core,node_driver_registration,node_dsn_registration,node_freetds_config,node_db2_config,node_unixodbc toneMint
class node_binary_installer,node_driver_sources,node_driver_builds toneRose
class node_manual_guides,node_operator toneIndigo
```

## Components

### Setup workflow

- [Rake tasks](https://github.com/hrabe/odbc-on-macos/blob/master/Rakefile): `Rakefile`
- [Setup workbook](https://github.com/hrabe/odbc-on-macos/blob/master/setup.yml): `setup.yml`
- [Workbook loader](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/setup.rb): `rakelib/helper/setup.rb`
- [Connection test](https://github.com/hrabe/odbc-on-macos/blob/master/Rakefile): `Rakefile`

### Database containers

- [Container lifecycle](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/docker.rb): `rakelib/helper/docker.rb`
- **Docker**
- **Database servers**

### ODBC configuration

- [ODBC config helpers](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc.rb): `rakelib/helper/odbc.rb`
- [Driver registration](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_driver.rb): `rakelib/helper/odbc_driver.rb`
- [DSN registration](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_dsn.rb): `rakelib/helper/odbc_dsn.rb`
- [FreeTDS config](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_freetds.rb): `rakelib/helper/odbc_freetds.rb`
- [DB2 CLI config](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_db2cli.rb): `rakelib/helper/odbc_db2cli.rb`
- **unixODBC tools**

### Driver installation

- [Binary installer](https://github.com/hrabe/odbc-on-macos/blob/master/rakelib/helper/odbc_binaries.rb): `rakelib/helper/odbc_binaries.rb`
- [Driver sources](https://github.com/hrabe/odbc-on-macos/tree/master/binaries/source): `binaries/source`
- [Driver build scripts](https://github.com/hrabe/odbc-on-macos/tree/master/binaries/build): `binaries/build`

### Manual guides

- [Vendor setup guides](https://github.com/hrabe/odbc-on-macos/tree/master/docs): `docs`

### Other components

- **Operator**

## Connections

- Operator → Rake tasks: runs tasks (evidence: `README.md`)
- Rake tasks → Setup workbook: uses configuration (evidence: `README.md`)
- Rake tasks → Container lifecycle: manages containers (evidence: `README.md`)
- Rake tasks → Binary installer: installs drivers (evidence: `README.md`)
- Rake tasks → Driver registration: registers drivers
- Rake tasks → DSN registration: registers DSNs
- Rake tasks → FreeTDS config: configures FreeTDS
- Rake tasks → DB2 CLI config: configures DB2
- Rake tasks → Connection test: runs tests (evidence: `README.md`)
- Connection test → unixODBC tools: tests with isql (evidence: `README.md`)
- Container lifecycle → Docker: runs commands (evidence: `rakelib/helper/docker.rb`)
- Docker → Database servers: hosts containers (evidence: `README.md`)
- Container lifecycle → Setup workbook: reads settings (evidence: `rakelib/helper/docker.rb`)
- Workbook loader → Setup workbook: loads YAML (evidence: `rakelib/helper/setup.rb`)
- Driver registration → ODBC config helpers: formats entries (evidence: `rakelib/helper/odbc_driver.rb`)
- DSN registration → ODBC config helpers: formats entries (evidence: `rakelib/helper/odbc_dsn.rb`)
- FreeTDS config → ODBC config helpers: formats entries (evidence: `rakelib/helper/odbc_freetds.rb`)
- DB2 CLI config → ODBC config helpers: formats entries (evidence: `rakelib/helper/odbc_db2cli.rb`)
- Driver registration → unixODBC tools: registers driver (evidence: `rakelib/helper/odbc_driver.rb`)
- DSN registration → unixODBC tools: registers DSN (evidence: `rakelib/helper/odbc_dsn.rb`)
- FreeTDS config → unixODBC tools: registers DSN (evidence: `rakelib/helper/odbc_freetds.rb`)
- Binary installer → Setup workbook: reads install options (evidence: `rakelib/helper/odbc_binaries.rb`)
- Binary installer → Driver sources: unpacks sources (evidence: `rakelib/helper/odbc_binaries.rb`)
- Binary installer → Driver build scripts: runs build script (evidence: `rakelib/helper/odbc_binaries.rb`)
- Operator → Vendor setup guides: follows guides (evidence: `README.md`)
