From 60cd2159094a3903e6c000e464e1e7baae929710 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net>
Date: Thu, 8 Oct 2015 05:27:46 -0500
Subject: [PATCH] Moving builder interfaces into the builder package.

---
 builder.go                        | 91 -------------------------------
 db.go                             |  6 +-
 internal/sqladapter/database.go   |  9 +--
 internal/sqlutil/result/result.go |  9 +--
 4 files changed, 15 insertions(+), 100 deletions(-)
 delete mode 100644 builder.go

diff --git a/builder.go b/builder.go
deleted file mode 100644
index 1d3c0e20..00000000
--- a/builder.go
+++ /dev/null
@@ -1,91 +0,0 @@
-package db
-
-import (
-	"database/sql"
-	"fmt"
-	"github.com/jmoiron/sqlx"
-)
-
-// QueryBuilder is an experimental interface.
-type QueryBuilder interface {
-	Select(columns ...interface{}) QuerySelector
-	SelectAllFrom(table string) QuerySelector
-
-	InsertInto(table string) QueryInserter
-	DeleteFrom(table string) QueryDeleter
-	Update(table string) QueryUpdater
-
-	Exec(query interface{}, args ...interface{}) (sql.Result, error)
-}
-
-type QuerySelector interface {
-	Columns(columns ...interface{}) QuerySelector
-	From(tables ...string) QuerySelector
-	Distinct() QuerySelector
-	Where(...interface{}) QuerySelector
-	GroupBy(...interface{}) QuerySelector
-	//Having(...interface{}) QuerySelector
-	OrderBy(...interface{}) QuerySelector
-	Using(...interface{}) QuerySelector
-	FullJoin(...interface{}) QuerySelector
-	CrossJoin(...interface{}) QuerySelector
-	RightJoin(...interface{}) QuerySelector
-	LeftJoin(...interface{}) QuerySelector
-	Join(...interface{}) QuerySelector
-	On(...interface{}) QuerySelector
-	Limit(int) QuerySelector
-	Offset(int) QuerySelector
-
-	Iterator() Iterator
-
-	QueryGetter
-	fmt.Stringer
-}
-
-type QueryInserter interface {
-	Values(...interface{}) QueryInserter
-	Columns(...string) QueryInserter
-	Extra(string) QueryInserter
-
-	Iterator() Iterator
-
-	QueryExecer
-	QueryGetter
-
-	fmt.Stringer
-}
-
-type QueryDeleter interface {
-	Where(...interface{}) QueryDeleter
-	Limit(int) QueryDeleter
-
-	QueryExecer
-	fmt.Stringer
-}
-
-type QueryUpdater interface {
-	Set(...interface{}) QueryUpdater
-	Where(...interface{}) QueryUpdater
-	Limit(int) QueryUpdater
-
-	QueryExecer
-	fmt.Stringer
-}
-
-type QueryExecer interface {
-	Exec() (sql.Result, error)
-}
-
-type QueryGetter interface {
-	Query() (*sqlx.Rows, error)
-	QueryRow() (*sqlx.Row, error)
-}
-
-type Iterator interface {
-	All(dest interface{}) error
-	One(dest interface{}) error
-	Scan(dest ...interface{}) error
-	Next(dest ...interface{}) bool
-	Err() error
-	Close() error
-}
diff --git a/db.go b/db.go
index 2b11c2f6..d44de71b 100644
--- a/db.go
+++ b/db.go
@@ -43,6 +43,10 @@
 //	err = res.All(&people)
 package db
 
+import (
+	builder "upper.io/builder/meta"
+)
+
 // import "upper.io/db"
 
 // Cond is a map used to define conditions passed to `db.Collection.Find()` and
@@ -157,7 +161,7 @@ type Database interface {
 	Driver() interface{}
 
 	// Builder is an experimental interface
-	Builder() QueryBuilder
+	Builder() builder.QueryBuilder
 
 	// Open() attempts to stablish a connection with the database server, a
 	// previous call to Setup() is required.
diff --git a/internal/sqladapter/database.go b/internal/sqladapter/database.go
index 4a9ec70d..94b30a8a 100644
--- a/internal/sqladapter/database.go
+++ b/internal/sqladapter/database.go
@@ -6,7 +6,8 @@ import (
 	"time"
 
 	"github.com/jmoiron/sqlx"
-	"upper.io/builder"
+	sqlbuilder "upper.io/builder"
+	"upper.io/builder/meta"
 	"upper.io/builder/sqlgen"
 	"upper.io/cache"
 	"upper.io/db"
@@ -41,7 +42,7 @@ type BaseDatabase struct {
 	cachedStatements *cache.Cache
 	collections      map[string]db.Collection
 	collectionsMu    sync.Mutex
-	builder          db.QueryBuilder
+	builder          builder.QueryBuilder
 
 	template *sqlgen.Template
 }
@@ -58,7 +59,7 @@ func NewDatabase(partial PartialDatabase, connURL db.ConnectionURL, template *sq
 		template: template,
 	}
 
-	d.builder = builder.NewBuilder(d, d.template)
+	d.builder = sqlbuilder.NewBuilder(d, d.template)
 	d.cachedStatements = cache.NewCache()
 
 	return d
@@ -244,7 +245,7 @@ func (d *BaseDatabase) QueryRow(stmt *sqlgen.Statement, args ...interface{}) (*s
 }
 
 // Builder returns a custom query builder.
-func (d *BaseDatabase) Builder() db.QueryBuilder {
+func (d *BaseDatabase) Builder() builder.QueryBuilder {
 	return d.builder
 }
 
diff --git a/internal/sqlutil/result/result.go b/internal/sqlutil/result/result.go
index 2e50932e..6f052d2b 100644
--- a/internal/sqlutil/result/result.go
+++ b/internal/sqlutil/result/result.go
@@ -22,13 +22,14 @@
 package result
 
 import (
+	builder "upper.io/builder/meta"
 	"upper.io/db"
 )
 
 type Result struct {
-	b       db.QueryBuilder
+	b       builder.QueryBuilder
 	table   string
-	iter    db.Iterator
+	iter    builder.Iterator
 	limit   int
 	offset  int
 	fields  []interface{}
@@ -40,7 +41,7 @@ type Result struct {
 
 // NewResult creates and results a new result set on the given table, this set
 // is limited by the given sqlgen.Where conditions.
-func NewResult(b db.QueryBuilder, table string, conds []interface{}) *Result {
+func NewResult(b builder.QueryBuilder, table string, conds []interface{}) *Result {
 	return &Result{
 		b:     b,
 		table: table,
@@ -155,7 +156,7 @@ func (r *Result) Count() (uint64, error) {
 	return counter.Count, nil
 }
 
-func (r *Result) buildSelect() db.QuerySelector {
+func (r *Result) buildSelect() builder.Selector {
 	q := r.b.Select(r.fields...)
 
 	q.From(r.table)
-- 
GitLab