[Notes/Domino] @DbLookup、@DbColumn は 64KB 以上の値を返す
@DbLookup、@DbColumn は、ヘルプの記述では「戻り値に 64KB 以上の値を返せない」とありますが、実は表示できないだけで、内部的には 64KB 以上の値を返しています。
以下、検証した結果を記載します。
検証に使ったDBはこちら → dummydb.zip(約4.5MB)
このDBは、以下のような設計・文書になっています。
- 文書数は10,000件(フォーム名:TestForm(実体なし))
- 「TestView」ビューは、1列目にフォーム名、2列目にUNIDを表示(いずれも昇順)
よって、TestView ビューの2列目を全件取得すると、戻り値の公式から、以下のサイズになります。
2 + (2 * 返されるエントリ数) + 全エントリの合計文字列サイズ = 2 + (2 * 10,000) + 32 * 10,000 = 340,002B ≒ 332KB
このDBに対して、以下のように @DbLookup の値をそのまま表示しようとすると、当然エラーとなります。
@DbLookup("":"NoCache"; ""; "TestView"; "TestForm"; 2) => @ERROR
しかし、@Subset で先頭の3つのみ取得するようにすると、正常に表示されます。
@Subset(@DbLookup("":"NoCache"; ""; "TestView"; "TestForm"; 2); 3) => 000227E8A0936F0E492581BD0020591B, 00075F556715DDDB492581BD00203940, 000CE5EAD83BDF90492581BD00204DBE
最後の3つの場合でも、正常に表示されます。
@Subset(@DbLookup("":"NoCache"; ""; "TestView"; "TestForm"; 2); -3) => FFF9A06ACA3DA9CC492581BD00204A4F, FFF9F35BC9FD5A66492581BD002041FA, FFFE48AD654ADC1A492581BD00205155
@Elements で個数を取得してみると、たしかに 10,000 と表示されます。
@Elements(@DbLookup("":"NoCache"; ""; "TestView"; "TestForm"; 2)) => 10000
このように、内部的にはすべてのデータを返していることがわかるかと思います。
ただし、この現象が仕様ではなくバグである場合は、将来的に修正される可能性がありますので、業務で使うのはなるべく避けたほうがよいでしょう。(大きなデータが返る分、パフォーマンスも悪くなりますし。)
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。