goen v0.0.2 について

goen v0.0.2には、以下の変更が含まれています。

  1. CompilerHookの追加
  2. CompilerOptions.Hookの追加
  3. CompilerWithHookの追加

これにより、goenが生成したinsert/update/delete用のクエリを、ユーザがカスタマイズできるようになりました。 例えばpostgresのupsertをする場合は

type myHook struct {}

func (*myHook) PostInsertBuilder(stmt squirerl.InsertBuilder) squirrel.Sqlizer {
    return stmt.Suffix("ON CONFLICT DO NOTHING")
}

func (*myHook) PostUpdateBuilder(stmt squirerl.UpdateBuilder) squirrel.Sqlizer {
    return stmt
}

func (*myHook) PostDeleteBuilder(stmt squirerl.DeleteBuilder) squirrel.Sqlizer {
    return stmt
}
dbc := goen.NewDBContext("postgres", db)
dbc.Compiler = goen.CompilerWithHook(goen.BulkCompiler, &myHook{})
dbc.Patch(goen.InsertPatch("the_table", []string{"the_column"}, []interface{"the_value"}))
dbc.SaveChanges()

これでgoenを使ったupsertが可能になります。 ただこの機能については、もう少しブラッシュアップの必要があるため、しばらく使ってみてAPIに変更を加える可能性が高いです。