8.2.0402 テスト中確認待ち

  1. いのっち父の雑談部屋にバグレポートあり、VB.NETのTableAdapterを使用するとUnicodeドライバではvarchar項目の最大長が半分になってしまうとのこと。バッファ長を文字数で返している箇所がありこれが原因かもしれない。ANSIバージョンだとOKらしいが、この項目は文字数でなくバイト数を返す項目なので、逆にマルチバイト項目を定義された文字数まで処理できるかどうかが少し心配になる。
  2. @@iDENTITYの処理を元に戻した。Microsoftのアプリには@@IDENTITY参照を行うものがある。代表的なアプリはAccessであり、オートナンバー型項目の処理にこれを使っている。PostgreSQLでいうとシリアル型がこれに近い存在で、Accessからの問い合わせに色々工夫して答えるとオートナンバー型として認識されるようになる。さてバーション8.1でlastval()という関数が実装されこれがぴったり@@IDENTITYと対応するように思われたため、バージョン8.1以後のサーバーではlastval()を呼び出すように改良?したのだがやっぱりまずいという報告がきていたのである。動作はMicrosoft SQL Serverと同じようなので仕様通りなわけだが結果がまずいというのは何となくわかる。lastval()はそのセション内の最新のsequence更新値を拾ってくるのだが、sequenceであれば何でも対象になるのでトリガー内でついでに更新されたsequence値まで拾ってきてしまうのが望まぬ結果を招いてしまうのだろう。lastval()を使用しない実装ではINSERTの実行に一々割り込みをかけて対象テーブル(それについているsequence)を特定しているのでトリガによる誤?動作を避けることが出来ていたのでありました。