Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[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

このように、内部的にはすべてのデータを返していることがわかるかと思います。

ただし、この現象が仕様ではなくバグである場合は、将来的に修正される可能性がありますので、業務で使うのはなるべく避けたほうがよいでしょう。(大きなデータが返る分、パフォーマンスも悪くなりますし。)

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
読み込み中...

Navigation

前の記事(カテゴリ内):

前の記事(日付順):

次の記事(日付順):

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 2372 to the field below:

^
×