You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.