good morning!!!!

Skip to content
Snippets Groups Projects
Commit 114fc6c4 authored by José Carlos Nieto's avatar José Carlos Nieto
Browse files

Make clone() no longer force a new connection. Closes #219.

parent 734d7ca6
No related branches found
No related tags found
No related merge requests found
...@@ -82,10 +82,10 @@ func (c *collection) InsertReturning(item interface{}) error { ...@@ -82,10 +82,10 @@ func (c *collection) InsertReturning(item interface{}) error {
// Not within a transaction, let's create one. // Not within a transaction, let's create one.
var err error var err error
tx, err = c.p.Database().NewLocalTransaction() tx, err = c.p.Database().NewLocalTransaction()
defer tx.Close()
if err != nil { if err != nil {
return err return err
} }
defer tx.Close()
} }
var res db.Result var res db.Result
......
...@@ -180,16 +180,22 @@ func (d *database) Close() error { ...@@ -180,16 +180,22 @@ func (d *database) Close() error {
d.sessMu.Unlock() d.sessMu.Unlock()
}() }()
if d.sess != nil { if d.sess != nil {
if d.Transaction() != nil && !d.Transaction().Committed() {
d.Transaction().Rollback()
}
d.cachedCollections.Clear()
d.cachedStatements.Clear() // Closes prepared statements as well.
if cleaner, ok := d.PartialDatabase.(HasCleanUp); ok { if cleaner, ok := d.PartialDatabase.(HasCleanUp); ok {
cleaner.CleanUp() cleaner.CleanUp()
} }
d.cachedCollections.Clear()
d.cachedStatements.Clear() // Closes prepared statements as well.
tx := d.Transaction()
if tx == nil {
// Not within a transaction.
return d.sess.Close() return d.sess.Close()
} }
if !tx.Committed() {
tx.Rollback()
}
}
return nil return nil
} }
......
...@@ -130,10 +130,15 @@ func (d *database) clone() (*database, error) { ...@@ -130,10 +130,15 @@ func (d *database) clone() (*database, error) {
return nil, err return nil, err
} }
if err := clone.open(); err != nil { clone.BaseDatabase = sqladapter.NewBaseDatabase(clone)
b, err := sqlbuilder.WithSession(clone.BaseDatabase, template)
if err != nil {
return nil, err return nil, err
} }
clone.Builder = b
clone.BaseDatabase.BindSession(d.BaseDatabase.Session())
return clone, nil return clone, nil
} }
......
...@@ -129,10 +129,15 @@ func (d *database) clone() (*database, error) { ...@@ -129,10 +129,15 @@ func (d *database) clone() (*database, error) {
return nil, err return nil, err
} }
if err := clone.open(); err != nil { clone.BaseDatabase = sqladapter.NewBaseDatabase(clone)
b, err := sqlbuilder.WithSession(clone.BaseDatabase, template)
if err != nil {
return nil, err return nil, err
} }
clone.Builder = b
clone.BaseDatabase.BindSession(d.BaseDatabase.Session())
return clone, nil return clone, nil
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment