3
1

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.

sqlxのバージョンを0.6 -> 0.7系にあげた

Last updated at Posted at 2023-07-27

環境

  • Rust 1.69
  • sqlx 0.6
  • actix-web 4

概要

sqlxの0.7系が最近公開された。
バージョン上げてみたので、作業ログを残しておく。

アップデートするメリット

sqlx-data.jsonの廃止

sqlxでは query! のようなマクロを使ってクエリを書くと、マッピング型やSQLミスなどをチェックするためにビルド時にデータベースへ接続しにいって確認してくれる。エラーの場合はビルドエラーとなる。
CI時などは、直接データベースにつなぎにいくのは難しい(できなくはないが)ので、直接データベースつなぎにいくのではなく、クエリとテーブルの情報を sqlx-data.json のファイルに出力しておいて、データベースを直接参照できない場合は、自動的にそちらを参照しにいってくれる。

0.6系の場合は、このsqlx-data.jsonが1ファイルだったため、プロジェクト内の全クエリ(query!など)の内容がこのファイルに出力されてしまい、git上で激しく毎回コンフリクトを起こしている始末だった。
0.7では、このjsonファイルがクエリ毎にバラバラに .sqlxディレクトリに出力されるようになり、git上でコンフリクトする確率がグッと減った。

変更箇所

0.6 -> 0.7は破壊的な変更が入っているようで、単純に0.7にしてもビルドエラーとなった。
今回修正したところは以下となる。
全容は公式のChangeLogをみてください。

cargo.toml

sqlxのfeaturesに指定する項目名が変わった。

  • decimal -> rust_decimal
  • offline -> 指定する必要がない(デフォルトでサポートされる)
  • runtime-actix-native-tls -> tls-native-tls, runtime-tokio の2つになった

コードの変更

コネクション、トランザクション周りが変わったようでそのあたりでエラーになった。
とりあえずは &mut *tx&mut tx のように渡していた箇所を &mut **txtx.deref_mut()のように1つ今までより多くderefしてあげればビルドエラーが解消された。

.sqlxディレクトリの出力

$ cargo sqlx prepare --workspace

を実行する。
wsl環境ではdocker側で上記実行してもうまくいかなかった。
(しっかり検証していないが権限周りかもしれない)

動きました。
.sqlxディレクトリはgit管理に含めること

備考

地味にderefするやつが変更箇所がすごい多くて大変。

3
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?