Skip to content

Commit 3ac9041

Browse files
committed
Initial support for DELETE
1 parent 6c049b7 commit 3ac9041

File tree

3 files changed

+74
-14
lines changed

3 files changed

+74
-14
lines changed

parser.go

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,16 @@ func parseFuncs(s *postgres.Schema, r *Result, source string, tree pg.ParsetreeL
181181
r.Queries[i].Table = tab
182182
r.Queries[i].Args = parseArgs(tab, refs)
183183
r.Queries[i].SQL = strings.Replace(rawSQL, "*", strings.Join(c, ", "), 1)
184+
case nodes.DeleteStmt:
185+
t := tableName(n)
186+
187+
rawSQL, _ := pluckQuery(source, raw)
188+
refs := extractArgs(n)
189+
190+
tab := getTable(s, t)
191+
r.Queries[i].Table = tab
192+
r.Queries[i].Args = parseArgs(tab, refs)
193+
r.Queries[i].SQL = rawSQL
184194
default:
185195
log.Printf("%T\n", n)
186196
}
@@ -205,6 +215,8 @@ func findRefs(r []paramRef, parent, n nodes.Node) []paramRef {
205215
switch n := n.(type) {
206216
case nodes.RawStmt:
207217
r = findRefs(r, n.Stmt, nil)
218+
case nodes.DeleteStmt:
219+
r = findRefs(r, n.WhereClause, nil)
208220
case nodes.SelectStmt:
209221
r = findRefs(r, n.WhereClause, nil)
210222
r = findRefs(r, n.LimitCount, nil)
@@ -273,12 +285,17 @@ func columnNames(s *postgres.Schema, table string) []string {
273285
return cols
274286
}
275287

276-
func tableName(n nodes.SelectStmt) string {
277-
for _, item := range n.FromClause.Items {
278-
switch i := item.(type) {
279-
case nodes.RangeVar:
280-
return *i.Relname
288+
func tableName(n nodes.Node) string {
289+
switch n := n.(type) {
290+
case nodes.SelectStmt:
291+
for _, item := range n.FromClause.Items {
292+
switch i := item.(type) {
293+
case nodes.RangeVar:
294+
return *i.Relname
295+
}
281296
}
297+
case nodes.DeleteStmt:
298+
return *n.Relation.Relname
282299
}
283300
return ""
284301
}
@@ -391,6 +408,22 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{range .Args}}{{.Name}}
391408
}
392409
{{end}}
393410
411+
{{if eq .Type ":exec"}}
412+
func (q *Queries) {{.MethodName}}(ctx context.Context, {{range .Args}}{{.Name}} {{.Type}},{{end}}) error {
413+
var err error
414+
switch {
415+
case q.{{.StmtName}} != nil && q.tx != nil:
416+
_, err = q.tx.StmtContext(ctx, q.{{.StmtName}}).ExecContext(ctx, {{range .Args}}{{.Name}},{{end}})
417+
case q.{{.StmtName}} != nil:
418+
_, err = q.{{.StmtName}}.ExecContext(ctx, {{range .Args}}{{.Name}},{{end}})
419+
default:
420+
_, err = q.db.ExecContext(ctx, {{.QueryName}}, {{range .Args}}{{.Name}},{{end}})
421+
}
422+
return err
423+
}
424+
{{end}}
425+
426+
394427
{{end}}
395428
`
396429

testdata/ondeck/db.go

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func New(db dbtx) *Queries {
3232
func Prepare(ctx context.Context, db dbtx) (*Queries, error) {
3333
q := Queries{db: db}
3434
var err error
35+
if q.deleteVenue, err = db.PrepareContext(ctx, deleteVenue); err != nil {
36+
return nil, err
37+
}
3538
if q.getCity, err = db.PrepareContext(ctx, getCity); err != nil {
3639
return nil, err
3740
}
@@ -47,20 +50,40 @@ func Prepare(ctx context.Context, db dbtx) (*Queries, error) {
4750
type Queries struct {
4851
db dbtx
4952

50-
tx *sql.Tx
51-
getCity *sql.Stmt
52-
listCities *sql.Stmt
53-
listVenues *sql.Stmt
53+
tx *sql.Tx
54+
deleteVenue *sql.Stmt
55+
getCity *sql.Stmt
56+
listCities *sql.Stmt
57+
listVenues *sql.Stmt
5458
}
5559

5660
func (q *Queries) WithTx(tx *sql.Tx) *Queries {
5761
return &Queries{
58-
tx: tx,
59-
db: tx,
60-
getCity: q.getCity,
61-
listCities: q.listCities,
62-
listVenues: q.listVenues,
62+
tx: tx,
63+
db: tx,
64+
deleteVenue: q.deleteVenue,
65+
getCity: q.getCity,
66+
listCities: q.listCities,
67+
listVenues: q.listVenues,
68+
}
69+
}
70+
71+
const deleteVenue = `-- name: DeleteVenue :exec
72+
DELETE FROM venue
73+
WHERE slug = $1
74+
`
75+
76+
func (q *Queries) DeleteVenue(ctx context.Context, slug string) error {
77+
var err error
78+
switch {
79+
case q.deleteVenue != nil && q.tx != nil:
80+
_, err = q.tx.StmtContext(ctx, q.deleteVenue).ExecContext(ctx, slug)
81+
case q.deleteVenue != nil:
82+
_, err = q.deleteVenue.ExecContext(ctx, slug)
83+
default:
84+
_, err = q.db.ExecContext(ctx, deleteVenue, slug)
6385
}
86+
return err
6487
}
6588

6689
const getCity = `-- name: GetCity :one

testdata/ondeck/query/queries.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ SELECT *
1313
FROM venue
1414
WHERE city = $1
1515
ORDER BY name;
16+
17+
-- name: DeleteVenue :exec
18+
DELETE FROM venue
19+
WHERE slug = $1;

0 commit comments

Comments
 (0)