diff --git a/BUG_REPORT.md b/BUG_REPORT.md new file mode 100644 index 000000000..3490e2a16 --- /dev/null +++ b/BUG_REPORT.md @@ -0,0 +1,91 @@ +# pgcli 智能SQL补全历史记录功能 - 开发记录 + +## 功能概述 + +为pgcli添加基于使用频率的智能SQL关键字补全排序功能。 + +## 实现内容 + +### 1. 新增文件 + +#### `pgcli/packages/history_freq.py` +- `HistoryFrequencyManager`: 单例模式的历史频率管理器 + - 使用SQLite数据库存储关键字使用频率 + - 数据库路径: `~/.config/pgcli/history_freq.db` (Windows: `%USERPROFILE%\AppData\Local\dbcli\pgcli\history_freq.db`) + - 支持线程安全的数据库操作 +- `SmartCompletionSorter`: 智能补全排序器 + - 根据历史使用频率对关键字进行排序 + +#### `tests/test_history_freq.py` +- 完整的单元测试覆盖 + +### 2. 修改文件 + +#### `pgcli/packages/prioritization.py` +- 添加 `smart_completion_freq` 参数支持 +- 添加 `set_smart_completion_freq()` 方法 +- 修改 `keyword_count()` 方法,整合历史频率数据 +- 添加 `record_keyword_selection()` 方法 + +#### `pgcli/pgcompleter.py` +- 添加 `smart_completion_freq` 配置项 +- 添加 `set_smart_completion_freq()` 方法 + +#### `pgcli/pgclirc` +- 添加 `smart_completion_freq = False` 配置选项(默认关闭) + +#### `pgcli/main.py` +- 添加 `\set` 命令支持运行时切换配置 +- 示例: `\set smart_completion_freq on` + +## 使用方法 + +### 配置文件方式 +编辑 `~/.config/pgcli/config` 文件: +``` +smart_completion_freq = True +``` + +### 运行时命令方式 +在pgcli中执行: +``` +\set smart_completion_freq on +\set smart_completion_freq off +``` + +## 回归测试结果 + +### 测试统计 +- 通过: 2546 +- 跳过: 118 +- 预期失败: 1 +- 意外通过: 1 +- 失败: 1 (非本功能相关) + +### 已知问题 + +#### 1. Windows临时文件权限问题 +- **文件**: `tests/test_pgcompleter.py::test_pgcompleter_alias_uses_configured_alias_map` +- **错误**: `PermissionError: [Errno 13] Permission denied` +- **原因**: Windows系统上临时文件在关闭后仍被占用 +- **影响**: 仅影响测试,不影响实际功能 +- **状态**: 原有问题,非本次修改引入 + +## 设计决策 + +1. **默认关闭**: 新功能默认关闭,避免影响现有用户体验 +2. **SQLite存储**: 使用轻量级SQLite数据库,无需额外依赖 +3. **单例模式**: 确保全局只有一个数据库连接管理器 +4. **线程安全**: 使用线程本地存储和锁机制保证线程安全 +5. **兼容性**: 完全兼容现有prompt_toolkit补全系统 + +## 文件修改清单 + +| 文件 | 操作 | 说明 | +|------|------|------| +| `pgcli/packages/history_freq.py` | 新增 | 历史频率管理模块 | +| `pgcli/packages/prioritization.py` | 修改 | 集成历史频率功能 | +| `pgcli/pgcompleter.py` | 修改 | 添加配置支持 | +| `pgcli/pgclirc` | 修改 | 添加配置选项 | +| `pgcli/main.py` | 修改 | 添加\set命令 | +| `tests/test_history_freq.py` | 新增 | 单元测试 | diff --git a/pgcli/main.py b/pgcli/main.py index 913228b33..26a2d8e55 100644 --- a/pgcli/main.py +++ b/pgcli/main.py @@ -282,6 +282,7 @@ def __init__( "less_chatty": less_chatty, "keyword_casing": keyword_casing, "alias_map_file": c["main"]["alias_map_file"] or None, + "smart_completion_freq": c["main"].as_bool("smart_completion_freq"), } completer = PGCompleter(smart_completion, pgspecial=self.pgspecial, settings=self.settings) @@ -415,6 +416,13 @@ def refresh_callback(): "Toggle verbose errors.", ) + self.pgspecial.register( + self.set_config_option, + "\\set", + "\\set