When the user triggers SQL execution via shortcut/toolbar/context-menu
without a manual selection, a floating picker now surfaces the available
execution targets:
- "Current SQL" — the statement at the cursor
- "All SQL" — the entire editor content
Each candidate is highlighted as a preview decoration in the editor as
the user navigates the picker with arrow keys. Only a single entry is
shown when the cursor statement equals the full document.
前端 SQL 范围解析器 (sqlStatementRanges.ts) 按分号拆分语句,同时跳过
字符串、引号标识符、注释和美元引用体中的分隔符,与后端 dbx-core splitter
逻辑一致。选取器支持键盘导航、鼠标悬停高亮、Enter 确认、Esc/失焦取消。
Changes:
- sqlExecutionTarget.ts: add SqlExecutionCandidate, SqlExecutionOverride types
- sqlStatementRanges.ts: frontend SQL tokeniser (new, 848 lines)
- SqlExecutionTargetPicker.vue: accessible floating listbox (new, 109 lines)
- QueryEditor.vue: preview StateEffect/StateField; requestExecute() replaces
executeCurrentSql() to route through picker
- ContentArea.vue: expose requestQueryEditorExecute() to parent
- App.vue: toolbar + global shortcut → requestActiveEditorExecute()
- i18n: editor.executionPicker keys for all locales
- tests: 26 new unit tests for sqlStatementRanges (all 1121 tests pass)
* fix(postgre): Fix the data type syntax when creating tables in PostgreSQL
* fix(ui): Save the state when closing the SQL library through the close button
* 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
* 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
* feat: highlight selected SQL matches
* fix(core): detect column extra changes (auto_increment, on_update) in table structure SQL generation
- Add has_column_extra_change check to build_column_sql skip condition
- Add is_column_extra_empty to handle None/Some(false)/empty ColumnExtra
- Fix false positives when extra is parsed but no effective change
* feat(generate): fix date range persistence, add i18n for data generation
* fix:Remove invalid references
* fix(generate): ensure config save/load covers all generator params
- Remove auto-reset watch in GeneratorParamsPanel that cleared params
when loading a profile with different generatorKey
- Extend defaultGeneratorParams() to provide explicit defaults for all
35+ generators (full_name, phone, email, barcode, url, file_path,
foreign_key, image, regex, product_name, etc.) so profiles persist
and restore correctly through JSON serialize/deserialize round-trip
---------
Co-authored-by: t8y2 <1156263951@qq.com>