Doma 2.2.0 から SQL Server のページングがちょっとだけ便利になりました。
domaframework/doma · GitHub の 2.2.0 がリリースされました。
この中で SQL Server (2012以降) でのページング機能がちょっとだけ便利になりました。
従来ですと、offset を指定すると ORDER BY では SELECT で指定しているカラム全てを含む必要がありました。
今回からは、ORDER BY があるだけで良くなりました。
検索 — Doma 2.0 ドキュメント
offset=5 limit=10 の時の例でみると
従来ならこんなクエリが
select emp.id, emp.name from emp order by emp.id, emp.name
このように変換されていました。
select * from ( select temp_.*, row_number() over( order by temp_.id, temp_.name ) as doma_rownumber_ from ( select emp.id, emp.name from emp ) as temp_ ) as temp2_ where doma_rownumber_ > 5 and doma_rownumber_ <= 15
今回からは
select emp.id, emp.name from emp order by emp.id, emp.name offset 5 rows fetch next 10 rows only
となります。
SQL Server 2012 で追加された OFFSET FETCH を利用するように変更されています。
ORDER BY 句 (Transact-SQL)
limit 指定だけの場合は OFFSET FETCH では無く、従来通りの TOP (Transact-SQL) を使うので ORDER BY が無くても大丈夫です。
常に OFFSET FETCH を使うオプションが MssqlDialect にありますが、滅多に使うことは無いと思います。
もう1点改善された点があり、クエリ ヒント (Transact-SQL) を使っている場合ページングのクエリが正しいクエリにならないという問題が解消されています。
SQL Server の OPTION 句が存在するとページングが正しく実行されない問題を修正しました fix #62 by nakamura-to · Pull Request #67 · domaframework/doma · GitHub
他の変更点は公式で確認どうぞ
Migration Guide · domaframework/doma Wiki · GitHub
リリースノート — Doma 2.0 ドキュメント