Skip to content

Commit de4fb82

Browse files
Ajit Pratap Singhclaude
authored andcommitted
docs: add Q2 2026 roadmap design spec from multi-persona audit
Full-project audit using 5 parallel analytical personas (Performance, SQL Compatibility, API/DX, Competitive, Community). Synthesizes into prioritized P0–P3 roadmap covering: HN launch, query fingerprinting, linter expansion to 30 rules, DML transforms, C binding hardening, live DB schema introspection, SQL transpilation, CONNECT BY, OTel, GORM integration, and advisor expansion. Corresponding GitHub issues: #442#460 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent ba4e21d commit de4fb82

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# GoSQLX Roadmap — Q2 2026
2+
3+
**Date:** 2026-03-29 | **Current Version:** v1.13.0 | **Stars:** 73 | **Status:** Production-Ready
4+
5+
> This spec is the output of a full-project audit using 5 parallel analytical personas:
6+
> Performance/Internals, SQL Compatibility, API/DX, Competitive/Ecosystem, Community/Growth.
7+
> Each roadmap item maps to findings from one or more personas.
8+
9+
---
10+
11+
## Executive Summary
12+
13+
GoSQLX is the **only actively maintained, pure-Go, multi-dialect SQL parsing SDK** — technically superior to all Go alternatives but dramatically under-discovered. The codebase is production-grade with excellent architecture, 1.38M ops/sec, 8 dialects, and a full-stack SDK (parser + formatter + linter + security + LSP + MCP + CLI + WASM). The gaps are:
14+
15+
1. **Discovery**: 73 stars; the dev.to article and MCP story have never been distributed to HN/r/golang
16+
2. **Feature breadth**: Query fingerprinting, SQL transpilation, and live DB schema introspection are market gaps no Go library fills
17+
3. **Linter depth**: 10 rules vs. 200+ in Bytebase; this is the enterprise adoption gap
18+
4. **Integration bridges**: No ORM hooks, no OpenTelemetry, no GORM/sqlc integration examples
19+
5. **Internal hardening**: C binding at 18% coverage, transform missing DML rewrites, advisor at 8 rules
20+
21+
---
22+
23+
## Roadmap Priorities
24+
25+
### P0 — Must Do (Immediate, Unblocking)
26+
27+
| ID | Title | Source | Rationale |
28+
|----|-------|--------|-----------|
29+
| P0-1 | HN + r/golang launch — submit dev.to article | Community | 595 unique cloners but only 113 viewers → top-of-funnel problem. Article exists, never distributed. Single highest-ROI action. |
30+
| P0-2 | golangweekly.com newsletter submission | Community | ~50K Go devs, zero current GoSQLX presence. 15 minutes of effort. |
31+
| P0-3 | OpenSSF Scorecard badge + assessment | Community | Security tooling (SQL injection scanner) without security posture badge is a trust gap for enterprise evaluators. |
32+
| P0-4 | Fix Sentry issues #437 and #434 | Bugs | Two open Sentry-auto-generated bugs on the website: hydration error (replay) + pushState TypeError. These are visible to all users. |
33+
34+
### P1 — High Impact (Next 2–4 Weeks)
35+
36+
| ID | Title | Source | Rationale |
37+
|----|-------|--------|-----------|
38+
| P1-1 | Query Fingerprinting & Normalization API | Competitive | `pg_query_go` owns this use case today. Text-to-SQL/LLM SQL validation pipelines need `Fingerprint()` + `Normalize()` (replace literals with `?`). This is the #1 feature gap vs pg_query_go and positions GoSQLX for the exploding NL2SQL market. |
39+
| P1-2 | Expand Linter to 30 Rules (from 10) | Competitive/DX | Bytebase has 200+; SQLFluff is popular primarily because of linting. 30 rules is the threshold for CI pipeline adoption. Target: naming conventions, dangerous operations (DROP without WHERE, DELETE without WHERE), missing indexes, SELECT *, N+1 patterns. |
40+
| P1-3 | DML Transform API — UPDATE/DELETE rewrites | Internals | Transform package only handles SELECT. `UpdateSetClause`, `ReplaceSetClause`, `RemoveWhere` for DELETE, `AddWhere` for UPDATE/DELETE are needed to complete programmatic SQL generation. 30% of typical app SQL is DML mutations. |
41+
| P1-4 | Harden C Binding to 90%+ coverage | Internals | 18% coverage blocks production deployment for Python/Ruby/Node consumers. Need stress tests, error path coverage, Python ctypes concurrency tests. |
42+
| P1-5 | Live Database Schema Introspection | DX | `pkg/schema/loader/postgres.go` + `mysql.go` — introspect running DB for schema-aware validation. This is the #1 DX gap; users currently must manually maintain YAML schema. |
43+
44+
### P2 — Medium Impact (4–8 Weeks)
45+
46+
| ID | Title | Source | Rationale |
47+
|----|-------|--------|-----------|
48+
| P2-1 | SQL Transpilation API — `gosqlx.Transpile()` | Competitive | MySQL→PostgreSQL, PostgreSQL→Snowflake dialect conversion. Zero Go competitors. Python sqlglot (14k stars) owns this. Would be the biggest unique capability addition. Start with 2–3 high-demand pairs. |
49+
| P2-2 | Oracle CONNECT BY / Hierarchical Queries | SQL Compat | Keywords reserved since v1.9.0. Oracle and MariaDB compatibility blocks. Planned for v1.14.0. AST structure designed. |
50+
| P2-3 | OpenTelemetry Integration | DX | `pkg/integration/otel/tracer.go` — trace parse duration, statement count, dialect. Required for production observability in microservices. |
51+
| P2-4 | GORM Hooks + database/sql Integration | DX | Pre-query validation middleware for the dominant Go ORM. Tutorial + package. Captures the GORM user base (~39k stars). |
52+
| P2-5 | Advisor Rules Expansion (8 → 20 rules) | Internals | Add: implicit type conversions, N+1 detection, join order hints, unused aliases, OR-to-IN conversion, NOT IN with NULLs, missing indexes analysis. |
53+
| P2-6 | "Who's Using GoSQLX" + Discussions | Community | Social proof section in README + pinned Discussion thread. Even 5 entries change how enterprise evaluators perceive the project. |
54+
| P2-7 | ClickHouse SAMPLE Clause | SQL Compat | Marked TODO in tests. Completes ClickHouse dialect support. 3–5 days effort. |
55+
| P2-8 | Formatter: Sequence DDL + SHOW/DESCRIBE | Internals | Missing render handlers for `CreateSequenceStatement`, `AlterSequenceStatement`, `DropSequenceStatement`, `ShowStatement`, `DescribeStatement`. Blocks round-trip formatting for these constructs. |
56+
| P2-9 | SQL Server PIVOT/UNPIVOT | SQL Compat | Keywords reserved, no parsing. Needed for analytics-heavy SQL Server migration use cases. |
57+
58+
### P3 — Nice to Have (Backlog)
59+
60+
| ID | Title | Source | Rationale |
61+
|----|-------|--------|-----------|
62+
| P3-1 | Stored Procedures / Procedural Blocks | SQL Compat | 0% support. Very high enterprise demand but very high effort (dialect-specific PL/SQL, T-SQL, PL/pgSQL parsers). Deferred until core SQL coverage exceeds 90%. |
63+
| P3-2 | CLI Watch Mode | DX | `gosqlx watch *.sql` — file system watcher for continuous validation in development. Low effort (fsnotify already in deps), nice ergonomics. |
64+
| P3-3 | JSON Functions (SQL:2016) | SQL Compat | JSON_EXTRACT, JSON_TABLE, JSON_ARRAY_AGG. 20–50% support today. PostgreSQL JSON operators work; MySQL/SQL Server syntax varies significantly. |
65+
| P3-4 | Streaming Parser | DX | Token-by-token progressive parsing for large files (10MB+). Low ROI — mitigated by LSP incremental sync and batch processing. High effort (significant parser refactoring). |
66+
| P3-5 | SQL Server CROSS APPLY / OUTER APPLY | SQL Compat | Keywords reserved, no parsing. Needed for SQL Server lateral correlation. |
67+
| P3-6 | Go Time Podcast Pitch | Community | "Building a production SQL parser in Go" — war stories about sync.Pool discipline and CGo tradeoffs. Medium effort, high-quality audience. |
68+
| P3-7 | Pool Statistics/Monitoring API | Internals | Expose pool hit rates and memory savings metrics. Currently internal only. Nice for production observability. |
69+
70+
---
71+
72+
## Version Milestones
73+
74+
### v1.14.0 — "Hierarchical & Hardened" (2-3 weeks)
75+
- Oracle CONNECT BY / START WITH / PRIOR / NOCYCLE (P2-2)
76+
- MariaDB dialect fully integrated into playground + config (carry-forward)
77+
- C binding hardened to 90%+ coverage (P1-4)
78+
- ClickHouse SAMPLE clause (P2-7)
79+
- Formatter: Sequence DDL + SHOW/DESCRIBE (P2-8)
80+
81+
### v1.15.0 — "Fingerprint & Lint" (3-4 weeks)
82+
- Query Fingerprinting & Normalization API (P1-1)
83+
- Linter expanded to 30 rules (P1-2)
84+
- DML Transform API (P1-3)
85+
- Advisor rules 8 → 20 (P2-5)
86+
87+
### v1.16.0 — "Integrate & Scale" (4-6 weeks)
88+
- Live Database Schema Introspection (P1-5)
89+
- OpenTelemetry Integration (P2-3)
90+
- GORM Hooks + database/sql examples (P2-4)
91+
- SQL Server PIVOT/UNPIVOT (P2-9)
92+
93+
### v2.0.0 — "Transpile" (6-10 weeks)
94+
- SQL Transpilation API — `gosqlx.Transpile(sql, from, to)` (P2-1)
95+
- Breaking: remove deprecated `parser.Parse()` shim, `ParseFromModelTokensWithPositions`, `ConversionResult.PositionMapping`
96+
- Semantic validation layer (column resolution, type checking against schema)
97+
98+
---
99+
100+
## Competitive Moat Analysis
101+
102+
| Dimension | GoSQLX | Best Competitor | Gap |
103+
|-----------|--------|-----------------|-----|
104+
| Pure-Go multi-dialect | 8 dialects, zero CGo | pg_query_go (1 dialect, CGo) | GoSQLX leads |
105+
| Formatter || None | GoSQLX leads |
106+
| Linter | 10 rules | Bytebase 200+ (different product) | GoSQLX gap — must expand |
107+
| Security scanner || None | GoSQLX leads |
108+
| LSP || None | GoSQLX leads |
109+
| MCP server || None | GoSQLX leads (first mover) |
110+
| WASM playground || None | GoSQLX leads |
111+
| Query fingerprinting || pg_query_go | Gap — P1 action |
112+
| SQL transpilation || sqlglot (Python) | Market gap — P2 action |
113+
| ORM integration || None | Gap — P2 action |
114+
| Stars | 73 | ~1,578 (xwb1989, abandoned) | Perception gap, not quality gap |
115+
116+
---
117+
118+
## Success Metrics
119+
120+
| Metric | Current | 30-Day Target | 90-Day Target |
121+
|--------|---------|---------------|---------------|
122+
| GitHub Stars | 73 | 200+ | 500+ |
123+
| pkg.go.dev importers | unknown | 50+ | 200+ |
124+
| Linter rules | 10 | 30 | 50 |
125+
| C binding coverage | 18% | 90% | 95%+ |
126+
| Advisor rules | 8 | 20 | 30 |
127+
| MCP tool count | 7 | 9 | 12 |
128+
129+
---
130+
131+
## Non-Goals (What We Are Not Building)
132+
133+
- **Query Builder** — Out of scope by design. sqlc, squirrel, and goqu fill this. GoSQLX is parse-first.
134+
- **Query Execution** — GoSQLX parses; it does not run queries. Use database/sql for that.
135+
- **Full ORM** — Not building a GORM competitor. Building an analysis/validation layer that integrates with ORMs.
136+
- **Stored Procedure Runtime** — P3 at best. Parsing PL/SQL/T-SQL procedural blocks is dialect-specific and very high effort with limited incremental value for a parsing SDK.

0 commit comments

Comments
 (0)