型のオーバーライド
型のオーバーライド
多くの場合、クエリの入力や出力に使用したいGo型をsqlc
に明示的に指定することが有用です。例えば、PostgreSQLのUUID型は、pgx/v5
を使用する場合、デフォルトでgithub.com/jackc/pgx/pgtype
のUUID
にマップされますが、代わりにgithub.com/google/uuid
のUUID
を使用したい場合があります。
sqlc
に別のGo型を使用させたい場合は、overrides
リストでパッケージのimportパスと型を指定します。
version: "2"
sql:
- schema: "postgresql/schema.sql"
queries: "postgresql/query.sql"
engine: "postgresql"
gen:
go:
package: "authors"
out: "db"
sql_package: "pgx/v5"
overrides:
- db_type: "uuid"
go_type:
import: "github.com/google/uuid"
type: "UUID"
overrides
リスト
overrides
リストの各要素には以下のキーがあります:
db_type
:- オーバーライドするデータベース型。サポートされる型の完全なリストはpostgresql_type.goまたはmysql_type.goで確認できます。Postgresの場合、利用可能な場合はpg_catalog-prefixed名を使用する必要があります。
db_type
とcolumn
は相互排他的です。
- オーバーライドするデータベース型。サポートされる型の完全なリストはpostgresql_type.goまたはmysql_type.goで確認できます。Postgresの場合、利用可能な場合はpg_catalog-prefixed名を使用する必要があります。
column
:- オーバーライドする列名。値は
table.column
の形式である必要がありますが、schema.table.column
またはcatalog.schema.table.column
を指定することもできます。column
とdb_type
は相互排他的です。
- オーバーライドする列名。値は
go_type
:- 生成されたコードで使用するGo型の完全修飾名。通常は文字列ですが、より複雑な設定の場合はマップにすることもできます。
go_struct_tag
:- 生成されたコードで使用するreflectスタイルの構造体タグ。例:
a:"b" x:"y,z"
。すべてのフィールドにjson
またはdb
タグが必要な場合は、代わりにemit_json_tags
またはemit_db_tags
を使用してください。
- 生成されたコードで使用するreflectスタイルの構造体タグ。例:
unsigned
:true
の場合、数値のdb_typeが符号なしの場合にこのオーバーライドが適用されます。これはcolumn
オーバーライドには影響しません。デフォルトはfalse
です。
nullable
:true
の場合、列がnullable(NULL許可)の場合にこのオーバーライドが適用されます。そうでなければ、列がnon-nullable(NULL不許可)の場合にこのオーバーライドが適用されます。これはcolumn
オーバーライドには影響しません。デフォルトはfalse
です。
単一のdb_type
オーバーライド設定は、nullableまたはnon-nullable列のいずれかに適用されますが、両方には適用されません。両方のケースで同じGo型をオーバーライドしたい場合は、2つのオーバーライドを設定する必要があります。
コード生成時、column
キーを使用するエントリは、db_type
キーを使用するエントリよりも常に優先されます。
go_type
マップ
一部のオーバーライドには、より詳細な設定が必要な場合があります。必要に応じて、go_type
は以下のキーを持つマップにできます:
import
:- 型が定義されているパッケージのimportパス。
package
:- 型が定義されているパッケージ名。これは、importパスが希望するパッケージ名で終わらない場合にのみ必要です。
type
:- パッケージプレフィックスなしの型名自体。
pointer
:true
の場合、生成されたコードは型自体ではなく型へのポインターを使用します。
slice
:true
の場合、生成されたコードは型自体ではなく型のスライスを使用します。
例:
version: "2"
sql:
- schema: "postgresql/schema.sql"
queries: "postgresql/query.sql"
engine: "postgresql"
gen:
go:
package: "authors"
out: "db"
sql_package: "pgx/v5"
overrides:
- db_type: "uuid"
go_type:
import: "a/b/v2"
package: "b"
type: "MyType"
pointer: true
原文:https://docs.sqlc.dev/en/latest/howto/overrides.html