Files
MyGoNavi/internal/db/starrocks_metadata_test.go
Syngnat f2c8122c46 🐛 fix(starrocks): 修复主键元数据识别导致表只读
- 改用 information_schema.columns 读取 StarRocks COLUMN_KEY
- 将主键列规范标记为 PRI,恢复安全行定位能力
- 补充 StarRocks 列元数据解析测试并刷新 driver agent revision
2026-05-15 19:51:33 +08:00

82 lines
2.4 KiB
Go

//go:build gonavi_full_drivers || gonavi_starrocks_driver
package db
import (
"strings"
"testing"
)
func TestBuildStarRocksColumnsQuery_UsesInformationSchemaColumnKey(t *testing.T) {
t.Parallel()
query := buildStarRocksColumnsQuery("test_db", "cross_border_erp_erp_sales_order")
if !strings.Contains(query, "FROM information_schema.columns") {
t.Fatalf("StarRocks columns query should use information_schema.columns, got=%s", query)
}
if !strings.Contains(query, "COLUMN_KEY") {
t.Fatalf("StarRocks columns query should expose COLUMN_KEY as Key, got=%s", query)
}
if !strings.Contains(query, "TABLE_SCHEMA = 'test_db'") {
t.Fatalf("StarRocks columns query should filter by schema, got=%s", query)
}
if !strings.Contains(query, "TABLE_NAME = 'cross_border_erp_erp_sales_order'") {
t.Fatalf("StarRocks columns query should filter by table name, got=%s", query)
}
}
func TestBuildStarRocksColumnsQuery_UsesCurrentDatabaseWhenDbNameEmpty(t *testing.T) {
t.Parallel()
query := buildStarRocksColumnsQuery("", "orders")
if !strings.Contains(query, "TABLE_SCHEMA = DATABASE()") {
t.Fatalf("StarRocks columns query should fall back to current database, got=%s", query)
}
if !strings.Contains(query, "TABLE_NAME = 'orders'") {
t.Fatalf("StarRocks columns query should filter by table name, got=%s", query)
}
}
func TestBuildStarRocksColumnDefinitions_MarksPrimaryKeyColumns(t *testing.T) {
t.Parallel()
columns := buildStarRocksColumnDefinitions([]map[string]interface{}{
{
"Field": "id",
"Type": "bigint",
"Null": "NO",
"Key": "pri",
"Default": nil,
"Extra": "",
"Comment": "订单ID",
},
{
"Field": "order_no",
"Type": "varchar(64)",
"Null": "YES",
"Key": "",
"Default": "",
"Extra": "",
"Comment": "订单号",
},
})
if len(columns) != 2 {
t.Fatalf("unexpected column count: %d", len(columns))
}
if columns[0].Name != "id" || columns[0].Key != "PRI" {
t.Fatalf("StarRocks primary key column was not marked as PRI: %+v", columns[0])
}
if columns[1].Name != "order_no" || columns[1].Key != "" {
t.Fatalf("StarRocks non-primary column key should stay empty: %+v", columns[1])
}
if columns[0].Default != nil {
t.Fatalf("nil default should remain nil: %+v", columns[0])
}
if columns[1].Default == nil || *columns[1].Default != "" {
t.Fatalf("empty string default should be preserved: %+v", columns[1])
}
}