設定

sqlcツールはsqlc.(yaml|yml)またはsqlc.jsonファイルで設定されます。このファイルはsqlcコマンドを実行するディレクトリに配置する必要があります。

バージョン2

version: "2"
cloud:
  project: "<PROJECT_ID>"
sql:
- schema: "postgresql/schema.sql"
  queries: "postgresql/query.sql"
  engine: "postgresql"
  gen:
    go: 
      package: "authors"
      out: "postgresql"
  database:
    managed: true
  rules:
    - sqlc/db-prepare
- schema: "mysql/schema.sql"
  queries: "mysql/query.sql"
  engine: "mysql"
  gen:
    go:
      package: "authors"
      out: "mysql"

sql

sqlコレクションの各マッピングには以下のキーがあります:

  • name:
    • このクエリセットの人にやさしい識別子。オプション。
  • engine:
    • postgresqlmysqlsqliteのいずれか。
  • schema:
    • SQLマイグレーションのディレクトリまたは単一のSQLファイルへのパス、またはパスのリスト。
  • queries:
    • SQLクエリのディレクトリまたは単一のSQLファイルへのパス、またはパスのリスト。
  • codegen:
    • コードジェネレーターを設定するマッピングのコレクション。サポートされるキーについてはcodegenを参照。
  • gen:
    • 組み込みコードジェネレーターを設定するマッピング。サポートされるキーについてはgenを参照。
  • database:
    • データベース接続を設定するマッピング。サポートされるキーについてはdatabaseを参照。
  • rules:
    • sqlc vetで実行するルール名のコレクション。設定オプションについてはrulesを参照。
  • analyzer:
    • クエリ分析を設定するマッピング。サポートされるキーについてはanalyzerを参照。
  • strict_function_checks
    • trueの場合、呼び出されたSQL関数が存在しない場合にエラーを返します。デフォルトはfalse
  • strict_order_by
    • trueの場合、order by列があいまいな場合にエラーを返します。デフォルトはtrue

codegen

codegenマッピングは以下のキーをサポートしています:

  • out:
    • 生成されたコードの出力ディレクトリ。
  • plugin:
    • プラグインの名前。pluginsコレクションで定義されている必要があります。
  • options:
    • プラグイン固有のオプションのマッピング。
version: '2'
plugins:
- name: py
  wasm:
    url: https://github.com/sqlc-dev/sqlc-gen-python/releases/download/v0.16.0-alpha/sqlc-gen-python.wasm
    sha256: 428476c7408fd4c032da4ec74e8a7344f4fa75e0f98a5a3302f238283b9b95f2
sql:
- schema: "schema.sql"
  queries: "query.sql"
  engine: postgresql
  codegen:
  - out: src/authors
    plugin: py
    options:
      package: authors
      emit_sync_querier: true
      emit_async_querier: true
      query_parameter_limit: 5

database

databaseマッピングは以下のキーをサポートしています:

  • managed:
    • trueの場合、管理データベースに接続します。デフォルトはfalse
  • uri:
    • データベース接続URI

uri文字列は${...}構文を使用して環境変数への参照を含めることができます。以下の例では、接続文字列にPG_PASSWORD環境変数の値がパスワードとして設定されます。

version: '2'
sql:
- schema: schema.sql
  queries: query.sql
  engine: postgresql
  database:
    uri: postgresql://postgres:${PG_PASSWORD}@localhost:5432/authors
  gen:
    go:
      package: authors
      out: postgresql

analyzer

analyzerマッピングは以下のキーをサポートしています:

  • database:
    • falseの場合、クエリ分析に設定されたデータベースを使用しません。デフォルトはtrue

gen

genマッピングは以下のキーをサポートしています:

go

  • package:
    • 生成されたコードに使用するパッケージ名。デフォルトはoutのベース名。
  • out:
    • 生成されたコードの出力ディレクトリ。
  • sql_package:
    • pgx/v4pgx/v5database/sqlのいずれか。デフォルトはdatabase/sql
  • sql_driver:
    • github.com/jackc/pgx/v4github.com/jackc/pgx/v5github.com/lib/pqgithub.com/go-sql-driver/mysqlのいずれか。デフォルトなし。クエリアノテーション:copyfromが使用される場合は必須。
  • emit_db_tags:
    • trueの場合、生成された構造体にDBタグを追加します。デフォルトはfalse
  • emit_prepared_queries:
    • trueの場合、プリペアドクエリのサポートを含めます。デフォルトはfalse
  • emit_interface:
    • trueの場合、生成されたパッケージにQuerierインターフェースを出力します。デフォルトはfalse
  • emit_exact_table_names:
    • trueの場合、構造体名はテーブル名をミラーします。そうでなければ、sqlcは複数形のテーブル名を単数形にしようとします。デフォルトはfalse
  • emit_empty_slices:
    • trueの場合、:manyクエリによって返されるスライスはnilの代わりに空になります。デフォルトはfalse
  • emit_exported_queries:
    • trueの場合、自動生成されたSQL文を他のパッケージからアクセスできるようにエクスポートできます。
  • emit_json_tags:
    • trueの場合、生成された構造体にJSONタグを追加します。デフォルトはfalse
  • emit_result_struct_pointers:
    • trueの場合、クエリ結果は構造体へのポインターとして返されます。複数の結果を返すクエリは、ポインターのスライスとして返されます。デフォルトはfalse
  • emit_params_struct_pointers:
    • trueの場合、パラメーターは構造体へのポインターとして渡されます。デフォルトはfalse
  • emit_methods_with_db_argument:
    • trueの場合、生成されたメソッドは*Queries構造体にDBTXを格納する代わりにDBTX引数を受け入れます。デフォルトはfalse
  • emit_pointers_for_null_types:
    • trueの場合、null許可列の生成された型はdatabase/sqlのnull型(例:NullString)の代わりにポインター(例:*string)として出力されます。現在、sql_packagepgx/v4またはpgx/v5の場合のPostgreSQLとSQLiteでのみサポートされています。デフォルトはfalse
  • emit_enum_valid_method:
    • trueの場合、文字列が有効な列挙値かどうかを示すenum型でValidメソッドを生成します。
  • emit_all_enum_values:
    • trueの場合、すべての有効な列挙値を返すenum型ごとの関数を出力します。
  • emit_sql_as_comment:
    • trueの場合、生成された関数の上にSQL文をコードブロックコメントとして出力し、既存のコメントに追加します。デフォルトはfalse
  • build_tags:
    • 設定されている場合、生成されたGoファイルの先頭に//go:build <build_tags>ディレクティブを追加します。
  • initialisms:
    • 大文字にする頭字語の配列。例えば、app_idAppIDになります。デフォルトは["id"]
  • json_tags_id_uppercase:
    • trueの場合、jsonタグの"Id"は大文字になります。falseの場合、キャメルケースになります。デフォルトはfalse
  • json_tags_case_style:
    • キャメルケースの場合はcamel、パスカルケースの場合はpascal、スネークケースの場合はsnake、DBの列名を使用する場合はnone。デフォルトはnone
  • omit_unused_structs:
    • trueの場合、sqlcは特定のパッケージのクエリで使用されていないテーブルと列挙構造体を生成しません。デフォルトはfalse
  • output_batch_file_name:
    • バッチファイルの名前をカスタマイズします。デフォルトはbatch.go
  • output_db_file_name:
    • dbファイルの名前をカスタマイズします。デフォルトはdb.go
  • output_models_file_name:
    • modelsファイルの名前をカスタマイズします。デフォルトはmodels.go
  • output_querier_file_name:
    • querierファイルの名前をカスタマイズします。デフォルトはquerier.go
  • output_copyfrom_file_name:
    • copyfromファイルの名前をカスタマイズします。デフォルトはcopyfrom.go
  • output_files_suffix:
    • 指定されている場合、生成されたファイルの名前にサフィックスが追加されます。
  • query_parameter_limit:
    • Go関数に生成される位置引数の数。常にパラメーター構造体を出力するには、これを0に設定します。デフォルトは1
  • rename:
    • 生成された構造体フィールドの名前をカスタマイズします。使用方法については「フィールド名の変更」を参照。
  • overrides:
    • データベース型のマッピングに使用される型を決定する定義のコレクション。
overrides

型のオーバーライドの使用に関する詳細なガイドについては「型のオーバーライド」を参照してください。overridesコレクションの各マッピングには以下のキーがあります:

  • db_type:
    • オーバーライドするPostgreSQLまたはMySQL型。サポートされる型の完全なリストは、postgresql_type.goまたはmysql_type.goで確認できます。Postgresの場合、利用可能な場合はpg_catalogプレフィックス付きの名前を使用する必要があります。columnキーが定義されている場合は使用できません。
  • column:
    • 型のオーバーライドが型ではなくテーブルの特定の列に対して行われる場合。columntable.columnの形式である必要がありますが、schema.table.columnまたはcatalog.schema.table.columnを指定してより具体的にすることもできます。db_typeキーが定義されている場合は使用できません。
  • go_type:
    • 生成されたコードで使用するGo型の完全修飾名。
  • go_struct_tag:
    • 生成されたコードで使用するreflectスタイルの構造体タグ。例:a:"b" x:"y,z"。すべてのフィールドに一般的なjson/dbタグが必要な場合は、代わりにemit_db_tagsおよび/またはemit_json_tagsを使用してください。
  • nullable:
    • trueの場合、列がnull許可の場合にこの型を使用します。デフォルトはfalse

より複雑なimportパスの場合、go_typeは以下のキーを持つオブジェクトにすることもできます:

  • import:
    • 型が定義されているパッケージのimportパス。
  • package:
    • 型が定義されているパッケージ名。これは、importパスが希望するパッケージ名で終わらない場合にのみ必要です。
  • type:
    • パッケージプレフィックスなしの型名自体。
  • pointer:
    • trueに設定されている場合、生成されたコードは型自体ではなく型へのポインターを使用します。
  • slice:
    • trueに設定されている場合、生成されたコードは型自体ではなく型のスライスを使用します。

kotlin

v1.17.0で削除され、sqlc-gen-kotlinプラグインに置き換えられました。切り替えるには移行ガイドに従ってください。

  • package:
    • 生成されたコードに使用するパッケージ名。
  • out:
    • 生成されたコードの出力ディレクトリ。
  • emit_exact_table_names:
    • trueの場合、生成されたモデルに正確なテーブル名を使用します。そうでなければ、単数形を推測します。デフォルトはfalse

python

v1.17.0で削除され、sqlc-gen-pythonプラグインに置き換えられました。切り替えるには移行ガイドに従ってください。

  • package:
    • 生成されたコードに使用するパッケージ名。
  • out:
    • 生成されたコードの出力ディレクトリ。
  • emit_exact_table_names:
    • trueの場合、生成されたモデルに正確なテーブル名を使用します。そうでなければ、単数形を推測します。デフォルトはfalse
  • emit_sync_querier:
    • trueの場合、同期メソッドを持つクラスを生成します。デフォルトはfalse
  • emit_async_querier:
    • trueの場合、非同期メソッドを持つクラスを生成します。デフォルトはfalse
  • emit_pydantic_models:
    • trueの場合、pydantic.BaseModelから継承するクラスを生成します。そうでなければ、dataclassデコレータを使用してクラスを定義します。デフォルトはfalse

json

  • out:
    • 生成されたJSONの出力ディレクトリ。
  • filename:
    • 生成されたJSONドキュメントのファイル名。デフォルトはcodegen_request.json
  • indent:
    • JSONドキュメントで使用するインデント文字列。デフォルトは``。

plugins

pluginsコレクションの各マッピングには以下のキーがあります:

  • name:
    • このプラグインの名前。必須。
  • env
    • プラグインに渡す環境変数のリスト。デフォルトでは、環境変数は渡されません。
  • process: 単一のcmdキーを持つマッピング
    • cmd:
      • このプラグインを使用する際に呼び出す実行可能ファイル
    • format:
      • 期待される形式。jsonprotobuf形式をサポートします。デフォルトはprotobuf
  • wasm: urlsha256の2つのキーを持つマッピング
    • url:
      • WASMファイルを取得するURL。https://またはfile://スキームをサポートします。
    • sha256
      • ダウンロードされたファイルのSHA256チェックサム。
version: "2"
plugins:
- name: "py"
  wasm: 
    url: "https://github.com/sqlc-dev/sqlc-gen-python/releases/download/v0.16.0-alpha/sqlc-gen-python.wasm"
    sha256: "428476c7408fd4c032da4ec74e8a7344f4fa75e0f98a5a3302f238283b9b95f2"
- name: "js"
  env:
  - PATH
  process: 
    cmd: "sqlc-gen-json"

rules

rulesコレクションの各マッピングには以下のキーがあります:

  • name:
    • このルールの名前。必須。
  • rule:
    • Common Expression Language(CEL)式。必須。
  • message:
    • このルールがtrueと評価される場合に表示されるオプションのメッセージ。

組み込みルールのリストとカスタムルールの作成ヘルプについては、vetドキュメントを参照してください。

version: "2"
sql:
  - schema: "query.sql"
    queries: "query.sql"
    engine: "postgresql"
    gen:
      go:
        package: "authors"
        out: "db"
    rules:
      - no-pg
      - no-delete
      - only-one-param
      - no-exec
rules:
  - name: no-pg
    message: "invalid engine: postgresql"
    rule: |
      config.engine == "postgresql"
  - name: no-delete
    message: "don't use delete statements"
    rule: |
      query.sql.contains("DELETE")
  - name: only-one-param
    message: "too many parameters"
    rule: |
      query.params.size() > 1
  - name: no-exec
    message: "don't use exec"
    rule: |
      query.cmd == "exec"

グローバルオーバーライド

時には、コード生成のさまざまな仕様で同じ設定を行う必要があります。その場合、以下の方法でoverridesマッピングを使用して型のオーバーライドとフィールドの名前変更のグローバル定義を行うことができます:

version: "2"
overrides:
  go:
    rename:
      id: "Identifier"
    overrides:
      - db_type: "timestamptz"
        nullable: true
        engine: "postgresql"
        go_type:
          import: "gopkg.in/guregu/null.v4"
          package: "null"
          type: "Time"
sql:
- schema: "postgresql/schema.sql"
  queries: "postgresql/query.sql"
  engine: "postgresql"
  gen:
    go: 
      package: "authors"
      out: "postgresql"
- schema: "mysql/schema.sql"
  queries: "mysql/query.sql"
  engine: "mysql"
  gen:
    go:
      package: "authors"
      out: "mysql"

前の設定では、idという名前のテーブル列から構造体フィールドが生成される場合、常にIdentifierとして生成されます。

また、PostgresテーブルにNULL許可のtimestamp with time zone列がある場合、常にnull.Timeとして生成されます。グローバル型オーバーライドのマッピングには、通常の型オーバーライドにはないengineフィールドがあることに注意してください。このフィールドは、複数のエンジンを使用する複数の定義がある場合にのみ使用されます。そうでなければ、engineキーの値は現在使用されているエンジンにデフォルト設定されます。

現在、グローバルと通常の両方の型のオーバーライドとフィールドの名前変更は、Goでのみ完全にサポートされています。

バージョン1

version: "1"
packages:
  - name: "db"
    path: "internal/db"
    queries: "./sql/query/"
    schema: "./sql/schema/"
    engine: "postgresql"
    emit_db_tags: false
    emit_prepared_queries: true
    emit_interface: false
    emit_exact_table_names: false
    emit_empty_slices: false
    emit_exported_queries: false
    emit_json_tags: true
    emit_result_struct_pointers: false
    emit_params_struct_pointers: false
    emit_methods_with_db_argument: false
    emit_pointers_for_null_types: false
    emit_enum_valid_method: false
    emit_all_enum_values: false
    build_tags: "some_tag"
    json_tags_case_style: "camel"
    omit_unused_structs: false
    output_batch_file_name: "batch.go"
    output_db_file_name: "db.go"
    output_models_file_name: "models.go"
    output_querier_file_name: "querier.go"
    output_copyfrom_file_name: "copyfrom.go"
    query_parameter_limit: 1

packages

packagesコレクションの各マッピングには以下のキーがあります:

  • name:
    • 生成されたコードに使用するパッケージ名。デフォルトはpathのベース名。
  • path:
    • 生成されたコードの出力ディレクトリ。
  • queries:
    • SQLクエリのディレクトリまたは単一のSQLファイルへのパス、またはパスのリスト。
  • schema:
    • SQLマイグレーションのディレクトリまたは単一のSQLファイルへのパス、またはパスのリスト。
  • engine:
    • postgresqlまたはmysqlのいずれか。デフォルトはpostgresql
  • sql_package:
    • pgx/v4pgx/v5database/sqlのいずれか。デフォルトはdatabase/sql
  • emit_db_tags:
    • trueの場合、生成された構造体にDBタグを追加します。デフォルトはfalse
  • emit_prepared_queries:
    • trueの場合、プリペアドクエリのサポートを含めます。デフォルトはfalse
  • emit_interface:
    • trueの場合、生成されたパッケージにQuerierインターフェースを出力します。デフォルトはfalse
  • emit_exact_table_names:
    • trueの場合、構造体名はテーブル名をミラーします。そうでなければ、sqlcは複数形のテーブル名を単数形にしようとします。デフォルトはfalse
  • emit_empty_slices:
    • trueの場合、:manyクエリによって返されるスライスはnilの代わりに空になります。デフォルトはfalse
  • emit_exported_queries:
    • trueの場合、自動生成されたSQL文を他のパッケージからアクセスできるようにエクスポートできます。
  • emit_json_tags:
    • trueの場合、生成された構造体にJSONタグを追加します。デフォルトはfalse
  • emit_result_struct_pointers:
    • trueの場合、クエリ結果は構造体へのポインターとして返されます。複数の結果を返すクエリは、ポインターのスライスとして返されます。デフォルトはfalse
  • emit_params_struct_pointers:
    • trueの場合、パラメーターは構造体へのポインターとして渡されます。デフォルトはfalse
  • emit_methods_with_db_argument:
    • trueの場合、生成されたメソッドは*Queries構造体にDBTXを格納する代わりにDBTX引数を受け入れます。デフォルトはfalse
  • emit_pointers_for_null_types:
    • trueでsql_packagepgx/v4またはpgx/v5に設定されている場合、null許可列の生成された型はdatabase/sqlのnull型(例:NullString)の代わりにポインター(例:*string)として出力されます。デフォルトはfalse
  • emit_enum_valid_method:
    • trueの場合、文字列が有効な列挙値かどうかを示すenum型でValidメソッドを生成します。
  • emit_all_enum_values:
    • trueの場合、すべての有効な列挙値を返すenum型ごとの関数を出力します。
  • build_tags:
    • 設定されている場合、生成されたGoファイルの先頭に//go:build <build_tags>ディレクティブを追加します。
  • json_tags_case_style:
    • キャメルケースの場合はcamel、パスカルケースの場合はpascal、スネークケースの場合はsnake、DBの列名を使用する場合はnone。デフォルトはnone
  • omit_unused_structs:
    • trueの場合、sqlcは特定のパッケージのクエリで使用されていないテーブルと列挙構造体を生成しません。デフォルトはfalse
  • output_batch_file_name:
    • バッチファイルの名前をカスタマイズします。デフォルトはbatch.go
  • output_db_file_name:
    • dbファイルの名前をカスタマイズします。デフォルトはdb.go
  • output_models_file_name:
    • modelsファイルの名前をカスタマイズします。デフォルトはmodels.go
  • output_querier_file_name:
    • querierファイルの名前をカスタマイズします。デフォルトはquerier.go
  • output_copyfrom_file_name:
    • copyfromファイルの名前をカスタマイズします。デフォルトはcopyfrom.go
  • output_files_suffix:
    • 指定されている場合、生成されたファイルの名前にサフィックスが追加されます。
  • query_parameter_limit:
    • Go関数で生成される位置引数(>= 0)。常にパラメーター構造体を出力するには、これを0に設定する必要があります。デフォルトは1

overrides

PostgreSQL/MySQL型からGo型へのデフォルトマッピングは、必要な場合にのみ標準ライブラリ外のパッケージを使用します。

例えば、uuid PostgreSQL型はgithub.com/google/uuidにマップされます。UUIDに異なるGoパッケージが必要な場合は、overrides配列でパッケージを指定します。この場合、代わりにgithub.com/gofrs/uuidを使用します。

version: "1"
packages: [...]
overrides:
  - go_type: "github.com/gofrs/uuid.UUID"
    db_type: "uuid"

各オーバーライドドキュメントには以下のキーがあります:

  • db_type:
    • オーバーライドするPostgreSQLまたはMySQL型。サポートされる型の完全なリストは、postgresql_type.goまたはmysql_type.goで確認できます。Postgresの場合、利用可能な場合はpg_catalogプレフィックス付きの名前を使用する必要があります。
  • go_type:
    • 生成されたコードで使用するGo型の完全修飾名。
  • go_struct_tag:
    • 生成されたコードで使用するreflectスタイルの構造体タグ。例:a:"b" x:"y,z"。すべてのフィールドに一般的なjson/dbタグが必要な場合は、代わりにemit_db_tagsおよび/またはemit_json_tagsを使用してください。
  • nullable:
    • trueの場合、列がnull許可の場合にこの型を使用します。デフォルトはfalse

単一のdb_typeオーバーライド設定は、null許可またはnull不許可の列のいずれかに適用されますが、両方には適用されません。両方のケースで単一のgo_typeをオーバーライドしたい場合は、2つのオーバーライドを指定する必要があります。

より複雑なimportパスの場合、go_typeはオブジェクトにすることもできます。

version: "1"
packages: [...]
overrides:
  - db_type: "uuid"
    go_type:
      import: "a/b/v2"
      package: "b"
      type: "MyType"

列単位の型オーバーライド

前のセクションで説明した型ベースではなく、テーブルの特定のフィールドのモデルまたはクエリ生成で使用されるGo型をオーバーライドしたい場合があります。

これは、オーバーライド定義でcolumnプロパティを指定することで設定できます。columntable.columnの形式である必要がありますが、schema.table.columnまたはcatalog.schema.table.columnを指定してより具体的にすることもできます。

version: "1"
packages: [...]
overrides:
  - column: "authors.id"
    go_type: "github.com/segmentio/ksuid.KSUID"

パッケージレベルのオーバーライド

オーバーライドは、前のセクションで示したようにグローバルに設定することも、単一のパッケージにオーバーライド動作をスコープするパッケージごとに設定することもできます:

version: "1"
packages:
  - overrides: [...]

rename

構造体フィールド名は、列名から簡単なアルゴリズムを使用して生成されます:列名をアンダースコアで分割し、各部分の最初の文字を大文字にします。

account     -> Account
spotify_url -> SpotifyUrl
app_id      -> AppID

生成されたフィールド名に満足しない場合は、renameマッピングを使用して新しい名前を選択します。キーは列名で、値は使用する構造体フィールド名です。

version: "1"
packages: [...]
rename:
  spotify_url: "SpotifyURL"

原文:https://docs.sqlc.dev/en/latest/reference/config.html