カスタムGraphQLディレクティブ

Oracle AI DatabaseのGraphQL統合では、ディレクティブは、問合せおよびビュー定義に表現力と柔軟性を加える上で重要な役割を果たします。

ディレクティブは、@という接頭辞が付いた特別な注釈であり、問合せ動作の変更、フィルタリングの制御、結果の形成、または結合ロジックなどの高度な動作の定義をGraphQLプロセッサに指示します。Oracleの高度なGraphQL機能を活用する開発者は、各コンテキスト(実行時問合せ(表関数)と二面性ビューの作成)で使用可能なディレクティブを理解することが重要です。

ディレクティブは、「@」(アットマーク)で識別され、その後にディレクティブの名前とその引数のリストが続きます。

@link (from: ["FK_COL"] to: ["PK_COL"] )

この例では、「link」はディレクティブで、「from」、「to」はそれぞれ値["FK_COL"]および["PK_COL"]を受け取る引数です。ディレクティブおよび引数名では、大文字と小文字が区別されません。

GraphQL表関数でサポートされるディレクティブ

OracleのGraphQL表関数を使用すると、GraphQL構文を使用してリレーショナル表を問い合せ、JSONドキュメントを返すことができます。その目的は問合せ時(読取り操作)にデータをフェッチおよび形成することであるため、一連のコア・ディレクティブのみがサポートされています。これらは主にデータの選択、結合、フィルタリングおよび変換に重点を置いています。

サポートされているディレクティブ:

  • オブジェクト/表レベルのフィールドに対して:
    • @WHERE: 指定された述語に従って行をフィルタリングします。
    • @ORDERBY: 指定された列に基づいて結果セットを順序付けします。
    • @ARRAY: 結果をオブジェクトの配列として返します。
    • @OBJECT: 結果を単一のオブジェクトとして返します。
    • @LINK: 自動的なPK-FK検出が不十分な結合関係を明示的に定義します。
  • スカラー/列レベルのフィールドに対して:
    • @GENERATED: SQL式を使用してフィールドの値を生成できます。表関数のコンテキストでは、SQL引数のみがサポートされ、PATH引数は使用できません。

ノート:

データ変更に関連するディレクティブ、またはビュー作成時にのみ意味のあるディレクティブは、表関数のコンテキストでは使用できません。このコンテキストでサポートされていないディレクティブを使用しようとすると、エラーが発生します。

JSONリレーショナル二面性ビューの作成に使用されるディレクティブ

JSONリレーショナル二面性ビュー(CREATE JSON RELATIONAL DUALITY VIEW文を使用)を定義する場合、Oracle AI Databaseでは、より幅広いGraphQLディレクティブが提供されます。このコンテキストのディレクティブは、二面性ビューの作成方法、それによって実行できる操作、および結果のJSONでの関連データの表現方法に影響します。

サポートされているディレクティブ:
  • @INSERT: 二面性ビューを介した挿入操作を有効にします。
  • @UPDATE: 二面性ビューを介した更新操作を有効にします。
  • @DELETE: 二面性ビューを介した削除操作を有効にします。
  • @NESTおよび@UNNEST: 関連データをネストされたオブジェクトとして埋め込むか、ネスト解除するかを制御します。
  • @LINK: 結合条件を明示的に定義します。これは、複雑な関係の場合に特に重要です。
  • @ARRAYおよび@OBJECT: JSON出力内のデータの配置を指定します。
  • @WHERE: ビュー定義の一部としてフィルタ句を追加します。
  • @ORDERBY: ビュー内のデータのデフォルトのソート順序を設定します。
  • @GENERATED: フィールドとサブオブジェクトの両方に使用され、引数としてSQLまたはPATHのいずれかを受け取り、計算されるフィールドおよび参照に柔軟性を持たせます。

これらの追加のディレクティブは、更新可能なJSONビューや表間の複雑な関係など、高度なシナリオに対処するために二面性ビューを定義する場合に重要です。

実行時の表関数の問合せと二面性ビューの作成でのディレクティブの可用性の違いに関する要約を次に示します:

表3-1カスタム・ディレクティブの比較表

ディレクティブ 表関数(問合せ) 二面性ビューの作成
@WHERE
@ORDERBY
@ARRAY
@OBJECT
@LINK
@GENERATED ✔ (SQLのみ) ✔ (SQL、PATH)
@INSERT X
@UPDATE/@NOUPDATE X
@DELETE X
@CHECK/@NOCHECK X
@NEST/@UNNEST X
@FLEX X
@HIDDEN X
@CAST X