リレーショナル・スキーマからの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つのフィールドがあります:
  • "tableNames" : このフィールドの値は、GraphQLスキーマ表現が必要な表名を表すスカラー文字列の配列です。「tableNames」を指定しない場合、指定したリレーショナル・スキーマ内のすべての表のGraphQLスキーマが生成されます。
  • "schema": 表のユーザー/スキーマ/所有者の名前を文字列として指定できます。「schema」を指定しない場合、現在のスキーマのGraphQLスキーマ表現が生成されます。

出力スキーマ

この関数は、リレーショナル・スキーマに対応するGraphQLスキーマをJSONオブジェクトとして出力します。

特定の表のGraphQL型スキーマを取得します。この例では、カー・レースの例で定義されているTEAM表を使用します。

SELECT DBMS_JSON_DUALITY.GET_GRAPHQL_SCHEMA(
    JSON('
        {
            "tableNames": ["TEAM"]
        }
    ')
) AS "GraphQL Schema";
「カー・レースの例の概要」で、TEAM表にteam_idpointsおよび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.