ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

SQL to AsakusaFW:UPDATE その2

2021-12-05 00:00:00 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の5日目です。

2019年のAsakusa Frameworkアドベントカレンダーの5日目で、SQLのUPDATE文を実現するのはUpdate演算子で出来ると書きました。
大抵のケースではそれで問題ないのですが、実はそれでは無理なケースがあります。

update テーブル set c1 = c2, c2 = c1;
のように、値を入れ替えるようなパターンです。
これをUpdate演算子で何も考えずに移植すると、以下のようになって、正しい結果が得られません。

@Update
public void update(テーブル in) {
  in.setC1Option(in.getC2Option());
  in.setC2Option(in.getC1Option()); // 更新された値を使ってしまう!
}

Update演算子でやるなら、一時変数に値を保存しておいて…みたいなコーディングをする必要があります。

この場合、Convert演算子を使えば素直に書けます。

@Convert
public テーブル update(テーブル in) {
  テーブル result = ~;
  result.copyFrom(in);
  result.setC1Option(in.getC2Option());
  result.setC2Option(in.getC1Option());
  return result;
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする