2013-05-15 15:00:42 +04:00
|
|
|
package database
|
|
|
|
|
|
|
|
import (
|
2013-07-29 11:19:51 +04:00
|
|
|
"errors"
|
2014-08-04 17:19:35 +04:00
|
|
|
"github.com/omniscale/imposm3/element"
|
|
|
|
"github.com/omniscale/imposm3/mapping"
|
2013-05-21 14:14:05 +04:00
|
|
|
"strings"
|
2013-05-15 15:00:42 +04:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
|
|
|
ConnectionParams string
|
|
|
|
Srid int
|
2013-12-02 16:10:42 +04:00
|
|
|
ImportSchema string
|
|
|
|
ProductionSchema string
|
|
|
|
BackupSchema string
|
2013-05-15 15:00:42 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
type DB interface {
|
2013-06-11 16:12:45 +04:00
|
|
|
Begin() error
|
|
|
|
End() error
|
|
|
|
Abort() error
|
2013-05-22 10:36:37 +04:00
|
|
|
Init() error
|
2013-07-05 17:14:21 +04:00
|
|
|
Close() error
|
2013-10-28 11:26:51 +04:00
|
|
|
Inserter
|
2013-06-11 16:12:45 +04:00
|
|
|
}
|
|
|
|
|
2013-06-21 12:33:49 +04:00
|
|
|
type BulkBeginner interface {
|
|
|
|
BeginBulk() error
|
|
|
|
}
|
|
|
|
|
2013-10-28 11:26:51 +04:00
|
|
|
type Inserter interface {
|
2013-10-29 19:32:16 +04:00
|
|
|
// InsertXxx inserts element of that type into the database.
|
|
|
|
// element.Geom is set to that type.
|
2014-05-05 12:21:46 +04:00
|
|
|
InsertPoint(element.OSMElem, []mapping.Match) error
|
|
|
|
InsertLineString(element.OSMElem, []mapping.Match) error
|
|
|
|
InsertPolygon(element.OSMElem, []mapping.Match) error
|
2013-05-15 15:00:42 +04:00
|
|
|
}
|
|
|
|
|
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-10-28 17:55:01 +04:00
|
|
|
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 {
|
2013-10-28 15:01:57 +04:00
|
|
|
Inserter
|
2013-11-05 18:03:32 +04:00
|
|
|
// Delete deletes ID from tables that matched ProbeXxx
|
2013-10-28 15:01:57 +04:00
|
|
|
Delete(int64, interface{}) error
|
2013-11-05 18:03:32 +04:00
|
|
|
// DeleteElem deletes element from all tables
|
|
|
|
DeleteElem(element.OSMElem) error
|
2013-06-11 12:29:21 +04:00
|
|
|
}
|
|
|
|
|
2013-07-04 13:26:53 +04:00
|
|
|
type Optimizer interface {
|
|
|
|
Optimize() 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-10-29 19:32:16 +04:00
|
|
|
parts := strings.SplitN(conf.ConnectionParams, ":", 2)
|
|
|
|
connectionType := parts[0]
|
|
|
|
|
|
|
|
newFunc, ok := databases[connectionType]
|
2013-05-15 15:00:42 +04:00
|
|
|
if !ok {
|
2013-10-29 19:32:16 +04:00
|
|
|
return nil, errors.New("unsupported database type: " + connectionType)
|
2013-05-15 15:00:42 +04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2013-10-29 19:32:16 +04:00
|
|
|
// nullDb is a dummy database that imports into /dev/null
|
|
|
|
type nullDb struct{}
|
|
|
|
|
2014-05-05 12:21:46 +04:00
|
|
|
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, []mapping.Match) error { return nil }
|
|
|
|
func (n *nullDb) InsertLineString(element.OSMElem, []mapping.Match) error { return nil }
|
|
|
|
func (n *nullDb) InsertPolygon(element.OSMElem, []mapping.Match) error { return nil }
|
2013-10-29 19:32:16 +04:00
|
|
|
|
|
|
|
func newNullDb(conf Config, m *mapping.Mapping) (DB, error) {
|
|
|
|
return &nullDb{}, nil
|
2013-05-21 14:14:05 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
2013-10-29 19:32:16 +04:00
|
|
|
Register("null", newNullDb)
|
2013-05-21 14:14:05 +04:00
|
|
|
}
|