Skip to content

Commit edb9560

Browse files
authored
docs: Add some more example code for running transactions (#1583)
As asked by #1479
1 parent d7eda89 commit edb9560

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

docs/howto/transactions.md

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
```sql
44
CREATE TABLE records (
5-
id SERIAL PRIMARY KEY
5+
id SERIAL PRIMARY KEY,
6+
counter INT NOT NULL
67
);
78

89
-- name: GetRecord :one
@@ -21,7 +22,8 @@ import (
2122
)
2223

2324
type Record struct {
24-
ID int
25+
ID int
26+
Counter int
2527
}
2628

2729
type DBTX interface {
@@ -41,14 +43,38 @@ func (*Queries) WithTx(tx *sql.Tx) *Queries {
4143
}
4244

4345
const getRecord = `-- name: GetRecord :one
44-
SELECT id FROM records
46+
SELECT id, counter FROM records
4547
WHERE id = $1
4648
`
4749

4850
func (q *Queries) GetRecord(ctx context.Context, id int) (Record, error) {
4951
row := q.db.QueryRowContext(ctx, getRecord, id)
5052
var i Record
51-
err := row.Scan(&i.ID)
53+
err := row.Scan(&i.ID, &i.Counter)
5254
return i, err
5355
}
5456
```
57+
58+
With pgx you'd use it like this for example:
59+
60+
```go
61+
function bumpCounter(ctx context.Context, p *pgx.Conn, id int) error {
62+
tx, err := db.Begin(ctx)
63+
if err != nil {
64+
return err
65+
}
66+
defer tx.Rollback()
67+
q := db.New(tx)
68+
r, err := q.GetRecord(ctx, id)
69+
if err != nil {
70+
return err
71+
}
72+
if err := q.UpdateRecord(ctx, db.UpdateRecordParams{
73+
ID: r.ID,
74+
Counter: r.Counter+1,
75+
}); err != nil {
76+
return err
77+
}
78+
return tx.Commit()
79+
}
80+
```

0 commit comments

Comments
 (0)