Skip to content

Commit de155ac

Browse files
committed
feat(golang): support custom enum type slices for pgx/v5
1 parent d354c0e commit de155ac

File tree

27 files changed

+479
-4
lines changed

27 files changed

+479
-4
lines changed

examples/enums/postgresql/db.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//go:build examples
2+
// +build examples
3+
4+
package enums
5+
6+
import (
7+
"context"
8+
"testing"
9+
10+
"github.com/sqlc-dev/sqlc/internal/sqltest"
11+
)
12+
13+
func TestUsers(t *testing.T) {
14+
sdb, cleanup := sqltest.PostgreSQLPgxV5(t, []string{"schema.sql", "fixtures.sql"})
15+
defer cleanup()
16+
17+
ctx := context.Background()
18+
db := New(sdb)
19+
20+
for _, name := range EnumNames {
21+
enumType, err := sdb.LoadType(ctx, name) // register enum
22+
if err != nil {
23+
t.Fatal(err)
24+
}
25+
sdb.TypeMap().RegisterType(enumType)
26+
27+
enumType, err = sdb.LoadType(ctx, "_"+name) // register slice of enum
28+
if err != nil {
29+
t.Fatal(err)
30+
}
31+
sdb.TypeMap().RegisterType(enumType)
32+
}
33+
34+
err := db.UserCreate(ctx, UserCreateParams{
35+
FirstName: "Alex",
36+
LastName: "Brown",
37+
Age: 25,
38+
ShirtSize: SizeMedium,
39+
})
40+
if err != nil {
41+
t.Fatal(err)
42+
}
43+
44+
// list all users
45+
users, err := db.ListUsers(ctx)
46+
if err != nil {
47+
t.Fatal(err)
48+
}
49+
t.Log(users)
50+
51+
// list users with large shirt_size
52+
usersWithLarge, err := db.ListUsersByShirtSizes(ctx, []Size{SizeLarge})
53+
if err != nil {
54+
t.Fatal(err)
55+
}
56+
t.Log(usersWithLarge)
57+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
INSERT INTO users (first_name, last_name, age, shirt_size)
2+
VALUES ('John', 'Doe', 42, 'large'),
3+
('Dirk', 'Sample', 23, 'large'),
4+
('Susan', 'Foo', 19, 'small');

examples/enums/postgresql/models.go

Lines changed: 67 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/enums/postgresql/querier.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
-- name: UserCreate :exec
2+
INSERT INTO users (first_name, last_name, age, shirt_size)
3+
VALUES ($1, $2, $3, $4);
4+
5+
-- name: ListUsers :many
6+
SELECT * FROM users;
7+
8+
-- name: ListUsersByShirtSizes :many
9+
SELECT * FROM users
10+
WHERE shirt_size = ANY(@shirt_size::size[]);

examples/enums/postgresql/query.sql.go

Lines changed: 93 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CREATE TYPE size AS ENUM('x-small', 'small', 'medium', 'large', 'x-large');
2+
3+
CREATE TABLE users (
4+
id bigint NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
5+
first_name text NOT NULL,
6+
last_name text NOT NULL,
7+
age integer NOT NULL,
8+
shirt_size size NOT NULL
9+
);

examples/enums/sqlc.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "postgresql",
6+
"name": "enums",
7+
"schema": "postgresql/schema.sql",
8+
"queries": "postgresql/query.sql",
9+
"engine": "postgresql",
10+
"database": {
11+
"uri": "postgresql://${PG_USER}:${PG_PASSWORD}@${PG_HOST}:${PG_PORT}/batch"
12+
},
13+
"rules": [
14+
"sqlc/db-prepare"
15+
],
16+
"sql_package": "pgx/v5",
17+
"emit_json_tags": true,
18+
"emit_prepared_queries": true,
19+
"emit_interface": true
20+
}
21+
]
22+
}

internal/codegen/golang/enum.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type Constant struct {
1515

1616
type Enum struct {
1717
Name string
18+
TypeName string
1819
Comment string
1920
Constants []Constant
2021
NameTags map[string]string

0 commit comments

Comments
 (0)