{ "title": "JSON schema for Pyrseas yaml files", "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "privileges": { "description": "Only provide a single property per item, TODO: grantor, grantable", "type": "array", "items": { "type": "object", "additionalProperties": { "type": "array", "items": { "oneOf": [ {"type": "string", "enum":[ "all", "insert", "delete", "select", "update", "truncate", "references", "trigger", "usage", "execute", "create" ]}, {"type": "object", "additionalProperties": false, "properties": {"all": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"insert": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"delete": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"select": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"update": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"truncate": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"references": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"trigger": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"usage": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"execute": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}}, {"type": "object", "additionalProperties": false, "properties": {"create": { "additionalProperties": false, "properties": { "grantable": {"type": "boolean"}}}}} ] } } } }, "schema": { "type": "object", "additionalProperties": false, "patternProperties": { "^table ": { "type":"object", "additionalProperties": false, "properties": { "owner": {"type":"string"}, "description": {"type": "string"}, "columns": { "type": "array", "items": { "type":"object", "additionalProperties": { "type": "object", "properties": { "type": {"type":"string"}, "default": {"type": "string"}, "not_null": {"type": "boolean"}, "inherited": {"type": "boolean"}, "collation": {"type": "string"}, "statistics": {"type": "integer"}, "identity": {"type": "string", "enum": [ "always", "by default" ]}, "description": {"type": "string"} }, "additionalProperties": false } } }, "unique_constraints": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "columns": {"type":"array", "items": {"type": "string"}}, "description": {"type": "string"} } } }, "foreign_keys": { "type": "object", "additionalProperties": { "type":"object", "additionalProperties": false, "properties": { "columns": {"type":"array", "items": {"type":"string"}}, "on_delete": {"type":"string"}, "on_update": {"type":"string"}, "description": {"type": "string"}, "references": { "type":"object", "additionalProperties": false, "properties": { "columns": {"type":"array", "items": {"type": "string"}}, "schema": {"type":"string"}, "table": {"type":"string"} } } } } }, "check_constraints": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "columns": {"type": "array", "items": {"type": "string"}}, "expression": {"type": "string"}, "inherited": {"type": "boolean"}, "description": {"type": "string"} } } }, "primary_key": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "columns": {"type": "array", "items": {"type": "string"}}, "cluster": {"type": "boolean"} } } }, "indexes": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "keys": {"type":"array", "items": {"type": "string"}}, "access_method": {"type": "string"}, "unique": {"type": "boolean"}, "description": {"type": "string"} } } }, "triggers":{ "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "events": {"type": "array", "items": {"type": "string"}}, "level": {"type": "string"}, "procedure": {"type": "string"}, "timing": {"type": "string"}, "description": {"type": "string"} } } }, "inherits": { "type": "array", "items": {"type": "string"} }, "rules": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "actions": {"type": "string"}, "condition": {"type": "string"}, "event": {"type": "string"}, "instead": {"type": "boolean"}, "depends_on": { "type": "array", "items": {"type": "string"} }, "description": {"type": "string"} } } }, "privileges": { "$ref": "#/definitions/privileges" }, "depends_on": { "type": "array", "items": {"type": "string"} } } }, "^aggregate ": { "type": "object", "additionalProperties": false, "properties": { "owner": {"type": "string"}, "sfunc": {"type": "string"}, "stype": {"type": "string"} } }, "^domain ": { "type": "object", "additionalProperties": false, "properties": { "owner": {"type": "string"}, "type": {"type": "string"}, "check_constraints": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "expression": {"type": "string"} } } } } }, "^function ": { "type": "object", "additionalProperties": false, "properties": { "language": {"type": "string"}, "owner": {"type": "string"}, "returns": {"type": "string"}, "source": {"type": "string"}, "volatility": {"type": "string"}, "strict": { "type": "boolean"}, "security_definer": { "type": "boolean"}, "description": {"type": "string"} } }, "^sequence ": { "type": "object", "additionalProperties": false, "properties": { "cache_value": {"type": "integer"}, "increment_by": {"type": "integer"}, "max_value": { "oneOf": [ { "type": "integer" }, { "type": "string", "const": "null" } ] }, "min_value":{ "oneOf": [ { "type": "integer" }, { "type": "string", "const": "null" } ] }, "owner": {"type": "string"}, "start_value": {"type": "integer"}, "owner_table": {"type": "string"}, "owner_column": {"type": "string"}, "privileges": { "$ref": "#/definitions/privileges"} } }, "^type ": { "type": "object", "additionalProperties": false, "properties": { "labels": {"type": "array", "items": {"type": "string"}}, "owner": {"type": "string"} } }, "^view ": { "type": "object", "additionalProperties": false, "properties": { "definition": { "type": "string"}, "description": {"type": "string"}, "owner": { "type": "string"}, "depends_on": {"type": "array", "items": {"type": "string"}} } }, "^foreign table ":{ "type": "object", "description": "TODO" }, "^collation ": { "type": "object", "additionalProperties": false, "properties": { "lc_collate": { "type": "string" }, "lc_ctype": { "type": "string" }, "owner": { "type": "string" }, "description": { "type": "string" } } } }, "properties": { "owner": { "type": "string" }, "description": {"type":"string"}, "privileges":{ "$ref": "#/definitions/privileges" } } } }, "$ref": "#/definitions/schema" }