# bg12345/gorm-dbobjects architecture

> Architecture diagram of the GitHub repository bg12345/gorm-dbobjects, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bg12345/gorm-dbobjects
- Repository: https://github.com/bg12345/gorm-dbobjects

## Overview

gorm-dbobjects lets Go applications define triggers, views, and stored procedures as dialect-agnostic builders, then render or apply their DDL through a Client backed by GORM. The main workflow is builder → Client → connection-selected dialect → rendered DDL, with registration executing statements and handling rollback according to DDL transaction support. Builder validation uses GORM schema metadata; views also render GORM query callbacks. The excerpts show the central orchestration and dialect layer, but not every dialect implementation detail.

Main entry points: [`dbobjects.go`](https://github.com/bg12345/gorm-dbobjects/blob/main/dbobjects.go) (Client), [`dialect.go`](https://github.com/bg12345/gorm-dbobjects/blob/main/dialect.go) (DDL rendering), [`trigger/trigger.go`](https://github.com/bg12345/gorm-dbobjects/blob/main/trigger/trigger.go) (Trigger builder), [`procedure/procedure.go`](https://github.com/bg12345/gorm-dbobjects/blob/main/procedure/procedure.go) (Procedure builder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_definitions["Object builders"]
  node_trigger["Trigger builder<br/>[trigger.go]"]
  node_view["View builder<br/>[view.go]"]
  node_procedure["Procedure builder<br/>[procedure.go]"]
end

subgraph group_runtime["Client runtime"]
  node_client["Client<br/>[dbobjects.go]"]
  node_rollback["Compensating cleanup<br/>[dbobjects.go]"]
end

subgraph group_dialects["Dialect rendering"]
  node_dialect["Dialect dispatch<br/>[dialect.go]"]
  node_render["DDL rendering<br/>[dialect.go]"]
end

node_app(("Go application"))
node_gormschema["GORM schema"]
node_gorm["GORM connection"]
node_database[("SQL database")]
node_externaltool(("Schema tool"))

node_app -->|"builds trigger"| node_trigger
node_app -->|"builds view"| node_view
node_app -->|"builds procedure"| node_procedure
node_trigger -->|"validates fields"| node_gormschema
node_procedure -->|"derives types"| node_gormschema
node_app -->|"registers or renders"| node_client
node_client -->|"resolves engine"| node_dialect
node_client -->|"uses connection"| node_gorm
node_dialect -->|"selects renderer"| node_render
node_render -->|"renders query callback"| node_view
node_render -->|"produces DDL for"| node_database
node_client -->|"executes DDL"| node_database
node_client -->|"cleans partial batch"| node_rollback
node_rollback -->|"drops applied objects"| node_database
node_app -.->|"supplies rendered DDL"| node_externaltool
node_client -.->|"renders DDL"| node_externaltool

click node_trigger "https://github.com/bg12345/gorm-dbobjects/blob/main/trigger/trigger.go"
click node_view "https://github.com/bg12345/gorm-dbobjects/blob/main/view/view.go"
click node_procedure "https://github.com/bg12345/gorm-dbobjects/blob/main/procedure/procedure.go"
click node_client "https://github.com/bg12345/gorm-dbobjects/blob/main/dbobjects.go"
click node_dialect "https://github.com/bg12345/gorm-dbobjects/blob/main/dialect.go"
click node_render "https://github.com/bg12345/gorm-dbobjects/blob/main/dialect.go"
click node_rollback "https://github.com/bg12345/gorm-dbobjects/blob/main/dbobjects.go"

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_trigger,node_view,node_procedure toneBlue
class node_client,node_rollback,node_database toneAmber
class node_dialect,node_render toneMint
class node_app,node_gormschema,node_gorm,node_externaltool toneIndigo
```

## Components

### Object builders

- [Trigger builder](https://github.com/bg12345/gorm-dbobjects/blob/main/trigger/trigger.go): `trigger/trigger.go`
- [View builder](https://github.com/bg12345/gorm-dbobjects/blob/main/view/view.go): `view/view.go`
- [Procedure builder](https://github.com/bg12345/gorm-dbobjects/blob/main/procedure/procedure.go): `procedure/procedure.go`

### Client runtime

- [Client](https://github.com/bg12345/gorm-dbobjects/blob/main/dbobjects.go): `dbobjects.go`
- [Compensating cleanup](https://github.com/bg12345/gorm-dbobjects/blob/main/dbobjects.go): `dbobjects.go`

### Dialect rendering

- [Dialect dispatch](https://github.com/bg12345/gorm-dbobjects/blob/main/dialect.go): `dialect.go`
- [DDL rendering](https://github.com/bg12345/gorm-dbobjects/blob/main/dialect.go): `dialect.go`

### Other components

- **Go application**
- **GORM schema**
- **GORM connection**
- **SQL database**
- **Schema tool**

## Connections

- Go application → Trigger builder: builds trigger
- Go application → View builder: builds view
- Go application → Procedure builder: builds procedure
- Trigger builder → GORM schema: validates fields
- Procedure builder → GORM schema: derives types
- Go application → Client: registers or renders
- Client → Dialect dispatch: resolves engine
- Client → GORM connection: uses connection
- Dialect dispatch → DDL rendering: selects renderer
- DDL rendering → View builder: renders query callback
- DDL rendering → SQL database: produces DDL for
- Client → SQL database: executes DDL
- Client → Compensating cleanup: cleans partial batch
- Compensating cleanup → SQL database: drops applied objects
- Go application → Schema tool: supplies rendered DDL
- Client → Schema tool: renders DDL
