提交 b0971e8f 编写于 作者: H huili

[Fixed dsn parsing for network addr and port by caeret. #214]

上级 52ad125f
...@@ -18,39 +18,41 @@ package taosSql ...@@ -18,39 +18,41 @@ package taosSql
import ( import (
"errors" "errors"
"net/url" "net/url"
"strconv"
"strings" "strings"
"time" "time"
) )
var ( var (
errInvalidDSNUnescaped = errors.New("invalid DSN: did you forget to escape a param value?") errInvalidDSNUnescaped = errors.New("invalid DSN: did you forget to escape a param value?")
errInvalidDSNAddr = errors.New("invalid DSN: network address not terminated (missing closing brace)") errInvalidDSNAddr = errors.New("invalid DSN: network address not terminated (missing closing brace)")
errInvalidDSNNoSlash = errors.New("invalid DSN: missing the slash separating the database name") errInvalidDSNPort = errors.New("invalid DSN: network port is not a valid number")
errInvalidDSNNoSlash = errors.New("invalid DSN: missing the slash separating the database name")
) )
// Config is a configuration parsed from a DSN string. // Config is a configuration parsed from a DSN string.
// If a new Config is created instead of being parsed from a DSN string, // If a new Config is created instead of being parsed from a DSN string,
// the NewConfig function should be used, which sets default values. // the NewConfig function should be used, which sets default values.
type config struct { type config struct {
user string // Username user string // Username
passwd string // Password (requires User) passwd string // Password (requires User)
net string // Network type net string // Network type
addr string // Network address (requires Net) addr string // Network address (requires Net)
port int port int
dbName string // Database name dbName string // Database name
params map[string]string // Connection parameters params map[string]string // Connection parameters
loc *time.Location // Location for time.Time values loc *time.Location // Location for time.Time values
columnsWithAlias bool // Prepend table alias to column names columnsWithAlias bool // Prepend table alias to column names
interpolateParams bool // Interpolate placeholders into query string interpolateParams bool // Interpolate placeholders into query string
parseTime bool // Parse time values to time.Time parseTime bool // Parse time values to time.Time
} }
// NewConfig creates a new Config and sets default values. // NewConfig creates a new Config and sets default values.
func newConfig() *config { func newConfig() *config {
return &config{ return &config{
loc: time.UTC, loc: time.UTC,
interpolateParams: true, interpolateParams: true,
parseTime: true, parseTime: true,
} }
} }
...@@ -100,7 +102,15 @@ func parseDSN(dsn string) (cfg *config, err error) { ...@@ -100,7 +102,15 @@ func parseDSN(dsn string) (cfg *config, err error) {
} }
return nil, errInvalidDSNAddr return nil, errInvalidDSNAddr
} }
cfg.addr = dsn[k+1 : i-1] strs := strings.Split(dsn[k+1:i-1], ":")
if len(strs) == 1 {
return nil, errInvalidDSNAddr
}
cfg.addr = strs[0]
cfg.port, err = strconv.Atoi(strs[1])
if err != nil {
return nil, errInvalidDSNPort
}
break break
} }
} }
...@@ -190,4 +200,3 @@ func parseDSNParams(cfg *config, params string) (err error) { ...@@ -190,4 +200,3 @@ func parseDSNParams(cfg *config, params string) (err error) {
return return
} }
...@@ -32,9 +32,8 @@ import ( ...@@ -32,9 +32,8 @@ import (
func (mc *taosConn) taosConnect(ip, user, pass, db string, port int) (taos unsafe.Pointer, err error){ func (mc *taosConn) taosConnect(ip, user, pass, db string, port int) (taos unsafe.Pointer, err error){
cuser := C.CString(user) cuser := C.CString(user)
cpass := C.CString(pass) cpass := C.CString(pass)
cip := C.CString(ip) // TODO: Addr : x.x.x.x:port, must process to ip and port format cip := C.CString(ip)
cdb := C.CString("") cdb := C.CString("")
port = 0
defer C.free(unsafe.Pointer(cip)) defer C.free(unsafe.Pointer(cip))
defer C.free(unsafe.Pointer(cuser)) defer C.free(unsafe.Pointer(cuser))
defer C.free(unsafe.Pointer(cpass)) defer C.free(unsafe.Pointer(cpass))
......
...@@ -29,7 +29,7 @@ func main() { ...@@ -29,7 +29,7 @@ func main() {
fmt.Printf("\n======== start demo test ========\n") fmt.Printf("\n======== start demo test ========\n")
// open connect to taos server // open connect to taos server
db, err := sql.Open(taosDriverName, "root:taosdata@/tcp(127.0.0.1)/demodb") db, err := sql.Open(taosDriverName, "root:taosdata@/tcp(127.0.0.1:0)/demodb")
if err != nil { if err != nil {
log.Fatalf("Open database error: %s\n", err) log.Fatalf("Open database error: %s\n", err)
} }
...@@ -302,4 +302,4 @@ func checkErr(err error) { ...@@ -302,4 +302,4 @@ func checkErr(err error) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册