Skip to content

Commit 9459ae8

Browse files
committed
chore: update postgres stmt builder
1 parent 8893a30 commit 9459ae8

File tree

7 files changed

+161
-231
lines changed

7 files changed

+161
-231
lines changed

go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module github.com/usememos/memos
33
go 1.21
44

55
require (
6-
github.com/Masterminds/squirrel v1.5.4
76
github.com/aws/aws-sdk-go-v2 v1.24.0
87
github.com/aws/aws-sdk-go-v2/config v1.26.2
98
github.com/aws/aws-sdk-go-v2/credentials v1.16.13
@@ -50,8 +49,6 @@ require (
5049
github.com/gorilla/css v1.0.1 // indirect
5150
github.com/josharian/intern v1.0.0 // indirect
5251
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
53-
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
54-
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
5552
github.com/mailru/easyjson v0.7.7 // indirect
5653
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
5754
github.com/rs/cors v1.10.1 // indirect

go.sum

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
66
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
77
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
88
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
9-
github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
10-
github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
119
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
1210
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
1311
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
@@ -283,10 +281,6 @@ github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zG
283281
github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8=
284282
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
285283
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
286-
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
287-
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
288-
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
289-
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
290284
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
291285
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
292286
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=

store/db/postgres/storage.go

Lines changed: 43 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,43 @@ package postgres
22

33
import (
44
"context"
5-
6-
"github.com/Masterminds/squirrel"
5+
"strings"
76

87
"github.com/usememos/memos/store"
98
)
109

1110
func (d *DB) CreateStorage(ctx context.Context, create *store.Storage) (*store.Storage, error) {
12-
qb := squirrel.Insert("storage").Columns("name", "type", "config")
13-
values := []any{create.Name, create.Type, create.Config}
11+
fields := []string{"name", "type", "config"}
12+
args := []any{create.Name, create.Type, create.Config}
1413

15-
qb = qb.Values(values...).Suffix("RETURNING id")
16-
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
17-
if err != nil {
14+
stmt := "INSERT INTO storage (" + strings.Join(fields, ", ") + ") VALUES (" + placeholders(len(args)) + ") RETURNING id"
15+
if err := d.db.QueryRowContext(ctx, stmt, args...).Scan(
16+
&create.ID,
17+
); err != nil {
1818
return nil, err
1919
}
2020

21-
err = d.db.QueryRowContext(ctx, query, args...).Scan(&create.ID)
22-
if err != nil {
23-
return nil, err
24-
}
25-
26-
return create, nil
21+
storage := create
22+
return storage, nil
2723
}
2824

2925
func (d *DB) ListStorages(ctx context.Context, find *store.FindStorage) ([]*store.Storage, error) {
30-
qb := squirrel.Select("id", "name", "type", "config").From("storage").OrderBy("id DESC")
31-
26+
where, args := []string{"1 = 1"}, []any{}
3227
if find.ID != nil {
33-
qb = qb.Where(squirrel.Eq{"id": *find.ID})
34-
}
35-
36-
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
37-
if err != nil {
38-
return nil, err
39-
}
40-
41-
rows, err := d.db.QueryContext(ctx, query, args...)
28+
where, args = append(where, "id = "+placeholder(len(args)+1)), append(args, *find.ID)
29+
}
30+
31+
rows, err := d.db.QueryContext(ctx, `
32+
SELECT
33+
id,
34+
name,
35+
type,
36+
config
37+
FROM storage
38+
WHERE `+strings.Join(where, " AND ")+`
39+
ORDER BY id DESC`,
40+
args...,
41+
)
4242
if err != nil {
4343
return nil, err
4444
}
@@ -47,7 +47,12 @@ func (d *DB) ListStorages(ctx context.Context, find *store.FindStorage) ([]*stor
4747
list := []*store.Storage{}
4848
for rows.Next() {
4949
storage := &store.Storage{}
50-
if err := rows.Scan(&storage.ID, &storage.Name, &storage.Type, &storage.Config); err != nil {
50+
if err := rows.Scan(
51+
&storage.ID,
52+
&storage.Name,
53+
&storage.Type,
54+
&storage.Config,
55+
); err != nil {
5156
return nil, err
5257
}
5358
list = append(list, storage)
@@ -61,60 +66,37 @@ func (d *DB) ListStorages(ctx context.Context, find *store.FindStorage) ([]*stor
6166
}
6267

6368
func (d *DB) UpdateStorage(ctx context.Context, update *store.UpdateStorage) (*store.Storage, error) {
64-
qb := squirrel.Update("storage")
65-
69+
set, args := []string{}, []any{}
6670
if update.Name != nil {
67-
qb = qb.Set("name", *update.Name)
71+
set, args = append(set, "name = "+placeholder(len(args)+1)), append(args, *update.Name)
6872
}
6973
if update.Config != nil {
70-
qb = qb.Set("config", *update.Config)
71-
}
72-
73-
qb = qb.Where(squirrel.Eq{"id": update.ID})
74-
75-
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
76-
if err != nil {
77-
return nil, err
78-
}
79-
80-
_, err = d.db.ExecContext(ctx, query, args...)
81-
if err != nil {
82-
return nil, err
74+
set, args = append(set, "config = "+placeholder(len(args)+1)), append(args, *update.Config)
8375
}
8476

77+
stmt := `UPDATE storage SET ` + strings.Join(set, ", ") + ` WHERE id = ` + placeholder(len(args)+1) + ` RETURNING id, name, type, config`
78+
args = append(args, update.ID)
8579
storage := &store.Storage{}
86-
query, args, err = squirrel.Select("id", "name", "type", "config").
87-
From("storage").
88-
Where(squirrel.Eq{"id": update.ID}).
89-
PlaceholderFormat(squirrel.Dollar).
90-
ToSql()
91-
if err != nil {
92-
return nil, err
93-
}
94-
95-
if err := d.db.QueryRowContext(ctx, query, args...).Scan(&storage.ID, &storage.Name, &storage.Type, &storage.Config); err != nil {
80+
if err := d.db.QueryRowContext(ctx, stmt, args...).Scan(
81+
&storage.ID,
82+
&storage.Name,
83+
&storage.Type,
84+
&storage.Config,
85+
); err != nil {
9686
return nil, err
9787
}
9888

9989
return storage, nil
10090
}
10191

10292
func (d *DB) DeleteStorage(ctx context.Context, delete *store.DeleteStorage) error {
103-
qb := squirrel.Delete("storage").Where(squirrel.Eq{"id": delete.ID})
104-
105-
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
106-
if err != nil {
107-
return err
108-
}
109-
110-
result, err := d.db.ExecContext(ctx, query, args...)
93+
stmt := `DELETE FROM storage WHERE id = $1`
94+
result, err := d.db.ExecContext(ctx, stmt, delete.ID)
11195
if err != nil {
11296
return err
11397
}
114-
11598
if _, err := result.RowsAffected(); err != nil {
11699
return err
117100
}
118-
119101
return nil
120102
}

store/db/postgres/system_setting.go

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,42 @@ package postgres
22

33
import (
44
"context"
5-
6-
"github.com/Masterminds/squirrel"
5+
"strings"
76

87
"github.com/usememos/memos/store"
98
)
109

1110
func (d *DB) UpsertSystemSetting(ctx context.Context, upsert *store.SystemSetting) (*store.SystemSetting, error) {
12-
qb := squirrel.Insert("system_setting").
13-
Columns("name", "value", "description").
14-
Values(upsert.Name, upsert.Value, upsert.Description).
15-
Suffix("ON CONFLICT (name) DO UPDATE SET value = EXCLUDED.value, description = EXCLUDED.description").
16-
PlaceholderFormat(squirrel.Dollar)
17-
18-
query, args, err := qb.ToSql()
19-
if err != nil {
20-
return nil, err
21-
}
22-
23-
_, err = d.db.ExecContext(ctx, query, args...)
24-
if err != nil {
11+
stmt := `
12+
INSERT INTO system_setting (
13+
name, value, description
14+
)
15+
VALUES ($1, $2, $3)
16+
ON CONFLICT(name) DO UPDATE
17+
SET
18+
value = EXCLUDED.value,
19+
description = EXCLUDED.description
20+
`
21+
if _, err := d.db.ExecContext(ctx, stmt, upsert.Name, upsert.Value, upsert.Description); err != nil {
2522
return nil, err
2623
}
2724

2825
return upsert, nil
2926
}
3027

3128
func (d *DB) ListSystemSettings(ctx context.Context, find *store.FindSystemSetting) ([]*store.SystemSetting, error) {
32-
qb := squirrel.Select("name", "value", "description").From("system_setting")
33-
29+
where, args := []string{"1 = 1"}, []any{}
3430
if find.Name != "" {
35-
qb = qb.Where(squirrel.Eq{"name": find.Name})
31+
where, args = append(where, "name = "+placeholder(len(args)+1)), append(args, find.Name)
3632
}
3733

38-
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
39-
if err != nil {
40-
return nil, err
41-
}
34+
query := `
35+
SELECT
36+
name,
37+
value,
38+
description
39+
FROM system_setting
40+
WHERE ` + strings.Join(where, " AND ")
4241

4342
rows, err := d.db.QueryContext(ctx, query, args...)
4443
if err != nil {
@@ -48,11 +47,15 @@ func (d *DB) ListSystemSettings(ctx context.Context, find *store.FindSystemSetti
4847

4948
list := []*store.SystemSetting{}
5049
for rows.Next() {
51-
systemSetting := &store.SystemSetting{}
52-
if err := rows.Scan(&systemSetting.Name, &systemSetting.Value, &systemSetting.Description); err != nil {
50+
systemSettingMessage := &store.SystemSetting{}
51+
if err := rows.Scan(
52+
&systemSettingMessage.Name,
53+
&systemSettingMessage.Value,
54+
&systemSettingMessage.Description,
55+
); err != nil {
5356
return nil, err
5457
}
55-
list = append(list, systemSetting)
58+
list = append(list, systemSettingMessage)
5659
}
5760

5861
if err := rows.Err(); err != nil {

store/db/postgres/tag.go

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ package postgres
33
import (
44
"context"
55
"database/sql"
6-
7-
"github.com/Masterminds/squirrel"
6+
"strings"
87

98
"github.com/usememos/memos/store"
109
)
@@ -18,20 +17,20 @@ func (d *DB) UpsertTag(ctx context.Context, upsert *store.Tag) (*store.Tag, erro
1817
}
1918

2019
func (d *DB) ListTags(ctx context.Context, find *store.FindTag) ([]*store.Tag, error) {
21-
builder := squirrel.Select("name", "creator_id").From("tag").
22-
Where("1 = 1").
23-
OrderBy("name ASC").
24-
PlaceholderFormat(squirrel.Dollar)
20+
where, args := []string{"1 = 1"}, []any{}
2521

2622
if find.CreatorID != 0 {
27-
builder = builder.Where("creator_id = ?", find.CreatorID)
28-
}
29-
30-
query, args, err := builder.ToSql()
31-
if err != nil {
32-
return nil, err
23+
where, args = append(where, "creator_id = "+placeholder(len(args)+1)), append(args, find.CreatorID)
3324
}
3425

26+
query := `
27+
SELECT
28+
name,
29+
creator_id
30+
FROM tag
31+
WHERE ` + strings.Join(where, " AND ") + `
32+
ORDER BY name ASC
33+
`
3534
rows, err := d.db.QueryContext(ctx, query, args...)
3635
if err != nil {
3736
return nil, err
@@ -59,33 +58,20 @@ func (d *DB) ListTags(ctx context.Context, find *store.FindTag) ([]*store.Tag, e
5958
}
6059

6160
func (d *DB) DeleteTag(ctx context.Context, delete *store.DeleteTag) error {
62-
builder := squirrel.Delete("tag").
63-
Where(squirrel.Eq{"name": delete.Name, "creator_id": delete.CreatorID}).
64-
PlaceholderFormat(squirrel.Dollar)
65-
66-
query, args, err := builder.ToSql()
61+
where, args := []string{"name = $1", "creator_id = $2"}, []any{delete.Name, delete.CreatorID}
62+
stmt := `DELETE FROM tag WHERE ` + strings.Join(where, " AND ")
63+
result, err := d.db.ExecContext(ctx, stmt, args...)
6764
if err != nil {
6865
return err
6966
}
70-
71-
result, err := d.db.ExecContext(ctx, query, args...)
72-
if err != nil {
73-
return err
74-
}
75-
7667
if _, err = result.RowsAffected(); err != nil {
7768
return err
7869
}
79-
8070
return nil
8171
}
8272

8373
func vacuumTag(ctx context.Context, tx *sql.Tx) error {
84-
stmt := `
85-
DELETE FROM
86-
tag
87-
WHERE
88-
creator_id NOT IN (SELECT id FROM "user")`
74+
stmt := `DELETE FROM tag WHERE creator_id NOT IN (SELECT id FROM "user")`
8975
_, err := tx.ExecContext(ctx, stmt)
9076
if err != nil {
9177
return err

0 commit comments

Comments
 (0)