2013-05-15 15:00:42 +04:00
|
|
|
package database
|
|
|
|
|
|
|
|
import (
|
|
|
|
"goposm/mapping"
|
2013-05-21 14:14:05 +04:00
|
|
|
"strings"
|
2013-05-15 15:00:42 +04:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
|
|
|
Type string
|
|
|
|
ConnectionParams string
|
|
|
|
Srid int
|
|
|
|
}
|
|
|
|
|
|
|
|
type DB interface {
|
2013-05-22 10:36:37 +04:00
|
|
|
Init() error
|
2013-05-15 15:00:42 +04:00
|
|
|
InsertBatch(string, [][]interface{}) error
|
|
|
|
}
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
type Deployer interface {
|
2013-05-22 10:46:39 +04:00
|
|
|
Deploy() error
|
2013-05-22 10:36:37 +04:00
|
|
|
RevertDeploy() error
|
2013-05-22 10:46:39 +04:00
|
|
|
RemoveBackup() error
|
2013-05-22 10:36:37 +04:00
|
|
|
}
|
2013-05-15 15:00:42 +04:00
|
|
|
|
2013-05-22 13:48:34 +04:00
|
|
|
type Generalizer interface {
|
|
|
|
Generalize() error
|
|
|
|
}
|
|
|
|
|
2013-05-22 11:49:03 +04:00
|
|
|
type Finisher interface {
|
|
|
|
Finish() error
|
|
|
|
}
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
var databases map[string]func(Config, *mapping.Mapping) (DB, error)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
databases = make(map[string]func(Config, *mapping.Mapping) (DB, error))
|
|
|
|
}
|
|
|
|
|
|
|
|
func Register(name string, f func(Config, *mapping.Mapping) (DB, error)) {
|
2013-05-15 15:00:42 +04:00
|
|
|
databases[name] = f
|
|
|
|
}
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
func Open(conf Config, m *mapping.Mapping) (DB, error) {
|
2013-05-15 15:00:42 +04:00
|
|
|
newFunc, ok := databases[conf.Type]
|
|
|
|
if !ok {
|
|
|
|
panic("unsupported database type: " + conf.Type)
|
|
|
|
}
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
db, err := newFunc(conf, m)
|
2013-05-15 15:00:42 +04:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return db, nil
|
|
|
|
}
|
2013-05-21 14:14:05 +04:00
|
|
|
|
|
|
|
func ConnectionType(param string) string {
|
|
|
|
parts := strings.SplitN(param, ":", 2)
|
|
|
|
return parts[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
type NullDb struct{}
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
func (n *NullDb) Init() error { return nil }
|
2013-05-21 14:14:05 +04:00
|
|
|
func (n *NullDb) InsertBatch(string, [][]interface{}) error { return nil }
|
|
|
|
|
2013-05-22 10:36:37 +04:00
|
|
|
func NewNullDb(conf Config, m *mapping.Mapping) (DB, error) {
|
2013-05-21 14:14:05 +04:00
|
|
|
return &NullDb{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
Register("null", NewNullDb)
|
|
|
|
}
|