mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-30 15:19:59 +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
53 lines
2.0 KiB
Go
53 lines
2.0 KiB
Go
package db
|
|
|
|
import "testing"
|
|
|
|
func TestNormalizeKingbaseIdentCommon(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in string
|
|
want string
|
|
}{
|
|
{name: "plain", in: "ldf_server", want: "ldf_server"},
|
|
{name: "quoted", in: `"ldf_server"`, want: "ldf_server"},
|
|
{name: "escaped quoted", in: `\"ldf_server\"`, want: "ldf_server"},
|
|
{name: "double escaped quoted", in: `\\\"ldf_server\\\"`, want: "ldf_server"},
|
|
{name: "double quoted", in: `""ldf_server""`, want: "ldf_server"},
|
|
{name: "backtick quoted", in: "`ldf_server`", want: "ldf_server"},
|
|
{name: "bracket quoted", in: "[ldf_server]", want: "ldf_server"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := normalizeKingbaseIdentCommon(tt.in); got != tt.want {
|
|
t.Fatalf("normalizeKingbaseIdentCommon(%q)=%q,want=%q", tt.in, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSplitKingbaseQualifiedNameCommon(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in string
|
|
wantSchema string
|
|
wantTable string
|
|
}{
|
|
{name: "plain", in: "ldf_server.andon_events", wantSchema: "ldf_server", wantTable: "andon_events"},
|
|
{name: "quoted", in: `"ldf_server"."andon_events"`, wantSchema: "ldf_server", wantTable: "andon_events"},
|
|
{name: "escaped quoted", in: `\"ldf_server\".\"andon_events\"`, wantSchema: "ldf_server", wantTable: "andon_events"},
|
|
{name: "double escaped quoted", in: `\\\"ldf_server\\\".\\\"andon_events\\\"`, wantSchema: "ldf_server", wantTable: "andon_events"},
|
|
{name: "space around dot", in: ` "ldf_server" . "andon_events" `, wantSchema: "ldf_server", wantTable: "andon_events"},
|
|
{name: "table only", in: "andon_events", wantSchema: "", wantTable: "andon_events"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotSchema, gotTable := splitKingbaseQualifiedNameCommon(tt.in)
|
|
if gotSchema != tt.wantSchema || gotTable != tt.wantTable {
|
|
t.Fatalf("splitKingbaseQualifiedNameCommon(%q)=(%q,%q),want=(%q,%q)", tt.in, gotSchema, gotTable, tt.wantSchema, tt.wantTable)
|
|
}
|
|
})
|
|
}
|
|
}
|