Skip to content

v0.1.1 — bug fixes

Choose a tag to compare

@ginkida ginkida released this 17 Apr 07:13
· 4 commits to main since this release

Fixed

  • SQL validation: ; inside string literals (e.g. SELECT 'a;b' FROM t) and leading comments (-- foo\nSELECT 1, /* */ SELECT 1) no longer trigger false rejections. A new scanner strips strings (single/double/dollar-quoted) and comments (line + nested block) before the structural check.
  • EXPLAIN parser: the parenthesized form EXPLAIN (ANALYZE) DELETE … is now correctly blocked. Previously it slipped past the inner whitelist (read-only transaction still caught it, but the tool-level error message now arrives earlier with a clear reason).
  • Anomaly detection: anomalies no longer false-flags columns like paid, void, candidate, guide, solid as possible duplicates. The old check used "id" in col_name.lower() which matched those as substrings. Now uses token-level matching: exact id, or email/uuid as a whole underscore-separated token. *_id FK columns are intentionally excluded (their duplicates are legitimate).
  • Schema cache: get_schema(use_cache=True) returns a fresh copy and stores a copy internally — caller mutation no longer corrupts the cache.
  • Error handling: schema and erd tools now catch ValueError/TimeoutError/Exception and return friendly error strings, matching the other tools. TimeoutError is handled specifically across every tool — user sees "query timeout exceeded" instead of "unexpected failure".
  • Config validation: unknown keys in [databases.<name>] (e.g. typo descreption = …) and non-string description values are now rejected at load time.

Internal

  • +17 tests (72 → 89)
  • No public API changes; drop-in upgrade from 0.1.0