パラメータの命名
パラメータの命名
sqlcは位置パラメータに対して良い名前を生成しようとしますが、時には十分なコンテキストが不足することがあります。以下のSQLは、理想的とは言えない名前のパラメータを生成します:
-- name: UpsertAuthorName :one
UPDATE author
SET
name = CASE WHEN $1::bool
THEN $2::text
ELSE name
END
RETURNING *;
type UpdateAuthorNameParams struct {
Column1 bool `json:""`
Column2_2 string `json:"_2"`
}
このような場合、名前付きパラメータを使用することで、Params構造体のフィールド名を制御できます。
-- name: UpsertAuthorName :one
UPDATE author
SET
name = CASE WHEN sqlc.arg(set_name)::bool
THEN sqlc.arg(name)::text
ELSE name
END
RETURNING *;
type UpdateAuthorNameParams struct {
SetName bool `json:"set_name"`
Name string `json:"name"`
}
sqlc.arg()
構文が冗長だと感じる場合は、@
演算子をショートカットとして使用できます。
注意:sqlc.arg()
のショートカットとしての@
演算子は、MySQLではサポートされていません。
-- name: UpsertAuthorName :one
UPDATE author
SET
name = CASE WHEN @set_name::bool
THEN @name::text
ELSE name
END
RETURNING *;
NULL可能パラメータ
sqlcは指定されたパラメータのNULL可能性を推論し、多くの場合あなたが期待する通りに動作します。パラメータのNULL可能性をより細かく制御したい場合は、sqlc.narg()
(nullable arg)を使用してデフォルトの動作をオーバーライドできます。sqlc.narg
を使用すると、sqlcは推論されたNULL可能性を無視し、代わりにNULL可能パラメータを生成するよう指示されます。@
構文にはNULL可能相当がありません。
以下は、単一のクエリを使用して著者の名前、経歴、またはその両方の更新を可能にする例です。
-- name: UpdateAuthor :one
UPDATE author
SET
name = coalesce(sqlc.narg('name'), name),
bio = coalesce(sqlc.narg('bio'), bio)
WHERE id = sqlc.arg('id')
RETURNING *;
以下のコードが生成されます:
type UpdateAuthorParams struct {
Name sql.NullString
Bio sql.NullString
ID int64
}
原文:https://docs.sqlc.dev/en/latest/howto/named_parameters.html