{
    "title": "NTangle - https://github.com/Avanade/ntangle",
    "$schema": "http://json-schema.org/draft-04/schema",
    "definitions": {
        "Root": {
            "type": "object",
            "title": "The 'Root' object (database-driven)",
            "description": "The 'RootConfig' object defines the global properties that are used to drive the underlying database-driven CDC-oriented code-generation.",
            "properties": {
                "schema": {
                    "type": "string",
                    "title": "The default 'Schema' name where the existing tables are defined within the database.",
                    "description": "This is used as the default 'Schema' for all child objects. Defaults to 'dbo' (literal)."
                },
                "cdcSchema": {
                    "type": "string",
                    "title": "The schema name for the _ntangle_ generated 'CDC'-related database artefacts.",
                    "description": "Defaults to 'NTangle' (literal)."
                },
                "cdcSchemaCreate": {
                    "type": "boolean",
                    "title": "Indicates whether to create the 'CdcSchema' within the database.",
                    "description": "Defaults to 'false'."
                },
                "versionTrackingTable": {
                    "type": "string",
                    "title": "The table name for the 'Cdc'-VersionTracking.",
                    "description": "Defaults to 'VersionTracking' (literal)."
                },
                "cdcEnable": {
                    "type": "boolean",
                    "title": "Indicates whether to enable 'Cdc' within the database for the tables that participate.",
                    "description": "Defaults to 'false'. This option can be overridden for each underlying table referenced."
                },
                "identifierMapping": {
                    "type": "boolean",
                    "title": "Indicates whether to include the generation of the generic 'CDC'-IdentifierMapping database capabilities.",
                    "description": "Where set to 'true' each underlying 'Table' and corresponding 'Join' must set 'IdentifierMapping' explicitly."
                },
                "identifierMappingType": {
                    "type": "string",
                    "title": "The type for the identifier mapping value.",
                    "description": "Defaults to 'String'.",
                    "enum": [
                        "String",
                        "Int",
                        "Long",
                        "Guid"
                    ]
                },
                "identifierMappingTable": {
                    "type": "string",
                    "title": "The table name for the 'Cdc'-IdentifierMapping.",
                    "description": "Defaults to 'IdentifierMapping' (literal)."
                },
                "identifierMappingStoredProcedure": {
                    "type": "string",
                    "title": "The stored procedure name for the 'Cdc'-IdentifierMapping create.",
                    "description": "Defaults to 'spIdentifierMappingCreate' (literal)."
                },
                "isDeletedColumn": {
                    "type": "string",
                    "title": "The column name for the 'IsDeleted' (logical delete) capability (if any).",
                    "description": "Defaults to 'IsDeleted'."
                },
                "autoDotNetRename": {
                    "type": "string",
                    "title": "The option to automatically rename the SQL Tables and Columns for use in .NET.",
                    "description": "Defaults to 'SnakeKebabToPascalCase' which will remove any underscores or hyphens separating each word and capitalize the first character of each; e.g. 'internal-customer_id' would be renamed as 'InternalCustomerId'. The 'PascalCase' option will capatilize the first character only.",
                    "enum": [
                        "None",
                        "PascalCase",
                        "SnakeKebabToPascalCase"
                    ]
                },
                "excludeColumnsFromETag": {
                    "type": "array",
                    "title": "The default list of 'Column' names that should be excluded from the generated ETag (used for the likes of duplicate send tracking)",
                    "items": {
                        "type": "string"
                    }
                },
                "jsonSerializer": {
                    "type": "string",
                    "title": "The JSON Serializer to use for JSON property attribution.",
                    "description": "Defaults to 'SystemText'.",
                    "enum": [
                        "SystemText",
                        "Newtonsoft"
                    ]
                },
                "service": {
                    "type": "string",
                    "title": "The type of service that manages the underlying orchestrator.",
                    "description": "Defaults to 'None'. A 'HostedService' is an 'IHostedService' implementation enabling long-running execution; whereas, 'Service' is intended for self-managed execution.",
                    "enum": [
                        "None",
                        "HostedService",
                        "Service"
                    ]
                },
                "eventSubjectRoot": {
                    "type": "string",
                    "title": "The root for the event name by prepending to all event subject names via CDC.",
                    "description": "Used to enable the sending of messages to the likes of EventHubs, Service Broker, Kafka, etc."
                },
                "eventSubjectFormat": {
                    "type": "string",
                    "title": "The default formatting for the Subject when an Event is published via CDC.",
                    "description": "Defaults to 'NameOnly'.",
                    "enum": [
                        "NameOnly",
                        "NameAndKey",
                        "NameAndTableKey"
                    ]
                },
                "eventActionFormat": {
                    "type": "string",
                    "title": "The formatting for the Action when an Event is published via CDC.",
                    "description": "Defaults to 'None' (no formatting required, i.e. as-is).",
                    "enum": [
                        "None",
                        "PastTense"
                    ]
                },
                "eventSourceKind": {
                    "type": "string",
                    "title": "The URI kind for the event source URIs for CDC.",
                    "description": "Defaults to 'Relative' (being a relative path).",
                    "enum": [
                        "None",
                        "Absolute",
                        "Relative",
                        "RelativeOrAbsolute"
                    ]
                },
                "eventSourceRoot": {
                    "type": "string",
                    "title": "The URI root for the event source by prepending to all event source URIs for CDC.",
                    "description": "The event source is only updated where an 'EventSourceKind' is not 'None'."
                },
                "eventSourceFormat": {
                    "type": "string",
                    "title": "The default formatting for the Source when an Event is published via CDC.",
                    "description": "Defaults to 'NameAndTableKey' (being the child 'Cdc.ModelName' appended with the corresponding table key).",
                    "enum": [
                        "NameOnly",
                        "NameAndKey",
                        "NameAndTableKey"
                    ]
                },
                "eventTypeRoot": {
                    "type": "string",
                    "title": "The root for the event type by prepending to all event type names via CDC.",
                    "description": "Used to enable the sending of messages to the likes of EventHubs, Service Broker, Kafka, etc. Defaults to 'EventSubjectRoot'."
                },
                "outbox": {
                    "type": "boolean",
                    "title": "Indicates whether to generate the event outbox SQL and .NET artefacts.",
                    "description": "Defaults to 'false'."
                },
                "outboxSchema": {
                    "type": "string",
                    "title": "The schema name of the event outbox table.",
                    "description": "Defaults to 'Outbox' (literal)."
                },
                "outboxSchemaCreate": {
                    "type": "boolean",
                    "title": "Indicates whether to create the 'OutboxSchema' within the database.",
                    "description": "Defaults to 'false'."
                },
                "outboxTable": {
                    "type": "string",
                    "title": "The name of the event outbox table.",
                    "description": "Defaults to 'EventOutbox' (literal)."
                },
                "outboxEnqueueStoredProcedure": {
                    "type": "string",
                    "title": "The stored procedure name for the event outbox enqueue.",
                    "description": "Defaults to 'spEventOutboxEnqueue' (literal)."
                },
                "outboxDequeueStoredProcedure": {
                    "type": "string",
                    "title": "The stored procedure name for the event outbox dequeue.",
                    "description": "Defaults to 'spEventOutboxDequeue' (literal)."
                },
                "pathBase": {
                    "type": "string",
                    "title": "The base path (directory) prefix for the Database-related artefacts; other 'Path*' properties append to this value when they are not specifically overridden.",
                    "description": "Defaults to 'AppName' (runtime parameter). For example 'Avanade.Application'."
                },
                "pathDatabase": {
                    "type": "string",
                    "title": "The path (directory) for the Schema Database-related artefacts.",
                    "description": "Defaults to 'PathBase' + '.Database' (literal). For example 'Avanade.Application.Database'."
                },
                "pathDatabaseSchema": {
                    "type": "string",
                    "title": "The path (directory) for the Schema Database-related artefacts.",
                    "description": "Defaults to 'PathDatabase' + '/Schema' (literal). For example 'Avanade.Application.Database/Schema'."
                },
                "pathDatabaseMigrations": {
                    "type": "string",
                    "title": "The path (directory) for the Schema Database-related artefacts.",
                    "description": "Defaults to 'PathDatabase' + '/Migrations' (literal). For example 'Avanade.Application.Database/Migrations'."
                },
                "pathDotNetPublisher": {
                    "type": "string",
                    "title": "The path (directory) for the CDC-related (.NET) artefacts.",
                    "description": "Defaults to 'PathBase' + '.Publisher' (literal). For example 'Avanade.Application.Publisher'."
                },
                "namespaceBase": {
                    "type": "string",
                    "title": "The base Namespace (root) for the .NET artefacts.",
                    "description": "Defaults to 'AppName' (runtime parameter). For example 'Avanade.Application'."
                },
                "namespacePublisher": {
                    "type": "string",
                    "title": "The Namespace (root) for the CDC-related Publisher .NET artefacts.",
                    "description": "Defaults to 'NamespaceBase' + '.Publisher' (literal). For example 'Avanade.Application.Publisher'."
                },
                "namespaceOutbox": {
                    "type": "string",
                    "title": "The Namespace (root) for the Outbox-related Publisher .NET artefacts.",
                    "description": "Defaults to 'NamespacePublisher'."
                },
                "tables": {
                    "type": "array",
                    "title": "The corresponding 'Table' collection.",
                    "description": "A 'Table' object provides the primary database table configuration for Change Data Capture (CDC), including multiple child table joins to form a composite entity.",
                    "items": {
                        "$ref": "#/definitions/Table"
                    }
                }
            }
        },
        "Table": {
            "type": "object",
            "title": "'Table' object (database-driven)",
            "description": "The 'Table' object enables the definition of the primary table, one-or-more child tables and their respective join relationships, to enable Change Data Capture (CDC) event publishing. The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The name of the primary table."
                },
                "schema": {
                    "type": "string",
                    "title": "The default schema name used where not otherwise explicitly specified.",
                    "description": "Defaults to 'Root.Schema'."
                },
                "table": {
                    "type": "string",
                    "title": "The name of the primary table.",
                    "description": "Defaults to 'Name'. This is used to specify the actual underlying database table name (required where the 'Name' has been changed to enable uniqueness)."
                },
                "alias": {
                    "type": "string",
                    "title": "The table alias name (must be unique).",
                    "description": "Will automatically default where not specified; for example a table named 'Person' will default to 'p'."
                },
                "includeColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names to be included in the underlying generated output.",
                    "description": "Where not specified this indicates that all 'Columns' are to be included.",
                    "items": {
                        "type": "string"
                    }
                },
                "excludeColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names to be excluded from the underlying generated output.",
                    "description": "Where not specified this indicates no 'Columns' are to be excluded.",
                    "items": {
                        "type": "string"
                    }
                },
                "aliasColumns": {
                    "type": "array",
                    "title": "The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column aliasing/renaming.",
                    "description": "Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'.",
                    "items": {
                        "type": "string"
                    }
                },
                "executeStoredProcedure": {
                    "type": "string",
                    "title": "The 'CDC' _execute_ batch stored procedure name.",
                    "description": "Defaults to 'sp' (literal) + 'Name' + 'BatchExecute' (literal); e.g. 'spNameBatchExecute'."
                },
                "completeStoredProcedure": {
                    "type": "string",
                    "title": "The 'CDC' _complete_ batch stored procedure name.",
                    "description": "Defaults to 'sp' (literal) + 'Name' + 'BatchComplete' (literal); e.g. 'spNameBatchComplete'."
                },
                "cdcSchema": {
                    "type": "string",
                    "title": "The schema name for the generated 'CDC'-related database artefacts.",
                    "description": "Defaults to 'Root.CdcSchema'."
                },
                "batchTrackingTable": {
                    "type": "string",
                    "title": "The corresponding 'CDC' Batch tracking table name.",
                    "description": "Defaults to 'Name' + 'BatchTracking' (literal)."
                },
                "cdcEnable": {
                    "type": "boolean",
                    "title": "Indicates whether to enable 'Cdc' within the database for the tables that participate.",
                    "description": "Defaults to 'false'. This option can be overridden for each underlying table referenced."
                },
                "model": {
                    "type": "string",
                    "title": "The .NET model name.",
                    "description": "Defaults to 'Name'."
                },
                "orchestratorCtorParams": {
                    "type": "array",
                    "title": "The list of additional (non-default) Dependency Injection (DI) parameters for the generated CDC 'Orchestrator' constructor.",
                    "description": "Each constructor parameter should be formatted as 'Type' + '^' + 'Name'; e.g. 'IConfiguration^Config'. Where the 'Name' portion is not specified it will be inferred.",
                    "items": {
                        "type": "string"
                    }
                },
                "database": {
                    "type": "string",
                    "title": "The .NET database 'IDatabase' Type name used in the constructor for Dependency Injection (DI).",
                    "description": "Defaults to 'IDatabase'."
                },
                "includeColumnsOnDelete": {
                    "type": "array",
                    "title": "The list of 'Column' names that should be included (in addition to the primary key) for a logical delete.",
                    "description": "Where a column is not specified in this list its corresponding .NET property will be automatically cleared by the 'CdcDataOrchestrator' as the data is technically considered as non-existing.",
                    "items": {
                        "type": "string"
                    }
                },
                "service": {
                    "type": "string",
                    "title": "The type of service that manages the underlying orchestrator.",
                    "description": "Defaults to 'Root.Service'. A 'HostedService' is an 'IHostedService' implementation enabling long-running execution; whereas, 'Service' is intended for self-managed execution.",
                    "enum": [
                        "None",
                        "HostedService",
                        "Service"
                    ]
                },
                "excludeColumnsFromETag": {
                    "type": "array",
                    "title": "The list of 'Column' names that should be excluded from the generated ETag (used for the likes of duplicate send tracking).",
                    "description": "Defaults to 'Root.CdcExcludeColumnsFromETag'.",
                    "items": {
                        "type": "string"
                    }
                },
                "tenantIdColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names that represent the tenant identifier.",
                    "items": {
                        "type": "string"
                    }
                },
                "partitionKey": {
                    "type": "string",
                    "title": "The partition key.",
                    "description": "A partition key can be specified using either 'PartitionKey' or 'PartitionKeyColumns'."
                },
                "partitionKeyColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names that represent the partition key.",
                    "description": "A partition key can be specified using either 'PartitionKey' or 'PartitionKeyColumns'.",
                    "items": {
                        "type": "string"
                    }
                },
                "eventSource": {
                    "type": "string",
                    "title": "The Event Source.",
                    "description": "Defaults to 'Schema' + '/' (literal) + 'Name' (as lowercase). Note: when used in code-generation the 'Root.EventSourceRoot' will be prepended where specified."
                },
                "eventSourceFormat": {
                    "type": "string",
                    "title": "The default formatting for the Source when an Event is published.",
                    "description": "Defaults to 'Root.EventSourceFormat'.",
                    "enum": [
                        "NameOnly",
                        "NameAndKey",
                        "NameAndTableKey"
                    ]
                },
                "eventSubject": {
                    "type": "string",
                    "title": "The Event Subject.",
                    "description": "Defaults to 'ModelName'. Note: when used in code-generation the 'Root.EventSubjectRoot' will be prepended where specified."
                },
                "eventSubjectFormat": {
                    "type": "string",
                    "title": "The default formatting for the Subject when an Event is published.",
                    "description": "Defaults to 'Root.EventSubjectFormat'.",
                    "enum": [
                        "NameOnly",
                        "NameAndKey",
                        "NameAndTableKey"
                    ]
                },
                "eventType": {
                    "type": "string",
                    "title": "The Event Type.",
                    "description": "Defaults to 'ModelName'. Note: when used in code-generation the 'Root.EventTypeRoot' will be prepended where specified."
                },
                "identifierMapping": {
                    "type": "boolean",
                    "title": "Indicates whether to perform Identifier Mapping (mapping to 'GlobalId') for the primary key.",
                    "description": "This indicates whether to create a new 'GlobalId' property on the _entity_ to house the global mapping identifier to be the reference outside of the specific database realm as a replacement to the existing primary key column(s)."
                },
                "identifierName": {
                    "type": "string",
                    "title": "The JSON name for the 'GlobalId' property where 'IdentifierMapping' is 'true'. Defaults to 'globalId'.",
                    "description": "This indicates whether to create a new 'GlobalId' property on the _entity_ to house the global mapping identifier to be the reference outside of the specific database realm as a replacement to the existing primary key column(s)."
                },
                "isDeletedColumn": {
                    "type": "string",
                    "title": "The column name for the 'IsDeleted' (logical delete) capability (if any).",
                    "description": "Defaults to 'Root.ColumnIsDeleted'."
                },
                "joins": {
                    "type": "array",
                    "title": "The corresponding 'Join' collection.",
                    "description": "A 'Join' object provides the configuration for a table join.",
                    "items": {
                        "$ref": "#/definitions/Join"
                    }
                },
                "where": {
                    "type": "array",
                    "title": "The corresponding 'Where' collection.",
                    "description": "A 'Where' object provides the configuration for a table where clause.",
                    "items": {
                        "$ref": "#/definitions/Where"
                    }
                },
                "mappings": {
                    "type": "array",
                    "title": "The corresponding 'TableMapping' collection.",
                    "items": {
                        "$ref": "#/definitions/TableMapping"
                    }
                }
            },
            "required": [
                "name"
            ]
        },
        "Join": {
            "type": "object",
            "title": "'Join' object (database-driven)",
            "description": "The 'Join' object defines a join to another (or same) table within the logical CDC entity.  The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The unique name.",
                    "description": "A unique name is required where the same 'Table' is referenced more than once within a logical CDC entity. However, generally, this will represent the unique name of the table within the database."
                },
                "schema": {
                    "type": "string",
                    "title": "The schema name of the table to join.",
                    "description": "Defaults to 'Cdc.Schema'; i.e. same schema."
                },
                "table": {
                    "type": "string",
                    "title": "The name of the table to join.",
                    "description": "Defaults to 'Name'. This is used to specify the actual underlying database table name (required where the 'Name' has been changed to enable uniqueness)."
                },
                "alias": {
                    "type": "string",
                    "title": "The 'Schema' and 'Table' alias name.",
                    "description": "Will automatically default where not specified."
                },
                "type": {
                    "type": "string",
                    "title": "The SQL join type.",
                    "description": "Defaults to 'Cdc'. The 'Cdc' value indicates this is a related secondary table (within a logical CDC entity) that also has Change Data Capture turned on and equally needs to be monitored for changes.",
                    "enum": [
                        "Cdc",
                        "Inner",
                        "Left",
                        "Right",
                        "Full"
                    ]
                },
                "joinTo": {
                    "type": "string",
                    "title": "The name of the table to join to (must be previously specified).",
                    "description": "Defaults to parent 'Table.Name'."
                },
                "joinCardinality": {
                    "type": "string",
                    "title": "The join cardinality being whether there is a One-to-Many or One-to-One relationship.",
                    "description": "Defaults to 'OneToMany'. This represents the Parent ('JoinTo') to child (_this_) relationship.",
                    "enum": [
                        "OneToMany",
                        "OneToOne"
                    ]
                },
                "cdcEnable": {
                    "type": "boolean",
                    "title": "Indicates whether to enable 'Cdc' within the database for the tables that participate.",
                    "description": "Defaults to 'false'. This option can be overridden for each underlying table referenced."
                },
                "querySizeMultiplier": {
                    "type": "number",
                    "title": "The query size multiplier for the CDC-Join.",
                    "description": "Defaults to '1.0'. This is applied to the execute stored procedure '@MaxQuerySize' parameter to allow tailoring on the join query ('TOP') sizes to optimize selection. Must be greater than zero and less than or equal to 100."
                },
                "includeColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names to be included in the underlying generated output.",
                    "description": "Where not specified this indicates that all 'Columns' are to be included.",
                    "items": {
                        "type": "string"
                    }
                },
                "excludeColumns": {
                    "type": "array",
                    "title": "The list of 'Column' names to be excluded from the underlying generated output.",
                    "description": "Where not specified this indicates no 'Columns' are to be excluded.",
                    "items": {
                        "type": "string"
                    }
                },
                "aliasColumns": {
                    "type": "array",
                    "title": "The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column renaming.",
                    "description": "Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'",
                    "items": {
                        "type": "string"
                    }
                },
                "model": {
                    "type": "string",
                    "title": "The .NET model name.",
                    "description": "Defaults to 'Name'."
                },
                "property": {
                    "type": "string",
                    "title": "The .NET property name.",
                    "description": "Defaults to 'Model' where 'JoinCardinality' is 'OneToOne'; otherwise, it will be the 'Model' pluralized."
                },
                "includeColumnsOnDelete": {
                    "type": "array",
                    "title": "The list of 'Column' names that should be included (in addition to the primary key) for a logical delete.",
                    "description": "Where a column is not specified in this list its corresponding .NET property will be automatically cleared by the 'CdcDataOrchestrator' as the data is technically considered as non-existing.",
                    "items": {
                        "type": "string"
                    }
                },
                "excludeColumnsFromETag": {
                    "type": "array",
                    "title": "The list of 'Column' names that should be excluded from the generated ETag (used for the likes of duplicate send tracking).",
                    "description": "Defaults to 'CodeGeneration.CdcExcludeColumnsFromETag'.",
                    "items": {
                        "type": "string"
                    }
                },
                "identifierMapping": {
                    "type": "boolean",
                    "title": "Indicates whether to perform Identifier Mapping (mapping to 'GlobalId') for the primary key.",
                    "description": "This indicates whether to create a new 'GlobalId' property on the _entity_ to house the global mapping identifier to be the reference outside of the specific database realm as a replacement to the existing primary key column(s)."
                },
                "identifierName": {
                    "type": "string",
                    "title": "The JSON name for the 'GlobalId' property where 'IdentifierMapping' is 'true'. Defaults to 'globalId'.",
                    "description": "This indicates whether to create a new 'GlobalId' property on the _entity_ to house the global mapping identifier to be the reference outside of the specific database realm as a replacement to the existing primary key column(s)."
                },
                "on": {
                    "type": "array",
                    "title": "The corresponding 'JoinOn' collection.",
                    "items": {
                        "$ref": "#/definitions/JoinOn"
                    }
                },
                "mappings": {
                    "type": "array",
                    "title": "The corresponding 'JoinMapping' collection.",
                    "items": {
                        "$ref": "#/definitions/JoinMapping"
                    }
                }
            },
            "required": [
                "name"
            ]
        },
        "JoinOn": {
            "type": "object",
            "title": "'JoinOn' object (database-driven)",
            "description": "The 'JoinOn' object defines the join on characteristics for a 'Join' object.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The name of the join column (from the 'Join' table)."
                },
                "toColumn": {
                    "type": "string",
                    "title": "The name of the join to column.",
                    "description": "Defaults to 'Name'; i.e. assumes same name."
                },
                "toStatement": {
                    "type": "string",
                    "title": "The SQL statement for the join on bypassing the corresponding 'ToColumn' specification."
                }
            },
            "required": [
                "name"
            ]
        },
        "JoinMapping": {
            "type": "object",
            "title": "'JoinMapping' object (database-driven)",
            "description": "The 'JoinMapping' object defines one or more related table identifier mappings.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The name of of the existing column that requires identifier mapping."
                },
                "schema": {
                    "type": "string",
                    "title": "The schema name of the related table.",
                    "description": "Defaults to the owning (parent) table schema."
                },
                "table": {
                    "type": "string",
                    "title": "The name of the related table."
                }
            },
            "required": [
                "name",
                "table"
            ]
        },
        "Where": {
            "type": "object",
            "title": "'Where' object (database-driven)",
            "description": "This should only be used where the column value is largely immutable; otherwise, unintended side-effects may occur. _NTangle_ uses the condition explictily and does not attempt to handle value change to infer creation or deletion of data as a result of the underlying change; as such, this should be used cautiously. Note that the 'where' is applied when querying the 'cdc.fn_cdc_get_all_changes_...' function, not the underlying table itself.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The column name.",
                    "description": "The column name."
                },
                "nullable": {
                    "type": "string",
                    "title": "The where nullability clause operator",
                    "description": "This enables statements such as 'WHERE (COL IS NULL)' or 'WHERE (COL IS NULL OR COL = VALUE)' (where .",
                    "enum": [
                        "ISNULL",
                        "ISNOTNULL"
                    ]
                },
                "operator": {
                    "type": "string",
                    "title": "The where clause equality operator",
                    "description": "Defaults to 'EQ' where 'Value' is specified.",
                    "enum": [
                        "EQ",
                        "NE",
                        "LT",
                        "LE",
                        "GT",
                        "GE",
                        "LIKE"
                    ]
                },
                "value": {
                    "type": "string",
                    "title": "The comparison value",
                    "description": "This must be valid formatted/escaped SQL."
                }
            },
            "required": [
                "name"
            ]
        },
        "TableMapping": {
            "type": "object",
            "title": "'TableMapping' object (database-driven)",
            "description": "The 'TableMapping' object defines one or more related table identifier mappings.",
            "properties": {
                "name": {
                    "type": "string",
                    "title": "The name of of the existing column that requires identifier mapping."
                },
                "schema": {
                    "type": "string",
                    "title": "The schema name of the related table.",
                    "description": "Defaults to the owning (parent) table schema."
                },
                "table": {
                    "type": "string",
                    "title": "The name of the related table."
                }
            },
            "required": [
                "name",
                "table"
            ]
        }
    },
    "allOf": [
        {
            "$ref": "#/definitions/Root"
        }
    ]
}