db.Insert takes OSMElem instead of row

master
Oliver Tonnhofer 2013-10-28 08:26:51 +01:00
parent 819df78d03
commit 1cba6ad9a3
6 changed files with 44 additions and 42 deletions

View File

@ -2,6 +2,7 @@ package database
import ( import (
"errors" "errors"
"imposm3/element"
"imposm3/mapping" "imposm3/mapping"
"strings" "strings"
) )
@ -18,15 +19,15 @@ type DB interface {
Abort() error Abort() error
Init() error Init() error
Close() error Close() error
RowInserter Inserter
} }
type BulkBeginner interface { type BulkBeginner interface {
BeginBulk() error BeginBulk() error
} }
type RowInserter interface { type Inserter interface {
Insert(string, []interface{}) Insert(element.OSMElem, mapping.Match)
} }
type Deployer interface { type Deployer interface {
@ -81,12 +82,12 @@ func ConnectionType(param string) string {
type NullDb struct{} type NullDb struct{}
func (n *NullDb) Init() error { return nil } func (n *NullDb) Init() error { return nil }
func (n *NullDb) Begin() error { return nil } func (n *NullDb) Begin() error { return nil }
func (n *NullDb) End() error { return nil } func (n *NullDb) End() error { return nil }
func (n *NullDb) Close() error { return nil } func (n *NullDb) Close() error { return nil }
func (n *NullDb) Abort() error { return nil } func (n *NullDb) Abort() error { return nil }
func (n *NullDb) Insert(string, []interface{}) {} func (n *NullDb) Insert(element.OSMElem, mapping.Match) {}
func NewNullDb(conf Config, m *mapping.Mapping) (DB, error) { func NewNullDb(conf Config, m *mapping.Mapping) (DB, error) {
return &NullDb{}, nil return &NullDb{}, nil

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
pq "github.com/olt/pq" pq "github.com/olt/pq"
"imposm3/database" "imposm3/database"
"imposm3/element"
"imposm3/logging" "imposm3/logging"
"imposm3/mapping" "imposm3/mapping"
"runtime" "runtime"
@ -429,8 +430,9 @@ func (pg *PostGIS) Open() error {
return nil return nil
} }
func (pg *PostGIS) Insert(table string, row []interface{}) { func (pg *PostGIS) Insert(elem element.OSMElem, match mapping.Match) {
pg.InputBuffer.Insert(table, row) row := match.Row(&elem)
pg.InputBuffer.Insert(match.Table.Name, row)
} }
func (pg *PostGIS) Delete(table string, id int64) error { func (pg *PostGIS) Delete(table string, id int64) error {

View File

@ -20,15 +20,15 @@ type NodeWriter struct {
} }
func NewNodeWriter(osmCache *cache.OSMCache, nodes chan *element.Node, func NewNodeWriter(osmCache *cache.OSMCache, nodes chan *element.Node,
insertBuffer database.RowInserter, tagMatcher *mapping.TagMatcher, progress *stats.Statistics, inserter database.Inserter, tagMatcher *mapping.TagMatcher, progress *stats.Statistics,
srid int) *OsmElemWriter { srid int) *OsmElemWriter {
nw := NodeWriter{ nw := NodeWriter{
OsmElemWriter: OsmElemWriter{ OsmElemWriter: OsmElemWriter{
osmCache: osmCache, osmCache: osmCache,
progress: progress, progress: progress,
wg: &sync.WaitGroup{}, wg: &sync.WaitGroup{},
insertBuffer: insertBuffer, inserter: inserter,
srid: srid, srid: srid,
}, },
nodes: nodes, nodes: nodes,
tagMatcher: tagMatcher, tagMatcher: tagMatcher,

View File

@ -21,16 +21,16 @@ type RelationWriter struct {
} }
func NewRelationWriter(osmCache *cache.OSMCache, diffCache *cache.DiffCache, rel chan *element.Relation, func NewRelationWriter(osmCache *cache.OSMCache, diffCache *cache.DiffCache, rel chan *element.Relation,
insertBuffer database.RowInserter, tagMatcher *mapping.TagMatcher, progress *stats.Statistics, inserter database.Inserter, tagMatcher *mapping.TagMatcher, progress *stats.Statistics,
srid int) *OsmElemWriter { srid int) *OsmElemWriter {
rw := RelationWriter{ rw := RelationWriter{
OsmElemWriter: OsmElemWriter{ OsmElemWriter: OsmElemWriter{
osmCache: osmCache, osmCache: osmCache,
diffCache: diffCache, diffCache: diffCache,
progress: progress, progress: progress,
wg: &sync.WaitGroup{}, wg: &sync.WaitGroup{},
insertBuffer: insertBuffer, inserter: inserter,
srid: srid, srid: srid,
}, },
rel: rel, rel: rel,
tagMatcher: tagMatcher, tagMatcher: tagMatcher,

View File

@ -21,16 +21,16 @@ type WayWriter struct {
} }
func NewWayWriter(osmCache *cache.OSMCache, diffCache *cache.DiffCache, ways chan *element.Way, func NewWayWriter(osmCache *cache.OSMCache, diffCache *cache.DiffCache, ways chan *element.Way,
insertBuffer database.RowInserter, lineStringTagMatcher *mapping.TagMatcher, inserter database.Inserter, lineStringTagMatcher *mapping.TagMatcher,
polygonTagMatcher *mapping.TagMatcher, progress *stats.Statistics, srid int) *OsmElemWriter { polygonTagMatcher *mapping.TagMatcher, progress *stats.Statistics, srid int) *OsmElemWriter {
ww := WayWriter{ ww := WayWriter{
OsmElemWriter: OsmElemWriter{ OsmElemWriter: OsmElemWriter{
osmCache: osmCache, osmCache: osmCache,
diffCache: diffCache, diffCache: diffCache,
progress: progress, progress: progress,
wg: &sync.WaitGroup{}, wg: &sync.WaitGroup{},
insertBuffer: insertBuffer, inserter: inserter,
srid: srid, srid: srid,
}, },
ways: ways, ways: ways,
lineStringTagMatcher: lineStringTagMatcher, lineStringTagMatcher: lineStringTagMatcher,

View File

@ -21,15 +21,15 @@ type looper interface {
} }
type OsmElemWriter struct { type OsmElemWriter struct {
osmCache *cache.OSMCache osmCache *cache.OSMCache
diffCache *cache.DiffCache diffCache *cache.DiffCache
progress *stats.Statistics progress *stats.Statistics
insertBuffer database.RowInserter inserter database.Inserter
wg *sync.WaitGroup wg *sync.WaitGroup
limiter *limit.Limiter limiter *limit.Limiter
writer looper writer looper
srid int srid int
expireTiles *expire.Tiles expireTiles *expire.Tiles
} }
func (writer *OsmElemWriter) SetLimiter(limiter *limit.Limiter) { func (writer *OsmElemWriter) SetLimiter(limiter *limit.Limiter) {
@ -53,7 +53,6 @@ func (writer *OsmElemWriter) Close() {
func (writer *OsmElemWriter) insertMatches(elem *element.OSMElem, matches []mapping.Match) { func (writer *OsmElemWriter) insertMatches(elem *element.OSMElem, matches []mapping.Match) {
for _, match := range matches { for _, match := range matches {
row := match.Row(elem) writer.inserter.Insert(*elem, match)
writer.insertBuffer.Insert(match.Table.Name, row)
} }
} }