クエリ
- プラン: Premium、Ultimate
- 提供形態: GitLab.com
- ステータス: ベータ
この機能の利用可否は機能フラグによって制御されています。 詳細については、履歴を参照してください。 この機能はテスト目的で利用可能ですが、本番環境での使用には対応していません。
Orbitクエリは、グラフ操作を記述するJSONオブジェクトです。クエリでは、特定の種類のオブジェクトのフェッチ、オブジェクト間の関係のトラバース、一致するオブジェクトのカウント、パスの検索、またはノードの隣接要素の取得が可能です。
クエリはGitLabの認可を通じて実行されます。レスポンスには、現在のユーザーがGitLabで読み取り可能なデータのみが含まれます。
クエリの形式を選択する
| ユースケース | クエリの形式 |
|---|---|
| 1つのエンティティタイプの一致するノードをフェッチする | 単一ノードのtraversal |
| 既知のエンティティタイプ間の関係をたどる | 複数ノードのtraversal |
| グラフ結果のカウント、合計、平均、またはグループ化 | aggregation |
| 2つの限定されたエンドポイント間のパスを検索する | path_finding |
| 1つの限定されたノードに接続されているものを確認する | neighbors |
単一ノードのtraversalは検索の形式です。Orbitには独立したsearchクエリタイプはありません。
例: マージリクエストの差分をフェッチする
MergeRequestのdiffカラムを使用して、マージリクエストの完全な統合差分をフェッチします。仮想カラムは名前を明示的に指定してリクエストしてください。
{
"query_type": "traversal",
"node": {
"id": "mr",
"entity": "MergeRequest",
"node_ids": [12345],
"columns": ["iid", "title", "state", "diff"]
},
"limit": 1
}マージリクエストの差分コンテンツには、いくつかの異なる形式があります。
| エンティティ | カラム | 返される内容 |
|---|---|---|
MergeRequest | diff | マージリクエストの完全な統合差分 |
MergeRequestDiff | patch | 1つの差分スナップショットの完全なパッチ |
MergeRequestDiffFile | diff | ファイルごとの統合差分テキスト |
File | content | rawソースファイルテキスト |
Definition | content | インデックス作成済みの定義のソーステキスト |
contentカラムはソースコードノード用です。マージリクエストの差分テキストには、エンティティに応じてdiffまたはpatchを使用してください。
例: 差分スナップショットと変更ファイルをフェッチする
HAS_DIFFを使用してマージリクエストからその差分スナップショットに移動し、次にHAS_FILEを使用してそれらのスナップショット内のファイルをフェッチします。
{
"query_type": "traversal",
"nodes": [
{
"id": "mr",
"entity": "MergeRequest",
"node_ids": [12345],
"columns": ["iid", "title", "state"]
},
{
"id": "snapshot",
"entity": "MergeRequestDiff",
"columns": ["id", "state", "patch"]
},
{
"id": "file",
"entity": "MergeRequestDiffFile",
"columns": ["new_path", "old_path", "too_large", "diff"]
}
],
"relationships": [
{"type": "HAS_DIFF", "from": "mr", "to": "snapshot"},
{"type": "HAS_FILE", "from": "snapshot", "to": "file"}
],
"limit": 20
}too_largeがtrueの場合、MergeRequestDiffFile.diffはnullになります。
例: ソースファイルのコンテンツをフェッチする
ソースコードエンティティにはcontentを使用します。この例では、パスでインデックス作成済みのファイルを検索し、rawファイルテキストを返します。
{
"query_type": "traversal",
"node": {
"id": "file",
"entity": "File",
"filters": {
"path": {"op": "ends_with", "value": "app/models/project.rb"}
},
"columns": ["path", "language", "content"]
},
"limit": 5
}完全な構文、利用可能なフィールド、および検証ルールについては、Orbitクエリ言語を参照してください。