Dialect registry with typed ResultSet (single generic adapter)
- Dominant language
- Go
- Stars
- 218
- Forks
- 14
- PR merge metrics
- No merged PRs in 30d
Description
Replace the three copy-paste drivers with one generic database/sql adapter + per-engine Dialect (identifier quote rune, metadata SQL, capabilities) and a registry keyed by type (controller switch dies; new engine ~= 30-line dialect + suite pass). Native return type: ResultSet with column names, driver type metadata, per-cell NULL flags, bounded row cap with "more rows" indicator — `[][]*string` dies. Per-dialect identifier quoting everywhere (kills the fmt.Sprintf injection surface). pgx/v5 (stdlib mode) swap lands here. Postgres metadata corrected at driver level (pg_namespace/current_database(), schema-qualified quoted identifiers) within the existing 3-level nav; the db->schema->table navigation change ships with the v1.1 port. rows.Err() checked; scan errors no longer swallowed. Streaming/paged fetch deferred to v1.1 (its only consumer is the virtualized grid).
**Acceptance:** acceptance suite green across engines incl. new weird-identifier cases (mixed-case, dash, reserved-word); NULL rendered distinctly from empty string.
Contributor guide
Research direction
Start by reading the existing three copy-paste drivers and the controller switch, then trace the current three-level database navigation. Run the acceptance suite across the supported engines, including mixed-case, dashed, and reserved-word identifiers. Done means the suite is green, NULL is distinct from an empty string, and row, scan, and identifier-handling requirements are covered.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, mysql, postgresql, sqlite
- Domain
- cli, database
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100