1 Star 0 Fork 0

武汉乐吾乐科技有限责任公司/gokb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
url.go 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
Alsmile 提交于 2024-09-05 10:36 +08:00 . init
/******************************************************************************
* 版权信息:北京人大金仓信息技术股份有限公司
* 作者:KingbaseES
* 文件名:url.go
* 功能描述:url串处理相关接口
* 其它说明:
* 修改记录:
1.修改时间:
2.修改人:
3.修改内容:
******************************************************************************/
package gokb
import (
"fmt"
"net"
nurl "net/url"
"sort"
"strings"
)
// sql.Open()已经支持用户提供URL作为连接串:
//
// sql.Open("kingbase", "kingbase://bob:secret@1.2.3.4:54321/mydb?sslmode=verify-full")
//
// 所以ParseURL一般不再被使用,但为了向后兼容所以保留
//
// ParseURL将url转为driver.Open需要的连接串
// 比如:
//
// "kingbase://bob:secret@1.2.3.4:54321/mydb?sslmode=verify-full"
//
// 转为:
//
// "user=bob password=secret host=1.2.3.4 port=54321 dbname=mydb sslmode=verify-full"
//
// 最简短的例子:
//
// "kingbase://"
//
// 将转为空,并使用默认的连接参数
func ParseURL(url string) (s string, err error) {
u, err := nurl.Parse(url)
if nil != err { return "", err }
if "kingbase" != u.Scheme && "kingbase" != u.Scheme { return "", fmt.Errorf("invalid connection protocol: %s", u.Scheme) }
var kvs []string
escaper := strings.NewReplacer(` `, `\ `, `'`, `\'`, `\`, `\\`)
accrue := func(k, v string) {
if "" != v { kvs = append(kvs, k+"="+escaper.Replace(v)) }
}
if nil != u.User {
v := u.User.Username(); accrue("user", v)
v, _ = u.User.Password(); accrue("password", v)
}
if host, port, err := net.SplitHostPort(u.Host)
nil != err { accrue("host", u.Host)
} else { accrue("host", host); accrue("port", port) }
if "" != u.Path { accrue("dbname", u.Path[1:]) }
q := u.Query()
for k := range q { accrue(k, q.Get(k)) }
sort.Strings(kvs)
return strings.Join(kvs, " "), nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/le5le/gokb.git
git@gitee.com:le5le/gokb.git
le5le
gokb
gokb
main

搜索帮助