mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2015 The Xorm Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package xorm
 | 
						|
 | 
						|
import (
 | 
						|
	"regexp"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/go-xorm/core"
 | 
						|
)
 | 
						|
 | 
						|
type mysqlDriver struct {
 | 
						|
}
 | 
						|
 | 
						|
func (p *mysqlDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) {
 | 
						|
	dsnPattern := regexp.MustCompile(
 | 
						|
		`^(?:(?P<user>.*?)(?::(?P<passwd>.*))?@)?` + // [user[:password]@]
 | 
						|
			`(?:(?P<net>[^\(]*)(?:\((?P<addr>[^\)]*)\))?)?` + // [net[(addr)]]
 | 
						|
			`\/(?P<dbname>.*?)` + // /dbname
 | 
						|
			`(?:\?(?P<params>[^\?]*))?$`) // [?param1=value1¶mN=valueN]
 | 
						|
	matches := dsnPattern.FindStringSubmatch(dataSourceName)
 | 
						|
	//tlsConfigRegister := make(map[string]*tls.Config)
 | 
						|
	names := dsnPattern.SubexpNames()
 | 
						|
 | 
						|
	uri := &core.Uri{DbType: core.MYSQL}
 | 
						|
 | 
						|
	for i, match := range matches {
 | 
						|
		switch names[i] {
 | 
						|
		case "dbname":
 | 
						|
			uri.DbName = match
 | 
						|
		case "params":
 | 
						|
			if len(match) > 0 {
 | 
						|
				kvs := strings.Split(match, "&")
 | 
						|
				for _, kv := range kvs {
 | 
						|
					splits := strings.Split(kv, "=")
 | 
						|
					if len(splits) == 2 {
 | 
						|
						switch splits[0] {
 | 
						|
						case "charset":
 | 
						|
							uri.Charset = splits[1]
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return uri, nil
 | 
						|
}
 |