# db **Repository Path**: tanxii/db ## Basic Information - **Project Name**: db - **Description**: idea 插件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-05 - **Last Updated**: 2026-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tanxii DB IntelliJ Plugin 这是一个基于 **IntelliJ Platform**、**Gradle** 和 **Java 21** 的 IntelliJ 插件项目。 插件当前的核心目标是: - 在 **git commit** 前识别提交中的 `.sql` 文件 - 根据文件路径推断目标 SQL 方言 - 先执行本地 `precheck` - 在配置完整时进一步执行远程模型校验 - 对不符合规则的 SQL 提交进行阻断 同时,项目还提供了一个设置页,用于配置: - LLM 调用参数 - 数据库连接测试参数 - 数据库 `type / compatibility` 及 `Test Connect` 功能 --- ## 技术栈 - Java 21 - Gradle Wrapper - IntelliJ Platform Plugin - Swing / IntelliJ UI Components - JUnit 5 - Jackson - JDBC Drivers --- ## 目录结构 当前项目的主要结构如下: ```text . ├── .run/ ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ ├── src/ │ ├── main/ │ │ ├── java/com/tanxii/ │ │ │ ├── commit/ │ │ │ │ ├── SqlCommitCheckHandler.java │ │ │ │ ├── SqlCommitCheckinHandlerFactory.java │ │ │ │ ├── SqlCommitFileReader.java │ │ │ │ ├── SqlCommitFileValidator.java │ │ │ │ ├── SqlCommitValidationOutcome.java │ │ │ │ └── decision/ │ │ │ ├── i18n/ │ │ │ │ └── MyMessageBundle.java │ │ │ ├── settings/ │ │ │ │ ├── PluginSettings.java │ │ │ │ ├── PluginSettingsConfigurable.java │ │ │ │ ├── PluginSettingsState.java │ │ │ │ └── database/ │ │ │ │ ├── DatabaseConfig.java │ │ │ │ ├── DatabaseConfigItemPanel.java │ │ │ │ ├── DatabaseConfigState.java │ │ │ │ ├── DatabaseConnectionTestRequest.java │ │ │ │ ├── DatabaseConnectionTestResult.java │ │ │ │ ├── DatabaseConnectionTestService.java │ │ │ │ ├── DatabaseDriverAdapter.java │ │ │ │ └── adapter/ │ │ │ ├── sql/ │ │ │ │ ├── dialect/ │ │ │ │ ├── precheck/ │ │ │ │ │ ├── SqlPrecheckService.java │ │ │ │ │ ├── model/ │ │ │ │ │ ├── parser/ │ │ │ │ │ └── rule/ │ │ │ │ └── validation/ │ │ │ │ ├── agent/ │ │ │ │ └── model/ │ │ │ └── toolwindow/ │ │ │ └── MyToolWindowFactory.java │ │ └── resources/ │ │ ├── META-INF/plugin.xml │ │ └── messages/MyMessageBundle.properties │ └── test/ │ └── java/com/tanxii/ │ ├── commit/ │ ├── i18n/ │ ├── settings/ │ ├── sql/ │ └── toolwindow/ ├── build.gradle ├── gradle.properties ├── gradlew ├── gradlew.bat └── README.md ``` --- ## 包职责说明 ### `com.tanxii.commit` 负责提交拦截主链路: - 收集本次提交中的文件 - 过滤 `.sql` 文件 - 组织本地预检查与远程校验 - 决定是否允许提交继续 ### `com.tanxii.commit.decision` 负责提交结果聚合与决策模型: - 单文件校验结果 - 提交级决策对象 - 决策汇总服务 ### `com.tanxii.i18n` 负责国际化消息访问层: - `MyMessageBundle` ### `com.tanxii.settings` 负责插件设置页与持久化配置: - `PluginSettings` - `PluginSettingsState` - `PluginSettingsConfigurable` ### `com.tanxii.settings.database` 负责数据库配置和连接测试: - 数据库配置模型 - 设置页数据库卡片 UI - 连接测试服务与请求/结果模型 ### `com.tanxii.settings.database.adapter` 负责不同数据库的 JDBC 适配: - MySQL - Oracle - DM 原生 / Oracle 兼容 - TDSQL PostgreSQL 原生 / Oracle 兼容 ### `com.tanxii.sql.dialect` 负责根据路径识别 SQL 方言。 ### `com.tanxii.sql.precheck` 负责本地预检查编排。 #### `com.tanxii.sql.precheck.model` 负责 precheck 阶段的数据结构: - issue - result - statement info - analysis result #### `com.tanxii.sql.precheck.parser` 负责 SQL 文本解析: - 切句 - 结构问题识别 - statement type 识别 - block/delimiter 处理 #### `com.tanxii.sql.precheck.rule` 负责方言规则检查: - MySQL - Oracle - DM - PostgreSQL ### `com.tanxii.sql.validation.agent` 负责远程校验链路: - prompt 构造 - LLM gateway - response 解析 - validation client ### `com.tanxii.sql.validation.model` 负责远程校验请求/结果模型。 ### `com.tanxii.toolwindow` 负责插件 Tool Window 的 UI 入口。 --- ## 构建与测试 ### 构建插件 ```bash ./gradlew build ``` ### 运行全部测试 ```bash ./gradlew test ``` ### 运行单个测试类 ```bash ./gradlew test --tests com.tanxii.settings.PluginSettingsConfigurableTest ``` ### 运行单个测试方法 ```bash ./gradlew test --tests com.tanxii.settings.PluginSettingsConfigurableTest.testConnectUsesCurrentTypeCompatibilityAndCredentials ``` ### 启动带插件的 IDE ```bash ./gradlew runIde ``` ### 校验插件兼容性 ```bash ./gradlew verifyPlugin ``` ### 清理构建产物 ```bash ./gradlew clean ``` --- ## 插件入口 插件入口配置位于: - `src/main/resources/META-INF/plugin.xml` 当前关键入口包括: - Tool Window:`com.tanxii.toolwindow.MyToolWindowFactory` - Settings:`com.tanxii.settings.PluginSettingsConfigurable` - Commit Hook:`com.tanxii.commit.SqlCommitCheckinHandlerFactory` --- ## 设置页说明 设置页支持两类配置: ### 1. LLM 配置 - Base URL - API Key - Model - Check way(Local / LLM) ### 2. 数据库配置 - 数据库类型 - compatibility - connection(`host:port/database`) - username - password - Test Connect 当数据库类型需要兼容模式时,会显示 compatibility 选择项。 --- ## SQL 校验链路说明 当前 SQL 校验链路大致如下: 1. 提交阶段识别 `.sql` 文件 2. 根据路径推断方言 3. 读取 SQL 文件真实内容 4. 执行本地 `precheck` 5. 如果设置完整且 `check way = llm`,执行远程模型校验 6. 根据结果决定是否阻断提交 --- ## 测试策略 项目当前主要采用: - 轻量级单元测试 - 不启动完整 IDE 的组件树测试 - 通过 focused tests + `./gradlew test` 验证改动 这也是本项目后续推荐的默认测试方式。 --- ## 说明 - 当前项目实际源码目录是 `src/main/java`,不是模板默认的 Kotlin 目录 - README 已按当前项目真实结构维护,不再以 IntelliJ 模板默认结构为准