From ef3f9a326d6b584e387c83b4c3c945e7d2f28b7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net>
Date: Sun, 17 Jul 2016 08:29:34 -0500
Subject: [PATCH] Move Open, New and NewTx to postgresql.go

---
 postgresql/database.go   | 61 +-------------------------------------
 postgresql/postgresql.go | 64 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 60 deletions(-)

diff --git a/postgresql/database.go b/postgresql/database.go
index 930853f5..2216f9b9 100644
--- a/postgresql/database.go
+++ b/postgresql/database.go
@@ -54,66 +54,6 @@ func newDatabase(settings db.ConnectionURL) (*database, error) {
 	return d, nil
 }
 
-// Open stablishes a new connection with the SQL server.
-func Open(settings db.ConnectionURL) (db.SQLDatabase, error) {
-	d, err := newDatabase(settings)
-	if err != nil {
-		return nil, err
-	}
-	if err := d.Open(settings); err != nil {
-		return nil, err
-	}
-	return d, nil
-}
-
-// NewTx returns a transaction session.
-func NewTx(sqlTx *sql.Tx) (db.SQLTx, error) {
-	d, err := newDatabase(nil)
-	if err != nil {
-		return nil, err
-	}
-
-	// Binding with sqladapter's logic.
-	d.BaseDatabase = sqladapter.NewBaseDatabase(d)
-
-	// Binding with builder.
-	b, err := builder.New(d.BaseDatabase, template)
-	if err != nil {
-		return nil, err
-	}
-	d.SQLBuilder = b
-
-	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
-		return nil, err
-	}
-
-	newTx := sqladapter.NewTx(d)
-	return &tx{DatabaseTx: newTx}, nil
-}
-
-// New wraps the given *sql.DB session and creates a new db session.
-func New(sess *sql.DB) (db.SQLDatabase, error) {
-	d, err := newDatabase(nil)
-	if err != nil {
-		return nil, err
-	}
-
-	// Binding with sqladapter's logic.
-	d.BaseDatabase = sqladapter.NewBaseDatabase(d)
-
-	// Binding with builder.
-	b, err := builder.New(d.BaseDatabase, template)
-	if err != nil {
-		return nil, err
-	}
-	d.SQLBuilder = b
-
-	if err := d.BaseDatabase.BindSession(sess); err != nil {
-		return nil, err
-	}
-	return d, nil
-}
-
 // ConnectionURL returns this database's ConnectionURL.
 func (d *database) ConnectionURL() db.ConnectionURL {
 	return d.connURL
@@ -206,6 +146,7 @@ func (d *database) CompileStatement(stmt *exql.Statement) string {
 func (d *database) Err(err error) error {
 	if err != nil {
 		s := err.Error()
+		// These errors are not exported so we have to check them by they string value.
 		if strings.Contains(s, `too many clients`) || strings.Contains(s, `remaining connection slots are reserved`) || strings.Contains(s, `too many open`) {
 			return db.ErrTooManyClients
 		}
diff --git a/postgresql/postgresql.go b/postgresql/postgresql.go
index 2db921a2..2510cedf 100644
--- a/postgresql/postgresql.go
+++ b/postgresql/postgresql.go
@@ -22,7 +22,11 @@
 package postgresql // import "upper.io/db.v2/postgresql"
 
 import (
+	"database/sql"
 	"upper.io/db.v2"
+
+	"upper.io/db.v2/internal/sqladapter"
+	"upper.io/db.v2/sqlbuilder"
 )
 
 const sqlDriver = `postgres`
@@ -37,3 +41,63 @@ func init() {
 		Open:  Open,
 	})
 }
+
+// Open stablishes a new connection with the SQL server.
+func Open(settings db.ConnectionURL) (db.SQLDatabase, error) {
+	d, err := newDatabase(settings)
+	if err != nil {
+		return nil, err
+	}
+	if err := d.Open(settings); err != nil {
+		return nil, err
+	}
+	return d, nil
+}
+
+// NewTx returns a transaction session.
+func NewTx(sqlTx *sql.Tx) (db.SQLTx, error) {
+	d, err := newDatabase(nil)
+	if err != nil {
+		return nil, err
+	}
+
+	// Binding with sqladapter's logic.
+	d.BaseDatabase = sqladapter.NewBaseDatabase(d)
+
+	// Binding with builder.
+	b, err := builder.New(d.BaseDatabase, template)
+	if err != nil {
+		return nil, err
+	}
+	d.SQLBuilder = b
+
+	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
+		return nil, err
+	}
+
+	newTx := sqladapter.NewTx(d)
+	return &tx{DatabaseTx: newTx}, nil
+}
+
+// New wraps the given *sql.DB session and creates a new db session.
+func New(sess *sql.DB) (db.SQLDatabase, error) {
+	d, err := newDatabase(nil)
+	if err != nil {
+		return nil, err
+	}
+
+	// Binding with sqladapter's logic.
+	d.BaseDatabase = sqladapter.NewBaseDatabase(d)
+
+	// Binding with builder.
+	b, err := builder.New(d.BaseDatabase, template)
+	if err != nil {
+		return nil, err
+	}
+	d.SQLBuilder = b
+
+	if err := d.BaseDatabase.BindSession(sess); err != nil {
+		return nil, err
+	}
+	return d, nil
+}
-- 
GitLab