diff --git a/builder.go b/builder.go deleted file mode 100644 index 1d3c0e204d85875326efddb4ceb6d81aeb995682..0000000000000000000000000000000000000000 --- 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 2b11c2f6aecbd1634fe475393b9aff8be6398841..d44de71b317198133f85cae326e7a4ae81f58999 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 4a9ec70d6be2fafd5d34d7c650ed1466d63ea038..94b30a8a4ae1d9991e7a22641199154bcbba2f8f 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 2e50932e1e4e16bdc991fbe3fed76d2c375a812c..6f052d2b73ae1ed03c89586b107276151081426d 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)