リレーショナル・スキーマからのGraphQLスキーマの生成
基礎となるリレーショナル・スキーマをGraphQLスキーマの形式で取得するには、GET_GRAPHQL_SCHEMA関数を使用します。
このファンクションは、表名とスキーマのいずれかまたは両方を入力として受け取り、リレーショナル表のGraphQL型を表すJSONオブジェクトを返します。
構文
DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
schema_details in JSON
)
RETURN JSON;
表2-2 GET_GRAPHQL_SCHEMA関数への入力
| パラメータ | 説明 |
|---|---|
schema_details |
このパラメータはJSONオブジェクトであり、次の2つのフィールドがあります:
|
出力スキーマ
この関数は、リレーショナル・スキーマに対応するGraphQLスキーマをJSONオブジェクトとして出力します。
特定の表のGraphQL型スキーマを取得します。この例では、カー・レースの例で定義されているTEAM表を使用します。
SELECT DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
JSON('
{
"tableNames": ["TEAM"]
}
')
) AS "GraphQL Schema";
「カー・レースの例の概要」で、TEAM表に
team_id、pointsおよびnameの3つの列があったことを思い出してください。GET_GRAPHQL_SCHEMA関数を実行すると、次に示すように、これらの列を含むJSONオブジェクトが生成されます:GraphQL Schema
--------------------------------------------------------------------------------
{
"types" :
[
{
"Team" :
{
"team_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"points" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
}
}
}
]
}
1 row selected.
この構文に複数の表名を指定することで、一連の表のGraphQLスキーマを取得できます。この例では、カー・レースの例で定義されているDRIVER表およびRACE表を使用します。
SELECT DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
JSON('
{
"tableNames": ["DRIVER", "RACE"]
}
')
) AS "GraphQL Schema";
GET_GRAPHQL_SCHEMA関数を実行すると、次に示すように、両方の表の列を含むJSONオブジェクトが生成されます:
GraphQL Schema
--------------------------------------------------------------------------------
{
"types" :
[
{
"Driver" :
{
"team" :
{
"type" : "Team",
"nullable" : false,
"quoted" : false
},
"team_id" :
{
"type" : "Integer",
"nullable" : true,
"quoted" : false
},
"points" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
},
"driver_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
}
}
},
{
"Race" :
{
"race_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"race_date" :
{
"type" : "Date",
"nullable" : true,
"quoted" : false
},
"podium" :
{
"type" : "String",
"nullable" : true,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
},
"laps" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
}
}
}
]
}
1 row selected.
表の表現のフェッチ元となる基礎となるスキーマまたはユーザー名を指定することもできます。次の例では、ユーザーF1に対して作成されたDRIVER_RACE_MAP表のGraphQLスキーマを取得します。
SELECT DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
JSON('
{
"tableNames": ["DRIVER_RACE_MAP"],
"schema": "F1"
}
')
) AS "GraphQL Schema";このコードでは、次に示すように、「F1」ユーザーの
DRIVER_RACE_MAP表に対応するGraphQLスキーマが返されます:GraphQL Schema
--------------------------------------------------------------------------------
{
"types" :
[
{
"Driver_race_map" :
{
"driver" :
{
"type" : "Driver",
"nullable" : false,
"quoted" : false
},
"race" :
{
"type" : "Race",
"nullable" : false,
"quoted" : false
},
"race_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"position" :
{
"type" : "Integer",
"nullable" : true,
"quoted" : false
},
"driver_race_map_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"driver_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
}
}
}
]
}
1 row selected.
リレーショナル・スキーマ全体のGraphQLスキーマを取得するには、入力にschema引数を指定します:
SELECT DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
JSON('
{
"schema": "F1"
}
')
) AS "GraphQL Schema";
前述のコードを実行すると、次に示すように、F1に指定されたすべての表に対応するスキーマが返されます:
GraphQL Schema
--------------------------------------------------------------------------------
{
"types" :
[
{
"Driver_race_map" :
{
"driver" :
{
"type" : "Driver",
"nullable" : false,
"quoted" : false
},
"race" :
{
"type" : "Race",
"nullable" : false,
"quoted" : false
},
"race_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"position" :
{
"type" : "Integer",
"nullable" : true,
"quoted" : false
},
"driver_race_map_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"driver_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
}
}
},
{
"Driver" :
{
"team" :
{
"type" : "Team",
"nullable" : false,
"quoted" : false
},
"team_id" :
{
"type" : "Integer",
"nullable" : true,
"quoted" : false
},
"points" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
},
"driver_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"driver_race_map" :
{
"type" : "[Driver_race_map]",
"nullable" : false,
"quoted" : false
}
}
},
{
"Team" :
{
"team_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"points" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
},
"driver" :
{
"type" : "[Driver]",
"nullable" : false,
"quoted" : false
}
}
},
{
"Race" :
{
"race_id" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"race_date" :
{
"type" : "Date",
"nullable" : true,
"quoted" : false
},
"podium" :
{
"type" : "String",
"nullable" : true,
"quoted" : false
},
"name" :
{
"type" : "String",
"nullable" : false,
"quoted" : false
},
"laps" :
{
"type" : "Integer",
"nullable" : false,
"quoted" : false
},
"driver_race_map" :
{
"type" : "[Driver_race_map]",
"nullable" : false,
"quoted" : false
}
}
}
]
}
1 row selected.