mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-12 00:19:40 +08:00
- 架构升级:从driver专属拨号器改为通用本地端口转发模式
- 并发安全:sync.Once保护Close操作,RWMutex保护状态访问,双向errc等待
- 连接池化:GetOrCreateLocalForwarder/GetOrCreateSSHClient实现缓存复用
- SQL安全:kingbase_impl.go引入esc函数,防止双引号注入(""ldf_server""问题)
- Schema动态化:三级fallback(schema.table解析→dbName参数→current_schema())
- 代码复用:scanRows统一行扫描逻辑,normalizeQueryValueWithDBType增强类型处理
Close #40
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package db
|
||
|
||
import "testing"
|
||
|
||
func TestNormalizeQueryValueWithDBType_BitBytes(t *testing.T) {
|
||
v := normalizeQueryValueWithDBType([]byte{0x00}, "BIT")
|
||
if v != int64(0) {
|
||
t.Fatalf("BIT 0x00 期望为 0,实际=%v(%T)", v, v)
|
||
}
|
||
|
||
v = normalizeQueryValueWithDBType([]byte{0x01}, "bit")
|
||
if v != int64(1) {
|
||
t.Fatalf("BIT 0x01 期望为 1,实际=%v(%T)", v, v)
|
||
}
|
||
|
||
v = normalizeQueryValueWithDBType([]byte{0x01, 0x02}, "BIT VARYING")
|
||
if v != int64(258) {
|
||
t.Fatalf("BIT 0x0102 期望为 258,实际=%v(%T)", v, v)
|
||
}
|
||
}
|
||
|
||
func TestNormalizeQueryValueWithDBType_BitLargeAsString(t *testing.T) {
|
||
v := normalizeQueryValueWithDBType([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, "BIT")
|
||
if s, ok := v.(string); !ok || s != "18446744073709551615" {
|
||
t.Fatalf("BIT 0xffffffffffffffff 期望为 string(18446744073709551615),实际=%v(%T)", v, v)
|
||
}
|
||
}
|
||
|
||
func TestNormalizeQueryValueWithDBType_ByteFallbacks(t *testing.T) {
|
||
v := normalizeQueryValueWithDBType([]byte("abc"), "")
|
||
if v != "abc" {
|
||
t.Fatalf("文本 []byte 期望返回 string,实际=%v(%T)", v, v)
|
||
}
|
||
|
||
v = normalizeQueryValueWithDBType([]byte{0x00}, "")
|
||
if v != int64(0) {
|
||
t.Fatalf("未知类型 0x00 期望返回 0,实际=%v(%T)", v, v)
|
||
}
|
||
|
||
v = normalizeQueryValueWithDBType([]byte{0xff}, "")
|
||
if v != "0xff" {
|
||
t.Fatalf("未知类型 0xff 期望返回 0xff,实际=%v(%T)", v, v)
|
||
}
|
||
}
|