bobのsm
sm
github.com/stephenafamo/bob/dialect/psql/sm パッケージの略インポート(alias)で、Bob のクエリビルダーで「SQLの句(JOIN, WHERE, ORDER BY など)」を手軽に書くための標準モディファイアセット。
名前の由来:SQL Modifiers(SQLの各節を修飾する関数群)
Bob 自動生成コードからも常に import されており、dbmodels.○○Query に渡す修飾子として使う
sm を使うケース
① 自動生成だけでは書けないSQL句を使いたいとき
複雑な WHERE(OR / NOT / 複合条件)
生の SQL 関数呼び出し(LOWER(title), COALESCE(...) など)
型安全APIにまだ用意されていない比較演算子(<>, NOT INなど)
code:go
dbmodels.MasterBooks.Query(
sm.Where("LOWER(title) = LOWER(?)", "Go言語入門"),
).All(ctx, db)
② 並び替えやページング
ORDER BY / LIMIT / OFFSET は型安全APIにプリセットがなく、sm が標準
code:go
dbmodels.MasterBooks.Query(
sm.OrderBy("created_at DESC"),
sm.Limit(20),
sm.Offset(40),
).All(ctx, db)
③ JOIN の手書き構文を入れたい時
自動生成の SelectJoins もありますが、任意の結合や ON 条件を自由に書きたい場合は sm の JOIN 系を使います
code:go
dbmodels.MasterBooks.Query(
sm.InnerJoin("authors ON authors.id = master_books.author_id"),
).All(ctx, db)
④ SELECT カラムを指定したい時
code:go
dbmodels.MasterBooks.Query(
sm.Columns("master_books.id", "authors.name AS author_name"),
).All(ctx, db)