Releases
v0.0.1
Compare
Sorry, something went wrong.
No results found
Changelog
Features
22b10bc feat(build): add Select query builder for read API
8e2f7e3 feat(build): add insert, update, and delete SQL builders
3a1e5fa feat(build,server): expand embedded relations into JSON subqueries
c58c8f4 feat(cli): add --timeout flag for check command
803fa53 feat(cli): add signal handling and timeout to check command
979778b feat(cli): apply --allowed-tables filter in check command
a19a13f feat(cli): implement adms check (config + introspect summary)
858c8f5 feat(config): add default_limit and max_limit options
eebe229 feat(config): add max_body_bytes setting with 10 MiB default
3e9d9d9 feat(config): load configuration from YAML/TOML file with env expansion
0486bce feat(database): add driver open for PostgreSQL and MySQL
ba8e3c3 feat(dialect): add JSONObject and EmptyJSONArray helpers
4f7c042 feat(logger): wrap log/slog with SetDefault-based default and source-aware helpers
5428e73 feat(query): add PostgREST-style URL query parser
ca5eff0 feat(query): cs/cd containment operators (PG @>, MySQL JSON_CONTAINS)
7da0654 feat(query): support relation embedding and alias in select
43338ef feat(schema): add core types and dialect (PG/MySQL impl + tests)
74797b3 feat(schema): add introspection impl and integration test infra
1cab977 feat(schema): introspect indexes with method and partial predicate
b055585 feat(server): add CORS middleware gated by cors_origins
e4d3fe9 feat(server): authenticate requests with bearer token via auth_token_env
219d03f feat(server): expose read handler with problem details errors
210d646 feat(server): format TextMarshaler CSV cells (e.g. time.Time) as RFC 3339
2bfa745 feat(server): implement write API with Prefer header and Content-Range
83d056f feat(server): map PG and MySQL constraint errors to 409 / 400
29aa982 feat(server): support CSV export via Accept: text/csv on the read endpoint
ab18f48 feat(ui): add /t/{table}/schema page with column, PK, FK, and index sections
414bc0f feat(ui): add CSV / JSON export buttons to the table view
56c223e feat(ui): add a Cmd/Ctrl+K command palette to jump between tables
eadcc28 feat(ui): add a light/dark theme toggle
b149562 feat(ui): add a schema ER diagram with force-directed layout
76af8b1 feat(ui): add a11y landmarks, aria-current, dialog labelling, live regions
7294440 feat(ui): add insert / edit / delete UI for single-PK tables
af5ddd0 feat(ui): add opt-in admin UI scaffolding with sidebar and table read view
825ea18 feat(ui): add up/down row navigation to the table view
344b028 feat(ui): auto-prefix filter values with the kind-default operator
49d8ffd feat(ui): edit rows in a modal from the table view
e4a084f feat(ui): embed minified Tailwind CSS instead of fetching the Play CDN
8b2174b feat(ui): forward auth_token_env to browser fetch via meta tag and fetch wrapper
e08a403 feat(ui): hide write affordances and 404 the new-row page when read_only
148e390 feat(ui): inline cell edit in the table view via double-click
b47f0b3 feat(ui): kind-aware placeholders on the table-view filter inputs
cad671b feat(ui): link outgoing FK columns and list referenced-by tables on row detail
d511822 feat(ui): render type-aware form inputs and parse values by column kind
b5f23ea feat(ui): swap the table-view "Loading…" text for skeleton rows
f0c353c feat: serve schema and healthz over http with graceful shutdown
Bug fixes
1f97a34 fix(build): order one-to-many embed JSON aggregate by child primary key
cbd3a8f fix(build): reject duplicate select columns to avoid map key collisions
330f66c fix(build): reject non-positive limits in Select
782a574 fix(build): reject select lists that mix '*' with named columns
d968557 fix(build): resolve embeds against qualified FK names, detect ambiguity, escape JSON keys
9ad9b52 fix(build): seed star expansion when checking embed alias duplicates
962a892 fix(cli): label zero-table summary as (no tables found) instead of (driver default)
0b81ea7 fix(cli,config): keep --help output visible without duplicating parse errors
71a003a fix(config): defer env expansion until after YAML/TOML decode
cf7e869 fix(config): include config path in YAML/TOML decode errors
537b53d fix(config): include config path in validation errors from Load
8df3061 fix(config): reject explicit zero default_limit and max_limit
f21ab1f fix(config): reject multi-document YAML to honor strict decoding
f785727 fix(config): reject zero and negative timeout values
cc9bdd2 fix(config): suppress duplicate flag parse errors
bdcdaa9 fix(config): surface non-NotExist stat errors from Detect
bc98b69 fix(config): treat whitespace-only driver and dsn as missing
c1f4539 fix(config): trim whitespace and drop empty entries from string slices
e81081a fix(config): trim whitespace from all scalar string fields during normalize
0c73872 fix(dialect): escape backslashes in MySQL string literals
87e7103 fix(make): ensure docker compose down runs even if up or tests fail
50fa401 fix(query): only treat top-level ':' as the alias separator
510fcf9 fix(query): reject ':' inside relation names to fail fast
f49cb06 fix(query): reject empty filter column and quote inputs in errors
e00a2e6 fix(query): split error messages for select alias and embed
e8ba6e2 fix(query): tighten parser edge cases (dup keys, order suffix, in.())
aba9003 fix(query): trim filter value before parsing not. and operator
019570a fix(query): trim whitespace from order and filter columns
c333da7 fix(schema): always emit slice fields and qualify FK tables uniformly
832aec2 fix(schema): guard mysqlListTables against empty schemas to avoid invalid SQL
39fff34 fix(schema): handle NULL from SELECT DATABASE() in mysql introspector
39b0c6b fix(schema): harden mysql helpers (empty placeholders, NUL fk key)
dfd3818 fix(schema): refine mysql IsGenerated detection (exclude DEFAULT_GENERATED)
111d6a9 fix(schema): scope FK accumulation by linked table and consolidate shared types
4580f37 fix(schema): scope pg FK grouping key by schema to avoid cross-schema collisions
4b89d47 fix(schema): split qualify into pgQualify and mysqlQualify
1fb4eed fix(server): apply per-request timeout to read query
7184d54 fix(server): bind before logging, dedupe statusRecorder WriteHeader
963a73f fix(server): bypass auth for /healthz with trailing slash too
9db571c fix(server): decode embed subquery JSON payloads from driver bytes
d5b68f7 fix(server): default nil Logger to io.Discard, expose Unwrap from statusRecorder
e8893c7 fix(server): defensively copy non-UTF-8 scan bytes to outlive next Scan
9ed9a62 fix(server): escape log paths and cache schema JSON across requests
a6c17e9 fix(server): force-close listener when graceful shutdown errors
39ec2c8 fix(server): log panics, drain serve error on shutdown, harden timeouts
a60c825 fix(server): map PATCH filter-column errors to invalid-query
1a15d81 fix(server): marshal schema fully before writing response to avoid mid-stream errors
341b0b5 fix(server): mask 500 details and preserve non-UTF-8 scan bytes
841e38c fix(server): match Prefer directives case-insensitively, split write status params
f85206a fix(server): pass Write error through unchanged in statusRecorder
78d1dd9 fix(server): prefer serve error over ErrServerClosed from Shutdown; align unknown-driver wording
cd81c5b fix(server): preserve embed JSON precision via json.RawMessage
5f2a493 fix(server): preserve write body number precision via json.Decoder.UseNumber
e12356e fix(server): reject default_limit exceeding max_limit at construction
d89fe91 fix(server): reject duplicate table names during schema indexing
052c6e7 fix(server): reject nil DB in newServer to avoid panic in read handler
69292b7 fix(server): reject trailing data after JSON body
10ee8d0 fix(server): trim overstated panic comment, add per-probe timeout in test
882fbb1 fix(ui): bump muted helper text to zinc-500 in light mode for WCAG AA
539816f fix(ui): default table view order to first PK column so reload keeps a stable row order
a1e97f6 fix(ui): delay export object URL revocation to avoid canceled downloads
2eab5aa fix(ui): let row-nav yield to focused buttons and links
bbad70a fix(ui): look up pagination inputs by querySelector to dodge column-name collisions
fde0f23 fix(ui): make muted helper hints readable in dark mode (zinc-500 both themes)
0daaa73 fix(ui): precompute ERD layout, render self-edges as arcs, refine sizing and drag
d9ef786 fix(ui): refine keyboard-shortcut UX (Ctrl+K in inputs, link options, click sync)
d61fb90 fix(ui): suppress column filter for reserved query keys to keep pagination intact
4581793 fix(ui): use a div listbox so anchor palette options nest validly
6c07df8 fix(ui): wrap long table names and stack name above schema in the sidebar
Performance
41c10ba perf(build): pre-compute column set for O(1) identifier lookup
23f57d7 perf(server): drop redundant json.Valid in decodeEmbedValue
48b0ca6 perf(server): gate write handlers on headers and query before reading body
da5aa16 perf(server): hoist rowsToJSON scan buffers out of row loop
Refactor
1ddfcef refactor(build): wrap Delete's buildWhere errors in FilterError
ca1ac5d refactor(cli): drop subcommand structure for single config-file entrypoint
ef3ae5e refactor(cli): list every requested schema in check summary
e5c16b7 refactor(cli): return error from pickIntrospector and print per-schema breakdown
7ac9642 refactor(schema): batch mysql introspection into schema-level queries (eliminate N+1)
069d87e refactor(schema): batch postgres introspection into schema-level queries (eliminate N+1)
48ef6ef refactor(schema): extract shared FK accumulation into attachFKs helper
6365dd2 refactor(server): add New constructor with config.Config; move driver to introspector mapping to database package
bc84a3c refactor(server): emit error=invalid_request for malformed auth header
65125ed refactor(server): hash bearer tokens with SHA-256 to hide length
074e37e refactor(server): take ownership of schema introspection and JSON caching
c2dfd60 refactor(server): use Decode probe for JSON body trailing check
7f23453 refactor(server): write CSV via WriteAll and cover the error path
40e9a59 refactor(ui): cache FK link anchors at init instead of querySelector per keystroke
2e81322 refactor(ui): drop unused JSON tags and unused FK plumbing on new-row
674b285 refactor(ui): tighten reserved-name helpers per Gemini review
12d4046 refactor(ui): tighten row-nav keydown and wrap ArrowUp to last row
608d4d8 refactor(ui): unify reserved-name helpers on a single source of truth
1fac4cb refactor(ui): use a tag-agnostic selector for column filter controls
c9a1371 refactor(ui): wrap row-nav at both ends with modulo, matching the palette
Documentation
1a5db90 docs(build): describe lookup parameter in Select
95f3c9b docs(build): warn against any-typed JSON unmarshal of embed payloads
dcbb218 docs(cli): clarify env expansion semantics and literal $ handling in usage
3eb71f1 docs(readme): align CLI surface with config-file driven entrypoint
832c8b6 docs(readme): align with shipped features and remaining polish items
0678ed0 docs(readme): clarify env var names referenced in config are user-chosen
807104b docs(readme): drop default_limit / max_limit (not in Phase 1.5 schema)
61008b9 docs(readme): flag HTTP server steps as Phase 2 until they land
8e13c4a docs: add README-driven implementation spec
8ae4bd1 docs: drop the completed roadmap section from the README
f04d0c8 docs: tick CSV/JSON export and keyboard shortcuts in the roadmap
b6ee23c docs: trim verbose comments to keep the why concise
Others
2865a88 chore(build): adopt errors.AsType in FilterError tests
eef9138 chore(server): wrap driver dispatch errors with server prefix
a13c896 chore: initial commit
cb9a777 chore: standardize workflow file extension to .yaml
b7e6086 ci: add coverage upload and Codecov badge
3986078 ci: add integration-test job with reusable compose-up / compose-down targets
5b20b06 ci: make -covermode=atomic explicit alongside -race
b4b0e41 ci: report combined coverage from integration-test only
b50111b style(config): restore Config field column alignment
9c3e5a3 style(schema): drop unused //nolint:gosec on mysql FK queries
81bdf57 test(cli): cover resolveAuthToken success and no-op branches
f778eaf test(cli): cover runServers dual-listener path via integration test
2fd566b test(logger): cover the below-level short-circuit in logAt
39a1b59 test(schema): use unique table names so introspect tests do not collide with seed data
8d7d904 test(server): add MySQL write integration coverage and PG 409 test
e3d2501 test(server): add integration test for read handler success path
6d91ca5 test(server): bound smoke table name to Postgres ident limit
f86d1ce test(server): broaden write handler coverage for PATCH/DELETE error paths
c4b29c9 test(server): compare CSV integration output with reflect.DeepEqual
bff4723 test(server): cover Run's listen-failure path
4e1b806 test(server): cover body-too-large and MySQL representation 501 paths
d0fe47d test(server): use atomic.Bool for cross-goroutine flags in auth tests
2f30cf2 test(server): use pre-bound listener to avoid close-and-rebind race
5fb3efe test(server): wrap log capture buffer with a mutex for race safety
36eef76 test(server,ui): cover Server.Schema and ui.Run lifecycle paths
897e41d test(ui): cover referenced-by list composite-FK skip and multi-entry render order
d9771a4 test(ui): cover row view 404 path for unknown tables
8e1a336 test(ui): unit-test ERD layout (build, determinism, key columns, geometry)
983298b test: add config.Parse and database.Open unit tests; parallelize integration tests
d4cab57 test: improve coverage in database, server, query, and build
You can’t perform that action at this time.