40 lines
943 B
Go
40 lines
943 B
Go
|
package database
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/samber/lo"
|
||
|
"github.com/spf13/viper"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func AllocDatabase(name string) (string, error) {
|
||
|
// Disabled
|
||
|
if Kdb == nil {
|
||
|
return "host=localhost", fmt.Errorf("database feature is disabled")
|
||
|
}
|
||
|
|
||
|
var connString []string
|
||
|
connString = strings.Split(viper.GetString("database.dsn"), " ")
|
||
|
connString = lo.Filter(connString, func(item string, _ int) bool {
|
||
|
return !strings.HasPrefix(item, "dbname=")
|
||
|
})
|
||
|
|
||
|
name = viper.GetString("database.prefix") + name
|
||
|
|
||
|
var exists bool
|
||
|
if err := Kdb.QueryRow("SELECT EXISTS(SELECT datname FROM pg_catalog.pg_database WHERE datname = $1)", name).Scan(&exists); err != nil {
|
||
|
return strings.Join(connString, " "), nil
|
||
|
}
|
||
|
|
||
|
if !exists {
|
||
|
_, err := Kdb.Exec("CREATE DATABASE " + name)
|
||
|
if err != nil {
|
||
|
return strings.Join(connString, " "), err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
connString = append(connString, "dbname="+name)
|
||
|
|
||
|
return strings.Join(connString, " "), nil
|
||
|
}
|