mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-02 04:29:38 +08:00
- 改用 information_schema.columns 读取 StarRocks COLUMN_KEY - 将主键列规范标记为 PRI,恢复安全行定位能力 - 补充 StarRocks 列元数据解析测试并刷新 driver agent revision
82 lines
2.4 KiB
Go
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])
|
|
}
|
|
}
|