Skip to content
This repository was archived by the owner on Jun 12, 2024. It is now read-only.

Commit 46a6867

Browse files
authored
Introduce SQLBuilder interface (#26)
So, there is no direct dependency to a structure type. It's more convenient in certain situations for us to have an interface that can be `nil`.
1 parent aecc07f commit 46a6867

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

pkg/data/managers/base.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ type PageInfo struct {
3030
type BaseManager interface {
3131
tracing.Tracer
3232
// GetQueryBuilder creates a new squirrel builder for a SQL query
33-
GetQueryBuilder() squirrel.StatementBuilderType
33+
GetQueryBuilder() db.SQLBuilder
3434
// GetTxQueryBuilder is the same as GetQueryBuilder but also opens a transaction
35-
GetTxQueryBuilder(ctx context.Context, opts *sql.TxOptions) (squirrel.StatementBuilderType, *sql.Tx, error)
35+
GetTxQueryBuilder(ctx context.Context, opts *sql.TxOptions) (db.SQLBuilder, *sql.Tx, error)
3636
// GetPageInfo returns the page info object for a given page
3737
//
3838
// `scope` is the SQL where statement that defines the scope
@@ -56,13 +56,13 @@ type baseManager struct {
5656
tracing.Tracer
5757
}
5858

59-
func (m *baseManager) GetQueryBuilder() squirrel.StatementBuilderType {
59+
func (m *baseManager) GetQueryBuilder() db.SQLBuilder {
6060
return squirrel.StatementBuilder.
6161
PlaceholderFormat(squirrel.Dollar).
6262
RunWith(db.WrapWithTracing(m.db))
6363
}
6464

65-
func (m *baseManager) GetTxQueryBuilder(ctx context.Context, opts *sql.TxOptions) (squirrel.StatementBuilderType, *sql.Tx, error) {
65+
func (m *baseManager) GetTxQueryBuilder(ctx context.Context, opts *sql.TxOptions) (db.SQLBuilder, *sql.Tx, error) {
6666
tx, err := m.db.BeginTx(ctx, opts)
6767
return squirrel.StatementBuilder.
6868
PlaceholderFormat(squirrel.Dollar).

pkg/data/managers/id_resolver.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strings"
88

99
squirrel "github.com/Masterminds/squirrel"
10+
"github.com/contiamo/go-base/pkg/db"
1011
dserrors "github.com/contiamo/go-base/pkg/errors"
1112
uuid "github.com/satori/go.uuid"
1213
)
@@ -16,11 +17,11 @@ type IDResolver interface {
1617
// Resolve returns an ID of the given record identified by the value which can be either
1718
// an UUID or a unique string value of the given secondary column.
1819
// where is a map of where statements to their list of arguments
19-
Resolve(ctx context.Context, sql squirrel.StatementBuilderType, value string, filter squirrel.Sqlizer) (string, error)
20+
Resolve(ctx context.Context, sql db.SQLBuilder, value string, filter squirrel.Sqlizer) (string, error)
2021
// Sqlizer returns a Sqlizer interface that contains where statements for a given
2122
// filter and the ID column, so you can immediately use it with
2223
// the where of the select builder
23-
Sqlizer(ctx context.Context, sql squirrel.StatementBuilderType, value string, filter squirrel.Sqlizer) (squirrel.Sqlizer, error)
24+
Sqlizer(ctx context.Context, sql db.SQLBuilder, value string, filter squirrel.Sqlizer) (squirrel.Sqlizer, error)
2425
}
2526

2627
// NewIDResolver creates a new name->id resolver for a table, for example
@@ -42,7 +43,7 @@ type idResolver struct {
4243
secondaryColumn string
4344
}
4445

45-
func (r *idResolver) Sqlizer(ctx context.Context, sql squirrel.StatementBuilderType, value string, filter squirrel.Sqlizer) (squirrel.Sqlizer, error) {
46+
func (r *idResolver) Sqlizer(ctx context.Context, sql db.SQLBuilder, value string, filter squirrel.Sqlizer) (squirrel.Sqlizer, error) {
4647
id, err := r.Resolve(ctx, sql, value, filter)
4748
if err != nil {
4849
return nil, err
@@ -60,7 +61,7 @@ func (r *idResolver) Sqlizer(ctx context.Context, sql squirrel.StatementBuilderT
6061
}, nil
6162
}
6263

63-
func (r *idResolver) Resolve(ctx context.Context, sql squirrel.StatementBuilderType, value string, filter squirrel.Sqlizer) (string, error) {
64+
func (r *idResolver) Resolve(ctx context.Context, sql db.SQLBuilder, value string, filter squirrel.Sqlizer) (string, error) {
6465
if value == "" {
6566
return value, dserrors.ValidationErrors{
6667
"id": errors.New("the id parameter can't be empty"),

pkg/db/builder.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package db
2+
3+
import "github.com/Masterminds/squirrel"
4+
5+
// SQLBuilder describes a basic SQL builder using the squirrel library
6+
type SQLBuilder interface {
7+
8+
// Select returns a SelectBuilder
9+
Select(columns ...string) squirrel.SelectBuilder
10+
11+
// Insert returns a InsertBuilder
12+
Insert(into string) squirrel.InsertBuilder
13+
14+
// Update returns a UpdateBuilder
15+
Update(table string) squirrel.UpdateBuilder
16+
17+
// Delete returns a DeleteBuilder
18+
Delete(from string) squirrel.DeleteBuilder
19+
20+
// RunWith sets the RunWith field for any child builders.
21+
RunWith(runner squirrel.BaseRunner) squirrel.StatementBuilderType
22+
}

0 commit comments

Comments
 (0)