Skip to content

v0.0.1

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Jun 23:47
v0.0.1
67d91db

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