skills/golang-bob/comparisons.md
Alex Dunmow 7bc233df1a feat(golang-bob): add Bob Go SQL toolkit reference skill
Reference skill for github.com/stephenafamo/bob (v0.46.0): query builder,
generated models/ORM, bobgen code generation, factories, and result scanning.
SKILL.md routes to per-subsystem reference files (query-builder, models,
code-generation, execution, comparisons). Symlinked into ~/.claude/skills and
~/.agents/skills (Codex).

Verified with a RED/GREEN subagent test and cross-checked against v0.46.0
source (flat mod import paths, AppendHooks, plural table var, WhereMod ops).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 20:51:55 +08:00

37 lines
2.6 KiB
Markdown

# Bob vs other Go SQL libraries
> These comparisons are distilled from Bob's own `vs/` docs, which are written by Bob's author.
> Treat the framing as informed but partial; the factual axes (codegen direction, migrations,
> dialect model) are accurate and what you'll usually decide on.
Bob's author also wrote **SQLBoiler**, and started Bob as "an experiment for how v5 of SQLBoiler
could look." Bob is effectively SQLBoiler's successor with a clean foundation.
| Tool | Kind | Schema direction | Migrations | Type safety | Notes |
|------|------|------------------|-----------|-------------|-------|
| **Bob** | Query builder + DB-first ORM | Database-first (introspect DB or `.sql`) | Not included (use your own) | Full, compile-time | Per-dialect mods → can't build invalid SQL; factories; incremental adoption |
| **GORM** | Code-first ORM | Code → DB | Auto-migrate built in | Low (lots of `interface{}`, magic strings → runtime panics) | Big ecosystem/plugins; weaker query builder; all-or-nothing adoption |
| **Ent** | Code-first ORM | Schema-as-Go-code → DB | Owns migrations (via Atlas) | Good | Mature ecosystem (gqlgen, gRPC); all-or-nothing; predicates less flexible than Bob for complex SQL |
| **SQLBoiler** | Query builder + DB-first ORM | Database-first | Not included | Good | Shares one query/mod type across all dialects → *can* assemble invalid queries; Bob is its descendant |
| **Jet** | Query builder only (explicitly not an ORM) | Database-first | Not included | Good | Similar build experience to Bob, but no relationship loading, no factories — every mapping is manual |
## How to choose
- **Want database-first + type safety + the ability to build any dialect-specific SQL, and you
manage migrations yourself** → Bob.
- **Want the schema defined in Go and the tool to own migrations** → Ent (typed) or GORM (looser).
- **Only ever write raw SQL and just want typed functions** → plain sqlc is simpler; Bob's Layer 4
does the same but pairs it with models/factories if you later want them.
- **Want just a query builder, no ORM** → Bob's Layer 1 or Jet. Bob adds an upgrade path to models.
## What Bob deliberately omits
- **Automatic `created_at` / `updated_at`.** Set these at the DB level (column defaults / triggers).
- **Soft deletes.** Left out on purpose — cascading soft-deletes through relationships have too many
edge cases. Implement explicitly if you need them.
## What Bob added over SQLBoiler
Cross-schema generation, preloading via `LEFT JOIN`s, multi-key relationships, has-one-through /
has-many-through, and context chaining through hooks.