Commit Graph

745 Commits

Author SHA1 Message Date
t8y2 c62e323e16 fix(jdbc): improve goldendb metadata handling 2026-06-18 16:47:46 +08:00
t8y2 4bc8a7d101 fix(sql): recognize CREATE FUNCTION/PROCEDURE/TRIGGER/PACKAGE as Oracle PL/SQL blocks 2026-06-18 16:42:47 +08:00
t8y2 5ffd0bad6c fix(settings): persist sidebar page size 2026-06-18 14:57:54 +08:00
Scars a0475d80e3 fix(desktop): complete redis cluster transport routing 2026-06-18 14:57:53 +08:00
t8y2 17f186db26 fix(sqlserver): rebuild pool after driver panic 2026-06-18 13:43:03 +08:00
t8y2 991043e232 fix(mysql): avoid redundant column reorder sql 2026-06-18 13:26:35 +08:00
t8y2 9e75f62dbf feat(sqlserver): support linked server browsing 2026-06-18 13:17:44 +08:00
t8y2 fc8ae4b69f chore(transfer): remove dead query_mysql_create_table_ddl 2026-06-18 13:14:01 +08:00
t8y2 ca427715af fix(sqlserver): read tinyint precision/scale/length columns as u8 from tiberius 2026-06-18 13:08:09 +08:00
ptma 7ef6c1022e
pref(transfer): prefer native table DDL from source for same-family transfers 2026-06-18 12:40:33 +08:00
t8y2 a9d1b48dd5 fix(ai): skip temperature and thinking-disable for Kimi K2.5+ models 2026-06-18 12:32:10 +08:00
t8y2 a2d4d52113 fix(mysql): skip tcp probe for direct ip connections 2026-06-18 11:55:18 +08:00
t8y2 e926adde42 fix(test): update GBase tree shape assertions and skip MQ in capability checks 2026-06-18 11:54:38 +08:00
ptma e7ee0c9ec1
fix(questdb): handle materialized views and unify table_type naming
* fix(questdb): handle materialized views

* fix(test): fix rust test problems
2026-06-18 11:40:57 +08:00
t8y2 ad0a9075b5 fix(core): include table when dropping IRIS index 2026-06-18 11:00:19 +08:00
t8y2 8de8a85d66 fix(transfer): ClickHouse ORDER BY must cover PRIMARY KEY columns 2026-06-18 10:50:53 +08:00
t8y2 d6544ba4be fix(oceanbase): add ojdbc compatibility parameter 2026-06-18 00:52:37 +08:00
t8y2 00541291e3 feat(ssh): support custom SSH agent socket path 2026-06-18 00:15:08 +08:00
t8y2 c4c427fb67 fix: sort tables by FK dependency in transfer and export 2026-06-18 00:00:37 +08:00
t8y2 71db24813e fix(informix): add informix_server field to test helpers 2026-06-17 22:59:22 +08:00
t8y2 1aa48cf636 fix(informix): add informix_server field for direct INFORMIXSERVER input 2026-06-17 22:59:13 +08:00
t8y2 48af146b95 fix(table-structure): quote default values for string column types 2026-06-17 22:36:16 +08:00
至高吾尚 f89bf310b4
fix(mysql): fix garbled Chinese in sidebar table comment
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部门同步表'.
2026-06-17 21:16:30 +08:00
t8y2 22b8ba17bb fix(schema): handle view DDL object types 2026-06-17 19:29:24 +08:00
bigliangzao 7643148708
fix(mysql): prevent panic on Chinese characters in WHERE clause
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.
2026-06-17 19:00:05 +08:00
bigliangzao 45f16cfa2e
perf: optimize xlsx export to reduce memory allocations 2026-06-17 17:21:04 +08:00
t8y2 a0136c5bd7 fix(ai): parse ollama reasoning stream chunks 2026-06-17 17:13:48 +08:00
t8y2 b7e47863da feat(release): bump version to 0.5.34 2026-06-17 16:11:04 +08:00
t8y2 9a66bc4fa2 style: remove extra blank line in redis_driver 2026-06-17 15:59:21 +08:00
t8y2 b0cc3ed0d6 fix(sql): split current statement on blank lines 2026-06-17 15:54:57 +08:00
t8y2 4dbd1c7cc8 fix: convert source to editable form when opening view/procedure editor 2026-06-17 15:20:21 +08:00
dalew 4888e637c7
fix(redis): unify aggregated INFO output format in console
* fix(redis):format INFO output as plain text in cluster mode

* fix(redis): unify aggregated INFO output format in console
2026-06-17 14:54:51 +08:00
luoianun 021e1682c3
fix(mysql): avoid Aliyun ADB timeout for bounded text results 2026-06-17 14:53:13 +08:00
t8y2 66fa986a9b fix(sqlserver): include column comments in table DDL 2026-06-17 14:36:16 +08:00
dalew 8486d27cb2
fix(redis): unify INFO category command output in cluster mode
* 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
2026-06-17 11:20:07 +08:00
t8y2 66e6ca1211 fix(db): refresh stale native pools 2026-06-17 11:14:35 +08:00
t8y2 5a08d42258 feat: make sidebar table page size configurable in settings 2026-06-17 02:00:15 +08:00
t8y2 29e7267d31 fix(mongodb): set directConnection=true for single-host to bypass replica set discovery 2026-06-17 01:31:08 +08:00
t8y2 74d9bbd3e5 fix(sqlserver): replace OFFSET/FETCH with TOP/ROW_NUMBER for pre-2012 compatibility 2026-06-17 01:26:56 +08:00
t8y2 34b37006be fix(jdbc): don't quote identifiers or use table aliases for JDBC 2026-06-17 01:06:31 +08:00
t8y2 0411fd46b6 fix(jdbc): skip SQL-level row limiting for JDBC connections 2026-06-17 01:00:09 +08:00
t8y2 63bb6a21ca fix(mysql): parse geometry WKB to WKT for display and editing 2026-06-17 00:49:33 +08:00
dalew 0830e03f89
fix(redis): format INFO output as plain text in cluster mode 2026-06-17 00:21:00 +08:00
t8y2 1da30465ea fix(redis): preserve int64 precision in JSON string values for GET results 2026-06-16 22:17:59 +08:00
miracle 2a59d3143e
feat(mq): implement Apache Pulsar message queue admin
* feat(mq): implement Apache Pulsar message queue admin

- Add complete MQ admin adapter layer with version detection
  * Pulsar adapter with multi-version API support
  * OAuth2 token caching and authentication
  * JWT token signing for Pulsar clients
  * Transport layer (SSH/Proxy) integration

- Implement comprehensive admin operations
  * Tenant, namespace, topic management
  * Subscription and consumer/producer monitoring
  * Rate limits, backlog quotas, retention policies
  * Permissions and role-based access control
  * Raw admin API for advanced operations

- Add desktop UI components
  * MQ admin console with tabbed interface
  * Tenant, namespace, topic panels
  * Subscription management and cursor operations
  * Monitoring panel with stats visualization
  * Policy configuration UI

- Add web routes for MQ admin operations
- Add secret store support for MQ auth credentials
- Add comprehensive test coverage

* fix: del local test files

* fix(mq): mark message queue as unsupported mcpMode in driver manifest

MQ admin connections do not use the MCP query bridge - they use a
separate REST admin API. Mark mcpMode as 'unsupported' to align with
the test expectations and reflect the actual architecture.

Fixes CI test: driver-manifest.test.ts

* fix(mq): fix TypeScript errors in MQ components

- Fix typo in SubscriptionsPanel.vue: messagformatError(e)Id -> message.messageId
- Use formatError() helper in RawApiPanel.vue instead of accessing e?.message
- Fix undefined 'tab' reference in ConnectionTree.vue: use config.db_type instead

Fixes frontend CI TypeScript check errors.

* fix(mcp): add 'mq' to MCP server connection type description

The MCP server's connection type description must include all database
types from the driver manifest. Add 'mq' to the list to fix the test:
'add connection database type description includes every manifest database type'

Fixes: packages/mcp-server/tests/driver-manifest.test.ts

* fix(mq): add missing ConnectionConfig fields for Rust compilation

- Add gbase_server and keepalive_interval_secs fields to all ConnectionConfig
  test constructors in mq/config.rs, mq/service.rs, and storage.rs
- Import uses_bare_mysql_pool in connection.rs tests module

Fixes compilation errors from upstream ConnectionConfig changes.

* chore(ui): simplify Pulsar icon to logo-only version

Remove text from Pulsar icon (127x30 -> 35x30), keeping only
the wave logo symbol for a cleaner, more consistent appearance
with other database icons.

* fix(mq): return removed pools from drain_connection_pools

---------

Co-authored-by: t8y2 <1156263951@qq.com>
2026-06-16 21:57:17 +08:00
t8y2 8339d23df5 fix: distinguish materialized view from regular view 2026-06-16 21:23:42 +08:00
t8y2 95b03998d1 fix(tests): reorder imports for better readability in AI module tests 2026-06-16 19:23:31 +08:00
t8y2 c0b7fb5a28 fix(postgres): include sequences in list_objects 2026-06-16 19:20:08 +08:00
iiusky 57f1b6cedc
fix(ai): avoid empty Claude system field rejected by Anthropic
Anthropic rejects requests whose system field is an empty string with
"system: text content blocks must be non-empty". The connection test
hardcoded an empty system, and regular completion/stream requests sent
an empty system_prompt when none was configured.

Add a claude_system_prompt() helper that substitutes a non-empty default
for empty or whitespace-only prompts, and apply it to all Claude request
sites. Covered by a unit test.
2026-06-16 18:52:02 +08:00
t8y2 3024339c91 fix: format bool as 0/1 for all BIT columns, not just MySQL 2026-06-16 18:41:54 +08:00