Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a8ceb72

Browse files
committed
Refactor sqlx to it's own package
1 parent 6484021 commit a8ceb72

File tree

5 files changed

+28
-27
lines changed

5 files changed

+28
-27
lines changed

coderd/database/modelqueries.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/lib/pq"
1111
"golang.org/x/xerrors"
1212

13+
"github.com/coder/coder/coderd/database/sqlxqueries"
1314
"github.com/coder/coder/coderd/rbac"
1415
"github.com/coder/coder/coderd/rbac/regosql"
1516
)
@@ -206,12 +207,12 @@ type getWorkspaceBuildParams struct {
206207

207208
func (q *sqlQuerier) getWorkspaceBuild(ctx context.Context, arg getWorkspaceBuildParams) (WorkspaceBuild, error) {
208209
arg.LimitOpt = 1
209-
return sqlxGet[WorkspaceBuild](ctx, q, "GetWorkspaceBuild", arg)
210+
return sqlxqueries.GetContext[WorkspaceBuild](ctx, q.sdb, "GetWorkspaceBuild", arg)
210211
}
211212

212213
func (q *sqlQuerier) selectWorkspaceBuild(ctx context.Context, arg getWorkspaceBuildParams) ([]WorkspaceBuild, error) {
213214
arg.LimitOpt = -1
214-
return sqlxSelect[WorkspaceBuild](ctx, q, "GetWorkspaceBuild", arg)
215+
return sqlxqueries.SelectContext[WorkspaceBuild](ctx, q.sdb, "GetWorkspaceBuild", arg)
215216
}
216217

217218
func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) {
@@ -232,7 +233,7 @@ type GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams struct {
232233
}
233234

234235
func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) {
235-
return sqlxGet[WorkspaceBuild](ctx, q, "GetWorkspaceBuildByWorkspaceIDAndBuildNumber", arg)
236+
return sqlxqueries.GetContext[WorkspaceBuild](ctx, q.sdb, "GetWorkspaceBuildByWorkspaceIDAndBuildNumber", arg)
236237
}
237238

238239
type GetWorkspaceBuildsByWorkspaceIDParams struct {
@@ -244,19 +245,19 @@ type GetWorkspaceBuildsByWorkspaceIDParams struct {
244245
}
245246

246247
func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) {
247-
return sqlxSelect[WorkspaceBuild](ctx, q, "GetWorkspaceBuildsByWorkspaceID", arg)
248+
return sqlxqueries.SelectContext[WorkspaceBuild](ctx, q.sdb, "GetWorkspaceBuildsByWorkspaceID", arg)
248249
}
249250

250251
func (q *sqlQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspacedID uuid.UUID) (WorkspaceBuild, error) {
251252
return q.getWorkspaceBuild(ctx, getWorkspaceBuildParams{WorkspaceID: workspacedID, Latest: true})
252253
}
253254

254255
func (q *sqlQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]WorkspaceBuild, error) {
255-
return sqlxSelect[WorkspaceBuild](ctx, q, "GetLatestWorkspaceBuildsByWorkspaceIDs", ids)
256+
return sqlxqueries.SelectContext[WorkspaceBuild](ctx, q.sdb, "GetLatestWorkspaceBuildsByWorkspaceIDs", ids)
256257
}
257258

258259
func (q *sqlQuerier) GetLatestWorkspaceBuilds(ctx context.Context) ([]WorkspaceBuild, error) {
259-
return sqlxSelect[WorkspaceBuild](ctx, q, "GetLatestWorkspaceBuilds", nil)
260+
return sqlxqueries.SelectContext[WorkspaceBuild](ctx, q.sdb, "GetLatestWorkspaceBuilds", nil)
260261
}
261262

262263
// GetAuthorizedWorkspaces returns all workspaces that the user is authorized to access.

coderd/database/bindvars.go renamed to coderd/database/sqlxqueries/bindvars.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
package database
1+
package sqlxqueries
22

33
import (
4-
"database/sql/driver"
54
"fmt"
65
"reflect"
76
"regexp"
87
"strings"
98

9+
"golang.org/x/xerrors"
10+
1011
"github.com/google/uuid"
1112
"github.com/jmoiron/sqlx/reflectx"
1213
"github.com/lib/pq"
@@ -18,7 +19,6 @@ var nameRegex = regexp.MustCompile(`@([a-zA-Z0-9_]+)`)
1819

1920
// dbmapper grabs struct 'db' tags.
2021
var dbmapper = reflectx.NewMapper("db")
21-
var sqlValuer = reflect.TypeOf((*driver.Valuer)(nil)).Elem()
2222

2323
// bindNamed is an implementation that improves on the SQLx implementation. This
2424
// adjusts the query to use "$#" syntax for arguments instead of "@argument". The
@@ -63,7 +63,7 @@ func bindNamed(query string, arg interface{}) (newQuery string, args []interface
6363

6464
err = dbmapper.TraversalsByNameFunc(v.Type(), names, func(i int, t []int) error {
6565
if len(t) == 0 {
66-
return fmt.Errorf("could not find name %s in %#v", names[i], arg)
66+
return xerrors.Errorf("could not find name %s in %#v", names[i], arg)
6767
}
6868

6969
val := reflectx.FieldByIndexesReadOnly(v, t)

coderd/database/sqlx.go renamed to coderd/database/sqlxqueries/sqlx.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
package database
1+
package sqlxqueries
22

33
import (
44
"context"
55

6-
"github.com/coder/coder/coderd/database/sqlxqueries"
6+
"github.com/jmoiron/sqlx"
7+
78
"golang.org/x/xerrors"
89
)
910

10-
func sqlxSelect[RT any](ctx context.Context, q *sqlQuerier, queryName string, argument interface{}) ([]RT, error) {
11+
// SelectContext runs the named query on the given database.
12+
// If the query returns no rows, an empty slice is returned.
13+
func SelectContext[RT any](ctx context.Context, q sqlx.QueryerContext, queryName string, argument interface{}) ([]RT, error) {
1114
var empty []RT
1215

13-
query, err := sqlxqueries.Query(queryName, nil)
16+
query, err := query(queryName, nil)
1417
if err != nil {
1518
return empty, xerrors.Errorf("get query: %w", err)
1619
}
@@ -20,20 +23,20 @@ func sqlxSelect[RT any](ctx context.Context, q *sqlQuerier, queryName string, ar
2023
return empty, xerrors.Errorf("bind named: %w", err)
2124
}
2225

23-
// GetContext maps the results of the query to the items slice by struct
24-
// db tags.
25-
err = q.sdb.SelectContext(ctx, &empty, query, args...)
26+
err = sqlx.SelectContext(ctx, q, &empty, query, args...)
2627
if err != nil {
2728
return empty, xerrors.Errorf("%s: %w", queryName, err)
2829
}
2930

3031
return empty, nil
3132
}
3233

33-
func sqlxGet[RT any](ctx context.Context, q *sqlQuerier, queryName string, argument interface{}) (RT, error) {
34+
// GetContext runs the named query on the given database.
35+
// If the query returns no rows, sql.ErrNoRows is returned.
36+
func GetContext[RT any](ctx context.Context, q sqlx.QueryerContext, queryName string, argument interface{}) (RT, error) {
3437
var empty RT
3538

36-
query, err := sqlxqueries.Query(queryName, argument)
39+
query, err := query(queryName, argument)
3740
if err != nil {
3841
return empty, xerrors.Errorf("get query: %w", err)
3942
}
@@ -45,7 +48,7 @@ func sqlxGet[RT any](ctx context.Context, q *sqlQuerier, queryName string, argum
4548

4649
// GetContext maps the results of the query to the items slice by struct
4750
// db tags.
48-
err = q.sdb.GetContext(ctx, &empty, query, args...)
51+
err = sqlx.GetContext(ctx, q, &empty, query, args...)
4952
if err != nil {
5053
return empty, xerrors.Errorf("%s: %w", queryName, err)
5154
}

coderd/database/sqlxqueries/sqlxqueries.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,18 @@ func queries() (*template.Template, error) {
3131
return cached, cachedError
3232
}
3333

34-
func Query(name string, data interface{}) (string, error) {
34+
// query executes the named template with the given data and returns the result.
35+
// The returned query string is SQL.
36+
func query(name string, data interface{}) (string, error) {
3537
tpls, err := queries()
3638
if err != nil {
3739
return "", err
3840
}
3941

4042
var out bytes.Buffer
41-
// TODO: Should we cache these?
4243
err = tpls.ExecuteTemplate(&out, name, data)
4344
if err != nil {
4445
return "", xerrors.Errorf("execute template %s: %w", name, err)
4546
}
4647
return out.String(), nil
4748
}
48-
49-
func GetWorkspaceBuildByID() (string, error) {
50-
return Query("GetWorkspaceBuildByID", nil)
51-
}

coderd/database/sqlxqueries/workspace.gosql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ WHERE
3636
END
3737
AND CASE
3838
WHEN @created_after :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
39-
created_at > @created_aftet
39+
created_at > @created_after
4040
ELSE true
4141
END
4242
AND CASE

0 commit comments

Comments
 (0)