good morning!!!!

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

Allowing simultaneous connections to different databases with the same driver.

parent eda1364e
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,7 @@ package db
import (
"fmt"
"reflect"
)
/*
......@@ -416,12 +417,15 @@ var wrappers = make(map[string]Database)
Registers a database wrapper with an unique name.
*/
func Register(name string, driver Database) {
if name == "" {
panic("Missing wrapper name.")
}
if _, ok := wrappers[name]; ok != false {
panic("A wrapper with the same name was already registered.")
panic("Register called twice for driver " + name)
}
wrappers[name] = driver
}
......@@ -429,12 +433,21 @@ func Register(name string, driver Database) {
Opens a database using the named driver and the db.DataSource settings.
*/
func Open(name string, settings DataSource) (Database, error) {
if _, ok := wrappers[name]; ok == false {
driver, ok := wrappers[name]
if ok == false {
panic(fmt.Sprintf("Unknown wrapper: %s.", name))
}
err := wrappers[name].Setup(settings)
// Creating a new connection everytime Open() is called.
conn := reflect.New(reflect.ValueOf(driver).Elem().Type()).Interface().(Database)
err := conn.Setup(settings)
if err != nil {
return nil, err
}
return wrappers[name], nil
return conn, nil
}
......@@ -179,6 +179,7 @@ func (self *Source) Close() error {
*/
func (self *Source) Setup(config db.DataSource) error {
self.config = config
self.session = nil
self.collections = make(map[string]db.Collection)
return self.Open()
}
......
......@@ -216,6 +216,21 @@ func TestFind(t *testing.T) {
defer sess.Close()
/*
// Testing simultaneous connection.
sess2, err := db.Open(wrapperName, db.DataSource {
Database: "mysql",
Socket: socket,
User: "root",
})
if err != nil {
t.Fatalf(err.Error())
}
defer sess2.Close()
*/
people, _ := sess.Collection("people")
// Testing Find()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment