github.com/RevenueMonster/sqlike@v1.0.6/sql/dialect/mysql/connect.go (about) 1 package mysql 2 3 import ( 4 "github.com/RevenueMonster/sqlike/sqlike/options" 5 "github.com/RevenueMonster/sqlike/util" 6 ) 7 8 // Connect : 9 func (ms MySQL) Connect(opt *options.ConnectOptions) (connStr string) { 10 if opt.RawConnStr() != "" { 11 connStr = opt.RawConnStr() 12 return 13 } 14 15 if opt.Username == "" { 16 panic("missing username for db connection") 17 } 18 19 blr := util.AcquireString() 20 defer util.ReleaseString(blr) 21 blr.WriteString(opt.Username) 22 blr.WriteByte(':') 23 blr.WriteString(opt.Password) 24 blr.WriteByte('@') 25 if opt.Socket != "" { 26 blr.WriteString(opt.Socket) 27 } else { 28 if opt.Protocol != "" { 29 blr.WriteString(opt.Protocol) 30 } else { 31 blr.WriteString("tcp") 32 } 33 blr.WriteByte('(') 34 blr.WriteString(opt.Host) 35 if opt.Port != "" { 36 blr.WriteByte(':') 37 blr.WriteString(opt.Port) 38 } 39 blr.WriteByte(')') 40 } 41 blr.WriteByte('/') 42 blr.WriteByte('?') 43 blr.WriteString("parseTime=true") 44 if opt.Charset == "" { 45 blr.WriteString("&charset=utf8mb4") 46 blr.WriteString("&collation=utf8mb4_unicode_ci") 47 } else { 48 blr.WriteString("&charset=" + string(opt.Charset)) 49 if opt.Collate != "" { 50 blr.WriteString("&collation=" + string(opt.Collate)) 51 } 52 } 53 connStr = blr.String() 54 return 55 }