Commit Graph

1424 Commits

Author SHA1 Message Date
t8y2 39d956f2e8 fix(redis): skip confirmation for regular writes 2026-07-09 18:59:12 +08:00
t8y2 8c8c48f9b1 fix(grid): preserve contiguous row selection 2026-07-09 18:57:04 +08:00
Guoyu Su 15d392bc44
fix(transfer): keep task active after table errors 2026-07-09 18:30:29 +08:00
zipg e25be6335d
fix(core): reconnect stale agent pools on JDBC errors 2026-07-09 18:27:23 +08:00
zipg 24370135eb
fix(editor): skip right quote on repeated single-quote input
Co-authored-by: zipg <4047349+zipg@users.noreply.github.com>
2026-07-09 18:25:27 +08:00
onlyc0302 5dfefbc0f5
fix(postgres): allow extension dialog scrolling 2026-07-09 18:19:40 +08:00
gggaiitx 482f7421be
feat(editor): send selected SQL to AI panel 2026-07-09 18:12:27 +08:00
t8y2 87efe469a4 fix(desktop): reduce grid scroll jank 2026-07-09 17:55:33 +08:00
t8y2 c015d95016 fix(grid): restore row actions and remove edit badge 2026-07-09 17:37:36 +08:00
t8y2 c545d40fc5 fix(doris): use Doris column rename syntax 2026-07-09 15:44:35 +08:00
zipg ce8cb2b509
fix(oracle): preserve DATE time in display and export 2026-07-09 15:04:34 +08:00
t8y2 aa0abcd670 feat(query): support broader result editing 2026-07-09 14:35:59 +08:00
Guoyu Su ca9e11217e
fix(mongodb): support collection drop shell command 2026-07-09 14:16:32 +08:00
t8y2 e87e31752a fix(i18n): shorten execution summary label 2026-07-09 13:40:52 +08:00
t8y2 36daa214c3 fix(desktop): reduce sidebar and grid jank 2026-07-09 13:21:18 +08:00
Abeautifulsnow 1cfb39a7b0
fix(ai): restore global reasoning toggle accidentally reverted by d90847bb
fix(ai): restore global reasoning toggle accidentally reverted by d90847bb

Commit 09f9e446 replaced per-message expandedReasoning (Set<number>) with
a global reasoningExpanded boolean ref, defaulting to collapsed so all
messages share the same toggle state. This avoided the flip-flop where
reasoning auto-expanded during streaming and collapsed afterward.

Commit d90847bb (SQL file references) inadvertently reverted this when
resolving merge conflicts during its large template restructure.

Changes:
- Replace expandedReasoning (Set<number>) with reasoningExpanded (ref(false))
- Replace per-index toggleReasoning(i) with global toggleReasoning()
- Template uses reasoningExpanded instead of expandedReasoning.has(i) || msg.isThinking
@
2026-07-09 13:17:23 +08:00
Abeautifulsnow 2c2d9d7fef
feat(objects): add checkbox multi-select and grid view for object browser
* feat(objects): add checkbox column toggle for object browser

- Add objectBrowserShowCheckbox setting (default: false) to EditorSettings
- Checkbox column hidden by default; auto-shows when any tables are selected
- Toolbar button toggles multi-select mode (active state highlighted in primary color)
- Clearing the toggle also clears all selections
- Add i18n key objects.toggleCheckbox in en/zh-CN

Closes #2748 (part 2)

* feat(objects): add grid view mode for object browser

- Add objectBrowserViewMode setting (list | grid, default: list) to EditorSettings
- Toolbar segmented control toggles between list and grid views, persisted across sessions
- Grid view renders cards (icon + name + type + row count) in a responsive auto-fill layout
- Reuses existing sort, search, filter, multi-select and context menu
- Partition children not expandable in grid mode (minimal version)
- Add i18n keys objects.viewList/objects.viewGrid across all locales
- Backfill objects.toggleCheckbox in es/it/ja/pt-BR/zh-TW (missed in prior commit)

Refs #2748

* fix(objects): redesign grid view cards for visual polish

- Center-align content (icon + name + metadata) for a proper tile look
- Enlarge type icons (h-7) so color coding is visible at a glance
- Merge type label and row count on one line with separator
- Reduce internal spacing (gap-1.5) and tighten padding
- Replace background hover with border glow + shadow for cleaner feedback
- Narrow min card width (150px) for denser grid, add align-content:start
- Softer rounded-lg corners

Refs #2748

* fix(objects): polish grid view card visual details

- Add colored circle background behind icons (type-matched opacity-10)
- Increase name font from text-xs to text-sm for better legibility
- Separate row count into a primary-tinted badge (only shown when > 0)
- Keep type label clean without mixing row count inline

Refs #2748

* fix(objects): refine grid card min-width, icon shadow, and type label size

* @
feat(object-browser): align tile/grid card metadata with list view columns

Add the metadata categories present in the list view but missing from
the tile/grid card view (objectBrowserViewMode === "grid"):
- Size pill (totalBytes) next to the existing rows pill in the stats row
- Timestamps row showing created_at · updated_at (per-row conditional)
- Comment row (truncated, per-row conditional, with hover tooltip)

Each card now shows: icon, name, type label, rows pill, size pill,
timestamps (when present), and comment (when present) — matching the
same metadata categories the list view displays across its 8 columns.

Also fix a pre-existing bug in the list view where the totalBytes
column tooltip (:title) used formatObjectBrowserCount instead of
formatObjectBrowserBytes, showing a count-formatted number instead
of a byte-formatted size string.
@

* @
feat(object-browser): add sort selector in toolbar for grid/list views

The list view has column header click-to-sort but the grid/tile view
had no way to change sort order. Add a compact sort selector in the
toolbar that works identically in both views:

- Native <select> dropdown with all 7 sort keys (name, type, rows,
  size, created, updated, comment) using existing column i18n labels
- ArrowUp/ArrowDown direction toggle button with localized tooltip
- Positioned between schema selector and view toggle in the toolbar
- Shares the existing sortKey/sortDirection/toggleSort logic — list
  view column headers continue to work as before
- Accessible: aria-label on select, title on direction button

i18n: added sortAsc/sortDesc/sortBy to en.ts and zh-CN.ts
@

* @
fix(object-browser): make sort key options reactive to available data

sortKeyOptions was a static array that always included created_at and
updated_at even when no row had data for those fields. Sorting by an
empty field is a no-op that silently confuses users.

Convert to a computed that mirrors the list view column visibility logic
(hasCreatedAt / hasUpdatedAt): the two time-based sort options only
appear when at least one loaded row has that field populated.

Follows design decision: sort selector remains visible in both list and
grid views (plan B), acting as a shared sort state indicator.
@

* @
fix(object-browser): reset sortKey when selected option disappears from options

When sortKeyOptions loses created_at or updated_at (e.g. after a schema
switch clears all rows), sortKey could remain set to a key no longer in
the dropdown, causing the <select> to show a blank selection.

Add a watch on sortKeyOptions that resets sortKey to "name" and
sortDirection to "asc" whenever the current key is no longer present.
@

* chore(i18n): autofill new translations

* perf(object-browser): virtualize tile/grid view with RecycleScroller

Replaces the flat v-for over filteredRows with a row-chunked
RecycleScroller, matching the list view. Previously, switching to tile
mode on a schema with thousands of tables mounted every card and its
CustomContextMenu at once, stalling the UI for several seconds.

Changes:
- gridRows computed: chunks filteredRows into rows of gridColumns cards
- ResizeObserver on the grid container drives gridColumns; initial read
  uses getComputedStyle to match contentRect.width and avoid a 1-frame
  column jump on mount
- objectGridRowHeight computed: item-size adapts to whether the dataset
  has timestamp/comment rows, minimising wasted row space
- watch(gridContainerRef) re-attaches the observer across list<->grid
  toggles; onBeforeUnmount cleans up
- scrollObjectsToTop() resets scroll position on sort, search,
  object-type filter and view-mode changes
- CSS: new .object-browser-grid-wrapper / -scroller / -row classes with
  will-change / contain parity with the list scroller

---------

Co-authored-by: dbx-i18n-bot <github-actions[bot]@users.noreply.github.com>
2026-07-09 11:59:25 +08:00
Guoyu Su 65a92afce8
fix(desktop): preserve sidebar groups on reload 2026-07-09 11:47:13 +08:00
zipg 1317301bcd
feat(kafka): improve topic management and Kerberos auth 2026-07-09 11:41:22 +08:00
二丫讲梵 b31d52c00c
feat(welcome-screen): 连接描述截断时显示工具提示 2026-07-09 11:19:03 +08:00
二丫讲梵 a8a7d3e9ed
feat(temporal-editor): 支持手动输入 datetime 字段值
*  feat(temporal-editor): 数据库修改datatime字段时支持手动输入数据

* 🔧 fix(temporal-editor): 修复 picker 回到输入框时误提交的问题
2026-07-09 11:11:45 +08:00
gggaiitx 2f134585ea
feat(editor): add auto close brackets setting 2026-07-09 09:53:01 +08:00
二丫讲梵 28db8bc1b8
feat(support-info): add app support information 2026-07-09 09:52:45 +08:00
t8y2 328147b559 fix(updates): remove redundant restart hint text 2026-07-09 09:50:19 +08:00
hhzorg d9bb92d1e9
feat(doris): show external catalogs in sidebar 2026-07-09 00:45:29 +08:00
zipg 47d9257ac2
feat(dameng): support proxy job administration
* Feature: add Dameng agent job management

* fix(duckdb): stabilize worker process tests

* fix(dameng): address job admin review

---------

Co-authored-by: zipg <4047349+zipg@users.noreply.github.com>
2026-07-09 00:39:06 +08:00
Moe. a07f115407
fix(data-transfer): handle missing owner role policy and align web sync behavior
* Feat: Add PostgreSQL transfer ownership preview and resolution

- Add ownership policy support for data transfers: preserve, skip, and reassign missing owners
- Preview missing PostgreSQL roles before creating target schema objects
- Show ownership confirmation dialog when target roles are missing
- Allow users to skip ownership changes or reassign missing owners to the target connection user
- Add Tauri and HTTP API support for ownership preview
- Apply ownership statements according to selected policy during PostgreSQL transfers
- Add Chinese localization for ownership confirmation UI

* Feat: Add ownership confirmation localization

- Add ownership confirmation messages for supported desktop locales
- Include skip and confirm labels for ownership handling
- Update transfer test requests to use Preserve ownership policy
2026-07-09 00:35:34 +08:00
miracle 135d4e15db
feat(sql): add support for @set variables in scripts and copy button 2026-07-09 00:34:51 +08:00
K 1d64d66184
fix(agents): add url params for cassandra driver 2026-07-09 00:32:52 +08:00
zipg b862870e8e
fix(data-grid): show timeout actions on table data errors 2026-07-08 23:44:50 +08:00
二丫讲梵 7748c13a1e
feat(data-grid): show column comments in lookup 2026-07-08 23:44:33 +08:00
二丫讲梵 ddf6b3ed6b
fix(sidebar): preserve Mongo collection children in search 2026-07-08 23:44:25 +08:00
二丫讲梵 843babf522
feat(connection): select new databases when visible 2026-07-08 22:51:45 +08:00
zipg 08067320f8
fix(desktop): restore Windows top border 2026-07-08 22:51:33 +08:00
onenewcode 1b13d2176b
fix(metadata): unify enum column metadata 2026-07-08 21:02:53 +08:00
zipg da88d03ad4
fix(driver): keep store update hints visible 2026-07-08 20:23:58 +08:00
auth0 07482557e6
fix(sidebar): locate active table reliably 2026-07-08 20:21:13 +08:00
zipg 33b4fc1dac
feat(driver): clear download cache 2026-07-08 20:21:05 +08:00
lexmin0412 ac4b98c97c
feat(ai): add general action mode 2026-07-08 19:31:19 +08:00
zipg 0329d9088e
feat(dameng): support schema creation 2026-07-08 19:25:20 +08:00
ducheng1 b4588b47f1
fix(ui): align LightTooltip arrow surface 2026-07-08 18:53:48 +08:00
zipg c89357c47d
fix(redis): keep string edit actions visible 2026-07-08 17:51:16 +08:00
zipg 4d96bac5ff
fix(ai): adjust history message editor width 2026-07-08 17:51:09 +08:00
zipg 488f661bf3
fix(sql): allow quoted keyword table navigation 2026-07-08 17:51:03 +08:00
LRcoding 430f097602
fix(hana): improve metadata fallback and SQLScript parameters 2026-07-08 17:25:34 +08:00
Abeautifulsnow a5359798dc
feat(redis): add auto-refresh countdown for key TTL display
* @
feat(redis): add auto-refresh countdown for Redis key TTL display

在 Redis 值查看器的 TTL 徽章旁增加自动刷新按钮,选中时显示 TTL 实时倒计时
(每秒递减),倒计时归零自动刷新数据,刷新按钮持续旋转。TTL 到期或网络异常
时自动关闭自动刷新避免死循环。

改动:
- RedisValueViewer.vue:新增 autoRefresh 状态、定时器与倒计时逻辑,模板增加
  Clock 切换按钮,RefreshCw 按钮支持 animate-spin 旋转
- load() 内复位倒计时;onBeforeUnmount 清理定时器

修复(review):
- #I01 TTL 到期/连接断开后自动关闭 autoRefresh 避免无限重试
- #C01 load() reject 增加 .catch() 处理 UnhandledPromiseRejection

i18n:zh-CN / zh-TW / en / ja / es / it / pt-BR 7 种语言补充 autoRefresh key
@

* @
test(redis): extract auto-refresh logic and add unit tests

将自动刷新核心决策逻辑提取为 lib/redis/redisAutoRefresh.ts 纯函数模块,
并编写 11 个单元测试覆盖状态机转换、TTL 显示计算和自动停止条件。

新增:
- lib/redis/redisAutoRefresh.ts:computeAutoRefreshTick / shouldStopAutoRefresh /
  computeDisplayTtl 纯函数
- lib/__tests__/redis/redisAutoRefresh.spec.ts:11 个测试用例

重构:
- RedisValueViewer.vue 改用提取后的纯函数,确保测试覆盖即实际运行逻辑
@
2026-07-08 15:37:27 +08:00
zipg 3a35f5b911
fix(oceanbase): update default connection port 2026-07-08 13:31:45 +08:00
zipg ae288a0345
fix(sql): 兼容 MySQL 建表注释选项拆分 (#2837)
Co-authored-by: zipg <4047349+zipg@users.noreply.github.com>
2026-07-08 13:29:55 +08:00
Abeautifulsnow 0901f176b0
fix(grid): preserve current page on data refresh instead of resetting to page 1
* @
fix(grid): preserve current page on data refresh instead of resetting to page 1

When refreshing table data (toolbar button, Ctrl+R, or auto-refresh), the
offset was hardcoded to 0, causing pagination to always jump back to the
first page. This was frustrating for users viewing later pages.

Use the current page offset (currentPage - 1) * pageSize so the user
stays on the same page after refresh. In infinite-scroll mode, the
offset still evaluates to 0 because resetInfiniteScrollState() sets
currentPage = 1, so behavior is unchanged.
@

* @
fix(grid): auto-redirect to last page when refreshed page no longer exists

Extends the refresh pagination fix with a safety net: when data is deleted
while viewing a later page (e.g. page 5 with only 2 pages remaining), the
grid auto-navigates to the last available page instead of showing an empty
page.

Uses a transient isRefreshingData flag to distinguish refresh/rollback
from normal pagination navigation, avoiding false triggers.
@

* Revert "@"

This reverts commit ff0bf0bb31ccfbbb6d4787d1d036794fd37acd5a.

* @
fix(grid): auto-redirect to last page when refreshed page no longer exists

When data is deleted while viewing a later page, the grid now auto-navigates
to the last available page instead of showing an empty page.

Uses a transient isRefreshingData flag to distinguish refresh/rollback
from normal pagination, and a loading-transition watcher (true->false)
placed after displayedTotalRowCount declaration to avoid TDZ errors.
@

* @
test(grid): add pagination offset-preservation and auto-redirect tests

Cover the two new behaviors added to DataGrid.vue:

1. dataGridPagination.test.ts — auto-redirect page calculation:
   - page beyond last page after data deletion → triggers redirect
   - page still valid → no redirect
   - fewer rows than one page → redirects to page 1
   - total=0 / total=undefined → guard prevents redirect

2. useDataGridActions.test.ts — offset preserved on reload:
   - onReloadData(offset=400) passes offset=400 to build-table-select-sql
   - resultPageOffset stored as 400 (not reset to 0)
@
2026-07-08 13:28:36 +08:00
t8y2 2929b1c035 feat(hive): add Kerberos connection options 2026-07-08 13:23:21 +08:00