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  }