型のオーバーライド
型のオーバーライド
多くの場合、クエリの入力や出力に使用したい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