feat(starrocks): 新增 StarRocks 数据源与高级对象能力

- 后端接入:新增独立 starrocks 可选驱动,复用 MySQL wire 协议并支持默认 9030 端口
- 驱动管理:补齐 manifest、build tag、revision、driver-agent provider 和构建脚本
- 前端接入:新增 StarRocks 连接类型、图标、能力矩阵、URI 解析、保存回显和 SQL 自动 LIMIT
- 方言增强:新增 StarRocks 类型、关键字、函数补全和专属建表 SQL 生成
- 高级对象:支持物化视图对象浏览、Rollup 模板、外部 Catalog 模板和高级表设计器参数
- CI 发布:将 StarRocks driver-agent 纳入 dev/release 构建与 release 资产校验
This commit is contained in:
Syngnat
2026-05-15 17:30:08 +08:00
parent 2580e4d6f3
commit 569edbb11a
49 changed files with 1164 additions and 62 deletions

View File

@@ -202,6 +202,7 @@ const getDefaultPortByType = (type: string) => {
return 2881;
case "doris":
case "diros":
case "starrocks":
return 9030;
case "sphinx":
return 9306;
@@ -259,6 +260,7 @@ const sslSupportedTypes = new Set([
"oceanbase",
"doris",
"diros",
"starrocks",
"sphinx",
"dameng",
"clickhouse",
@@ -290,6 +292,7 @@ const isMySQLCompatibleType = (type: string) =>
type === "oceanbase" ||
type === "doris" ||
type === "diros" ||
type === "starrocks" ||
type === "sphinx";
const supportsConnectionParamsForType = (type: string) =>
@@ -1359,6 +1362,8 @@ const ConnectionModal: React.FC<{
parseMultiHostUri(trimmedUri, "jdbc:mysql") ||
parseMultiHostUri(trimmedUri, "oceanbase") ||
parseMultiHostUri(trimmedUri, "jdbc:oceanbase") ||
parseMultiHostUri(trimmedUri, "starrocks") ||
parseMultiHostUri(trimmedUri, "jdbc:starrocks") ||
parseMultiHostUri(trimmedUri, "diros") ||
parseMultiHostUri(trimmedUri, "doris");
if (!parsed) {
@@ -1782,7 +1787,7 @@ const ConnectionModal: React.FC<{
if (isMySQLCompatibleType(dbType)) {
const defaultPort = getDefaultPortByType(dbType);
const scheme =
dbType === "diros" ? "doris" : dbType === "oceanbase" ? "oceanbase" : "mysql";
dbType === "diros" ? "doris" : dbType === "starrocks" ? "starrocks" : dbType === "oceanbase" ? "oceanbase" : "mysql";
if (dbType === "oceanbase") {
return `${scheme}://sys%40oracle001:pass@127.0.0.1:${defaultPort}/SERVICE_NAME?protocol=oracle`;
}
@@ -1896,7 +1901,7 @@ const ConnectionModal: React.FC<{
const dbPath = database ? `/${encodeURIComponent(database)}` : "/";
const query = params.toString();
const scheme =
type === "diros" ? "doris" : type === "oceanbase" ? "oceanbase" : "mysql";
type === "diros" ? "doris" : type === "starrocks" ? "starrocks" : type === "oceanbase" ? "oceanbase" : "mysql";
return `${scheme}://${encodedAuth}${hosts.join(",")}${dbPath}${query ? `?${query}` : ""}`;
}
@@ -2256,6 +2261,7 @@ const ConnectionModal: React.FC<{
configType === "mariadb" ||
configType === "oceanbase" ||
configType === "diros" ||
configType === "starrocks" ||
configType === "sphinx"
? normalizedHosts.slice(1)
: [];
@@ -3631,6 +3637,11 @@ const ConnectionModal: React.FC<{
name: "Doris",
icon: getDbIcon("diros", undefined, 36),
},
{
key: "starrocks",
name: "StarRocks",
icon: getDbIcon("starrocks", undefined, 36),
},
{
key: "sphinx",
name: "Sphinx",