{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Capabilities Response",
"type": "object",
"required": [
"capabilities",
"version"
],
"properties": {
"version": {
"type": "string"
},
"capabilities": {
"$ref": "#/definitions/Capabilities"
}
},
"definitions": {
"Capabilities": {
"title": "Capabilities",
"description": "Describes the features of the specification which a data connector implements.",
"type": "object",
"required": [
"mutation",
"query"
],
"properties": {
"query": {
"$ref": "#/definitions/QueryCapabilities"
},
"mutation": {
"$ref": "#/definitions/MutationCapabilities"
},
"relationships": {
"anyOf": [
{
"$ref": "#/definitions/RelationshipCapabilities"
},
{
"type": "null"
}
]
}
}
},
"QueryCapabilities": {
"title": "Query Capabilities",
"type": "object",
"properties": {
"aggregates": {
"description": "Does the connector support aggregate queries",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"variables": {
"description": "Does the connector support queries which use variables",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"explain": {
"description": "Does the connector support explaining queries",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"nested_fields": {
"description": "Does the connector support nested fields",
"default": {},
"allOf": [
{
"$ref": "#/definitions/NestedFieldCapabilities"
}
]
},
"exists": {
"description": "Does the connector support EXISTS predicates",
"default": {},
"allOf": [
{
"$ref": "#/definitions/ExistsCapabilities"
}
]
}
}
},
"LeafCapability": {
"description": "A unit value to indicate a particular leaf capability is supported. This is an empty struct to allow for future sub-capabilities.",
"type": "object"
},
"NestedFieldCapabilities": {
"title": "Nested Field Capabilities",
"type": "object",
"properties": {
"filter_by": {
"description": "Does the connector support filtering by values of nested fields",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"order_by": {
"description": "Does the connector support ordering by values of nested fields",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"aggregates": {
"description": "Does the connector support aggregating values within nested fields",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
}
}
},
"ExistsCapabilities": {
"title": "Exists Capabilities",
"type": "object",
"properties": {
"nested_collections": {
"description": "Does the connector support ExistsInCollection::NestedCollection",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
}
}
},
"MutationCapabilities": {
"title": "Mutation Capabilities",
"type": "object",
"properties": {
"transactional": {
"description": "Does the connector support executing multiple mutations in a transaction.",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"explain": {
"description": "Does the connector support explaining mutations",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
}
}
},
"RelationshipCapabilities": {
"title": "Relationship Capabilities",
"type": "object",
"properties": {
"relation_comparisons": {
"description": "Does the connector support comparisons that involve related collections (ie. joins)?",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
},
"order_by_aggregate": {
"description": "Does the connector support ordering by an aggregated array relationship?",
"anyOf": [
{
"$ref": "#/definitions/LeafCapability"
},
{
"type": "null"
}
]
}
}
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Error Response",
"type": "object",
"required": [
"details",
"message"
],
"properties": {
"message": {
"description": "A human-readable summary of the error",
"type": "string"
},
"details": {
"description": "Any additional structured information about the error"
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Explain Response",
"type": "object",
"required": [
"details"
],
"properties": {
"details": {
"description": "A list of human-readable key-value pairs describing a query execution plan. For example, a connector for a relational database might return the generated SQL and/or the output of the `EXPLAIN` command. An API-based connector might encode a list of statically-known API calls which would be made.",
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Mutation Request",
"type": "object",
"required": [
"collection_relationships",
"operations"
],
"properties": {
"operations": {
"description": "The mutation operations to perform",
"type": "array",
"items": {
"$ref": "#/definitions/MutationOperation"
}
},
"collection_relationships": {
"description": "The relationships between collections involved in the entire mutation request",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Relationship"
}
}
},
"definitions": {
"MutationOperation": {
"title": "Mutation Operation",
"oneOf": [
{
"type": "object",
"required": [
"arguments",
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"procedure"
]
},
"name": {
"description": "The name of a procedure",
"type": "string"
},
"arguments": {
"description": "Any named procedure arguments",
"type": "object",
"additionalProperties": true
},
"fields": {
"description": "The fields to return from the result, or null to return everything",
"anyOf": [
{
"$ref": "#/definitions/NestedField"
},
{
"type": "null"
}
]
}
}
}
]
},
"NestedField": {
"title": "NestedField",
"oneOf": [
{
"title": "NestedObject",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"object"
]
},
"fields": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Field"
}
}
}
},
{
"title": "NestedArray",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"array"
]
},
"fields": {
"$ref": "#/definitions/NestedField"
}
}
}
]
},
"Field": {
"title": "Field",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"type": "string"
},
"fields": {
"description": "When the type of the column is a (possibly-nullable) array or object, the caller can request a subset of the complete column data, by specifying fields to fetch here. If omitted, the column data will be fetched in full.",
"anyOf": [
{
"$ref": "#/definitions/NestedField"
},
{
"type": "null"
}
]
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"query",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"relationship"
]
},
"query": {
"$ref": "#/definitions/Query"
},
"relationship": {
"description": "The name of the relationship to follow for the subquery",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
}
]
},
"Argument": {
"title": "Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
}
]
},
"Query": {
"title": "Query",
"type": "object",
"properties": {
"aggregates": {
"description": "Aggregate fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Aggregate"
}
},
"fields": {
"description": "Fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Field"
}
},
"limit": {
"description": "Optionally limit to N results",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"offset": {
"description": "Optionally offset from the Nth result",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"order_by": {
"anyOf": [
{
"$ref": "#/definitions/OrderBy"
},
{
"type": "null"
}
]
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"Aggregate": {
"title": "Aggregate",
"oneOf": [
{
"type": "object",
"required": [
"column",
"distinct",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column_count"
]
},
"column": {
"description": "The column to apply the count aggregate function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"distinct": {
"description": "Whether or not only distinct items should be counted",
"type": "boolean"
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count"
]
}
}
}
]
},
"OrderBy": {
"title": "Order By",
"type": "object",
"required": [
"elements"
],
"properties": {
"elements": {
"description": "The elements to order by, in priority order",
"type": "array",
"items": {
"$ref": "#/definitions/OrderByElement"
}
}
}
},
"OrderByElement": {
"title": "Order By Element",
"type": "object",
"required": [
"order_direction",
"target"
],
"properties": {
"order_direction": {
"$ref": "#/definitions/OrderDirection"
},
"target": {
"$ref": "#/definitions/OrderByTarget"
}
}
},
"OrderDirection": {
"title": "Order Direction",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"OrderByTarget": {
"title": "Order By Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column_aggregate"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count_aggregate"
]
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
}
]
},
"PathElement": {
"title": "Path Element",
"type": "object",
"required": [
"arguments",
"relationship"
],
"properties": {
"relationship": {
"description": "The name of the relationship to follow",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
},
"predicate": {
"description": "A predicate expression to apply to the target collection",
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"RelationshipArgument": {
"title": "Relationship Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"type": "string"
}
}
}
]
},
"Expression": {
"title": "Expression",
"oneOf": [
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"and"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"or"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expression",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"not"
]
},
"expression": {
"$ref": "#/definitions/Expression"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"$ref": "#/definitions/UnaryComparisonOperator"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"binary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"type": "string"
},
"value": {
"$ref": "#/definitions/ComparisonValue"
}
}
},
{
"type": "object",
"required": [
"in_collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"exists"
]
},
"in_collection": {
"$ref": "#/definitions/ExistsInCollection"
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
}
]
},
"ComparisonTarget": {
"title": "Comparison Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"root_collection_column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
}
}
}
]
},
"UnaryComparisonOperator": {
"title": "Unary Comparison Operator",
"type": "string",
"enum": [
"is_null"
]
},
"ComparisonValue": {
"title": "Comparison Value",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
}
}
},
{
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"scalar"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
}
]
},
"ExistsInCollection": {
"title": "Exists In Collection",
"oneOf": [
{
"type": "object",
"required": [
"arguments",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"related"
]
},
"relationship": {
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unrelated"
]
},
"collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"column_name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"nested_collection"
]
},
"column_name": {
"type": "string"
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
},
"field_path": {
"description": "Path to a nested collection via object columns",
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Relationship": {
"title": "Relationship",
"type": "object",
"required": [
"arguments",
"column_mapping",
"relationship_type",
"target_collection"
],
"properties": {
"column_mapping": {
"description": "A mapping between columns on the source collection to columns on the target collection",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"relationship_type": {
"$ref": "#/definitions/RelationshipType"
},
"target_collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
"RelationshipType": {
"title": "Relationship Type",
"type": "string",
"enum": [
"object",
"array"
]
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Mutation Response",
"type": "object",
"required": [
"operation_results"
],
"properties": {
"operation_results": {
"description": "The results of each mutation operation, in the same order as they were received",
"type": "array",
"items": {
"$ref": "#/definitions/MutationOperationResults"
}
}
},
"definitions": {
"MutationOperationResults": {
"title": "Mutation Operation Results",
"oneOf": [
{
"type": "object",
"required": [
"result",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"procedure"
]
},
"result": true
}
}
]
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Query Request",
"description": "This is the request body of the query POST endpoint",
"type": "object",
"required": [
"arguments",
"collection",
"collection_relationships",
"query"
],
"properties": {
"collection": {
"description": "The name of a collection",
"type": "string"
},
"query": {
"description": "The query syntax tree",
"allOf": [
{
"$ref": "#/definitions/Query"
}
]
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
},
"collection_relationships": {
"description": "Any relationships between collections involved in the query request",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Relationship"
}
},
"variables": {
"description": "One set of named variables for each rowset to fetch. Each variable set should be subtituted in turn, and a fresh set of rows returned.",
"type": [
"array",
"null"
],
"items": {
"type": "object",
"additionalProperties": true
}
}
},
"definitions": {
"Query": {
"title": "Query",
"type": "object",
"properties": {
"aggregates": {
"description": "Aggregate fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Aggregate"
}
},
"fields": {
"description": "Fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Field"
}
},
"limit": {
"description": "Optionally limit to N results",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"offset": {
"description": "Optionally offset from the Nth result",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"order_by": {
"anyOf": [
{
"$ref": "#/definitions/OrderBy"
},
{
"type": "null"
}
]
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"Aggregate": {
"title": "Aggregate",
"oneOf": [
{
"type": "object",
"required": [
"column",
"distinct",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column_count"
]
},
"column": {
"description": "The column to apply the count aggregate function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"distinct": {
"description": "Whether or not only distinct items should be counted",
"type": "boolean"
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count"
]
}
}
}
]
},
"Field": {
"title": "Field",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"type": "string"
},
"fields": {
"description": "When the type of the column is a (possibly-nullable) array or object, the caller can request a subset of the complete column data, by specifying fields to fetch here. If omitted, the column data will be fetched in full.",
"anyOf": [
{
"$ref": "#/definitions/NestedField"
},
{
"type": "null"
}
]
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"query",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"relationship"
]
},
"query": {
"$ref": "#/definitions/Query"
},
"relationship": {
"description": "The name of the relationship to follow for the subquery",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
}
]
},
"NestedField": {
"title": "NestedField",
"oneOf": [
{
"title": "NestedObject",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"object"
]
},
"fields": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Field"
}
}
}
},
{
"title": "NestedArray",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"array"
]
},
"fields": {
"$ref": "#/definitions/NestedField"
}
}
}
]
},
"Argument": {
"title": "Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
}
]
},
"RelationshipArgument": {
"title": "Relationship Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"type": "string"
}
}
}
]
},
"OrderBy": {
"title": "Order By",
"type": "object",
"required": [
"elements"
],
"properties": {
"elements": {
"description": "The elements to order by, in priority order",
"type": "array",
"items": {
"$ref": "#/definitions/OrderByElement"
}
}
}
},
"OrderByElement": {
"title": "Order By Element",
"type": "object",
"required": [
"order_direction",
"target"
],
"properties": {
"order_direction": {
"$ref": "#/definitions/OrderDirection"
},
"target": {
"$ref": "#/definitions/OrderByTarget"
}
}
},
"OrderDirection": {
"title": "Order Direction",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"OrderByTarget": {
"title": "Order By Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column_aggregate"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count_aggregate"
]
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
}
]
},
"PathElement": {
"title": "Path Element",
"type": "object",
"required": [
"arguments",
"relationship"
],
"properties": {
"relationship": {
"description": "The name of the relationship to follow",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
},
"predicate": {
"description": "A predicate expression to apply to the target collection",
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"Expression": {
"title": "Expression",
"oneOf": [
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"and"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"or"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expression",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"not"
]
},
"expression": {
"$ref": "#/definitions/Expression"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"$ref": "#/definitions/UnaryComparisonOperator"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"binary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"type": "string"
},
"value": {
"$ref": "#/definitions/ComparisonValue"
}
}
},
{
"type": "object",
"required": [
"in_collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"exists"
]
},
"in_collection": {
"$ref": "#/definitions/ExistsInCollection"
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
}
]
},
"ComparisonTarget": {
"title": "Comparison Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"root_collection_column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
}
}
}
]
},
"UnaryComparisonOperator": {
"title": "Unary Comparison Operator",
"type": "string",
"enum": [
"is_null"
]
},
"ComparisonValue": {
"title": "Comparison Value",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
}
}
},
{
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"scalar"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
}
]
},
"ExistsInCollection": {
"title": "Exists In Collection",
"oneOf": [
{
"type": "object",
"required": [
"arguments",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"related"
]
},
"relationship": {
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unrelated"
]
},
"collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"column_name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"nested_collection"
]
},
"column_name": {
"type": "string"
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
},
"field_path": {
"description": "Path to a nested collection via object columns",
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Relationship": {
"title": "Relationship",
"type": "object",
"required": [
"arguments",
"column_mapping",
"relationship_type",
"target_collection"
],
"properties": {
"column_mapping": {
"description": "A mapping between columns on the source collection to columns on the target collection",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"relationship_type": {
"$ref": "#/definitions/RelationshipType"
},
"target_collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
"RelationshipType": {
"title": "Relationship Type",
"type": "string",
"enum": [
"object",
"array"
]
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Query Response",
"description": "Query responses may return multiple RowSets when using queries with variables. Else, there should always be exactly one RowSet",
"type": "array",
"items": {
"$ref": "#/definitions/RowSet"
},
"definitions": {
"RowSet": {
"title": "Row Set",
"type": "object",
"properties": {
"aggregates": {
"description": "The results of the aggregates returned by the query",
"type": [
"object",
"null"
],
"additionalProperties": true
},
"rows": {
"description": "The rows returned by the query, corresponding to the query's fields",
"type": [
"array",
"null"
],
"items": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RowFieldValue"
}
}
}
}
},
"RowFieldValue": {
"title": "Row Field Value"
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Query Request",
"description": "This is the request body of the query POST endpoint",
"type": "object",
"required": [
"arguments",
"collection",
"collection_relationships",
"query"
],
"properties": {
"collection": {
"description": "The name of a collection",
"type": "string"
},
"query": {
"description": "The query syntax tree",
"allOf": [
{
"$ref": "#/definitions/Query"
}
]
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
},
"collection_relationships": {
"description": "Any relationships between collections involved in the query request",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Relationship"
}
},
"variables": {
"description": "One set of named variables for each rowset to fetch. Each variable set should be subtituted in turn, and a fresh set of rows returned.",
"type": [
"array",
"null"
],
"items": {
"type": "object",
"additionalProperties": true
}
}
},
"definitions": {
"Query": {
"title": "Query",
"type": "object",
"properties": {
"aggregates": {
"description": "Aggregate fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Aggregate"
}
},
"fields": {
"description": "Fields of the query",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/definitions/Field"
}
},
"limit": {
"description": "Optionally limit to N results",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"offset": {
"description": "Optionally offset from the Nth result",
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0.0
},
"order_by": {
"anyOf": [
{
"$ref": "#/definitions/OrderBy"
},
{
"type": "null"
}
]
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"Aggregate": {
"title": "Aggregate",
"oneOf": [
{
"type": "object",
"required": [
"column",
"distinct",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column_count"
]
},
"column": {
"description": "The column to apply the count aggregate function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"distinct": {
"description": "Whether or not only distinct items should be counted",
"type": "boolean"
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count"
]
}
}
}
]
},
"Field": {
"title": "Field",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"type": "string"
},
"fields": {
"description": "When the type of the column is a (possibly-nullable) array or object, the caller can request a subset of the complete column data, by specifying fields to fetch here. If omitted, the column data will be fetched in full.",
"anyOf": [
{
"$ref": "#/definitions/NestedField"
},
{
"type": "null"
}
]
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"query",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"relationship"
]
},
"query": {
"$ref": "#/definitions/Query"
},
"relationship": {
"description": "The name of the relationship to follow for the subquery",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
}
]
},
"NestedField": {
"title": "NestedField",
"oneOf": [
{
"title": "NestedObject",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"object"
]
},
"fields": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Field"
}
}
}
},
{
"title": "NestedArray",
"type": "object",
"required": [
"fields",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"array"
]
},
"fields": {
"$ref": "#/definitions/NestedField"
}
}
}
]
},
"Argument": {
"title": "Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
}
]
},
"RelationshipArgument": {
"title": "Relationship Argument",
"oneOf": [
{
"description": "The argument is provided by reference to a variable",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
},
{
"description": "The argument is provided as a literal value",
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"literal"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"type": "string"
}
}
}
]
},
"OrderBy": {
"title": "Order By",
"type": "object",
"required": [
"elements"
],
"properties": {
"elements": {
"description": "The elements to order by, in priority order",
"type": "array",
"items": {
"$ref": "#/definitions/OrderByElement"
}
}
}
},
"OrderByElement": {
"title": "Order By Element",
"type": "object",
"required": [
"order_direction",
"target"
],
"properties": {
"order_direction": {
"$ref": "#/definitions/OrderDirection"
},
"target": {
"$ref": "#/definitions/OrderByTarget"
}
}
},
"OrderDirection": {
"title": "Order Direction",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"OrderByTarget": {
"title": "Order By Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"column",
"function",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"single_column_aggregate"
]
},
"column": {
"description": "The column to apply the aggregation function to",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"function": {
"description": "Single column aggregate function name.",
"type": "string"
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"star_count_aggregate"
]
},
"path": {
"description": "Non-empty collection of relationships to traverse",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
}
]
},
"PathElement": {
"title": "Path Element",
"type": "object",
"required": [
"arguments",
"relationship"
],
"properties": {
"relationship": {
"description": "The name of the relationship to follow",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
},
"predicate": {
"description": "A predicate expression to apply to the target collection",
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
},
"Expression": {
"title": "Expression",
"oneOf": [
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"and"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expressions",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"or"
]
},
"expressions": {
"type": "array",
"items": {
"$ref": "#/definitions/Expression"
}
}
}
},
{
"type": "object",
"required": [
"expression",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"not"
]
},
"expression": {
"$ref": "#/definitions/Expression"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"$ref": "#/definitions/UnaryComparisonOperator"
}
}
},
{
"type": "object",
"required": [
"column",
"operator",
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"binary_comparison_operator"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
},
"operator": {
"type": "string"
},
"value": {
"$ref": "#/definitions/ComparisonValue"
}
}
},
{
"type": "object",
"required": [
"in_collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"exists"
]
},
"in_collection": {
"$ref": "#/definitions/ExistsInCollection"
},
"predicate": {
"anyOf": [
{
"$ref": "#/definitions/Expression"
},
{
"type": "null"
}
]
}
}
}
]
},
"ComparisonTarget": {
"title": "Comparison Target",
"oneOf": [
{
"type": "object",
"required": [
"name",
"path",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"path": {
"description": "Any relationships to traverse to reach this column",
"type": "array",
"items": {
"$ref": "#/definitions/PathElement"
}
}
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"root_collection_column"
]
},
"name": {
"description": "The name of the column",
"type": "string"
},
"field_path": {
"description": "Path to a nested field within an object column",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
}
}
}
]
},
"UnaryComparisonOperator": {
"title": "Unary Comparison Operator",
"type": "string",
"enum": [
"is_null"
]
},
"ComparisonValue": {
"title": "Comparison Value",
"oneOf": [
{
"type": "object",
"required": [
"column",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"column"
]
},
"column": {
"$ref": "#/definitions/ComparisonTarget"
}
}
},
{
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"scalar"
]
},
"value": true
}
},
{
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"variable"
]
},
"name": {
"type": "string"
}
}
}
]
},
"ExistsInCollection": {
"title": "Exists In Collection",
"oneOf": [
{
"type": "object",
"required": [
"arguments",
"relationship",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"related"
]
},
"relationship": {
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"arguments",
"collection",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"unrelated"
]
},
"collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
{
"type": "object",
"required": [
"column_name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"nested_collection"
]
},
"column_name": {
"type": "string"
},
"arguments": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Argument"
}
},
"field_path": {
"description": "Path to a nested collection via object columns",
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Relationship": {
"title": "Relationship",
"type": "object",
"required": [
"arguments",
"column_mapping",
"relationship_type",
"target_collection"
],
"properties": {
"column_mapping": {
"description": "A mapping between columns on the source collection to columns on the target collection",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"relationship_type": {
"$ref": "#/definitions/RelationshipType"
},
"target_collection": {
"description": "The name of a collection",
"type": "string"
},
"arguments": {
"description": "Values to be provided to any collection arguments",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/RelationshipArgument"
}
}
}
},
"RelationshipType": {
"title": "Relationship Type",
"type": "string",
"enum": [
"object",
"array"
]
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Schema Response",
"type": "object",
"required": [
"collections",
"functions",
"object_types",
"procedures",
"scalar_types"
],
"properties": {
"scalar_types": {
"description": "A list of scalar types which will be used as the types of collection columns",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ScalarType"
}
},
"object_types": {
"description": "A list of object types which can be used as the types of arguments, or return types of procedures. Names should not overlap with scalar type names.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ObjectType"
}
},
"collections": {
"description": "Collections which are available for queries",
"type": "array",
"items": {
"$ref": "#/definitions/CollectionInfo"
}
},
"functions": {
"description": "Functions (i.e. collections which return a single column and row)",
"type": "array",
"items": {
"$ref": "#/definitions/FunctionInfo"
}
},
"procedures": {
"description": "Procedures which are available for execution as part of mutations",
"type": "array",
"items": {
"$ref": "#/definitions/ProcedureInfo"
}
}
},
"definitions": {
"ScalarType": {
"title": "Scalar Type",
"description": "The definition of a scalar type, i.e. types that can be used as the types of columns.",
"type": "object",
"required": [
"aggregate_functions",
"comparison_operators"
],
"properties": {
"representation": {
"description": "A description of valid values for this scalar type. Defaults to `TypeRepresentation::JSON` if omitted",
"anyOf": [
{
"$ref": "#/definitions/TypeRepresentation"
},
{
"type": "null"
}
]
},
"aggregate_functions": {
"description": "A map from aggregate function names to their definitions. Result type names must be defined scalar types declared in ScalarTypesCapabilities.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/AggregateFunctionDefinition"
}
},
"comparison_operators": {
"description": "A map from comparison operator names to their definitions. Argument type names must be defined scalar types declared in ScalarTypesCapabilities.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ComparisonOperatorDefinition"
}
}
}
},
"TypeRepresentation": {
"title": "Type Representation",
"description": "Representations of scalar types",
"oneOf": [
{
"description": "JSON booleans",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"boolean"
]
}
}
},
{
"description": "Any JSON string",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"string"
]
}
}
},
{
"description": "Any JSON number",
"deprecated": true,
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"number"
]
}
}
},
{
"description": "Any JSON number, with no decimal part",
"deprecated": true,
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"integer"
]
}
}
},
{
"description": "A 8-bit signed integer with a minimum value of -2^7 and a maximum value of 2^7 - 1",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"int8"
]
}
}
},
{
"description": "A 16-bit signed integer with a minimum value of -2^15 and a maximum value of 2^15 - 1",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"int16"
]
}
}
},
{
"description": "A 32-bit signed integer with a minimum value of -2^31 and a maximum value of 2^31 - 1",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"int32"
]
}
}
},
{
"description": "A 64-bit signed integer with a minimum value of -2^63 and a maximum value of 2^63 - 1",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"int64"
]
}
}
},
{
"description": "An IEEE-754 single-precision floating-point number",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"float32"
]
}
}
},
{
"description": "An IEEE-754 double-precision floating-point number",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"float64"
]
}
}
},
{
"description": "Arbitrary-precision integer string",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"biginteger"
]
}
}
},
{
"description": "Arbitrary-precision decimal string",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"bigdecimal"
]
}
}
},
{
"description": "UUID string (8-4-4-4-12)",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"uuid"
]
}
}
},
{
"description": "ISO 8601 date",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"date"
]
}
}
},
{
"description": "ISO 8601 timestamp",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"timestamp"
]
}
}
},
{
"description": "ISO 8601 timestamp-with-timezone",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"timestamptz"
]
}
}
},
{
"description": "GeoJSON, per RFC 7946",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"geography"
]
}
}
},
{
"description": "GeoJSON Geometry object, per RFC 7946",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"geometry"
]
}
}
},
{
"description": "Base64-encoded bytes",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"bytes"
]
}
}
},
{
"description": "Arbitrary JSON",
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"json"
]
}
}
},
{
"description": "One of the specified string values",
"type": "object",
"required": [
"one_of",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"enum"
]
},
"one_of": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"AggregateFunctionDefinition": {
"title": "Aggregate Function Definition",
"description": "The definition of an aggregation function on a scalar type",
"type": "object",
"required": [
"result_type"
],
"properties": {
"result_type": {
"description": "The scalar or object type of the result of this function",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
},
"Type": {
"title": "Type",
"description": "Types track the valid representations of values as JSON",
"oneOf": [
{
"description": "A named type",
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"named"
]
},
"name": {
"description": "The name can refer to a scalar or object type",
"type": "string"
}
}
},
{
"description": "A nullable type",
"type": "object",
"required": [
"type",
"underlying_type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"nullable"
]
},
"underlying_type": {
"description": "The type of the non-null inhabitants of this type",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
},
{
"description": "An array type",
"type": "object",
"required": [
"element_type",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"array"
]
},
"element_type": {
"description": "The type of the elements of the array",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
},
{
"description": "A predicate type for a given object type",
"type": "object",
"required": [
"object_type_name",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"predicate"
]
},
"object_type_name": {
"description": "The object type name",
"type": "string"
}
}
}
]
},
"ComparisonOperatorDefinition": {
"title": "Comparison Operator Definition",
"description": "The definition of a comparison operator on a scalar type",
"oneOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"equal"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"in"
]
}
}
},
{
"type": "object",
"required": [
"argument_type",
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"custom"
]
},
"argument_type": {
"description": "The type of the argument to this operator",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
}
]
},
"ObjectType": {
"title": "Object Type",
"description": "The definition of an object type",
"type": "object",
"required": [
"fields"
],
"properties": {
"description": {
"description": "Description of this type",
"type": [
"string",
"null"
]
},
"fields": {
"description": "Fields defined on this object type",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ObjectField"
}
}
}
},
"ObjectField": {
"title": "Object Field",
"description": "The definition of an object field",
"type": "object",
"required": [
"type"
],
"properties": {
"description": {
"description": "Description of this field",
"type": [
"string",
"null"
]
},
"type": {
"description": "The type of this field",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
},
"arguments": {
"description": "The arguments available to the field - Matches implementation from CollectionInfo",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ArgumentInfo"
}
}
}
},
"ArgumentInfo": {
"title": "Argument Info",
"type": "object",
"required": [
"type"
],
"properties": {
"description": {
"description": "Argument description",
"type": [
"string",
"null"
]
},
"type": {
"description": "The name of the type of this argument",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
},
"CollectionInfo": {
"title": "Collection Info",
"type": "object",
"required": [
"arguments",
"foreign_keys",
"name",
"type",
"uniqueness_constraints"
],
"properties": {
"name": {
"description": "The name of the collection\n\nNote: these names are abstract - there is no requirement that this name correspond to the name of an actual collection in the database.",
"type": "string"
},
"description": {
"description": "Description of the collection",
"type": [
"string",
"null"
]
},
"arguments": {
"description": "Any arguments that this collection requires",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ArgumentInfo"
}
},
"type": {
"description": "The name of the collection's object type",
"type": "string"
},
"uniqueness_constraints": {
"description": "Any uniqueness constraints enforced on this collection",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/UniquenessConstraint"
}
},
"foreign_keys": {
"description": "Any foreign key constraints enforced on this collection",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ForeignKeyConstraint"
}
}
}
},
"UniquenessConstraint": {
"title": "Uniqueness Constraint",
"type": "object",
"required": [
"unique_columns"
],
"properties": {
"unique_columns": {
"description": "A list of columns which this constraint requires to be unique",
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ForeignKeyConstraint": {
"title": "Foreign Key Constraint",
"type": "object",
"required": [
"column_mapping",
"foreign_collection"
],
"properties": {
"column_mapping": {
"description": "The columns on which you want want to define the foreign key.",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"foreign_collection": {
"description": "The name of a collection",
"type": "string"
}
}
},
"FunctionInfo": {
"title": "Function Info",
"type": "object",
"required": [
"arguments",
"name",
"result_type"
],
"properties": {
"name": {
"description": "The name of the function",
"type": "string"
},
"description": {
"description": "Description of the function",
"type": [
"string",
"null"
]
},
"arguments": {
"description": "Any arguments that this collection requires",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ArgumentInfo"
}
},
"result_type": {
"description": "The name of the function's result type",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
},
"ProcedureInfo": {
"title": "Procedure Info",
"type": "object",
"required": [
"arguments",
"name",
"result_type"
],
"properties": {
"name": {
"description": "The name of the procedure",
"type": "string"
},
"description": {
"description": "Column description",
"type": [
"string",
"null"
]
},
"arguments": {
"description": "Any arguments that this collection requires",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ArgumentInfo"
}
},
"result_type": {
"description": "The name of the result type",
"allOf": [
{
"$ref": "#/definitions/Type"
}
]
}
}
}
}
}