首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含条件的sql生成代码中的SQLC命名参数

包含条件的sql生成代码中的SQLC命名参数
EN

Stack Overflow用户
提问于 2021-08-05 13:58:12
回答 1查看 630关注 0票数 0

我使用golang从sql生成CRUD操作go代码。

我的选择查询就像下面这样

代码语言:javascript
复制
-- 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生成代码

代码语言:javascript
复制
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中的应用

EN

回答 1

Stack Overflow用户

发布于 2022-04-13 02:10:51

您可以使用命名参数。

代码语言:javascript
复制
-- 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)%' );

您可以找到文档这里

当使用条件过滤器进行选择时,它对我的作用是这样的:

代码语言:javascript
复制
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标志和值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68668015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档