3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL Boilerでintで生成されるフィールドをint32にする

Posted at

SQL BoilerはDBスキーマから構造体などを生成してくれる便利ORMです。
DBスキーマの型からGoの型にいい感じにマッピングしてくれるのですが、DB(ここではPostgresSQL)でintegerで定義したものはGo上ではintで表現されるようになります。
これでも特に困らないことは多いのですが、OpenAPIやProtocolBuffersなどから生成されるGoのコードではintはint32で定義されるので、これらと相互に変換する際にはint32になっていたほうが都合が良いです。
intとint32の変換であればそこまで大変ではないのですが、 null許可されたカラムはnull.Intとintで表現されるため、これをint32にキャストはとてもめんどうです(めんどうというかやり方がわからなかった。)
*intを避けるのであれば、DBスキーマでNULL許容しなければよいという話ではあるのですが、その話をすると長くなるのでここではやめ、*intと真剣に向き合うことにします。
とは言え方法は簡単で、SQL Boilerの設定ファイルに以下のように記載するだけです。

[[types]]
  [types.match]
    type = "null.Int"
    nullable = true

  [types.replace]
    type = "null.Int32"

  [types.imports]
    third_party = ['"github.com/volatiletech/null/v8"']

[[types]]
  [types.match]
    type = "int"

  [types.replace]
    type = "int32"

null.Intにmatchしたらnull.Int32にreplace、intにmatchしたらint32にreplaceというふうにするだけです。
tomlの文法に癖があってREADMEをパット見ただけではわかりにくかったのですが、tomlの文法さえ理解すればかんたんですね。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?