Apply fix_potential_double_encoding() to table/object comment fields
returned by list_tables(), list_table_status_show(), and row_to_object(),
consistent with the existing fix for column comments (c21b5d0).
The sidebar tree displays TABLE_COMMENT directly from these functions,
so when MySQL returns Latin1-decoded bytes for UTF-8 content, the
comment shows as garbled text like 'OAéƒ¨é—¨åŒæ¥è¡¨' instead of
'OA部门同步表'.
Fix UTF-8 boundary issues in mysql_top_level_limit, parse_usize_token,
and mysql_keyword_at functions that caused crashes when SQL contains
Chinese characters in string literals.
The issue was introduced in commit 021e1682 which added byte-level
indexing without proper UTF-8 boundary checks. When parsing SQL with
Chinese text (e.g., \"WHERE name LIKE '%批量保存%'\"), the byte index
could point to the middle of a multi-byte UTF-8 character, causing
Rust to panic when slicing the string.
Changes:
- parse_usize_token: Use std::str::from_utf8 to validate slice before parsing
- mysql_keyword_at: Add is_char_boundary checks for safe string slicing
- mysql_top_level_limit: Skip non-UTF-8-boundary bytes after incrementing index
This ensures all byte-level indexing operations stay on valid UTF-8 boundaries,
preventing panics while maintaining the original functionality of detecting
LIMIT clauses for bounded result set collection.
Fixes crash reported by users when executing queries with Chinese conditions.
* fix(redis):format INFO output as plain text in cluster mode
* fix(redis): unify INFO category command output in cluster mode
In Redis cluster mode, the INFO command (with category parameters) returns aggregated results from multiple primaries. This fix formats the output as human-readable plain text, consistent with standalone mode, to improve readability.
Closes#1326
Redis write commands (SET/DEL/...) ran from the query editor or the
key-browser terminal did not update the dbN (count) labels in the left
tree until a manual refresh. Add refreshRedisDbKeyCounts(), which re-fetches
authoritative per-db counts via INFO keyspace and patches the labels in place
without rebuilding the tree (preserving expanded key nodes), then trigger it
fire-and-forget after any mutating command in both execution paths.
* fix(grid): normalize smart quotes in JSON input to prevent parse errors
When manually typing JSON values in the data grid, input methods (especially
Chinese IME and macOS smart punctuation) can automatically convert standard
ASCII quotes to smart quotes (U+201C, U+201D, etc.), causing JSON parse failures.
Changes:
- Remove incorrect logic that tried to parse original value before normalization
- Add hasSmartQuotes() function to detect 7 types of smart quotes:
* Chinese quotes: U+201C, U+201D
* German quotes: U+201E, U+201F
* Smart single quotes: U+2018, U+2019
* Fullwidth quote: U+FF02
- Rewrite normalizeSmartQuotes() using charCodeAt to avoid oxc compiler issues
- Add comprehensive tests for MySQL JSON field quote normalization
All existing tests remain passing.
* fix(grid): preserve valid JSON while normalizing smart quotes
The Redis key-name completion cache was only cleared on connection
lifecycle events, so SET/DEL/EXPIRE/... left autocomplete showing
stale keys. Drop the cache for the db each write command ran on:
- add isRedisMutatingCommand() based on the command-table safety field
(confirm = write; destructive blocked cmds minus read-only/admin ones)
- invalidate after each mutating command in queryStore batch execution
and in RedisKeyBrowser.runRedisCommand