good morning!!!!

Skip to content
Snippets Groups Projects
wrapper.go 2.35 KiB
Newer Older
// Copyright (c) 2012-2014 José Carlos Nieto, https://menteslibres.net/xiam
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// This map holds a copy of all registered adapters.
var wrappers = make(map[string]Database)

// Register associates an adapter's name with a type. Panics if the adapter
// name is empty or the adapter is nil.
func Register(name string, adapter Database) {
	if name == `` {
		panic(`Missing adapter name.`)
	}

	if _, ok := wrappers[name]; ok != false {
		panic(`db.Register() called twice for adapter: ` + name)
// Open configures a database session using the given adapter's name and the
// provided settings.
func Open(adapter string, conn ConnectionURL) (Database, error) {
	driver, ok := wrappers[adapter]
	if ok == false {
		// Using panic instead of returning error because attemping to use an
		// adapter that does not exists will never result in success.
		panic(fmt.Sprintf(`Open: Unknown adapter %s. (see: https://upper.io/db#database-adapters)`, adapter))
	}

	// Creating a new connection everytime Open() is called.
	driverType := reflect.ValueOf(driver).Elem().Type()
	newAdapter := reflect.New(driverType).Interface().(Database)

	// Setting up the connection.
	if err := newAdapter.Setup(conn); err != nil {
		return nil, err
	}

	return newAdapter, nil
}