ASBITSTREAM 関数

ASBITSTREAM フィールドは、フィールドを所有するパーサーの規則に従って、 特定のフィールドのサブツリーのビット・ストリームを生成し、 また呼び出し側が提供した以下のパラメーターを使用します。
  • Encoding
  • CCSID
  • Message set
  • Message type
  • Message format
  • Options
この関数により、 出力ノードに属するパーサーで生成されたツリー上でしか使用できないという従来の BITSTREAM 関数の制約は、 事実上解決されます。

なお、既存の BITSTREAM 関数は、後方互換性を保つために残されています。

構文

注:
  1. 各文節は、それぞれ 1 回のみ使用できます。

ASBITSTREAM は、 FieldReference とその子が指示するフィールドのビット・ストリームの表現を含む、 タイプ BLOB の値を戻します。

このことを実行するアルゴリズムは、パーサーごとに、指定されたオプションごとに異なります。 すべてのパーサーは、以下のモードをサポートしています。
  • RootBitStream。 このモードでは、出力ノードで使用されているものと同じビット・ストリーム生成アルゴリズムが使用されます。 ただし、このモードでは、指示されているフィールドが適切な構造を持つサブツリーの最上位にある場合にのみ、 有効な結果が得られます。
  • EmbeddedBitStream。 このモードでは、出力ノードで使用されているものと同じビット・ストリーム生成アルゴリズムが使用されるだけではなく、
    • Encoding
    • CCSID
    • Message set
    • Message type
    • Message format
    が、明示的に指定されていなければ、出力ノードと同じ方法で判別されます。 つまり、FieldReference の直前の兄弟がヘッダーを表すと想定して、 それらを検索することによって判別されます。

    このように、これらのプロパティーを判別するアルゴリズムは BITSTREAM 関数で使用されるものと実質的に同じです。

パーサーの中には、FolderBitStream という別のモードをサポートしているものもあります。 このモードでは、指示されているフィールドがフォルダーを表していれば、 どのようなサブツリーでも有効なビット・ストリームが生成されます。

いずれのケースでも、生成されるビット・ストリームは、 同じ DOMAIN および OPTIONS を使用して PARSE 文節を付けて CREATE ステートメントに指定すると、 オリジナルのサブツリーを再現できます。

関数が呼び出されると、すべての文節の式が評価されます。 式のいずれかが適切なタイプの値を結果として渡さないと、例外が出されます。

いずれかのパラメーターが NULL なら、結果は NULL です。

文節 タイプ デフォルト値
Options integer RootBitStream & ValidateNone
Encoding integer 0
Ccsid integer 0
Message set character ゼロ長ストリング
Message type character ゼロ長ストリング
Message format character ゼロ長ストリング

OPTIONS 文節は、整数タイプの値を戻す式をすべて受け入れます。 この文節は、与えられた定数のリストにあるオプション値を生成する場合にのみ有効です (なお、 複数のオプションが必要な場合は、BITOR 関数を使用します)。

生成すると、値は整数になるため、変数に保管するか、パラメーターとして関数に渡すことができます。 また、ASBITSTREAM 呼び出しで直接使用することも可能です。 グローバルに定義された定数のリストは次のとおりです。

各グループから 1 つのオプションだけが指定できます。 ValidateValue と ValidateContent は例外で、 内容と値の妥当性検査を入手するために一緒に使用できます。 グループ内のオプションを指定しないと、太字のオプションが使用されます。

ENCODING 文節は、整数タイプの値を戻すすべての式を受け入れます。 ただし、下の定数のリストにある定数から Encoding の値を生成する場合にのみ、有効です。
       0
              MQENC_INTEGER_NORMAL
              MQENC_INTEGER_REVERSED
              MQENC_DECIMAL_NORMAL
              MQENC_DECIMAL_REVERSED
              MQENC_FLOAT_IEEE_NORMAL
              MQENC_FLOAT_IEEE_REVERSED
       MQENC_FLOAT_S390
0 は、キュー・マネージャーのエンコード方式を使用します。

CCSID 文節に使用される値は、通常の番号付けの方式に従います。 たとえば、1200 = UCS-2、1208 = utf-8のようになります。

さらに、以下の特殊値がサポートされています。
       0
       -1
0 の場合にはキュー・マネージャーの CCSID を使用し、 -1 はパーサー自体が決定した CCSID を使用します。 この値は、予約済みです。

文節が指定されていない場合、所定のデフォルト値が使用されます。 デフォルト値は、キュー・マネージャーの Encoding や CCSID の設定から取られた値なので、 CCSID および Encoding のデフォルト値を使用してください。

同様に、Message Set、Message Type、および Message Format の各オプションについても、 多くのパーサーがメッセージ・セット、メッセージ・タイプ、 およびメッセージ形式の情報を必要としない (したがって、 有効な値であれば何でもよい) ため、それぞれのデフォルト値を使用してください。

何らかの式が評価されると、それに対応するビット・ストリームが生成されます。
注: この関数には多数の文節があるため、 名前付き文節ではなくコンマ区切りリストでパラメーターを提供する代替構文もサポートされています。 この場合、式は次の順番でなければなりません。
ENCODING -> CCSID -> SET -> TYPE -> FORMAT -> OPTIONS

リストはどこで切り捨ててもよく、値を提供しない文節にはまったく空の式を使用することもできます。

            DECLARE options INTEGER BITOR(FolderBitStream, ValidateContent, ValidateValue);
            SET result = ASBITSTREAM(cursor OPTIONS options CCSID 1208);
            SET Result = ASBITSTREAM(Environment.Variables.MQRFH2.Data,,1208,,,,options);

関連概念
ESQL

関連タスク
ESQL の開発
大規模な XML メッセージの処理
XML メッセージとビット・ストリームの処理

関連資料
構文の設定
ESQL フィールド関数
BITSTREAM 関数