2013-06-11 16:12:45 +04:00
|
|
|
package postgis
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
type TxRouter struct {
|
2013-10-28 11:50:54 +04:00
|
|
|
Tables map[string]*TableTx
|
2013-06-11 16:12:45 +04:00
|
|
|
}
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
func newTxRouter(pg *PostGIS, bulkImport bool) *TxRouter {
|
|
|
|
ib := TxRouter{
|
2013-10-28 11:50:54 +04:00
|
|
|
Tables: make(map[string]*TableTx),
|
2013-06-11 16:12:45 +04:00
|
|
|
}
|
|
|
|
for tableName, table := range pg.Tables {
|
2013-10-28 17:59:16 +04:00
|
|
|
tt := NewTableTx(pg, table, bulkImport)
|
2013-06-11 16:12:45 +04:00
|
|
|
err := tt.Begin()
|
|
|
|
if err != nil {
|
|
|
|
panic(err) // TODO
|
|
|
|
}
|
|
|
|
ib.Tables[tableName] = tt
|
|
|
|
}
|
|
|
|
|
|
|
|
return &ib
|
|
|
|
}
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
func (ib *TxRouter) End() error {
|
2013-06-11 16:12:45 +04:00
|
|
|
for _, tt := range ib.Tables {
|
|
|
|
if err := tt.Commit(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
func (ib *TxRouter) Abort() error {
|
2013-06-11 16:12:45 +04:00
|
|
|
for _, tt := range ib.Tables {
|
|
|
|
tt.Rollback()
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
func (ib *TxRouter) Insert(table string, row []interface{}) {
|
2013-10-28 11:50:54 +04:00
|
|
|
tt, ok := ib.Tables[table]
|
|
|
|
if !ok {
|
|
|
|
panic("unknown table " + table)
|
|
|
|
}
|
|
|
|
tt.Insert(row)
|
2013-06-21 13:04:53 +04:00
|
|
|
}
|
|
|
|
|
2013-10-28 11:57:06 +04:00
|
|
|
func (ib *TxRouter) Delete(table string, id int64) {
|
2013-10-28 11:50:54 +04:00
|
|
|
tt, ok := ib.Tables[table]
|
2013-10-28 17:55:01 +04:00
|
|
|
if ok {
|
|
|
|
// panic("unknown table " + table)
|
|
|
|
tt.Delete(id)
|
2013-06-11 16:12:45 +04:00
|
|
|
}
|
|
|
|
}
|