mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-11 20:49:47 +08:00
- 金仓外置驱动链路增加表名与变更字段归一化,修复 ApplyChanges 场景下双引号转义异常导致的 SQL 语法错误 - 新增金仓公共标识符工具并复用到 kingbase_impl 与 optional_driver_agent_impl,统一处理多重转义、schema.table 拆分与引用规范 - 金仓代理连接后自动探测并设置 search_path,降低查询时必须手写 schema 前缀的概率 - MongoDB 连接参数改为显式 host/hosts 优先,避免被 URI 中 localhost 覆盖;代理链路保留目标地址不再改写为本地地址 - 连接测试增加前后端超时收敛与日志增强,避免长时间转圈;连接错误文案在未启用 TLS 时移除误导性的“SSL”前缀 - 统一日志级别为 INFO/WARN/ERROR,默认日志目录收敛到 ~/.GoNavi/Logs,并补充驱动构建脚本 build-driver-agents.sh
68 lines
2.4 KiB
Go
68 lines
2.4 KiB
Go
package db
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"GoNavi-Wails/internal/connection"
|
|
)
|
|
|
|
func TestNormalizeKingbaseAgentTableName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in string
|
|
want string
|
|
}{
|
|
{name: "plain", in: "ldf_server.andon_events", want: "ldf_server.andon_events"},
|
|
{name: "quoted", in: `"ldf_server"."andon_events"`, want: "ldf_server.andon_events"},
|
|
{name: "double quoted", in: `""ldf_server"".""andon_events""`, want: "ldf_server.andon_events"},
|
|
{name: "escaped", in: `\"ldf_server\".\"andon_events\"`, want: "ldf_server.andon_events"},
|
|
{name: "double escaped", in: `\\\"ldf_server\\\".\\\"andon_events\\\"`, want: "ldf_server.andon_events"},
|
|
{name: "space around dot", in: ` "ldf_server" . "andon_events" `, want: "ldf_server.andon_events"},
|
|
{name: "table only", in: `bcs_barcode`, want: "bcs_barcode"},
|
|
{name: "table only quoted", in: `"bcs_barcode"`, want: "bcs_barcode"},
|
|
{name: "table only double quoted", in: `""bcs_barcode""`, want: "bcs_barcode"},
|
|
{name: "table only double escaped", in: `\\\"bcs_barcode\\\"`, want: "bcs_barcode"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := normalizeKingbaseAgentTableName(tt.in); got != tt.want {
|
|
t.Fatalf("normalizeKingbaseAgentTableName(%q) = %q, want %q", tt.in, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNormalizeKingbaseAgentChangeSetByColumns(t *testing.T) {
|
|
columns := []string{"andon_events_id", "event_name", "event_code"}
|
|
input := connection.ChangeSet{
|
|
Inserts: []map[string]interface{}{
|
|
{"event name": "物料1", "event_code": "EV-0001", "andon_events_id": 1},
|
|
},
|
|
Updates: []connection.UpdateRow{
|
|
{Keys: map[string]interface{}{"andon_events_id": 1}, Values: map[string]interface{}{"event name": "物料2"}},
|
|
},
|
|
Deletes: []map[string]interface{}{
|
|
{"andon_events_id": 1},
|
|
},
|
|
}
|
|
|
|
out, err := normalizeKingbaseAgentChangeSetByColumns(input, columns)
|
|
if err != nil {
|
|
t.Fatalf("normalizeKingbaseAgentChangeSetByColumns error: %v", err)
|
|
}
|
|
|
|
if _, ok := out.Inserts[0]["event_name"]; !ok {
|
|
t.Fatalf("expected insert to map \"event name\" -> \"event_name\"")
|
|
}
|
|
if _, ok := out.Inserts[0]["event name"]; ok {
|
|
t.Fatalf("unexpected insert key \"event name\" after normalization")
|
|
}
|
|
if _, ok := out.Updates[0].Values["event_name"]; !ok {
|
|
t.Fatalf("expected update values to map \"event name\" -> \"event_name\"")
|
|
}
|
|
if _, ok := out.Updates[0].Values["event name"]; ok {
|
|
t.Fatalf("unexpected update value key \"event name\" after normalization")
|
|
}
|
|
}
|