github.com/goravel/framework@v1.13.9/database/db/dsn.go (about) 1 package db 2 3 import ( 4 "fmt" 5 6 "github.com/goravel/framework/contracts/config" 7 databasecontract "github.com/goravel/framework/contracts/database" 8 ) 9 10 type Dsn interface { 11 Mysql(config databasecontract.Config) string 12 Postgresql(config databasecontract.Config) string 13 Sqlite(config databasecontract.Config) string 14 Sqlserver(config databasecontract.Config) string 15 } 16 17 type DsnImpl struct { 18 config config.Config 19 connection string 20 } 21 22 func NewDsnImpl(config config.Config, connection string) *DsnImpl { 23 return &DsnImpl{ 24 config: config, 25 connection: connection, 26 } 27 } 28 29 func (d *DsnImpl) Mysql(config databasecontract.Config) string { 30 host := config.Host 31 if host == "" { 32 return "" 33 } 34 35 charset := d.config.GetString("database.connections." + d.connection + ".charset") 36 loc := d.config.GetString("database.connections." + d.connection + ".loc") 37 38 return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=%t&loc=%s&multiStatements=true", 39 config.Username, config.Password, host, config.Port, config.Database, charset, true, loc) 40 } 41 42 func (d *DsnImpl) Postgresql(config databasecontract.Config) string { 43 host := config.Host 44 if host == "" { 45 return "" 46 } 47 48 sslmode := d.config.GetString("database.connections." + d.connection + ".sslmode") 49 timezone := d.config.GetString("database.connections." + d.connection + ".timezone") 50 51 return fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s&timezone=%s", 52 config.Username, config.Password, host, config.Port, config.Database, sslmode, timezone) 53 } 54 55 func (d *DsnImpl) Sqlite(config databasecontract.Config) string { 56 return fmt.Sprintf("%s?multi_stmts=true", config.Database) 57 } 58 59 func (d *DsnImpl) Sqlserver(config databasecontract.Config) string { 60 host := config.Host 61 if host == "" { 62 return "" 63 } 64 65 charset := d.config.GetString("database.connections." + d.connection + ".charset") 66 67 return fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s&charset=%s&MultipleActiveResultSets=true", 68 config.Username, config.Password, host, config.Port, config.Database, charset) 69 }