build postgres dsn string dynamically

This commit is contained in:
Danny van Kooten 2018-07-30 09:33:49 +02:00
parent fe624a63a1
commit b6f3be0e8e
3 changed files with 53 additions and 5 deletions

View File

@ -1,8 +1,8 @@
package sqlstore
import (
"fmt"
mysql "github.com/go-sql-driver/mysql"
"strings"
)
type Config struct {
@ -19,11 +19,23 @@ func (c *Config) DSN() string {
switch c.Driver {
case "postgres":
dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s", c.Host, c.User, c.Password, c.Name)
if c.SSLMode != "" {
dsn = dsn + fmt.Sprintf(" sslmode=%s", c.SSLMode)
params := map[string]string{
"host": c.Host,
"dbname": c.Name,
"user": c.User,
"password": c.Password,
"sslmode": c.SSLMode,
}
for k, v := range params {
if v == "" {
continue
}
dsn = dsn + k + "=" + v + " "
}
dsn = strings.TrimSpace(dsn)
case "mysql":
mc := mysql.NewConfig()
mc.User = c.User

View File

@ -0,0 +1,29 @@
package sqlstore
import (
"fmt"
"testing"
)
func TestConfigDSN(t *testing.T) {
c := Config{
Driver: "postgres",
User: "john",
Password: "foo",
}
e := fmt.Sprintf("user=%s password=%s", c.User, c.Password)
if v := c.DSN(); v != e {
t.Errorf("Invalid DSN. Expected %s, got %s", e, v)
}
c = Config{
Driver: "postgres",
User: "john",
Password: "foo",
SSLMode: "disable",
}
e = fmt.Sprintf("user=%s password=%s sslmode=%s", c.User, c.Password, c.SSLMode)
if v := c.DSN(); v != e {
t.Errorf("Invalid DSN. Expected %s, got %s", e, v)
}
}

View File

@ -78,7 +78,9 @@ func (db *sqlstore) UpdatePageviews(pageviews []*models.Pageview) error {
if err != nil {
return err
}
query := tx.Rebind(`UPDATE pageviews SET is_bounce = ?, duration = ? WHERE id = ?`)
stmt, err := tx.Preparex(query)
if err != nil {
return err
@ -86,6 +88,11 @@ func (db *sqlstore) UpdatePageviews(pageviews []*models.Pageview) error {
for i := range pageviews {
_, err = stmt.Exec(query, pageviews[i].IsBounce, pageviews[i].Duration)
if err != nil {
tx.Rollback()
return err
}
}
err = tx.Commit()