Skip to content

Commit e395b32

Browse files
Ajit Pratap Singhclaude
authored andcommitted
feat(schema): live DB schema introspection for Postgres, MySQL, SQLite (#448)
Adds pkg/schema/db with Loader interface and DatabaseSchema/Table/Column/ Index/ForeignKey types for querying live database schema metadata. Dialect-specific implementations: - pkg/schema/postgres: information_schema + pg_catalog queries - pkg/schema/mysql: information_schema queries - pkg/schema/sqlite: PRAGMA commands (pure Go, no cgo) Also adds gosqlx.LoadSchema() top-level convenience wrapper and integration tests using testcontainers-go v0.32.0 for Postgres/MySQL. SQLite tests run without Docker and always pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent ba4e21d commit e395b32

13 files changed

Lines changed: 1553 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Added
11+
- **Live schema introspection** (`pkg/schema/db`): New `Loader` interface and `DatabaseSchema`/`Table`/`Column`/`Index`/`ForeignKey` types for querying live database metadata
12+
- **PostgreSQL schema loader** (`pkg/schema/postgres`): Introspects tables, columns (with primary/unique flags), indexes, and foreign keys via `information_schema` and `pg_catalog`
13+
- **MySQL schema loader** (`pkg/schema/mysql`): Introspects tables, columns, indexes, and foreign keys via `information_schema`
14+
- **SQLite schema loader** (`pkg/schema/sqlite`): Introspects tables, columns, indexes, and foreign keys via PRAGMA commands (pure Go, no cgo required)
15+
- **`gosqlx.LoadSchema()`** top-level convenience wrapper for dialect-agnostic schema loading
16+
- Integration tests using `testcontainers-go` v0.32.0 for PostgreSQL and MySQL loaders
1117
- **MariaDB dialect** (`--dialect mariadb`): New SQL dialect extending MySQL with support for SEQUENCE DDL (`CREATE/DROP/ALTER SEQUENCE` with full option set), temporal tables (`FOR SYSTEM_TIME`, `WITH SYSTEM VERSIONING`, `PERIOD FOR`), and `CONNECT BY` hierarchical queries with `PRIOR`, `START WITH`, and `NOCYCLE`
1218

1319
## [1.13.0] - 2026-03-20

go.mod

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,84 @@ go 1.26.1
44

55
require (
66
github.com/fsnotify/fsnotify v1.9.0
7+
github.com/go-sql-driver/mysql v1.8.0
8+
github.com/lib/pq v1.10.9
79
github.com/mark3labs/mcp-go v0.45.0
810
github.com/spf13/cobra v1.10.1
911
github.com/spf13/pflag v1.0.9
12+
github.com/testcontainers/testcontainers-go v0.32.0
1013
golang.org/x/term v0.20.0
1114
gopkg.in/yaml.v3 v3.0.1
15+
modernc.org/sqlite v1.30.1
1216
)
1317

1418
require (
19+
dario.cat/mergo v1.0.0 // indirect
20+
filippo.io/edwards25519 v1.1.0 // indirect
21+
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
22+
github.com/Microsoft/go-winio v0.6.2 // indirect
23+
github.com/Microsoft/hcsshim v0.11.5 // indirect
1524
github.com/bahlo/generic-list-go v0.2.0 // indirect
1625
github.com/buger/jsonparser v1.1.1 // indirect
26+
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
27+
github.com/containerd/containerd v1.7.18 // indirect
28+
github.com/containerd/errdefs v0.1.0 // indirect
29+
github.com/containerd/log v0.1.0 // indirect
30+
github.com/cpuguy83/dockercfg v0.3.1 // indirect
31+
github.com/distribution/reference v0.6.0 // indirect
32+
github.com/docker/docker v27.0.3+incompatible // indirect
33+
github.com/docker/go-connections v0.5.0 // indirect
34+
github.com/docker/go-units v0.5.0 // indirect
35+
github.com/dustin/go-humanize v1.0.1 // indirect
36+
github.com/felixge/httpsnoop v1.0.4 // indirect
37+
github.com/go-logr/logr v1.4.1 // indirect
38+
github.com/go-logr/stdr v1.2.2 // indirect
39+
github.com/go-ole/go-ole v1.2.6 // indirect
40+
github.com/gogo/protobuf v1.3.2 // indirect
41+
github.com/golang/protobuf v1.5.4 // indirect
1742
github.com/google/uuid v1.6.0 // indirect
43+
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
1844
github.com/inconshreveable/mousetrap v1.1.0 // indirect
1945
github.com/invopop/jsonschema v0.13.0 // indirect
46+
github.com/klauspost/compress v1.17.4 // indirect
47+
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
48+
github.com/magiconair/properties v1.8.7 // indirect
2049
github.com/mailru/easyjson v0.7.7 // indirect
50+
github.com/mattn/go-isatty v0.0.20 // indirect
51+
github.com/moby/docker-image-spec v1.3.1 // indirect
52+
github.com/moby/patternmatcher v0.6.0 // indirect
53+
github.com/moby/sys/sequential v0.5.0 // indirect
54+
github.com/moby/sys/user v0.1.0 // indirect
55+
github.com/moby/term v0.5.0 // indirect
56+
github.com/morikuni/aec v1.0.0 // indirect
57+
github.com/ncruces/go-strftime v0.1.9 // indirect
58+
github.com/opencontainers/go-digest v1.0.0 // indirect
59+
github.com/opencontainers/image-spec v1.1.0 // indirect
60+
github.com/pkg/errors v0.9.1 // indirect
61+
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
62+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
63+
github.com/shirou/gopsutil/v3 v3.23.12 // indirect
64+
github.com/shoenig/go-m1cpu v0.1.6 // indirect
65+
github.com/sirupsen/logrus v1.9.3 // indirect
2166
github.com/spf13/cast v1.7.1 // indirect
67+
github.com/tklauser/go-sysconf v0.3.12 // indirect
68+
github.com/tklauser/numcpus v0.6.1 // indirect
2269
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
2370
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
71+
github.com/yusufpapurcu/wmi v1.2.3 // indirect
72+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
73+
go.opentelemetry.io/otel v1.24.0 // indirect
74+
go.opentelemetry.io/otel/metric v1.24.0 // indirect
75+
go.opentelemetry.io/otel/trace v1.24.0 // indirect
76+
golang.org/x/crypto v0.22.0 // indirect
2477
golang.org/x/sys v0.20.0 // indirect
78+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
79+
google.golang.org/grpc v1.59.0 // indirect
80+
google.golang.org/protobuf v1.33.0 // indirect
81+
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
82+
modernc.org/libc v1.52.1 // indirect
83+
modernc.org/mathutil v1.6.0 // indirect
84+
modernc.org/memory v1.8.0 // indirect
85+
modernc.org/strutil v1.2.0 // indirect
86+
modernc.org/token v1.1.0 // indirect
2587
)

0 commit comments

Comments
 (0)