我使用golang从sql生成CRUD操作go代码。
我的选择查询就像下面这样
-- name: SearchProducts :many
SELECT * FROM product
WHERE ( $1::varchar(100) IS NULL OR name LIKE '%$1%' )
AND ( $2::varchar(1000) IS NULL OR description LIKE '%$2%' );像下面这样的SQLC生成代码
type SearchProductsParams struct {
Column1 string `json:"column_1"`
Column2 string `json:"column_2"`
}
func (q *Queries) SearchProducts(ctx context.Context, arg SearchProductsParams) ([]Product, error) {
rows, err := q.db.QueryContext(ctx, searchProducts, arg.Column1, arg.Column2)
if err != nil {
return nil, err
}
....是否有任何方法来配置sqlc,使其能够使用名称和描述来代替Column1和Column2在SearchProductsParams struct中的应用
发布于 2022-04-13 02:10:51
您可以使用命名参数。
-- name: SearchProducts :many
SELECT * FROM product
WHERE ( sqlc.arg(email)::varchar(100) IS NULL OR name LIKE '%sqlc.arg(email)%' )
AND ( sqlc.arg(description)::varchar(1000) IS NULL OR description LIKE '%sqlc.arg(description)%' );您可以找到文档这里
当使用条件过滤器进行选择时,它对我的作用是这样的:
SELECT * FROM product
WHERE
email like CASE
WHEN @filter_email::bool
THEN @email::VARCHAR
ELSE '%'
END
AND
description = CASE
WHEN @filter_description::bool
THEN @description::VARCHAR
ELSE description
END当您实际想要筛选时,您必须使用标志filter_email或filter_description标志和值。
https://stackoverflow.com/questions/68668015
复制相似问题