// closeDB closes a database
func closeDB(db *dtype.Database) error {
	if db.Active {
		err := db.Executor.Close()
		if err != nil {
			return err
		}
		db.Active = false
	}
	return nil
}
// openDB opens a database and verifies connection by calling ping to it
func openDB(db *dtype.Database) error {
	var dsn string

	// if port is not defined, set defaults
	if isEmpty(db.Port) {
		db.Port = getDefaultPort(db.Driver)
	}

	switch db.Driver {
	case "postgres":
		dsn = fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable",
			db.Username, db.Password, db.Host, db.Port, db.DBName)

	case "mysql":
		dsn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
			db.Username, db.Password, db.Host, db.Port, db.DBName)

	default:
		return fmt.Errorf("SQL Driver %s is not supported", db.Driver)
	}
	err := db.Executor.Open(db.Driver, dsn)
	if err != nil {
		return err
	}

	// ping db to verify a connection
	if err = db.Executor.Ping(); err != nil {
		return err
	}

	if db.SelectDB != "" {
		// switch the connection when SelectDB is defined in cfg
		err = db.Executor.SwitchToDB(db.SelectDB)
		if err != nil {
			return err
		}
	}

	db.Active = true

	return nil
}