<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">

    <property name="cmObjectTypeLength" value="1024" dbms="postgresql,oracle"/>
    <property name="cmObjectTypeLength" value="255" dbms="mysql,mssql"/>

    <property name="cmFileEcmIdLength" value="4000" dbms="postgresql,oracle"/>
    <property name="cmFileEcmIdLength" value="255" dbms="mysql,mssql"/>

    <property name="cmCmisFolderIdLength" value="1024" dbms="postgresql,oracle"/>
    <property name="cmCmisFolderIdLength" value="255" dbms="mysql,mssql"/>

    <property name="cmVersionSeriesIdLength" value="4000" dbms="postgresql,oracle"/>
    <property name="cmVersionSeriesIdLength" value="255" dbms="mysql,mssql"/>

    <changeSet id="01-create-file-table" author="dmiller" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_file">
            <column name="cm_file_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_file" nullable="false"/>
            </column>
            <column name="cm_file_status" type="VARCHAR(128)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_mime_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_ecm_id" type="VARCHAR(${cmFileEcmIdLength})">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_file_ecm_id"/>
            </column>
            <column name="cm_file_name" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="01-create-file-table" author="dmiller" dbms="mysql">
        <createTable tableName="acm_file">
            <column name="cm_file_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_file" nullable="false"/>
            </column>
            <column name="cm_file_status" type="VARCHAR(128)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_mime_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_ecm_id" type="VARCHAR(${cmFileEcmIdLength})">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_file_ecm_id"/>
            </column>
            <column name="cm_file_name" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="files-03-add-file-type-column" author="dmiller">
        <addColumn tableName="acm_file">
            <column name="cm_file_type" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="files-05-container-folder-table" author="dmiller" dbms="oracle,postgresql">
        <createTable tableName="acm_container_folder">
            <column name="cm_container_folder_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_container_folder"/>
            </column>
            <column name="cm_container_folder_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_type" type="VARCHAR(${cmObjectTypeLength})">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_folder_id" type="VARCHAR(${cmCmisFolderIdLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_object_id, cm_object_type"/>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_cmis_folder_id"/>
    </changeSet>

    <changeSet id="files-05-container-folder-table" author="dmiller" dbms="mysql">
        <createTable tableName="acm_container_folder">
            <column name="cm_container_folder_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_container_folder"/>
            </column>
            <column name="cm_container_folder_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_type" type="VARCHAR(${cmObjectTypeLength})">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_folder_id" type="VARCHAR(${cmCmisFolderIdLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_object_id, cm_object_type"/>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_cmis_folder_id"/>
    </changeSet>

    <changeSet id="files-05-container-folder-table-mssql" author="riste.tutureski" dbms="mssql">
        <createTable tableName="acm_container_folder">
            <column name="cm_container_folder_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_container_folder"/>
            </column>
            <column name="cm_container_folder_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_container_folder_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_type" type="VARCHAR(${cmObjectTypeLength})">
                <constraints nullable="false"/>
            </column>
            <column name="cm_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_folder_id" type="VARCHAR(${cmCmisFolderIdLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_object_id, cm_object_type"/>
        <addUniqueConstraint tableName="acm_container_folder" columnNames="cm_cmis_folder_id" constraintName="uq_cons_cm_cmis_folder_id"/>
    </changeSet>

    <changeSet id="files-09-rename-acm-container-folder" author="dmiller">
        <renameTable oldTableName="acm_container_folder" newTableName="acm_container"/>
    </changeSet>

    <changeSet id="files-10-add-acm-folder-table" author="dmiller" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_folder">
            <column name="cm_folder_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_folder"/>
            </column>
            <column name="cm_folder_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_folder_id" type="VARCHAR(${cmCmisFolderIdLength})">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_name" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_parent_folder_id" type="${fkIdType}">
                <constraints nullable="true" foreignKeyName="fk_folder_parent_id" referencedTableName="acm_folder"
                    referencedColumnNames="cm_folder_id" initiallyDeferred="${initially.deferred}" deferrable="${deferrable}"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="files-10-add-acm-folder-table" author="dmiller" dbms="mysql">
        <createTable tableName="acm_folder">
            <column name="cm_folder_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_folder"/>
            </column>
            <column name="cm_folder_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_folder_id" type="VARCHAR(${cmCmisFolderIdLength})">
                <constraints nullable="false"/>
            </column>
            <column name="cm_folder_name" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_parent_folder_id" type="${fkIdType}">
                <constraints nullable="true" foreignKeyName="fk_folder_parent_id" referencedTableName="acm_folder"
                    referencedColumnNames="cm_folder_id" initiallyDeferred="${initially.deferred}" deferrable="${deferrable}"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="files-12-update-acm-container-structure" author="dmiller" dbms="oracle,postgresql,mssql">
        <addColumn tableName="acm_container">
            <column name="cm_folder_id" type="${fkIdType}">
                <constraints foreignKeyName="fk_container_folder_id" referencedTableName="acm_folder" referencedColumnNames="cm_folder_id"
                    deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
            </column>
        </addColumn>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_id" newColumnName="cm_container_id"
            columnDataType="${fkIdType}"/>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_created" newColumnName="cm_container_created"
            columnDataType="${timestampType}"/>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_creator" newColumnName="cm_container_creator"
            columnDataType="VARCHAR(1024)"/>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_modified" newColumnName="cm_container_modified"
            columnDataType="${timestampType}"/>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_modifier" newColumnName="cm_container_modifier"
            columnDataType="VARCHAR(1024)"/>
        <dropPrimaryKey tableName="acm_container" constraintName="pk_container_folder"/>
        <addPrimaryKey tableName="acm_container" columnNames="cm_container_id" constraintName="pk_container"/>
    </changeSet>

    <changeSet id="files-12-update-acm-container-structure" author="dmiller" dbms="mysql">
        <addColumn tableName="acm_container">
            <column name="cm_folder_id" type="${fkIdType}">
                <constraints foreignKeyName="fk_container_folder_id" referencedTableName="acm_folder" referencedColumnNames="cm_folder_id"
                    deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
            </column>
        </addColumn>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_id" newColumnName="cm_container_id"
            columnDataType="${fkIdType}"/>
        <sql>
            ALTER TABLE acm_container
            CHANGE cm_container_folder_created cm_container_created TIMESTAMP default CURRENT_TIMESTAMP;
        </sql>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_creator" newColumnName="cm_container_creator"
            columnDataType="VARCHAR(1024)"/>
        <sql>
            ALTER TABLE acm_container
            CHANGE cm_container_folder_modified cm_container_modified TIMESTAMP default CURRENT_TIMESTAMP;
        </sql>
        <renameColumn tableName="acm_container" oldColumnName="cm_container_folder_modifier" newColumnName="cm_container_modifier"
            columnDataType="VARCHAR(1024)"/>
        <dropPrimaryKey tableName="acm_container" constraintName="pk_container_folder"/>
        <addPrimaryKey tableName="acm_container" columnNames="cm_container_id" constraintName="pk_container"/>
    </changeSet>

    <changeSet id="files-14-make-container-folder-id-required" author="dmiller">
        <addNotNullConstraint tableName="acm_container" columnName="cm_folder_id" columnDataType="${fkIdType}"/>
    </changeSet>

    <changeSet id="files-15-add-acm-file-version" author="dmiller" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_file_version">
            <column name="cm_file_version_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_file_version"/>
            </column>
            <column name="cm_file_id" type="${fkIdType}">
                <constraints nullable="false" foreignKeyName="fk_file_version_file_id" referencedTableName="acm_file"
                    referencedColumnNames="cm_file_id" deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
            </column>
            <column name="cm_file_version_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_version_tag" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_object_id" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="files-15-add-acm-file-version" author="dmiller" dbms="mysql">
        <createTable tableName="acm_file_version">
            <column name="cm_file_version_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_file_version"/>
            </column>
            <column name="cm_file_id" type="${fkIdType}">
                <constraints nullable="false" foreignKeyName="fk_file_version_file_id" referencedTableName="acm_file"
                    referencedColumnNames="cm_file_id" deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
            </column>
            <column name="cm_file_version_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_version_tag" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_cmis_object_id" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="files-17-update-acm-file-structure" author="dmiller">
        <renameColumn tableName="acm_file" oldColumnName="cm_file_ecm_id" newColumnName="cm_version_series_id"
            columnDataType="VARCHAR(${cmVersionSeriesIdLength})"/>
        <addColumn tableName="acm_file">
            <column name="cm_folder_id" type="${fkIdType}">
                <constraints foreignKeyName="fk_file_folder_id" referencedTableName="acm_folder" referencedColumnNames="cm_folder_id"
                    deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
            </column>
            <column name="cm_file_active_version_tag" type="VARCHAR(1024)" defaultValue="1.0">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_category" type="VARCHAR(128)"/>
        </addColumn>
        <dropUniqueConstraint tableName="acm_file" constraintName="uk_file_ecm_id"/>
        <addUniqueConstraint tableName="acm_file" columnNames="cm_version_series_id" constraintName="uk_version_series_id"/>
    </changeSet>

    <!-- need to fix the unique key on acm_file before inserting the files from cases where those
         files are also in a complaint -->
    <changeSet id="files-23-unique-key-on-file-and-folder" author="dmiller" dbms="${excludeMSSQL}">
        <dropUniqueConstraint tableName="acm_file" constraintName="uk_version_series_id"/>
        <addUniqueConstraint tableName="acm_file" columnNames="cm_version_series_id, cm_folder_id" constraintName="uk_file_folder"/>
    </changeSet>

    <!-- finally time to make cm_folder_id required -->
    <changeSet id="files-26-make-folder-id-required" author="dmiller">
        <addNotNullConstraint tableName="acm_file" columnName="cm_folder_id" columnDataType="${fkIdType}"/>
    </changeSet>

    <changeSet id="files-26-1-unique-key-on-file-and-folder-mssql" author="riste.tutureski" dbms="mssql">
        <dropUniqueConstraint tableName="acm_file" constraintName="uk_version_series_id"/>
        <addUniqueConstraint tableName="acm_file" columnNames="cm_version_series_id, cm_folder_id" constraintName="uk_file_folder"/>
    </changeSet>

    <changeSet id="files-27-make-folder-id-unique" author="dmiller">
        <addUniqueConstraint tableName="acm_folder" columnNames="cm_cmis_folder_id"/>
    </changeSet>

    <changeSet id="files-28-add-container-id-to-file" author="dmiller">
        <addColumn tableName="acm_file">
            <column name="cm_container_id" type="${fkIdType}">
                <constraints foreignKeyName="fk_file_container_id" referencedTableName="acm_container"
                    referencedColumnNames="cm_container_id" initiallyDeferred="${initially.deferred}" deferrable="${deferrable}"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="files-30-make-file-container-id-required" author="dmiller">
        <addNotNullConstraint tableName="acm_file" columnName="cm_container_id" columnDataType="${fkIdType}"/>
    </changeSet>

    <changeSet id="files-31-add-container-title" author="dmiller">
        <addColumn tableName="acm_container">
            <column name="cm_object_title" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="files-36-make-object-title-required" author="dmiller">
        <addNotNullConstraint tableName="acm_container" columnName="cm_object_title" columnDataType="VARCHAR(1024)"/>
    </changeSet>

    <changeSet id="files-37-add-calendar-folder-id-case-file-table-new" author="nebojsha.davidovikj">
        <addColumn tableName="acm_container">
            <column name="cm_outlook_folder_id" type="VARCHAR(255)"/>
        </addColumn>
    </changeSet>

    <changeSet id="files-38-add-attachment-folder-id-in-container-table" author="riste.tutureski">
        <addColumn tableName="acm_container">
            <column name="cm_attachment_folder_id" type="${fkIdType}">
                <constraints nullable="true"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="files-38-add-function-based-index" author="marst">
        <preConditions onFail="MARK_RAN">
            <dbms type="oracle"/>
        </preConditions>
        <createIndex tableName="acm_folder" indexName="idx_folder_name_parent_id" unique="true">
            <column name="NVL(cm_parent_folder_id, cm_folder_id),upper(cm_folder_name)"></column>
        </createIndex>
    </changeSet>

    <changeSet id="files-39-add-object-type-in-acm-folder-table" author="dmiller">
        <addColumn tableName="acm_folder">
            <column name="cm_object_type" type="VARCHAR(100)" defaultValue="FOLDER">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="files-40-add-folder-status-in-acm-folder-table" author="dmiller">
        <addColumn tableName="acm_folder">
            <column name="cm_folder_status" type="VARCHAR(100)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="41-acm_file-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_file_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_file_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_file"></column>
        </insert>
    </changeSet>
    <changeSet id="42-acm_container_folder-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_container_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_container_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_container"></column>
        </insert>
    </changeSet>
    <changeSet id="43-acm_folder-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_folder_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_folder_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_folder"></column>
        </insert>
    </changeSet>
    <changeSet id="44-acm_file_version-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_file_version_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_file_version_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_file_version"></column>
        </insert>
    </changeSet>
    <changeSet id="45-acm_file-add-page_count" author="ilinpetar">
        <addColumn tableName="acm_file">
            <column name="cm_page_count" type="INTEGER"></column>
        </addColumn>
    </changeSet>

    <changeSet id="46-acm_file-add-file_source" author="riste.tutureski">
        <addColumn tableName="acm_file">
            <column name="cm_file_source" type="VARCHAR(255)"/>
        </addColumn>
    </changeSet>

    <changeSet id="47-acm_file-add-security_field-column" author="dragan.simonovski">
        <addColumn tableName="acm_file">
            <column name="cm_security_field" type="VARCHAR(255)" defaultValue="Open"/>
        </addColumn>
    </changeSet>

    <changeSet id="48-acm_file-add-object-type" author="riste.tutureski">
        <addColumn tableName="acm_file">
            <column name="cm_object_type" type="VARCHAR(255)" defaultValue="FILE"/>
        </addColumn>
    </changeSet>

    <changeSet id="49-acm_file-add-legacy_system-columns" author="riste.tutureski">
        <addColumn tableName="acm_file">
            <column name="cm_legacy_system_id" type="VARCHAR(255)"/>
        </addColumn>
    </changeSet>

    <changeSet id="50-acm_file-add-class-name" author="joseph.mcgrady">
        <addColumn tableName="acm_file">
            <column name="cm_class_name" type="VARCHAR(400)"></column>
        </addColumn>
    </changeSet>

    <changeSet id="51-acm_file-add-not-null-and-default-to-class-name" author="joseph.mcgrady">
        <addDefaultValue tableName="acm_file" columnName="cm_class_name" columnDataType="VARCHAR(400)"
            defaultValue="com.armedia.acm.plugins.ecm.model.EcmFile"/>
        <addNotNullConstraint tableName="acm_file" columnName="cm_class_name" columnDataType="VARCHAR(400)"
            defaultNullValue="com.armedia.acm.plugins.ecm.model.EcmFile"/>
    </changeSet>

    <changeSet id="52-acm_file-update-structure" author="sasko.tanaskoski">
        <addColumn tableName="acm_file_version">
            <column name="cm_file_version_mime_type" type="VARCHAR(1024)" defaultValue="MIMETYPE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_file_version_name_extension" type="VARCHAR(255)"/>
        </addColumn>
    </changeSet>

    <changeSet id="53-acm_file-add-file-lang-column" author="marko.stojanoski" dbms="mysql">
        <addColumn tableName="acm_file">
            <column name="cm_file_lang" type="TEXT"></column>
        </addColumn>
    </changeSet>

    <changeSet id="53-acm_file-add-file-lang-column" author="marko.stojanoski" dbms="oracle,postgresql,mssql">
        <addColumn tableName="acm_file">
            <column name="cm_file_lang" type="VARCHAR(255)"></column>
        </addColumn>
    </changeSet>

    <changeSet id="53-acm_file-add-description-column" author="dragan.simonovski">
        <addColumn tableName="acm_file">
            <column name="cm_file_description" type="VARCHAR(1024)">
                <constraints nullable="true"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="54-ecm-file-media-columns" author="dmiller">
        <addColumn tableName="acm_file_version">
            <column name="cm_media_gps_iso_6709" type="VARCHAR(255)"/>
            <column name="cm_media_gps_latitude_degrees" type="${gpsLatLong}"/>
            <column name="cm_media_gps_longitude_degrees" type="${gpsLatLong}"/>
            <column name="cm_media_gps_readable" type="VARCHAR(255)"/>
            <column name="cm_media_created_date" type="${timestampType}"/>
            <column name="cm_media_height_pixels" type="INTEGER"/>
            <column name="cm_media_width_pixels" type="INTEGER"/>
            <column name="cm_media_camera_make" type="VARCHAR(255)"/>
            <column name="cm_media_camera_model" type="VARCHAR(255)"/>
            <column name="cm_media_vid_duration_seconds" type="${duration}"/>
        </addColumn>
    </changeSet>

    <changeSet id="55-more-ecm-file-media-columns" author="dmiller">
        <addColumn tableName="acm_file_version">
            <column name="cm_file_size_bytes" type="${idType}"/>
        </addColumn>
        <renameColumn tableName="acm_file_version" oldColumnName="cm_media_camera_make" newColumnName="cm_media_device_make"
            columnDataType="VARCHAR(255)"/>
        <renameColumn tableName="acm_file_version" oldColumnName="cm_media_camera_model" newColumnName="cm_media_device_model"
            columnDataType="VARCHAR(255)"/>
        <renameColumn tableName="acm_file_version" oldColumnName="cm_media_vid_duration_seconds" newColumnName="cm_media_duration_seconds"
            columnDataType="${duration}"/>
    </changeSet>

    <changeSet id="56-acm_file-add-organization-assoc-column" author="riste.tutureski">
        <addColumn tableName="acm_file">
            <column name="cm_file_organization_association" type="${idType}"/>
        </addColumn>
    </changeSet>

    <changeSet id="57-acm_file-add-person-assoc-column" author="riste.tutureski">
        <addColumn tableName="acm_file">
            <column name="cm_file_person_association" type="${idType}"/>
        </addColumn>
    </changeSet>

    <changeSet id="58-acm_container-add-outlook-folder-recreated-column" author="lazo.lazarev" dbms="mysql">
        <addColumn tableName="acm_container">
            <column name="cm_outlook_folder_recreated" type="BOOLEAN" defaultValueBoolean="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="58-acm_container-add-outlook-folder-recreated-column" author="lazo.lazarev" dbms="oracle,postgresql,mssql">
        <addColumn tableName="acm_container">
            <column name="cm_outlook_folder_recreated" type="BOOLEAN" defaultValueBoolean="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>
    <changeSet id="59-acm_file_change_description_type" author="wazir.shpoon">
        <modifyDataType tableName="acm_file" columnName="cm_file_description" newDataType="CLOB"/>
    </changeSet>

    <changeSet id="59-add-folder-restricted-flag" author="bojan.milenkoski">
        <addColumn tableName="acm_folder">
            <column name="cm_folder_restricted_flag" type="VARCHAR(32)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="60-add-file-restricted-flag" author="bojan.milenkoski">
        <addColumn tableName="acm_file">
            <column name="cm_file_restricted_flag" type="VARCHAR(32)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <!-- Added discriminator column needed for entity extension -->
    <changeSet id="61-add-file-version-class-name-column" author="marko.stojanoski">
        <addColumn tableName="acm_file_version">
            <column name="cm_class_name" type="VARCHAR(400)"/>
        </addColumn>
    </changeSet>

    <changeSet id="62-update-ecm-file-class-name-where-null" author="ivana.shekerova">
        <update tableName="acm_file_version">
            <column name="cm_class_name" value="com.armedia.acm.plugins.ecm.model.EcmFileVersion"/>
            <where>cm_class_name is null</where>
        </update>
    </changeSet>

    <changeSet id="63-add-file-version-searchable-pdf-column" author="vladimir.cherepnalkovski">
        <addColumn tableName="acm_file_version">
            <column name="cm_file_version_searchable_pdf" type="VARCHAR(5)" defaultValue="false"/>
        </addColumn>
    </changeSet>

    <changeSet id="64-create-recycle-bin-table" author="darko.dimitrievski">
        <createTable tableName="acm_recycle_bin_item">
            <column name="cm_rb_item_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_recycle_bin"/>
            </column>
            <column name="cm_source_object_id" type="${idType}">
                <constraints nullable="true"/>
            </column>
            <column name="cm_source_object_type" type="VARCHAR(255)">
                <constraints nullable="true"/>
            </column>
            <column name="cm_source_folder_id" type="${idType}">
                <constraints nullable="true"/>
            </column>
            <column name="cm_source_cmis_repository_id" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_rb_item_container_id" type="${idType}">
                <constraints nullable="true"/>
            </column>
            <column name="cm_rb_item_creator" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_rb_item_modifier" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_rb_item_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_rb_item_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_rb_class_name" type="VARCHAR(400)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="65-create-recycle-bin-id-table" author="darko.dimitrievski">
        <createTable tableName="acm_recycle_bin_item_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_recycle_bin_item_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_recycle_bin_item"></column>
        </insert>
    </changeSet>

    <changeSet id="66-add-file-restricted-flag" author="aleksandar.bujaroski">
        <addColumn tableName="acm_file">
            <column name="cm_file_is_link" type="VARCHAR(32)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
        <createIndex tableName="acm_file" indexName="idx_cm_file_is_link">
            <column name="cm_file_is_link"/>
        </createIndex>
    </changeSet>

    <changeSet id="files-67-allow-link-of-file-in-same-folder" author="aleksandar.bujaroski">
        <dropUniqueConstraint tableName="acm_file" constraintName="uk_file_folder"/>
        <addUniqueConstraint tableName="acm_file" columnNames="cm_version_series_id, cm_folder_id, cm_file_is_link"
            constraintName="uk_file_folder_link"/>
    </changeSet>

    <changeSet id="68-add-folder-link-flag" author="martin.jovanovski">
        <addColumn tableName="acm_folder">
            <column name="cm_folder_is_link" type="VARCHAR(32)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="folder-69-allow-folder-link" author="martin.jovanovski">
        <addUniqueConstraint tableName="acm_folder" columnNames="cm_cmis_folder_id, cm_parent_folder_id"
                             constraintName="deny_same_cmis_folder_id"/>
    </changeSet>

    <changeSet id="folder-70-allow-folder-link" author="martin.jovanovski">
        <dropUniqueConstraint tableName="acm_folder" constraintName="cm_cmis_folder_id"/>
        <dropUniqueConstraint tableName="acm_folder" constraintName="deny_same_cmis_folder_id"/>
        <addUniqueConstraint tableName="acm_folder" columnNames="cm_cmis_folder_id, cm_folder_is_link"
                             constraintName="allow_folder_link"/>
    </changeSet>

    <changeSet id="folder-71-allow-folder-link" author="aleksandar.acevski">
        <dropUniqueConstraint tableName="acm_folder" constraintName="allow_folder_link"/>
        <addUniqueConstraint tableName="acm_folder" columnNames="cm_cmis_folder_id, cm_parent_folder_id"
                             constraintName="disallow_folder_link"/>
    </changeSet>

    <changeSet id="files-72-add-filehash-column" author="martin.jovanovski">
        <addColumn tableName="acm_file_version">
            <column name="cm_file_hash" type="VARCHAR(255)"/>
        </addColumn>
        <createIndex tableName="acm_file_version" indexName="idx_file_hash">
            <column name="cm_file_hash"/>
        </createIndex>
    </changeSet>

    <changeSet id="files-73-add-is-duplicate" author="martin.jovanovski">
        <addColumn tableName="acm_file">
            <column name="cm_file_is_duplicate" type="VARCHAR(32)" defaultValue="false"/>
        </addColumn>
    </changeSet>

    <changeSet id="files-74-add-custodian" author="aleksandar.acevski">
        <addColumn tableName="acm_file">
            <column name="cm_custodian" type="VARCHAR(255)" />
        </addColumn>
    </changeSet>

    <changeSet id="files-75-add-zylab-file-metadata" author="aleksandar.acevski">
        <addColumn tableName="acm_file">
            <column name="cm_zylab_file_metadata" type="${fkIdType}"/>
        </addColumn>
    </changeSet>

    <changeSet id="76-change_cm_file_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_file" columnName="cm_file_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_file" columnName="cm_file_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="77-change_cm_container_folder_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_container" columnName="cm_container_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_container" columnName="cm_container_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="78-change_cm_folder_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_folder" columnName="cm_folder_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_folder" columnName="cm_folder_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="79-change_cm_folder_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_file_version" columnName="cm_file_version_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_file_version" columnName="cm_file_version_modified" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_file_version" columnName="cm_media_created_date" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="80-change_cm_recycle_bin_item_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_recycle_bin_item" columnName="cm_rb_item_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_recycle_bin_item" columnName="cm_rb_item_modified" newDataType="DATETIME"/>
    </changeSet>
    
    <changeSet id="81_add_column_cm_file_version_valid_file" author="kella.vivek">
        <addColumn tableName="acm_file_version">
            <column name="cm_file_version_valid_file" type="VARCHAR(5)"/>
        </addColumn>
    </changeSet>
    <changeSet id="82_add_default_value_true_to_cm_file_version_valid_file_column" author="kella.vivek">
        <addDefaultValue columnName="cm_file_version_valid_file" tableName="acm_file_version" defaultValue="true"/>
    </changeSet>

    <changeSet id="83-change-character-set-to-filename" author="ivan.tasevski" dbms="mysql">
        <sql>
            ALTER TABLE acm_file MODIFY COLUMN cm_file_name VARCHAR(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
        </sql>
    </changeSet>
</databaseChangeLog>

