<?xml version="1.0" encoding="utf-8"?>
<!--
    This schema is to validate Snowflake to Mysql migration XML files
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="StringType">
        <xs:restriction base="xs:string" />
    </xs:simpleType>

    <xs:simpleType name="InsertModeType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="insert" />
            <xs:enumeration value="upsert" />
            <xs:enumeration value="update" />
            <xs:enumeration value="delete" />
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="ColumnType">
        <xs:sequence>
            <xs:element name="name" type="StringType" minOccurs="1" maxOccurs="1" />
            <xs:element name="type" type="StringType" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="JsonSchemaType">
        <xs:sequence>
            <xs:element name="column" type="ColumnType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>

        <xs:attribute name="table-name" type="xs:string" use="required" />
        <xs:attribute name="primary-key" type="xs:string" use="required" />
        <xs:attribute name="insert-mode" type="InsertModeType" use="optional" />
    </xs:complexType>

    <xs:complexType name="PreconditionType">
        <xs:sequence>
            <xs:element name="sqlquery" type="StringType" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ChangesetType">
        <xs:sequence>
            <xs:element name="precondition" type="PreconditionType" minOccurs="1" maxOccurs="1" />
            <xs:element name="tableschema" type="JsonSchemaType" minOccurs="1" maxOccurs="1" />
        </xs:sequence>

        <xs:attribute name="id" type="xs:string" use="required" />
        <xs:attribute name="author" type="xs:string" use="required" />
        <xs:attribute name="snowflake-account" type="xs:string" use="optional" />
        <xs:attribute name="run-always" type="xs:boolean" use="optional" />
        <xs:attribute name="run-on-change" type="xs:boolean" use="optional" />
    </xs:complexType>

    <xs:element name="changelog">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="changeset" type="ChangesetType" minOccurs="1" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
        <xs:unique name="unique_id">
            <xs:selector xpath="changeset" />
            <xs:field xpath="@id" />
        </xs:unique>
    </xs:element>
</xs:schema>
