Skip to content

Commit 06df642

Browse files
committed
Config: Move database DSN-related functionality to "pkg/dsn" #47 photoprism#5285
Signed-off-by: Michael Mayer <[email protected]>
1 parent 40097b6 commit 06df642

File tree

20 files changed

+469
-408
lines changed

20 files changed

+469
-408
lines changed

internal/commands/cluster_register_http_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
cfg "github.com/photoprism/photoprism/internal/config"
1616
"github.com/photoprism/photoprism/internal/photoprism/get"
1717
"github.com/photoprism/photoprism/internal/service/cluster"
18+
"github.com/photoprism/photoprism/pkg/dsn"
1819
)
1920

2021
func TestClusterRegister_HTTPHappyPath(t *testing.T) {
@@ -66,8 +67,8 @@ func TestClusterRegister_HTTPHappyPath(t *testing.T) {
6667
assert.Equal(t, "pp-node-02", gjson.Get(out, "Node.Name").String())
6768
assert.Equal(t, cluster.ExampleClientSecret, gjson.Get(out, "Secrets.ClientSecret").String())
6869
assert.Equal(t, "pwd", gjson.Get(out, "Database.Password").String())
69-
dsn := gjson.Get(out, "Database.DSN").String()
70-
parsed := cfg.NewDSN(dsn)
70+
dbDsn := gjson.Get(out, "Database.DSN").String()
71+
parsed := dsn.Parse(dbDsn)
7172
assert.Equal(t, "user", parsed.User)
7273
assert.Equal(t, "pwd", parsed.Password)
7374
assert.Equal(t, "tcp", parsed.Net)
@@ -238,8 +239,8 @@ func TestClusterNodesRotate_HTTPJson(t *testing.T) {
238239
assert.Equal(t, "pp-node-04", gjson.Get(out, "Node.Name").String())
239240
assert.Equal(t, secret, gjson.Get(out, "Secrets.ClientSecret").String())
240241
assert.Equal(t, "pwd3", gjson.Get(out, "Database.Password").String())
241-
dsn := gjson.Get(out, "Database.DSN").String()
242-
parsed := cfg.NewDSN(dsn)
242+
dbDsn := gjson.Get(out, "Database.DSN").String()
243+
parsed := dsn.Parse(dbDsn)
243244
assert.Equal(t, "user", parsed.User)
244245
assert.Equal(t, "pwd3", parsed.Password)
245246
assert.Equal(t, "tcp", parsed.Net)
@@ -304,8 +305,8 @@ func TestClusterNodesRotate_DBOnly_JSON(t *testing.T) {
304305
assert.NoError(t, err)
305306
assert.Equal(t, "pp-node-05", gjson.Get(out, "Node.Name").String())
306307
assert.Equal(t, "pwd4", gjson.Get(out, "Database.Password").String())
307-
dsn := gjson.Get(out, "Database.DSN").String()
308-
parsed := cfg.NewDSN(dsn)
308+
dbDsn := gjson.Get(out, "Database.DSN").String()
309+
parsed := dsn.Parse(dbDsn)
309310
assert.Equal(t, "pp_user", parsed.User)
310311
assert.Equal(t, "pwd4", parsed.Password)
311312
assert.Equal(t, "tcp", parsed.Net)
@@ -627,8 +628,8 @@ func TestClusterRegister_RotateDatabase_JSON(t *testing.T) {
627628
assert.NoError(t, err)
628629
assert.Equal(t, "pp-node-07", gjson.Get(out, "Node.Name").String())
629630
assert.Equal(t, "pwd7", gjson.Get(out, "Database.Password").String())
630-
dsn := gjson.Get(out, "Database.DSN").String()
631-
parsed := cfg.NewDSN(dsn)
631+
dbDsn := gjson.Get(out, "Database.DSN").String()
632+
parsed := dsn.Parse(dbDsn)
632633
assert.Equal(t, "pp_user", parsed.User)
633634
assert.Equal(t, "pwd7", parsed.Password)
634635
assert.Equal(t, "tcp", parsed.Net)

internal/config/config_db.go

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,20 @@ import (
2121
"github.com/photoprism/photoprism/internal/mutex"
2222
"github.com/photoprism/photoprism/internal/service/cluster"
2323
"github.com/photoprism/photoprism/pkg/clean"
24+
"github.com/photoprism/photoprism/pkg/dsn"
2425
"github.com/photoprism/photoprism/pkg/txt"
2526
)
2627

2728
// SQL Databases.
2829
// TODO: PostgreSQL support requires upgrading GORM, so generic column data types can be used.
2930
const (
3031
Auto = "auto"
31-
MySQL = "mysql"
32-
MariaDB = "mariadb"
33-
Postgres = "postgres"
34-
SQLite3 = "sqlite3"
32+
MySQL = dsn.DriverMySQL
33+
MariaDB = dsn.DriverMariaDB
34+
Postgres = dsn.DriverPostgres
35+
SQLite3 = dsn.DriverSQLite3
3536
)
3637

37-
// SQLite default DSNs.
38-
const (
39-
SQLiteTestDB = ".test.db"
40-
SQLiteMemoryDSN = ":memory:"
41-
)
42-
43-
// DatabaseDSNParams maps required DSN parameters by driver type.
44-
var DatabaseDSNParams = Values{
45-
MySQL: "charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true",
46-
MariaDB: "charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true",
47-
Postgres: "sslmode=disable TimeZone=UTC",
48-
SQLite3: "_busy_timeout=5000",
49-
}
50-
5138
// DatabaseDriver returns the database driver name.
5239
func (c *Config) DatabaseDriver() string {
5340
c.normalizeDatabaseDSN()
@@ -145,7 +132,7 @@ func (c *Config) DatabaseDSN() string {
145132
c.DatabasePassword(),
146133
databaseServer,
147134
c.DatabaseName(),
148-
DatabaseDSNParams[MySQL],
135+
dsn.Params[dsn.DriverMySQL],
149136
c.DatabaseTimeout(),
150137
)
151138
case Postgres:
@@ -157,10 +144,10 @@ func (c *Config) DatabaseDSN() string {
157144
c.DatabaseHost(),
158145
c.DatabasePort(),
159146
c.DatabaseTimeout(),
160-
DatabaseDSNParams[Postgres],
147+
dsn.Params[dsn.DriverPostgres],
161148
)
162149
case SQLite3:
163-
return filepath.Join(c.StoragePath(), fmt.Sprintf("index.db?%s", DatabaseDSNParams[SQLite3]))
150+
return filepath.Join(c.StoragePath(), fmt.Sprintf("index.db?%s", dsn.Params[dsn.DriverSQLite3]))
164151
default:
165152
log.Errorf("config: empty database dsn")
166153
return ""
@@ -172,7 +159,7 @@ func (c *Config) DatabaseDSN() string {
172159
c.options.DatabaseDSN = fmt.Sprintf(
173160
"%s?%s&timeout=%ds",
174161
c.options.DatabaseDSN,
175-
DatabaseDSNParams[MySQL],
162+
dsn.Params[dsn.DriverMySQL],
176163
c.DatabaseTimeout())
177164
}
178165

@@ -209,7 +196,7 @@ func (c *Config) ParseDatabaseDSN() {
209196
return
210197
}
211198

212-
d := NewDSN(c.options.DatabaseDSN)
199+
d := dsn.Parse(c.options.DatabaseDSN)
213200

214201
c.options.DatabaseName = d.Name
215202
c.options.DatabaseServer = d.Server
@@ -244,8 +231,8 @@ func (c *Config) DatabaseHost() string {
244231
return ""
245232
}
246233

247-
dsn := NewDSN(c.DatabaseDSN())
248-
return dsn.Host()
234+
d := dsn.Parse(c.DatabaseDSN())
235+
return d.Host()
249236
}
250237

251238
// DatabasePort the database server port.
@@ -256,8 +243,8 @@ func (c *Config) DatabasePort() int {
256243
return 0
257244
}
258245

259-
dsn := NewDSN(c.DatabaseDSN())
260-
return dsn.Port()
246+
d := dsn.Parse(c.DatabaseDSN())
247+
return d.Port()
261248
}
262249

263250
// DatabasePortString the database server port as string.

0 commit comments

Comments
 (0)