universal-db-mcp 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CONTRIBUTING.md CHANGED
@@ -54,6 +54,8 @@
54
54
  - **达梦** (`src/adapters/dm.ts`) - 国产数据库适配,兼容 Oracle
55
55
  - **OceanBase** (`src/adapters/oceanbase.ts`) - 分布式数据库,兼容 MySQL
56
56
  - **TiDB** (`src/adapters/tidb.ts`) - 分布式 NewSQL 数据库,兼容 MySQL 5.7
57
+ - **ClickHouse** (`src/adapters/clickhouse.ts`) - 列式 OLAP 数据库,使用 HTTP 协议
58
+ - **PolarDB** (`src/adapters/polardb.ts`) - 云原生数据库,兼容 MySQL
57
59
 
58
60
  ### 示例结构
59
61
 
package/EXAMPLES.md CHANGED
@@ -16,6 +16,8 @@
16
16
  - [GaussDB / OpenGauss 使用示例](#gaussdb--opengauss-使用示例)
17
17
  - [OceanBase 使用示例](#oceanbase-使用示例)
18
18
  - [TiDB 使用示例](#tidb-使用示例)
19
+ - [ClickHouse 使用示例](#clickhouse-使用示例)
20
+ - [PolarDB 使用示例](#polardb-使用示例)
19
21
  - [Claude Desktop 配置示例](#claude-desktop-配置示例)
20
22
  - [常见使用场景](#常见使用场景)
21
23
 
@@ -1491,6 +1493,431 @@ Claude 会:
1491
1493
 
1492
1494
  ---
1493
1495
 
1496
+ ## ClickHouse 使用示例
1497
+
1498
+ ### 基础配置(只读模式)
1499
+
1500
+ ```json
1501
+ {
1502
+ "mcpServers": {
1503
+ "clickhouse-db": {
1504
+ "command": "npx",
1505
+ "args": [
1506
+ "universal-db-mcp",
1507
+ "--type", "clickhouse",
1508
+ "--host", "localhost",
1509
+ "--port", "8123",
1510
+ "--user", "default",
1511
+ "--password", "",
1512
+ "--database", "default"
1513
+ ]
1514
+ }
1515
+ }
1516
+ }
1517
+ ```
1518
+
1519
+ ### 启用写入模式
1520
+
1521
+ ```json
1522
+ {
1523
+ "mcpServers": {
1524
+ "clickhouse-write": {
1525
+ "command": "npx",
1526
+ "args": [
1527
+ "universal-db-mcp",
1528
+ "--type", "clickhouse",
1529
+ "--host", "localhost",
1530
+ "--port", "8123",
1531
+ "--user", "default",
1532
+ "--password", "your_password",
1533
+ "--database", "analytics",
1534
+ "--danger-allow-write"
1535
+ ]
1536
+ }
1537
+ }
1538
+ }
1539
+ ```
1540
+
1541
+ ### 连接 ClickHouse Cloud
1542
+
1543
+ ```json
1544
+ {
1545
+ "mcpServers": {
1546
+ "clickhouse-cloud": {
1547
+ "command": "npx",
1548
+ "args": [
1549
+ "universal-db-mcp",
1550
+ "--type", "clickhouse",
1551
+ "--host", "your-instance.clickhouse.cloud",
1552
+ "--port", "8443",
1553
+ "--user", "default",
1554
+ "--password", "your_password",
1555
+ "--database", "default"
1556
+ ]
1557
+ }
1558
+ }
1559
+ }
1560
+ ```
1561
+
1562
+ ### 与 Claude 对话示例
1563
+
1564
+ **用户**: 查看数据库中有哪些表?
1565
+
1566
+ **Claude 会自动**:
1567
+ 1. 调用 `get_schema` 工具
1568
+ 2. 查询 `system.tables` 系统表
1569
+ 3. 返回表列表
1570
+
1571
+ **用户**: 查看 events 表的结构
1572
+
1573
+ **Claude 会自动**:
1574
+ 1. 调用 `get_table_info` 工具
1575
+ 2. 查询 `system.columns` 获取列信息
1576
+ 3. 返回列信息、主键、索引等详细信息
1577
+
1578
+ **用户**: 统计最近一小时的事件数量
1579
+
1580
+ **Claude 会自动**:
1581
+ 1. 理解需求
1582
+ 2. 生成 SQL: `SELECT COUNT(*) as event_count FROM events WHERE timestamp >= now() - INTERVAL 1 HOUR`
1583
+ 3. 执行并返回结果
1584
+
1585
+ **用户**: 按用户 ID 分组统计事件数量,取前 10 名
1586
+
1587
+ **Claude 会自动**:
1588
+ 1. 生成 SQL: `SELECT user_id, COUNT(*) as event_count FROM events GROUP BY user_id ORDER BY event_count DESC LIMIT 10`
1589
+ 2. 执行并返回结果
1590
+
1591
+ ### 注意事项
1592
+
1593
+ 1. **默认端口**:
1594
+ - HTTP 端口:8123(推荐用于 MCP 连接)
1595
+ - 原生 TCP 端口:9000
1596
+ - HTTPS 端口:8443(ClickHouse Cloud)
1597
+ 2. **默认用户**: default
1598
+ 3. **默认数据库**: default
1599
+ 4. **列式存储**: ClickHouse 是列式数据库,适合 OLAP 场景
1600
+ 5. **高性能**: 针对大数据分析优化,查询速度极快
1601
+ 6. **SQL 方言**: 使用自己的 SQL 方言,与标准 SQL 有些差异
1602
+
1603
+ ### 支持的版本
1604
+
1605
+ - ✅ ClickHouse 21.x
1606
+ - ✅ ClickHouse 22.x
1607
+ - ✅ ClickHouse 23.x
1608
+ - ✅ ClickHouse 24.x
1609
+ - ✅ ClickHouse Cloud
1610
+
1611
+ ### 常见使用场景
1612
+
1613
+ #### 1. 大数据分析
1614
+
1615
+ 连接 ClickHouse 进行海量数据分析:
1616
+
1617
+ ```
1618
+ 用户: 分析最近 30 天的用户行为数据
1619
+
1620
+ Claude 会:
1621
+ 1. 查询事件表
1622
+ 2. 按时间、用户维度聚合
1623
+ 3. 生成分析报告
1624
+ ```
1625
+
1626
+ #### 2. 实时数据查询
1627
+
1628
+ ```
1629
+ 用户: 查询实时的系统监控指标
1630
+
1631
+ Claude 会:
1632
+ 1. 查询最新的监控数据
1633
+ 2. 计算关键指标
1634
+ 3. 返回实时统计结果
1635
+ ```
1636
+
1637
+ #### 3. 日志分析
1638
+
1639
+ ```
1640
+ 用户: 分析应用日志,找出错误最多的接口
1641
+
1642
+ Claude 会:
1643
+ 1. 查询日志表
1644
+ 2. 按接口分组统计错误数
1645
+ 3. 返回排序后的结果
1646
+ ```
1647
+
1648
+ #### 4. 时序数据分析
1649
+
1650
+ ```
1651
+ 用户: 分析时序数据的趋势
1652
+
1653
+ Claude 会:
1654
+ 1. 按时间窗口聚合数据
1655
+ 2. 计算趋势指标
1656
+ 3. 生成时序分析报告
1657
+ ```
1658
+
1659
+ ### ClickHouse 特色功能
1660
+
1661
+ ClickHouse 作为列式 OLAP 数据库,有许多特色功能:
1662
+
1663
+ - **列式存储**: 数据按列存储,压缩率高,查询速度快
1664
+ - **向量化执行**: 利用 SIMD 指令加速查询
1665
+ - **分布式查询**: 支持分布式表和分布式查询
1666
+ - **物化视图**: 支持物化视图加速查询
1667
+ - **数据压缩**: 多种压缩算法,节省存储空间
1668
+ - **实时插入**: 支持高并发实时数据插入
1669
+ - **近似计算**: 支持近似算法加速聚合查询
1670
+
1671
+ **注意**: ClickHouse 的 SQL 语法与标准 SQL 有一些差异,Claude 会尽量生成兼容的查询语句。
1672
+
1673
+ ### ClickHouse 最佳实践
1674
+
1675
+ 1. **表引擎选择**:
1676
+ - 使用 MergeTree 系列引擎(推荐)
1677
+ - 根据场景选择合适的表引擎
1678
+
1679
+ 2. **分区策略**:
1680
+ - 按时间分区(如按天、按月)
1681
+ - 合理设置分区键
1682
+
1683
+ 3. **排序键**:
1684
+ - 选择查询频繁的列作为排序键
1685
+ - 排序键顺序影响查询性能
1686
+
1687
+ 4. **数据类型**:
1688
+ - 使用合适的数据类型节省空间
1689
+ - 避免使用 String 类型存储数值
1690
+
1691
+ 5. **查询优化**:
1692
+ - 使用 PREWHERE 过滤数据
1693
+ - 避免 SELECT *
1694
+ - 合理使用物化视图
1695
+
1696
+ ---
1697
+
1698
+ ## PolarDB 使用示例
1699
+
1700
+ ### 基础配置(只读模式)
1701
+
1702
+ ```json
1703
+ {
1704
+ "mcpServers": {
1705
+ "polardb-db": {
1706
+ "command": "npx",
1707
+ "args": [
1708
+ "universal-db-mcp",
1709
+ "--type", "polardb",
1710
+ "--host", "pc-xxxxx.mysql.polardb.rds.aliyuncs.com",
1711
+ "--port", "3306",
1712
+ "--user", "your_username",
1713
+ "--password", "your_password",
1714
+ "--database", "your_database"
1715
+ ]
1716
+ }
1717
+ }
1718
+ }
1719
+ ```
1720
+
1721
+ ### 启用写入模式
1722
+
1723
+ ```json
1724
+ {
1725
+ "mcpServers": {
1726
+ "polardb-write": {
1727
+ "command": "npx",
1728
+ "args": [
1729
+ "universal-db-mcp",
1730
+ "--type", "polardb",
1731
+ "--host", "pc-xxxxx.mysql.polardb.rds.aliyuncs.com",
1732
+ "--port", "3306",
1733
+ "--user", "your_username",
1734
+ "--password", "your_password",
1735
+ "--database", "your_database",
1736
+ "--danger-allow-write"
1737
+ ]
1738
+ }
1739
+ }
1740
+ }
1741
+ ```
1742
+
1743
+ ### 连接 PolarDB 集群(读写分离)
1744
+
1745
+ ```json
1746
+ {
1747
+ "mcpServers": {
1748
+ "polardb-primary": {
1749
+ "command": "npx",
1750
+ "args": [
1751
+ "universal-db-mcp",
1752
+ "--type", "polardb",
1753
+ "--host", "pc-xxxxx.mysql.polardb.rds.aliyuncs.com",
1754
+ "--port", "3306",
1755
+ "--user", "your_username",
1756
+ "--password", "your_password",
1757
+ "--database", "your_database",
1758
+ "--danger-allow-write"
1759
+ ]
1760
+ },
1761
+ "polardb-readonly": {
1762
+ "command": "npx",
1763
+ "args": [
1764
+ "universal-db-mcp",
1765
+ "--type", "polardb",
1766
+ "--host", "pc-xxxxx-ro.mysql.polardb.rds.aliyuncs.com",
1767
+ "--port", "3306",
1768
+ "--user", "readonly_user",
1769
+ "--password", "readonly_password",
1770
+ "--database", "your_database"
1771
+ ]
1772
+ }
1773
+ }
1774
+ }
1775
+ ```
1776
+
1777
+ ### 与 Claude 对话示例
1778
+
1779
+ **用户**: 查看数据库中有哪些表?
1780
+
1781
+ **Claude 会自动**:
1782
+ 1. 调用 `get_schema` 工具
1783
+ 2. 执行 `SHOW TABLES` 查询
1784
+ 3. 返回表列表
1785
+
1786
+ **用户**: 查看 orders 表的结构
1787
+
1788
+ **Claude 会自动**:
1789
+ 1. 调用 `get_table_info` 工具
1790
+ 2. 执行 `SHOW FULL COLUMNS FROM orders`
1791
+ 3. 返回列信息、主键、索引等详细信息
1792
+
1793
+ **用户**: 统计最近 7 天的订单数量
1794
+
1795
+ **Claude 会自动**:
1796
+ 1. 理解需求
1797
+ 2. 生成 SQL: `SELECT COUNT(*) FROM orders WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)`
1798
+ 3. 执行并返回结果
1799
+
1800
+ **用户**: 查询销售额最高的 10 个商品
1801
+
1802
+ **Claude 会自动**:
1803
+ 1. 生成 SQL: `SELECT product_id, SUM(amount) as total_sales FROM orders GROUP BY product_id ORDER BY total_sales DESC LIMIT 10`
1804
+ 2. 执行并返回结果
1805
+
1806
+ ### 注意事项
1807
+
1808
+ 1. **默认端口**: 3306(与 MySQL 相同)
1809
+ 2. **兼容性**: 完全兼容 MySQL 5.6/5.7/8.0 协议
1810
+ 3. **驱动**: 使用 MySQL 的 `mysql2` 驱动
1811
+ 4. **读写分离**:
1812
+ - 主地址(Primary Endpoint):支持读写
1813
+ - 集群地址(Cluster Endpoint):自动读写分离
1814
+ - 只读地址(Read-only Endpoint):只支持读
1815
+ 5. **云原生特性**:
1816
+ - 存储与计算分离
1817
+ - 秒级弹性扩展
1818
+ - 多可用区部署
1819
+
1820
+ ### 支持的版本
1821
+
1822
+ - ✅ PolarDB for MySQL 5.6
1823
+ - ✅ PolarDB for MySQL 5.7
1824
+ - ✅ PolarDB for MySQL 8.0
1825
+ - ✅ PolarDB Serverless
1826
+
1827
+ ### 常见使用场景
1828
+
1829
+ #### 1. 云原生应用数据库
1830
+
1831
+ 连接 PolarDB 作为云原生应用的主数据库:
1832
+
1833
+ ```
1834
+ 用户: 查询用户表中的所有活跃用户
1835
+
1836
+ Claude 会:
1837
+ 1. 查询用户表
1838
+ 2. 过滤活跃用户
1839
+ 3. 返回结果
1840
+ ```
1841
+
1842
+ #### 2. 读写分离场景
1843
+
1844
+ ```
1845
+ 用户: 使用只读节点查询大量数据进行分析
1846
+
1847
+ Claude 会:
1848
+ 1. 连接到只读地址
1849
+ 2. 执行复杂的分析查询
1850
+ 3. 不影响主库性能
1851
+ ```
1852
+
1853
+ #### 3. 高并发场景
1854
+
1855
+ ```
1856
+ 用户: 查询实时订单数据
1857
+
1858
+ Claude 会:
1859
+ 1. 利用 PolarDB 的高并发能力
1860
+ 2. 快速返回查询结果
1861
+ 3. 保证数据一致性
1862
+ ```
1863
+
1864
+ #### 4. 弹性扩展
1865
+
1866
+ ```
1867
+ 用户: 在业务高峰期查询数据
1868
+
1869
+ Claude 会:
1870
+ 1. PolarDB 自动扩展计算资源
1871
+ 2. 保证查询性能
1872
+ 3. 业务低峰期自动缩容
1873
+ ```
1874
+
1875
+ ### PolarDB 特色功能
1876
+
1877
+ PolarDB 作为云原生数据库,有许多特色功能:
1878
+
1879
+ - **存储计算分离**: 存储和计算资源独立扩展
1880
+ - **一写多读**: 支持一个主节点和多个只读节点
1881
+ - **秒级弹性**: 计算节点秒级扩展
1882
+ - **全局一致性**: 分布式事务保证数据一致性
1883
+ - **并行查询**: 支持并行查询加速
1884
+ - **热备份**: 在线备份不影响业务
1885
+ - **多可用区**: 支持多可用区部署,高可用
1886
+
1887
+ **注意**: 这些特色功能在标准 MySQL 协议下可能需要特定的配置或 SQL 语法。
1888
+
1889
+ ### PolarDB 最佳实践
1890
+
1891
+ 1. **读写分离**:
1892
+ - 写操作使用主地址
1893
+ - 读操作使用只读地址或集群地址
1894
+ - 分析查询使用只读节点
1895
+
1896
+ 2. **连接池管理**:
1897
+ - 合理设置连接池大小
1898
+ - 使用长连接减少连接开销
1899
+ - 定期检查连接健康状态
1900
+
1901
+ 3. **查询优化**:
1902
+ - 使用合适的索引
1903
+ - 避免全表扫描
1904
+ - 合理使用 LIMIT
1905
+ - 利用查询缓存
1906
+
1907
+ 4. **监控告警**:
1908
+ - 监控 CPU、内存、IOPS
1909
+ - 设置慢查询告警
1910
+ - 关注连接数使用情况
1911
+ - 定期查看性能洞察
1912
+
1913
+ 5. **安全建议**:
1914
+ - 使用 SSL 连接
1915
+ - 设置白名单
1916
+ - 定期更换密码
1917
+ - 使用 RAM 账号管理权限
1918
+
1919
+ ---
1920
+
1494
1921
  ## Claude Desktop 配置示例
1495
1922
 
1496
1923
  ### 同时连接多个数据库
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ✅ **智能表结构理解** - 自动获取数据库 Schema,提供精准建议
21
21
 
22
- ✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB、SQLite、KingbaseES、GaussDB/OpenGauss、OceanBase、TiDB 一键切换
22
+ ✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB、SQLite、KingbaseES、GaussDB/OpenGauss、OceanBase、TiDB、ClickHouse、PolarDB 一键切换
23
23
 
24
24
  ✅ **安全第一** - 默认只读模式,防止误操作删库
25
25
 
@@ -33,7 +33,7 @@
33
33
 
34
34
  - Node.js >= 20
35
35
  - Claude Desktop 应用
36
- - 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB/SQLite/KingbaseES/GaussDB/OceanBase/TiDB)
36
+ - 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB/SQLite/KingbaseES/GaussDB/OceanBase/TiDB/ClickHouse/PolarDB
37
37
 
38
38
  ### 安装
39
39
 
@@ -207,6 +207,60 @@ npx universal-db-mcp
207
207
  - 支持分布式事务和水平扩展
208
208
  - 使用与 MySQL 相同的驱动(mysql2)
209
209
 
210
+ #### ClickHouse 示例
211
+
212
+ ```json
213
+ {
214
+ "mcpServers": {
215
+ "clickhouse-db": {
216
+ "command": "npx",
217
+ "args": [
218
+ "universal-db-mcp",
219
+ "--type", "clickhouse",
220
+ "--host", "localhost",
221
+ "--port", "8123",
222
+ "--user", "default",
223
+ "--password", "",
224
+ "--database", "default"
225
+ ]
226
+ }
227
+ }
228
+ }
229
+ ```
230
+
231
+ **说明**:
232
+ - ClickHouse 是高性能列式 OLAP 数据库
233
+ - 默认 HTTP 端口为 8123(原生 TCP 端口为 9000)
234
+ - 默认用户为 default,默认数据库为 default
235
+ - 适合大数据分析和实时查询场景
236
+
237
+ #### PolarDB 示例
238
+
239
+ ```json
240
+ {
241
+ "mcpServers": {
242
+ "polardb-db": {
243
+ "command": "npx",
244
+ "args": [
245
+ "universal-db-mcp",
246
+ "--type", "polardb",
247
+ "--host", "pc-xxxxx.mysql.polardb.rds.aliyuncs.com",
248
+ "--port", "3306",
249
+ "--user", "your_username",
250
+ "--password", "your_password",
251
+ "--database", "your_database"
252
+ ]
253
+ }
254
+ }
255
+ }
256
+ ```
257
+
258
+ **说明**:
259
+ - PolarDB 是阿里云的云原生数据库
260
+ - 完全兼容 MySQL 5.6/5.7/8.0 协议
261
+ - 支持一写多读架构,读写分离
262
+ - 使用与 MySQL 相同的驱动(mysql2)
263
+
210
264
  ### 启动使用
211
265
 
212
266
  1. 重启 Claude Desktop
@@ -252,6 +306,8 @@ Claude 会自动调用数据库工具完成查询!
252
306
  | GaussDB / OpenGauss | `--type gaussdb` 或 `--type opengauss` | 5432 | ✅ 已支持 | 华为高斯数据库,兼容 PostgreSQL |
253
307
  | OceanBase | `--type oceanbase` | 2881 | ✅ 已支持 | 蚂蚁金服分布式数据库,兼容 MySQL |
254
308
  | TiDB | `--type tidb` | 4000 | ✅ 已支持 | PingCAP 分布式数据库,兼容 MySQL 5.7 |
309
+ | ClickHouse | `--type clickhouse` | 8123 | ✅ 已支持 | 高性能列式 OLAP 数据库 |
310
+ | PolarDB | `--type polardb` | 3306 | ✅ 已支持 | 阿里云云原生数据库,兼容 MySQL |
255
311
 
256
312
  **注意**:
257
313
  - 达梦数据库驱动 `dmdb` 会作为可选依赖自动安装。如果安装失败,请手动运行 `npm install -g dmdb`。
@@ -263,7 +319,7 @@ Claude 会自动调用数据库工具完成查询!
263
319
  universal-db-mcp [选项]
264
320
 
265
321
  选项:
266
- --type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss|oceanbase|tidb)
322
+ --type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss|oceanbase|tidb|clickhouse|polardb)
267
323
  --host <host> 数据库主机地址 (默认: localhost)
268
324
  --port <port> 数据库端口
269
325
  --user <user> 用户名
@@ -292,7 +348,9 @@ src/
292
348
  │ ├── kingbase.ts
293
349
  │ ├── gaussdb.ts
294
350
  │ ├── oceanbase.ts
295
- └── tidb.ts
351
+ ├── tidb.ts
352
+ │ ├── clickhouse.ts
353
+ │ └── polardb.ts
296
354
  ├── types/ # TypeScript 类型定义
297
355
  │ └── adapter.ts
298
356
  ├── utils/ # 工具函数
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ClickHouse 数据库适配器
3
+ * 使用 @clickhouse/client 驱动实现 DbAdapter 接口
4
+ * ClickHouse 是高性能列式 OLAP 数据库
5
+ */
6
+ import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
7
+ export declare class ClickHouseAdapter implements DbAdapter {
8
+ private client;
9
+ private config;
10
+ constructor(config: {
11
+ host: string;
12
+ port: number;
13
+ user?: string;
14
+ password?: string;
15
+ database?: string;
16
+ });
17
+ /**
18
+ * 连接到 ClickHouse 数据库
19
+ */
20
+ connect(): Promise<void>;
21
+ /**
22
+ * 断开数据库连接
23
+ */
24
+ disconnect(): Promise<void>;
25
+ /**
26
+ * 执行 SQL 查询
27
+ */
28
+ executeQuery(query: string, params?: unknown[]): Promise<QueryResult>;
29
+ /**
30
+ * 转换参数为 ClickHouse 格式
31
+ */
32
+ private convertParams;
33
+ /**
34
+ * 获取数据库结构信息
35
+ */
36
+ getSchema(): Promise<SchemaInfo>;
37
+ /**
38
+ * 获取单个表的详细信息
39
+ */
40
+ private getTableInfo;
41
+ /**
42
+ * 检查是否为写操作
43
+ */
44
+ isWriteOperation(query: string): boolean;
45
+ }
46
+ //# sourceMappingURL=clickhouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/adapters/clickhouse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAG7B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,MAAM,CAMZ;gBAEU,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAqC3E;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAsDtC;;OAEG;YACW,YAAY;IA8H1B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGzC"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * ClickHouse 数据库适配器
3
+ * 使用 @clickhouse/client 驱动实现 DbAdapter 接口
4
+ * ClickHouse 是高性能列式 OLAP 数据库
5
+ */
6
+ import { createClient } from '@clickhouse/client';
7
+ import { isWriteOperation as checkWriteOperation } from '../utils/safety.js';
8
+ export class ClickHouseAdapter {
9
+ client = null;
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * 连接到 ClickHouse 数据库
16
+ */
17
+ async connect() {
18
+ try {
19
+ this.client = createClient({
20
+ host: `http://${this.config.host}:${this.config.port}`,
21
+ username: this.config.user || 'default',
22
+ password: this.config.password,
23
+ database: this.config.database || 'default',
24
+ });
25
+ // 测试连接
26
+ await this.client.ping();
27
+ }
28
+ catch (error) {
29
+ throw new Error(`ClickHouse 连接失败: ${error instanceof Error ? error.message : String(error)}`);
30
+ }
31
+ }
32
+ /**
33
+ * 断开数据库连接
34
+ */
35
+ async disconnect() {
36
+ if (this.client) {
37
+ await this.client.close();
38
+ this.client = null;
39
+ }
40
+ }
41
+ /**
42
+ * 执行 SQL 查询
43
+ */
44
+ async executeQuery(query, params) {
45
+ if (!this.client) {
46
+ throw new Error('数据库未连接');
47
+ }
48
+ const startTime = Date.now();
49
+ try {
50
+ // ClickHouse 使用命名参数或位置参数
51
+ const result = await this.client.query({
52
+ query,
53
+ query_params: params ? this.convertParams(params) : undefined,
54
+ format: 'JSONEachRow',
55
+ });
56
+ const data = await result.json();
57
+ const rows = Array.isArray(data) ? data : [];
58
+ const executionTime = Date.now() - startTime;
59
+ // 检查是否为写操作
60
+ const isWrite = this.isWriteOperation(query);
61
+ return {
62
+ rows: rows || [],
63
+ affectedRows: isWrite ? rows?.length || 0 : undefined,
64
+ executionTime,
65
+ metadata: {
66
+ query_id: result.query_id,
67
+ },
68
+ };
69
+ }
70
+ catch (error) {
71
+ throw new Error(`查询执行失败: ${error instanceof Error ? error.message : String(error)}`);
72
+ }
73
+ }
74
+ /**
75
+ * 转换参数为 ClickHouse 格式
76
+ */
77
+ convertParams(params) {
78
+ const result = {};
79
+ params.forEach((param, index) => {
80
+ result[`param${index + 1}`] = param;
81
+ });
82
+ return result;
83
+ }
84
+ /**
85
+ * 获取数据库结构信息
86
+ */
87
+ async getSchema() {
88
+ if (!this.client) {
89
+ throw new Error('数据库未连接');
90
+ }
91
+ try {
92
+ // 获取数据库版本
93
+ const versionResult = await this.client.query({
94
+ query: 'SELECT version() as version',
95
+ format: 'JSONEachRow',
96
+ });
97
+ const versionData = await versionResult.json();
98
+ const version = (Array.isArray(versionData) && versionData.length > 0) ? versionData[0]?.version : 'unknown';
99
+ // 获取当前数据库名
100
+ const databaseName = this.config.database || 'default';
101
+ // 获取所有表
102
+ const tablesResult = await this.client.query({
103
+ query: `
104
+ SELECT name
105
+ FROM system.tables
106
+ WHERE database = {database:String}
107
+ AND engine NOT IN ('View', 'MaterializedView')
108
+ ORDER BY name
109
+ `,
110
+ query_params: {
111
+ database: databaseName,
112
+ },
113
+ format: 'JSONEachRow',
114
+ });
115
+ const tablesData = await tablesResult.json();
116
+ const tables = Array.isArray(tablesData) ? tablesData : [];
117
+ const tableInfos = [];
118
+ for (const table of tables) {
119
+ const tableInfo = await this.getTableInfo(table?.name);
120
+ tableInfos.push(tableInfo);
121
+ }
122
+ return {
123
+ databaseType: 'clickhouse',
124
+ databaseName,
125
+ tables: tableInfos,
126
+ version,
127
+ };
128
+ }
129
+ catch (error) {
130
+ throw new Error(`获取数据库结构失败: ${error instanceof Error ? error.message : String(error)}`);
131
+ }
132
+ }
133
+ /**
134
+ * 获取单个表的详细信息
135
+ */
136
+ async getTableInfo(tableName) {
137
+ if (!this.client) {
138
+ throw new Error('数据库未连接');
139
+ }
140
+ const databaseName = this.config.database || 'default';
141
+ // 获取列信息
142
+ const columnsResult = await this.client.query({
143
+ query: `
144
+ SELECT
145
+ name,
146
+ type,
147
+ default_kind,
148
+ default_expression,
149
+ comment
150
+ FROM system.columns
151
+ WHERE database = {database:String}
152
+ AND table = {table:String}
153
+ ORDER BY position
154
+ `,
155
+ query_params: {
156
+ database: databaseName,
157
+ table: tableName,
158
+ },
159
+ format: 'JSONEachRow',
160
+ });
161
+ const columnsData = await columnsResult.json();
162
+ const columns = Array.isArray(columnsData) ? columnsData : [];
163
+ const columnInfos = columns.map((col) => ({
164
+ name: col?.name,
165
+ type: col?.type,
166
+ nullable: col?.type?.includes('Nullable') || false,
167
+ defaultValue: col?.default_expression || undefined,
168
+ comment: col?.comment || undefined,
169
+ }));
170
+ // 获取主键信息
171
+ const primaryKeyResult = await this.client.query({
172
+ query: `
173
+ SELECT primary_key
174
+ FROM system.tables
175
+ WHERE database = {database:String}
176
+ AND name = {table:String}
177
+ `,
178
+ query_params: {
179
+ database: databaseName,
180
+ table: tableName,
181
+ },
182
+ format: 'JSONEachRow',
183
+ });
184
+ const pkData = await primaryKeyResult.json();
185
+ const primaryKeyStr = (Array.isArray(pkData) && pkData.length > 0) ? pkData[0]?.primary_key : '';
186
+ const primaryKeys = primaryKeyStr
187
+ ? primaryKeyStr.split(',').map((k) => k.trim())
188
+ : [];
189
+ // 获取索引信息(ClickHouse 的索引称为 data skipping indexes)
190
+ const indexesResult = await this.client.query({
191
+ query: `
192
+ SELECT
193
+ name,
194
+ expr,
195
+ type
196
+ FROM system.data_skipping_indices
197
+ WHERE database = {database:String}
198
+ AND table = {table:String}
199
+ `,
200
+ query_params: {
201
+ database: databaseName,
202
+ table: tableName,
203
+ },
204
+ format: 'JSONEachRow',
205
+ });
206
+ const indexesData = await indexesResult.json();
207
+ const indexes = Array.isArray(indexesData) ? indexesData : [];
208
+ const indexInfos = indexes.map((idx) => ({
209
+ name: idx?.name,
210
+ columns: [idx?.expr], // ClickHouse 索引表达式
211
+ unique: false, // ClickHouse 索引不保证唯一性
212
+ }));
213
+ // 获取表行数估算
214
+ const countResult = await this.client.query({
215
+ query: `
216
+ SELECT total_rows
217
+ FROM system.tables
218
+ WHERE database = {database:String}
219
+ AND name = {table:String}
220
+ `,
221
+ query_params: {
222
+ database: databaseName,
223
+ table: tableName,
224
+ },
225
+ format: 'JSONEachRow',
226
+ });
227
+ const countData = await countResult.json();
228
+ const estimatedRows = (Array.isArray(countData) && countData.length > 0)
229
+ ? parseInt(countData[0]?.total_rows || '0', 10)
230
+ : 0;
231
+ return {
232
+ name: tableName,
233
+ columns: columnInfos,
234
+ primaryKeys,
235
+ indexes: indexInfos,
236
+ estimatedRows,
237
+ };
238
+ }
239
+ /**
240
+ * 检查是否为写操作
241
+ */
242
+ isWriteOperation(query) {
243
+ return checkWriteOperation(query);
244
+ }
245
+ }
246
+ //# sourceMappingURL=clickhouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/adapters/clickhouse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * PolarDB 数据库适配器
3
+ * 使用 mysql2 驱动实现 DbAdapter 接口
4
+ * PolarDB for MySQL 完全兼容 MySQL 5.6/5.7/8.0 协议
5
+ */
6
+ import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
7
+ export declare class PolarDBAdapter implements DbAdapter {
8
+ private connection;
9
+ private config;
10
+ constructor(config: {
11
+ host: string;
12
+ port: number;
13
+ user?: string;
14
+ password?: string;
15
+ database?: string;
16
+ });
17
+ /**
18
+ * 连接到 PolarDB 数据库
19
+ */
20
+ connect(): Promise<void>;
21
+ /**
22
+ * 断开数据库连接
23
+ */
24
+ disconnect(): Promise<void>;
25
+ /**
26
+ * 执行 SQL 查询
27
+ */
28
+ executeQuery(query: string, params?: unknown[]): Promise<QueryResult>;
29
+ /**
30
+ * 获取数据库结构信息
31
+ */
32
+ getSchema(): Promise<SchemaInfo>;
33
+ /**
34
+ * 获取单个表的详细信息
35
+ */
36
+ private getTableInfo;
37
+ /**
38
+ * 检查是否为写操作
39
+ */
40
+ isWriteOperation(query: string): boolean;
41
+ }
42
+ //# sourceMappingURL=polardb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polardb.d.ts","sourceRoot":"","sources":["../../src/adapters/polardb.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAG7B,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,MAAM,CAMZ;gBAEU,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAwC3E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAwCtC;;OAEG;YACW,YAAY;IAuE1B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGzC"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * PolarDB 数据库适配器
3
+ * 使用 mysql2 驱动实现 DbAdapter 接口
4
+ * PolarDB for MySQL 完全兼容 MySQL 5.6/5.7/8.0 协议
5
+ */
6
+ import mysql from 'mysql2/promise';
7
+ import { isWriteOperation as checkWriteOperation } from '../utils/safety.js';
8
+ export class PolarDBAdapter {
9
+ connection = null;
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * 连接到 PolarDB 数据库
16
+ */
17
+ async connect() {
18
+ try {
19
+ this.connection = await mysql.createConnection({
20
+ host: this.config.host,
21
+ port: this.config.port,
22
+ user: this.config.user,
23
+ password: this.config.password,
24
+ database: this.config.database,
25
+ multipleStatements: false,
26
+ });
27
+ // 测试连接
28
+ await this.connection.ping();
29
+ }
30
+ catch (error) {
31
+ throw new Error(`PolarDB 连接失败: ${error instanceof Error ? error.message : String(error)}`);
32
+ }
33
+ }
34
+ /**
35
+ * 断开数据库连接
36
+ */
37
+ async disconnect() {
38
+ if (this.connection) {
39
+ await this.connection.end();
40
+ this.connection = null;
41
+ }
42
+ }
43
+ /**
44
+ * 执行 SQL 查询
45
+ */
46
+ async executeQuery(query, params) {
47
+ if (!this.connection) {
48
+ throw new Error('数据库未连接');
49
+ }
50
+ const startTime = Date.now();
51
+ try {
52
+ const [rows, fields] = await this.connection.execute(query, params);
53
+ const executionTime = Date.now() - startTime;
54
+ // 处理不同类型的查询结果
55
+ if (Array.isArray(rows)) {
56
+ return {
57
+ rows: rows,
58
+ executionTime,
59
+ metadata: {
60
+ fieldCount: fields?.length || 0,
61
+ },
62
+ };
63
+ }
64
+ else {
65
+ // INSERT/UPDATE/DELETE 等操作
66
+ const result = rows;
67
+ return {
68
+ rows: [],
69
+ affectedRows: result.affectedRows,
70
+ executionTime,
71
+ metadata: {
72
+ insertId: result.insertId,
73
+ changedRows: result.changedRows,
74
+ },
75
+ };
76
+ }
77
+ }
78
+ catch (error) {
79
+ throw new Error(`查询执行失败: ${error instanceof Error ? error.message : String(error)}`);
80
+ }
81
+ }
82
+ /**
83
+ * 获取数据库结构信息
84
+ */
85
+ async getSchema() {
86
+ if (!this.connection) {
87
+ throw new Error('数据库未连接');
88
+ }
89
+ try {
90
+ // 获取数据库版本
91
+ const [versionRows] = await this.connection.query('SELECT VERSION() as version');
92
+ const version = versionRows[0]?.version || 'unknown';
93
+ // 获取当前数据库名
94
+ const [dbRows] = await this.connection.query('SELECT DATABASE() as db');
95
+ const databaseName = dbRows[0]?.db || this.config.database || 'unknown';
96
+ // 获取所有表
97
+ const [tables] = await this.connection.query('SHOW TABLES');
98
+ const tableInfos = [];
99
+ for (const tableRow of tables) {
100
+ const tableName = Object.values(tableRow)[0];
101
+ const tableInfo = await this.getTableInfo(tableName);
102
+ tableInfos.push(tableInfo);
103
+ }
104
+ return {
105
+ databaseType: 'polardb',
106
+ databaseName,
107
+ tables: tableInfos,
108
+ version,
109
+ };
110
+ }
111
+ catch (error) {
112
+ throw new Error(`获取数据库结构失败: ${error instanceof Error ? error.message : String(error)}`);
113
+ }
114
+ }
115
+ /**
116
+ * 获取单个表的详细信息
117
+ */
118
+ async getTableInfo(tableName) {
119
+ if (!this.connection) {
120
+ throw new Error('数据库未连接');
121
+ }
122
+ // 获取列信息
123
+ const [columns] = await this.connection.query('SHOW FULL COLUMNS FROM ??', [tableName]);
124
+ const columnInfos = columns.map((col) => ({
125
+ name: col.Field,
126
+ type: col.Type,
127
+ nullable: col.Null === 'YES',
128
+ defaultValue: col.Default,
129
+ comment: col.Comment || undefined,
130
+ }));
131
+ // 获取主键
132
+ const primaryKeys = columns
133
+ .filter((col) => col.Key === 'PRI')
134
+ .map((col) => col.Field);
135
+ // 获取索引信息
136
+ const [indexes] = await this.connection.query('SHOW INDEX FROM ??', [tableName]);
137
+ const indexMap = new Map();
138
+ for (const idx of indexes) {
139
+ const indexName = idx.Key_name;
140
+ if (indexName === 'PRIMARY')
141
+ continue; // 跳过主键索引
142
+ if (!indexMap.has(indexName)) {
143
+ indexMap.set(indexName, {
144
+ columns: [],
145
+ unique: idx.Non_unique === 0,
146
+ });
147
+ }
148
+ indexMap.get(indexName).columns.push(idx.Column_name);
149
+ }
150
+ const indexInfos = Array.from(indexMap.entries()).map(([name, info]) => ({
151
+ name,
152
+ columns: info.columns,
153
+ unique: info.unique,
154
+ }));
155
+ // 获取表行数估算
156
+ const [statusRows] = await this.connection.query('SHOW TABLE STATUS WHERE Name = ?', [tableName]);
157
+ const estimatedRows = statusRows[0]?.Rows || 0;
158
+ return {
159
+ name: tableName,
160
+ columns: columnInfos,
161
+ primaryKeys,
162
+ indexes: indexInfos,
163
+ estimatedRows,
164
+ };
165
+ }
166
+ /**
167
+ * 检查是否为写操作
168
+ */
169
+ isWriteOperation(query) {
170
+ return checkWriteOperation(query);
171
+ }
172
+ }
173
+ //# sourceMappingURL=polardb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polardb.js","sourceRoot":"","sources":["../../src/adapters/polardb.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,12 +16,14 @@ import { KingbaseAdapter } from './adapters/kingbase.js';
16
16
  import { GaussDBAdapter } from './adapters/gaussdb.js';
17
17
  import { OceanBaseAdapter } from './adapters/oceanbase.js';
18
18
  import { TiDBAdapter } from './adapters/tidb.js';
19
+ import { ClickHouseAdapter } from './adapters/clickhouse.js';
20
+ import { PolarDBAdapter } from './adapters/polardb.js';
19
21
  const program = new Command();
20
22
  program
21
23
  .name('universal-db-mcp')
22
24
  .description('MCP 数据库万能连接器 - 让 Claude Desktop 直接连接你的数据库')
23
25
  .version('0.1.0')
24
- .requiredOption('--type <type>', '数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss|oceanbase|tidb)')
26
+ .requiredOption('--type <type>', '数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss|oceanbase|tidb|clickhouse|polardb)')
25
27
  .option('--host <host>', '数据库主机地址')
26
28
  .option('--port <port>', '数据库端口', parseInt)
27
29
  .option('--user <user>', '用户名')
@@ -33,8 +35,8 @@ program
33
35
  .action(async (options) => {
34
36
  try {
35
37
  // 验证数据库类型
36
- if (!['mysql', 'postgres', 'redis', 'oracle', 'dm', 'sqlserver', 'mssql', 'mongodb', 'sqlite', 'kingbase', 'gaussdb', 'opengauss', 'oceanbase', 'tidb'].includes(options.type)) {
37
- console.error('❌ 错误: 不支持的数据库类型。支持的类型: mysql, postgres, redis, oracle, dm, sqlserver (或 mssql), mongodb, sqlite, kingbase, gaussdb (或 opengauss), oceanbase, tidb');
38
+ if (!['mysql', 'postgres', 'redis', 'oracle', 'dm', 'sqlserver', 'mssql', 'mongodb', 'sqlite', 'kingbase', 'gaussdb', 'opengauss', 'oceanbase', 'tidb', 'clickhouse', 'polardb'].includes(options.type)) {
39
+ console.error('❌ 错误: 不支持的数据库类型。支持的类型: mysql, postgres, redis, oracle, dm, sqlserver (或 mssql), mongodb, sqlite, kingbase, gaussdb (或 opengauss), oceanbase, tidb, clickhouse, polardb');
38
40
  process.exit(1);
39
41
  }
40
42
  // 规范化 SQL Server 和 GaussDB 别名
@@ -191,6 +193,24 @@ program
191
193
  database: config.database,
192
194
  });
193
195
  break;
196
+ case 'clickhouse':
197
+ adapter = new ClickHouseAdapter({
198
+ host: config.host,
199
+ port: config.port,
200
+ user: config.user,
201
+ password: config.password,
202
+ database: config.database,
203
+ });
204
+ break;
205
+ case 'polardb':
206
+ adapter = new PolarDBAdapter({
207
+ host: config.host,
208
+ port: config.port,
209
+ user: config.user,
210
+ password: config.password,
211
+ database: config.database,
212
+ });
213
+ break;
194
214
  default:
195
215
  throw new Error(`不支持的数据库类型: ${config.type}`);
196
216
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC;KAChB,cAAc,CAAC,eAAe,EAAE,oIAAoI,CAAC;KACrK,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;KAClC,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC1C,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;KAC9B,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC;KACrC,MAAM,CAAC,uBAAuB,EAAE,OAAO,CAAC;KACxC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;KACzC,MAAM,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;KAChE,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,KAAK,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,UAAU;QACV,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxM,OAAO,CAAC,KAAK,CAAC,wKAAwK,CAAC,CAAC;YACxL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,8BAA8B;QAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;QACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QAED,kCAAkC;QAClC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO;QACP,MAAM,MAAM,GAAa;YACvB,IAAI,EAAE,MAA0K;YAChL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,UAAU,EAAE,OAAO,CAAC,gBAAgB;SACrC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE7C,eAAe;QACf,IAAI,OAAkB,CAAC;QAEvB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,OAAO;gBACV,OAAO,GAAG,IAAI,YAAY,CAAC;oBACzB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,UAAU;gBACb,OAAO,GAAG,IAAI,iBAAiB,CAAC;oBAC9B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,OAAO;gBACV,OAAO,GAAG,IAAI,YAAY,CAAC;oBACzB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,QAAQ;gBACX,OAAO,GAAG,IAAI,aAAa,CAAC;oBAC1B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,IAAI;gBACP,OAAO,GAAG,IAAI,SAAS,CAAC;oBACtB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,WAAW;gBACd,OAAO,GAAG,IAAI,gBAAgB,CAAC;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO,GAAG,IAAI,cAAc,CAAC;oBAC3B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU,EAAE,OAAO,CAAC,UAAU;iBAC/B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,QAAQ;gBACX,OAAO,GAAG,IAAI,aAAa,CAAC;oBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAS;oBAC1B,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU;iBAC7B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,UAAU;gBACb,OAAO,GAAG,IAAI,eAAe,CAAC;oBAC5B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO,GAAG,IAAI,cAAc,CAAC;oBAC3B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,WAAW;gBACd,OAAO,GAAG,IAAI,gBAAgB,CAAC;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,GAAG,IAAI,WAAW,CAAC;oBACxB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,YAAY;gBACf,OAAO,GAAG,IAAI,iBAAiB,CAAC;oBAC9B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO,GAAG,IAAI,cAAc,CAAC;oBAC3B,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER;gBACE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,cAAc;QACd,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,SAAS;QACT,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -49,7 +49,7 @@ export interface QueryResult {
49
49
  */
50
50
  export interface SchemaInfo {
51
51
  /** 数据库类型 */
52
- databaseType: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb' | 'oceanbase' | 'tidb';
52
+ databaseType: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb' | 'oceanbase' | 'tidb' | 'clickhouse' | 'polardb';
53
53
  /** 数据库名称 */
54
54
  databaseName: string;
55
55
  /** 表信息列表 */
@@ -102,7 +102,7 @@ export interface IndexInfo {
102
102
  * 数据库连接配置
103
103
  */
104
104
  export interface DbConfig {
105
- type: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb' | 'oceanbase' | 'tidb';
105
+ type: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb' | 'oceanbase' | 'tidb' | 'clickhouse' | 'polardb';
106
106
  host?: string;
107
107
  port?: number;
108
108
  user?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACpJ,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IAC5I,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/K,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACvK,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-db-mcp",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "MCP 数据库万能连接器 - 让 Claude Desktop 直接连接你的数据库",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -37,6 +37,11 @@
37
37
  "oceanbase",
38
38
  "tidb",
39
39
  "pingcap",
40
+ "clickhouse",
41
+ "olap",
42
+ "polardb",
43
+ "阿里云",
44
+ "列式数据库",
40
45
  "蚂蚁金服",
41
46
  "华为高斯",
42
47
  "人大金仓",
@@ -58,6 +63,7 @@
58
63
  "LICENSE"
59
64
  ],
60
65
  "dependencies": {
66
+ "@clickhouse/client": "^1.16.0",
61
67
  "@modelcontextprotocol/sdk": "^1.0.4",
62
68
  "better-sqlite3": "^11.8.1",
63
69
  "commander": "^12.1.0",