imposm3/database/database.go

112 lines
2.7 KiB
Go
Raw Normal View History

2013-05-15 15:00:42 +04:00
package database
import (
"errors"
2013-10-28 11:26:51 +04:00
"imposm3/element"
2013-08-29 17:44:15 +04:00
"imposm3/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 {
Begin() error
End() error
Abort() error
Init() error
Close() error
2013-10-28 11:26:51 +04:00
Inserter
}
2013-06-21 12:33:49 +04:00
type BulkBeginner interface {
BeginBulk() error
}
2013-10-28 11:26:51 +04:00
type Inserter interface {
ProbePoint(element.OSMElem) (bool, interface{})
ProbeLineString(element.OSMElem) (bool, interface{})
ProbePolygon(element.OSMElem) (bool, interface{})
InsertPoint(element.OSMElem, interface{})
InsertLineString(element.OSMElem, interface{})
InsertPolygon(element.OSMElem, interface{})
2013-05-15 15:00:42 +04:00
}
type Deployer interface {
2013-05-22 10:46:39 +04:00
Deploy() error
RevertDeploy() error
2013-05-22 10:46:39 +04:00
RemoveBackup() error
}
2013-05-15 15:00:42 +04:00
2013-05-22 13:48:34 +04:00
type Generalizer interface {
Generalize() error
EnableGeneralizeUpdates()
GeneralizeUpdates() error
2013-05-22 13:48:34 +04:00
}
2013-05-22 11:49:03 +04:00
type Finisher interface {
Finish() error
}
2013-06-11 12:29:21 +04:00
type Deleter interface {
Inserter
Delete(int64, interface{}) error
2013-06-11 12:29:21 +04:00
}
2013-07-04 13:26:53 +04:00
type Optimizer interface {
Optimize() error
}
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
}
func Open(conf Config, m *mapping.Mapping) (DB, error) {
2013-05-15 15:00:42 +04:00
newFunc, ok := databases[conf.Type]
if !ok {
return nil, errors.New("unsupported database type: " + conf.Type)
2013-05-15 15:00:42 +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{}
func (n *NullDb) Init() error { return nil }
func (n *NullDb) Begin() error { return nil }
func (n *NullDb) End() error { return nil }
func (n *NullDb) Close() error { return nil }
func (n *NullDb) Abort() error { return nil }
func (n *NullDb) InsertPoint(element.OSMElem, interface{}) {}
func (n *NullDb) InsertLineString(element.OSMElem, interface{}) {}
func (n *NullDb) InsertPolygon(element.OSMElem, interface{}) {}
func (n *NullDb) ProbePoint(element.OSMElem) (bool, interface{}) { return true, nil }
func (n *NullDb) ProbeLineString(element.OSMElem) (bool, interface{}) { return true, nil }
func (n *NullDb) ProbePolygon(element.OSMElem) (bool, interface{}) { return true, nil }
2013-05-21 14:14:05 +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)
}