# 数据库客户端需求

基于 go-desk 实现数据库连接客户端工具，简单易用，易用性超过 dbeaver。

## 支持数据库
- 当前支持：MySQL、Redis、MongoDB
- 计划支持：Oracle、ES、ClickHouse、PostgreSQL、SQLite

## **升级-优化-Bug**
```  
--- 以下内容AI只可读取，不要修改，人工维护 ---
FIXME:  当前考虑重要（一定会尝试，提前预留或推进）
1、增加功能区：左侧功能区分上下两部分，下面增加一个 效果参考数据库连接的效果  ，把 历史的sql编辑器，书签，sql 模板列表  都放到这个地方；
2、当前最小化 mvp  需要做到 能用好用，   现在还有诸多bug ，使用不便利，  这个我们还要逐一整理出来，    也可以通过网络获取一个最小化版本的数据库客户端用户最关心的核心点，然后有针对性的迭代改进
3、精细控制文档内容，  不要 随性创建过多过量低质量文档，这样根本不利于阅读维护，
4、实现我们的  go-desk 升级更新 方便后续做迭代分发，

FIXME: 当前考虑预留，但是不要破环当前主要的设计，破环性太大就不要做实质性的编码预留，未来可能会走的方向
1、为未来service-client 部署做预留扩展，（希望做最少的代码逻辑精准实现本地桌面与远端机器的联动，类似于bs->bcs混合版本）
2、文本编辑区支持不止 sql 一种类型文本内容，默认sql，其他支持 txt，html，js/ts，css，md 的语法高亮编辑及高效的结果渲染预览
3、模板文件 支持加密本密码本概念，存储的  content  需要做加密存储，必须输入作者密钥才可解密数据


FIXME: 优化及 BUG 修复：
全局：
1、sql编辑区与结果区支持调整动态拖拽调整比例，
2、未看到右键菜单，
sql编辑区(文本编辑区):
1、第二个sql编辑区的  输入框未正常展示，添加后不能输入内容
2、sql 编辑区高度当内容超过区域能展示范围的时候， 没有滚动条导致不能展示出其他超出的内容，
3、编辑区所选择的数据库连接及database, 选中后下次加载默认选中，
4、选中数据连接或database 的时候 sql编辑区 不用整个区域刷新，现在看到  sql输入框也 reload，这个不必要
5、表结构区点击表的时候  未展示

--- 以上内容AI只可读取，不要修改，人工维护 ---
```

## 页面布局
1. **数据库列表视图区域**：左侧，树形结构展示连接、数据库、表
2. **执行语句编辑区域**：中间，SQL编辑器（暂时只保留一个编辑区）
3. **结果展示区域**：底部，结果表格/JSON + 消息日志

## 数据库连接区
- **连接列表**：树形结构，按类型分组，懒加载数据库/表列表，显示连接状态和类型图标
- **连接管理**：新建/编辑/删除连接，支持MySQL/Redis/MongoDB，密码加密存储，测试连接
- **快捷功能**：~~书签管理入口、SQL模板入口~~（已删除）
- **数据存储**：SQLite存储，密码AES加密，自动加载

## SQL编辑器
- **编辑器功能**：SQL/JS语法高亮（根据数据库类型），行号，自动换行，F5执行完整，Ctrl+Enter执行选中
- **内容自动存储**：SQLite存储，内容自动保存（防抖1秒），关联连接ID
- **执行功能**：执行前检查连接，结果在结果区域显示
- **工具栏**：执行按钮、执行选中按钮、折叠/展开按钮，显示当前连接信息
- **界面布局**：编辑器占据主要空间，支持折叠/展开
- ⚠️ **多Tab支持**：暂时移除，仅保留一个SQL编辑区

## 结果区域
- **结果tab**：表格/JSON展示，显示统计信息（行数、执行时间），自动生成列定义
- **消息tab**：记录执行事件（SQL、时间、结果），消息类型（info/success/error/warning），最多保留100条
- **区域控制**：支持折叠/展开编辑器，结果区域高度可调（200-600px），编辑器隐藏时结果区域全屏

## ~~书签管理~~ ❌ 已删除
- **状态**：功能已删除

## ~~SQL模板管理~~ ❌ 已删除
- **状态**：功能已删除

## 表结构查询
- **MySQL**：显示列信息（字段名、类型、是否为空、默认值、注释），通过DESCRIBE获取
- **MongoDB**：显示文档示例、字段统计、索引信息、文档总数
- **Redis**：显示Key类型、TTL、值大小等信息
- **查询方式**：点击连接树节点（待实现界面展示）

## 索引查询
- **MySQL**：显示索引信息（索引名、列名、唯一性、类型），通过SHOW INDEX获取
- **MongoDB**：索引信息包含在集合结构中
- **Redis**：不支持索引
- **查询方式**：通过API接口查询（待实现界面展示）

## 多数据库类型支持
- **MySQL**：SQL执行（SELECT/INSERT/UPDATE/DELETE/DDL），数据库/表列表，表结构，索引查询
- **Redis**：命令执行（GET/SET/HGET/HSET等），Key列表（模式匹配），Key信息（TYPE/TTL/SIZE），数据库选择（0-15）
- **MongoDB**：查询执行（find/aggregate），数据库/集合列表，集合结构（文档示例、字段统计、索引）
- **类型识别**：根据连接类型自动切换编辑器语言（MySQL=SQL高亮，Redis/MongoDB=JS高亮），自动设置默认内容和按钮文本

## 数据存储
- **SQLite存储**：连接配置（加密密码）、SQL编辑器内容，~~书签数据、模板数据~~（已删除），自动迁移表结构
- **数据加密**：连接密码AES加密存储，解密后用于连接测试和执行
- **数据持久化**：连接配置立即生效，SQL编辑器内容防抖保存（1秒），编辑器显示状态保存到localStorage

## 快捷键
- **编辑器**：F5执行完整，Ctrl+Enter执行选中，CodeMirror默认快捷键
- **界面**：折叠/展开编辑器

## 待实现功能
1. SQL格式化
2. 代码补全（表名、列名、关键字提示）
3. 多Tab支持（暂时移除，后续版本恢复）
4. 数据导出（CSV/SQL/JSON）
5. 消息历史清空
6. 表结构界面展示
7. 索引界面展示
8. 右键菜单（连接树节点）
9. 智能SQL（接入大模型）
10. 文件/SQL文件管理（导入/导出）

