sqlc 使用切片作为查询条件
1 min read
使用 sqlc 时,有时候需要使用切片作为查询条件。
这里有两种方法:
方法 1
在 =
号后面,使用 ANY($1::int[])
。例如:
-- name: ListUserRoleByUserIDList :many
SELECT *
FROM user_role
WHERE user_id = ANY($1::int[]);
其中 int
表示 $1
字段的类型,[]
表示切片。
生成的代码如下:
func (q *Queries) ListUserRoleByUserIDList(ctx context.Context, dollar_1 []int32) ([]UserRole, error)
这样就可以传入切片作为查询条件了。
方法 2
sqlc 更新后,可以使用 sqlc.slice
来表示切片。例如:
-- name: Foo :many
SELECT * FROM foo WHERE hash IN (sqlc.slice(hashes)) LIMIT 50;
生成的代码如下:
func (q *Queries) Foo(ctx context.Context, hashes []string) ([]string, error)