<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
            http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <changeSet id="01-history-service-tables" author="riste.tutureski" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_history">
            <column name="cm_history_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_cm_history_id"/>
            </column>
            <column name="cm_history_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_object_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_start_date" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_end_date" type="${timestampType}">
                <constraints nullable="true"/>
            </column>
            <column name="cm_history_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addForeignKeyConstraint baseTableName="acm_history" baseColumnNames="cm_history_person_id" constraintName="fk_history_person_id"
            referencedTableName="acm_person" referencedColumnNames="cm_person_id" deferrable="${deferrable}"
            initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="01-history-service-tables" author="riste.tutureski" dbms="mysql">
        <createTable tableName="acm_history">
            <column name="cm_history_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_cm_history_id"/>
            </column>
            <column name="cm_history_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_object_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_start_date" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_end_date" type="${timestampType}">
                <constraints nullable="true"/>
            </column>
            <column name="cm_history_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_history_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addForeignKeyConstraint baseTableName="acm_history" baseColumnNames="cm_history_person_id" constraintName="fk_history_person_id"
            referencedTableName="acm_person" referencedColumnNames="cm_person_id" deferrable="${deferrable}"
            initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="02-history-service-change-nullable-value-object-id" author="riste.tutureski">
        <dropNotNullConstraint tableName="acm_history" columnName="cm_history_object_id" columnDataType="${fkIdType}"/>
    </changeSet>

    <changeSet id="03-history-service-add-person-type" author="riste.tutureski">
        <addColumn tableName="acm_history">
            <column name="cm_history_person_type" type="VARCHAR(1024)" afterColumn="cm_history_person_id"
                beforeColumn="cm_history_object_id">
                <constraints nullable="true"/>
            </column>
        </addColumn>
    </changeSet>
    <changeSet id="04-acm_history-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_history_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_history_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_history"></column>
        </insert>
    </changeSet>
    <changeSet id="05-change_cm_history_start_date" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_history" columnName="cm_history_start_date" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_history" columnName="cm_history_end_date" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_history" columnName="cm_history_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_history" columnName="cm_history_modified" newDataType="DATETIME"/>
    </changeSet>
</databaseChangeLog>