1
Fork 0

Start on sqlite support

- TODO: Sqlite doesn't support MD5, all calls to this function should be done
  beforehand.
This commit is contained in:
viktorstrate 2021-01-10 18:59:01 +01:00
parent b3596751cc
commit 41b122c461
No known key found for this signature in database
GPG Key ID: 3F855605109C1E8A
4 changed files with 33 additions and 5 deletions

1
.gitignore vendored
View File

@ -3,6 +3,7 @@
cache/
photo_cache/
/photos_path
photoview.db
.env

View File

@ -4,18 +4,18 @@ import (
"log"
"net/url"
"os"
"strings"
"github.com/photoview/photoview/api/graphql/models"
"github.com/pkg/errors"
"gorm.io/driver/mysql"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
// SetupDatabase connects to the database using environment variables
func SetupDatabase() (*gorm.DB, error) {
func getMysqlAddress() (*url.URL, error) {
address, err := url.Parse(os.Getenv("MYSQL_URL"))
if err != nil {
return nil, errors.Wrap(err, "Could not parse mysql url")
@ -30,15 +30,36 @@ func SetupDatabase() (*gorm.DB, error) {
queryValues.Add("parseTime", "true")
address.RawQuery = queryValues.Encode()
return address, nil
}
log.Printf("Connecting to database: %s", address)
// SetupDatabase connects to the database using environment variables
func SetupDatabase() (*gorm.DB, error) {
config := gorm.Config{}
// Enable database debug logging
config.Logger = logger.Default.LogMode(logger.Info)
db, err := gorm.Open(mysql.Open(address.String()), &config)
var databaseDialect gorm.Dialector
switch strings.ToLower(os.Getenv("PHOTOVIEW_DATABASE_DRIVER")) {
case "mysql":
mysqlAddress, err := getMysqlAddress()
if err != nil {
return nil, err
}
log.Printf("Connecting to database: %s", mysqlAddress)
databaseDialect = mysql.Open(mysqlAddress.String())
case "sqlite":
path := os.Getenv("PHOTOVIEW_SQLITE_PATH")
if path == "" {
path = "photoview.db"
}
databaseDialect = sqlite.Open(path)
}
db, err := gorm.Open(databaseDialect, &config)
if err != nil {
return nil, errors.Wrap(err, "could not connect to database")
}

View File

@ -22,5 +22,6 @@ require (
gopkg.in/vansante/go-ffprobe.v2 v2.0.2
gopkg.in/yaml.v2 v2.4.0 // indirect
gorm.io/driver/mysql v1.0.3
gorm.io/driver/sqlite v1.1.4
gorm.io/gorm v1.20.8
)

View File

@ -54,6 +54,8 @@ github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIG
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KKTQ=
github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
@ -121,7 +123,10 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gorm.io/driver/mysql v1.0.3 h1:+JKBYPfn1tygR1/of/Fh2T8iwuVwzt+PEJmKaXzMQXg=
gorm.io/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI=
gorm.io/driver/sqlite v1.1.4 h1:PDzwYE+sI6De2+mxAneV9Xs11+ZyKV6oxD3wDGkaNvM=
gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw=
gorm.io/gorm v1.20.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
gorm.io/gorm v1.20.8 h1:iToaOdZgjNvlc44NFkxfLa3U9q63qwaxt0FdNCiwOMs=
gorm.io/gorm v1.20.8/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=