<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="upperFunctionName" value="UPPER" dbms="oracle,mysql"/>
    <property name="upperFunctionName" value="upper" dbms="postgresql"/>

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

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

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

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

    <changeSet id="01-create-person-table" author="dmiller" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_person">
            <column name="cm_person_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_person"/>
            </column>
            <column name="cm_person_status" type="VARCHAR(128)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_given_name" type="VARCHAR(1024)">
                <constraints nullable="true"/>
            </column>
            <column name="cm_family_name" type="VARCHAR(1024)">
                <constraints nullable="true"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="01-create-person-table" author="dmiller" dbms="mysql">
        <createTable tableName="acm_person">
            <column name="cm_person_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_person"/>
            </column>
            <column name="cm_person_status" type="VARCHAR(128)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_given_name" type="VARCHAR(1024)">
                <constraints nullable="true"/>
            </column>
            <column name="cm_family_name" type="VARCHAR(1024)">
                <constraints nullable="true"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="01-create-person-table-indexes" author="nebojsha.davidovikj" dbms="oracle,postgresql">
        <createIndex tableName="acm_person" indexName="idx_person_family_name">
            <column name="${upperFunctionName}(cm_family_name)"/>
        </createIndex>
        <createIndex tableName="acm_person" indexName="idx_person_given_name">
            <column name="${upperFunctionName}(cm_given_name)"/>
        </createIndex>
    </changeSet>

    <changeSet id="03-add-title-and-company-columns" author="dmiller">
        <addColumn tableName="acm_person">
            <column name="cm_person_company_name" type="VARCHAR(1024)"/>
        </addColumn>
        <addColumn tableName="acm_person">
            <column name="cm_person_title" type="VARCHAR(256)"/>
        </addColumn>
    </changeSet>

    <changeSet id="04-add-security-tags" author="dmiller">
        <createTable tableName="acm_person_security_tag">
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_security_tag" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createIndex tableName="acm_person_security_tag" indexName="idx_person_sec_tag_person_id">
            <column name="cm_person_id"/>
        </createIndex>
    </changeSet>

    <changeSet id="05-add-person-address-table" author="dmiller">
        <createTable tableName="acm_person_postal_address">
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_address_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createIndex tableName="acm_person_postal_address" indexName="idx_person_addr_person_id">
            <column name="cm_person_id"/>
        </createIndex>
        <createIndex tableName="acm_person_postal_address" indexName="idx_person_addr_addr_id">
            <column name="cm_address_id"/>
        </createIndex>
    </changeSet>

    <changeSet id="06-add-person-contact-method-table" author="dmiller">
        <createTable tableName="acm_person_contact_method">
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_contact_method_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createIndex tableName="acm_person_contact_method" indexName="idx_person_cntct_person_id">
            <column name="cm_person_id"/>
        </createIndex>
        <createIndex tableName="acm_person_contact_method" indexName="idx_person_cntct_cntct_id">
            <column name="cm_contact_method_id"/>
        </createIndex>
    </changeSet>

    <changeSet id="08-add-cm-person-type-id" author="tsedalu">
        <addColumn tableName="acm_person">
            <column name="cm_person_type_id" type="VARCHAR(${cmValueLength})"/>
        </addColumn>
        <createIndex tableName="acm_person" indexName="idx_person_type_id">
            <column name="cm_person_type_id"/>
        </createIndex>
    </changeSet>
    <changeSet id="09-add-person-alias-type-tables" author="tsedalu" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_person_alias_type_lu">
            <column name="cm_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_alias_type"/>
            </column>
            <column name="cm_value" type="VARCHAR(${cmValueLength})">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_person_alias_type"/>
            </column>
            <column name="cm_order" type="NUMBER(32,0)">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_person_alias_type_order"/>
            </column>
            <column name="cm_status" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="09-add-person-alias-type-tables" author="tsedalu" dbms="mysql">
        <createTable tableName="acm_person_alias_type_lu">
            <column name="cm_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_alias_type"/>
            </column>
            <column name="cm_value" type="VARCHAR(${cmValueLength})">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_person_alias_type"/>
            </column>
            <column name="cm_order" type="NUMBER(32,0)">
                <constraints nullable="false" unique="true" uniqueConstraintName="uk_person_alias_type_order"/>
            </column>
            <column name="cm_status" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="10-add-person-alias-tables" author="tsedalu" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_person_alias">
            <column name="cm_person_alias_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_alias"/>
            </column>
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false" unique="false"/>
            </column>
            <column name="cm_person_alias_type" type="VARCHAR(${cmValueLength})">
                <constraints nullable="false" unique="false"/>
            </column>
            <column name="cm_person_alias_value" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>

    </changeSet>

    <changeSet id="10-add-person-alias-tables" author="tsedalu" dbms="mysql">
        <createTable tableName="acm_person_alias">
            <column name="cm_person_alias_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_alias"/>
            </column>
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false" unique="false"/>
            </column>
            <column name="cm_person_alias_type" type="VARCHAR(${cmValueLength})">
                <constraints nullable="false" unique="false"/>
            </column>
            <column name="cm_person_alias_value" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_alias_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>

    </changeSet>

    <changeSet id="11-modify-datatype-person-id" author="tsedalu">
        <modifyDataType tableName="acm_person_alias" columnName="cm_person_id" newDataType="${fkIdType}"/>
    </changeSet>

    <changeSet id="15-add-person-association-table" author="tsedalu" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_person_assoc">
            <column name="cm_person_associ_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_assoc"/>
            </column>
            <column name="cm_person_assoc_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_parent_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_person_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_parent_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_person_desc" type="VARCHAR(4000)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="15-add-person-association-table" author="tsedalu" dbms="mysql">
        <createTable tableName="acm_person_assoc">
            <column name="cm_person_associ_id" type="${idType}">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_person_assoc"/>
            </column>
            <column name="cm_person_assoc_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_parent_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_person_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_parent_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_person_desc" type="VARCHAR(4000)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_assoc_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="16-acm-person-add-person-attributes" author="dmiller">
        <addColumn tableName="acm_person">
            <column name="cm_person_date_of_birth" type="DATE"/>
            <column name="cm_person_height_inches" type="NUMBER(32,0)"/>
            <column name="cm_person_weight_pounds" type="NUMBER(32,0)"/>
            <column name="cm_person_hair_color" type="VARCHAR(256)"/>
            <column name="cm_person_eye_color" type="VARCHAR(256)"/>
        </addColumn>
    </changeSet>

    <changeSet id="17-acm-person-add-date-married" author="dmiller">
        <addColumn tableName="acm_person">
            <column name="cm_person_date_married" type="DATE"/>
        </addColumn>
    </changeSet>

    <changeSet id="17-rename-and-change-constraints-personAssoc-table" author="tsedalu">
        <renameColumn tableName="acm_person_assoc" oldColumnName="cm_person_associ_id" newColumnName="cm_person_assoc_id"
                      columnDataType="${fkIdType}"/>
        <dropNotNullConstraint tableName="acm_person_assoc" columnName="cm_person_assoc_person_desc" columnDataType="VARCHAR(4000)"/>
    </changeSet>

    <changeSet id="20-add-person-organization-table" author="tsedalu">
        <createTable tableName="acm_person_organization">
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_organization_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createIndex tableName="acm_person_organization" indexName="idx_person_org_person_id">
            <column name="cm_person_id"/>
        </createIndex>
        <createIndex tableName="acm_person_organization" indexName="idx_person_org_org_id">
            <column name="cm_organization_id"/>
        </createIndex>
    </changeSet>

    <changeSet id="23-add-column-into-personAssoc-table" author="tsedalu">
        <addColumn tableName="acm_person_assoc">
            <column name="cm_notes" type="VARCHAR(4000)"/>
        </addColumn>
    </changeSet>

    <changeSet id="acm-person-24-add-person-assoc-tag" author="dmiller">
        <createTable tableName="acm_person_assoc_tag">
            <column name="cm_person_assoc_id" type="${idType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_tag" type="VARCHAR(${cmTagLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addPrimaryKey tableName="acm_person_assoc_tag" columnNames="cm_person_assoc_id, cm_tag"/>
        <addForeignKeyConstraint baseTableName="acm_person_assoc_tag" baseColumnNames="cm_person_assoc_id"
                                 constraintName="fk_person_assoc_tag_assoc_id" referencedTableName="acm_person_assoc"
                                 referencedColumnNames="cm_person_assoc_id"
                                 deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="25-add-new-table-acm_person_identification" author="marst" dbms="oracle,postgresql,mssql">
        <createTable tableName="acm_person_identification">
            <column name="cm_person_identification_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_person_identification"/>
            </column>
            <column name="cm_person" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_id_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_id_number" type="VARCHAR(1024)"/>
            <column name="cm_id_issuer" type="VARCHAR(1024)"/>
            <column name="cm_year_issued" type="${timestampType}"/>

            <column name="cm_person_id_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_modified" type="${timestampType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <addForeignKeyConstraint baseTableName="acm_person_identification" baseColumnNames="cm_person" constraintName="fk_person_person_id"
                                 referencedTableName="acm_person" referencedColumnNames="cm_person_id" deferrable="${deferrable}"
                                 initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="25-add-new-table-acm_person_identification" author="marst" dbms="mysql">
        <createTable tableName="acm_person_identification">
            <column name="cm_person_identification_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_person_identification"/>
            </column>
            <column name="cm_person" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_id_type" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_id_number" type="VARCHAR(1024)"/>
            <column name="cm_id_issuer" type="VARCHAR(1024)"/>
            <column name="cm_year_issued" type="${timestampType}"/>

            <column name="cm_person_id_created" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_creator" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_person_id_modifier" type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <addForeignKeyConstraint baseTableName="acm_person_identification" baseColumnNames="cm_person" constraintName="fk_person_person_id"
                                 referencedTableName="acm_person" referencedColumnNames="cm_person_id" deferrable="${deferrable}"
                                 initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="26-acm_person-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_person_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_person_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_person"></column>
        </insert>
    </changeSet>
    <changeSet id="27-acm_person_alias_type_lu-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_person_alias_type_lu_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_person_alias_type_lu_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_person_alias_type_lu"></column>
        </insert>
    </changeSet>
    <changeSet id="28-acm_person_alias-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_person_alias_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_person_alias_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_person_alias"></column>
        </insert>
    </changeSet>
    <changeSet id="29-acm_person_assoc-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_person_assoc_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_person_assoc_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_person_assoc"></column>
        </insert>
    </changeSet>
    <changeSet id="29-acm_person_identification-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_person_identification_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_person_identification_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_person_identification"></column>
        </insert>
    </changeSet>

    <changeSet id="30-rename-person-identification" author="nebojsha.davidovikj" dbms="oracle,postgresql">
        <renameTable oldTableName="acm_person_identification" newTableName="acm_identification"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_identification_id" newColumnName="cm_identification_id"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_created" newColumnName="cm_created"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_creator" newColumnName="cm_creator"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_modified" newColumnName="cm_modified"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_modifier" newColumnName="cm_modifier"/>
        <!--rename ID generator -->
        <renameTable oldTableName="acm_person_identification_id" newTableName="acm_identification_id"/>
        <!--change value of the id generator-->
        <update tableName="acm_identification_id">
            <column name="cm_seq_name" value="acm_identification"/>
            <where>
                cm_seq_name = 'acm_person_identification'
            </where>
        </update>
        <!--create many to many relation table between person and identification, add primary key and unique constraints-->
        <createTable tableName="acm_person_identification">
            <column name="cm_person_id" type="${fkIdType}"/>
            <column name="cm_identification_id" type="${fkIdType}"/>
        </createTable>
        <addPrimaryKey tableName="acm_person_identification" columnNames="cm_person_id, cm_identification_id"/>
        <!-- copy all relations from acm_identification into relational table-->
        <sql>INSERT INTO acm_person_identification (cm_person_id, cm_identification_id) SELECT cm_person,
            cm_identification_id FROM acm_identification
        </sql>
        <!-- drop person column from acm_identification-->
        <dropColumn tableName="acm_identification" columnName="cm_person"/>
    </changeSet>

    <changeSet id="30-rename-person-identification" author="nebojsha.davidovikj" dbms="mysql">
        <renameTable oldTableName="acm_person_identification" newTableName="acm_identification"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_identification_id" newColumnName="cm_identification_id"
                      columnDataType="${fkIdType}"/>
        <sql>
            ALTER TABLE acm_identification
            CHANGE cm_person_id_created cm_created TIMESTAMP default CURRENT_TIMESTAMP;
        </sql>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_creator" newColumnName="cm_creator"
                      columnDataType="VARCHAR(1024)"/>
        <sql>
            ALTER TABLE acm_identification
            CHANGE cm_person_id_modified cm_modified TIMESTAMP default CURRENT_TIMESTAMP;
        </sql>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_modifier" newColumnName="cm_modifier"
                      columnDataType="VARCHAR(1024)"/>
        <!--rename ID generator -->
        <renameTable oldTableName="acm_person_identification_id" newTableName="acm_identification_id"/>
        <!--change value of the id generator-->
        <update tableName="acm_identification_id">
            <column name="cm_seq_name" value="acm_identification"/>
            <where>
                cm_seq_name = 'acm_person_identification'
            </where>
        </update>
        <!--create many to many relation table between person and identification, add primary key and unique constraints-->
        <createTable tableName="acm_person_identification">
            <column name="cm_person_id" type="${fkIdType}"/>
            <column name="cm_identification_id" type="${fkIdType}"/>
        </createTable>
        <addPrimaryKey tableName="acm_person_identification" columnNames="cm_person_id, cm_identification_id"/>
        <!-- copy all relations from acm_identification into relational table-->
        <sql>INSERT INTO acm_person_identification (cm_person_id, cm_identification_id) SELECT cm_person,
            cm_identification_id FROM acm_identification
        </sql>
        <!-- drop person column from acm_identification-->
        <dropForeignKeyConstraint baseTableName="acm_identification" constraintName="fk_person_person_id"/>
        <dropColumn tableName="acm_identification" columnName="cm_person"/>
    </changeSet>

    <changeSet id="30-1-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <renameTable oldTableName="acm_person_identification" newTableName="acm_identification"/>
    </changeSet>
    <changeSet id="30-2-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_identification_id" newColumnName="cm_identification_id"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_created" newColumnName="cm_created"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_creator" newColumnName="cm_creator"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_modified" newColumnName="cm_modified"/>
        <renameColumn tableName="acm_identification" oldColumnName="cm_person_id_modifier" newColumnName="cm_modifier"/>
    </changeSet>
    <changeSet id="30-3-rename-person-identification-mssql-" author="riste.tutureski" dbms="mssql">
        <!--rename ID generator -->
        <renameTable oldTableName="acm_person_identification_id" newTableName="acm_identification_id"/>
    </changeSet>
    <changeSet id="30-4-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <!--change value of the id generator-->
        <update tableName="acm_identification_id">
            <column name="cm_seq_name" value="acm_identification"/>
            <where>
                cm_seq_name = 'acm_person_identification'
            </where>
        </update>
    </changeSet>
    <changeSet id="30-5-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <!--create many to many relation table between person and identification, add primary key and unique constraints-->
        <createTable tableName="acm_person_identification">
            <column name="cm_person_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_identification_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
    <changeSet id="30-6-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <addPrimaryKey tableName="acm_person_identification" columnNames="cm_person_id, cm_identification_id"/>
    </changeSet>
    <changeSet id="30-7-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <!-- copy all relations from acm_identification into relational table-->
        <sql>INSERT INTO acm_person_identification (cm_person_id, cm_identification_id) SELECT cm_person,
            cm_identification_id FROM acm_identification
        </sql>
    </changeSet>
    <changeSet id="30-8-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <dropForeignKeyConstraint baseTableName="acm_identification" constraintName="fk_person_person_id"/>
    </changeSet>
    <changeSet id="30-9-rename-person-identification-mssql" author="riste.tutureski" dbms="mssql">
        <!-- drop person column from acm_identification-->
        <dropColumn tableName="acm_identification" columnName="cm_person"/>
    </changeSet>

    <changeSet id="35-person-add-class-name-column" author="nebojsha.davidovikj">
        <addColumn tableName="acm_person">
            <column name="cm_class_name" type="varchar(400)" defaultValue="com.armedia.acm.plugins.person.model.Person">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="36-1-acm-person-add-place-of-birth" author="lazo.lazarev">
        <addColumn tableName="acm_person">
            <column name="cm_place_of_birth" type="varchar(512)"/>
        </addColumn>
    </changeSet>

    <!-- adding discriminator column, needed for extensibility -->
    <changeSet id="36-2-acm-person-association-add-class-name-column" author="lazo.lazarev">
        <addColumn tableName="acm_person_assoc">
            <column name="cm_class_name" type="varchar(400)" defaultValue="com.armedia.acm.plugins.person.model.PersonAssociation">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="37-acm-person-add-middle-name" author="lazo.lazarev">
        <addColumn tableName="acm_person">
            <column name="cm_middle_name" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="38-acm-person-add-parent-title" author="john.faniyi">
        <addColumn tableName="acm_person">
            <column name="cm_person_parent_title" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="39-acm-person-assoc-add-parent-title" author="john.faniyi">
        <addColumn tableName="acm_person_assoc">
            <column name="cm_person_assoc_parent_title" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="40-acm-person-add-parent-title" author="john.faniyi">
        <dropColumn tableName="acm_person" columnName="cm_person_parent_title"/>
    </changeSet>

    <changeSet id="41-add-container-id-in-acm-person-table" author="nebojsha.davidovikj">
        <addColumn tableName="acm_person">
            <column name="cm_container_id" type="${fkIdType}">
                <constraints nullable="true"/>
            </column>
        </addColumn>
        <addColumn tableName="acm_person">
            <column name="cm_default_picture_id" type="${fkIdType}">
                <constraints nullable="true"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="42-acm_person-add-object_type-column" author="nebojsha.davidovikj">
        <addColumn tableName="acm_person">
            <column name="cm_object_type" type="VARCHAR(${cmObjectTypeLength})" defaultValue="PERSON">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="43-acm_person-add-columns-for-default-values" author="nebojsha.davidovikj">
        <addColumn tableName="acm_person">
            <column name="cm_default_phone" type="${fkIdType}"/>
            <column name="cm_default_email" type="${fkIdType}"/>
            <column name="cm_default_url" type="${fkIdType}"/>
            <column name="cm_default_address" type="${fkIdType}"/>
            <column name="cm_default_alias" type="${fkIdType}"/>
            <column name="cm_default_identification" type="${fkIdType}"/>
            <column name="cm_default_organization" type="${fkIdType}"/>
        </addColumn>
    </changeSet>

    <changeSet id="44-acm_person_alias-add-columns-description" author="nebojsha.davidovikj">
        <addColumn tableName="acm_person_alias">
            <column name="cm_description" type="VARCHAR(1024)"/>
        </addColumn>
    </changeSet>

    <changeSet id="45-add-details-columns-to-acm-person-table" author="dragan.simonovski">
        <addColumn tableName="acm_person">
            <column name="cm_details" type="CLOB">
                <constraints nullable="true"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="46-acm_person_delete-fk-constraint-default_organization" author="nebojsha.davidovikj">
        <preConditions onFail="MARK_RAN">
            <foreignKeyConstraintExists foreignKeyTableName="acm_person" foreignKeyName="fk_default_organization_assoc"/>
        </preConditions>
        <dropForeignKeyConstraint baseTableName="acm_person" constraintName="fk_default_organization_assoc"/>
    </changeSet>
    <changeSet id="46-acm_person_delete-column-default_organization" author="nebojsha.davidovikj">
        <preConditions onFail="MARK_RAN">
            <columnExists tableName="acm_person" columnName="cm_default_organization"/>
        </preConditions>
        <dropColumn tableName="acm_person" columnName="cm_default_organization"/>
    </changeSet>

    <changeSet id="47-add-person-restricted-flag" author="bojan.milenkoski">
        <addColumn tableName="acm_person">
            <column name="cm_person_restricted_flag" type="VARCHAR(32)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="48-change_cm_year_issued_type_to_date" author="aleksandar.bujaroski">
        <modifyDataType tableName="acm_identification" columnName="cm_year_issued" newDataType="DATE"/>
    </changeSet>

    <changeSet id="49-change_cm_person_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_person" columnName="cm_person_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_person" columnName="cm_person_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="50-change_cm_person_alias_type_lu_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_person_alias_type_lu" columnName="cm_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_person_alias_type_lu" columnName="cm_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="51-change_cm_person_assoc_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_person_assoc" columnName="cm_person_assoc_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_person_assoc" columnName="cm_person_assoc_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="52-change_cm_person_identification_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_identification" columnName="cm_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_identification" columnName="cm_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="53-add-ldap_user_id_assoc_with_person" author="ana.serafimoska">
        <addColumn tableName="acm_person">
            <column name="cm_ldap_user_id" type="VARCHAR(1024)"></column>
        </addColumn>
    </changeSet>

    <changeSet id="54-change-cm-person-alias-datetime" author="marija.blazhevska">
        <modifyDataType tableName="acm_person_alias" columnName="cm_person_alias_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_person_alias" columnName="cm_person_alias_modified" newDataType="DATETIME"/>
    </changeSet>

    <changeSet id="55-add-person-default-fax" author="aleksandar.acevski">
        <addColumn tableName="acm_person">
            <column name="cm_default_fax" type="${fkIdType}"/>
        </addColumn>
    </changeSet>

    <changeSet id="add-person-anonymous-flag" author="adrijana.maneva">
        <addColumn tableName="acm_person">
            <column name="cm_anonymous_flag" type="boolean" defaultValueBoolean="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="56-identification-add-class-name-column" author="riste.tutureski">
        <addColumn tableName="acm_identification">
            <column name="cm_class_name" type="varchar(400)" defaultValue="com.armedia.acm.plugins.person.model.Identification">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="57-create-index-on-person-assoc-parent-id" author="bojan.milenkoski">
        <createIndex tableName="acm_person_assoc" indexName="idx_person_assoc_person_assoc_parent_id">
            <column name="cm_person_assoc_parent_id"/>
        </createIndex>
    </changeSet>

</databaseChangeLog>
