@@ -27,7 +27,7 @@ const (
2727 Oracle
2828)
2929
30- func updateDSNFromEnv (ctx context.Context , dsn string ) (string , error ) {
30+ func updateFromEnv (ctx context.Context , dsn string ) (string , error ) {
3131 var err error
3232
3333 result := DSNREnvRegex .ReplaceAllStringFunc (dsn , func (match string ) string {
@@ -47,8 +47,8 @@ func updateDSNFromEnv(ctx context.Context, dsn string) (string, error) {
4747 return result , nil
4848}
4949
50- func Connect (ctx context.Context , dsn string ) (* sql.DB , DbEngine , error ) {
51- populatedDSN , err := updateDSNFromEnv (ctx , dsn )
50+ func Connect (ctx context.Context , dsn string , user string , password string ) (* sql.DB , DbEngine , error ) {
51+ populatedDSN , err := updateFromEnv (ctx , dsn )
5252 if err != nil {
5353 return nil , Unknown , err
5454 }
@@ -58,23 +58,41 @@ func Connect(ctx context.Context, dsn string) (*sql.DB, DbEngine, error) {
5858 return nil , Unknown , err
5959 }
6060
61+ if parsedDsn .User == nil {
62+ if user == "" || password == "" {
63+ return nil , Unknown , errors .New ("user and password must be set in DSN or in the configuration" )
64+ }
65+
66+ populatedUser , err := updateFromEnv (ctx , user )
67+ if err != nil {
68+ return nil , Unknown , err
69+ }
70+
71+ populatedPassword , err := updateFromEnv (ctx , password )
72+ if err != nil {
73+ return nil , Unknown , err
74+ }
75+
76+ parsedDsn .User = url .UserPassword (populatedUser , populatedPassword )
77+ }
78+
6179 switch parsedDsn .Scheme {
6280 case "mysql" :
63- db , err := mysql .Connect (ctx , populatedDSN )
81+ db , err := mysql .Connect (ctx , parsedDsn . String () )
6482 if err != nil {
6583 return nil , Unknown , err
6684 }
6785 return db , MySQL , nil
6886
6987 case "oracle" :
70- db , err := oracle .Connect (ctx , populatedDSN )
88+ db , err := oracle .Connect (ctx , parsedDsn . String () )
7189 if err != nil {
7290 return nil , Unknown , err
7391 }
7492 return db , Oracle , nil
7593
7694 case "sqlserver" :
77- db , err := sqlserver .Connect (ctx , populatedDSN )
95+ db , err := sqlserver .Connect (ctx , parsedDsn . String () )
7896 if err != nil {
7997 return nil , Unknown , err
8098 }
0 commit comments