<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-create-note-table" author="manoj" dbms="mysql,mssql">
        <createTable tableName="acm_note">
            <column name="cm_note_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_note"/>
            </column>

            <column name="cm_note_text" type="VARCHAR(4000)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_note_creator" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_note_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>

            <column name="cm_parent_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>

            <column name="cm_parent_object_type" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <createIndex tableName="acm_note" indexName="idx_parent_object_id">
            <column name="cm_parent_object_id"/>
        </createIndex>

    </changeSet>

    <changeSet id="01-create-note-table" author="manoj" dbms="oracle,postgres">
        <createTable tableName="acm_note">
            <column name="cm_note_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_note"/>
            </column>

            <column name="cm_note_text" type="VARCHAR(4000)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_note_creator" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>

            <column name="cm_note_created" type="${timestampType}">
                <constraints nullable="false"/>
            </column>

            <column name="cm_parent_object_id" type="${fkIdType}">
                <constraints nullable="false"/>
            </column>

            <column name="cm_parent_object_type" type="VARCHAR(128)">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <createIndex tableName="acm_note" indexName="idx_note_parent_object_id">
            <column name="cm_parent_object_id"/>
        </createIndex>

    </changeSet>

    <changeSet id="02-note-table-add-type-column" author="riste.tutureski">
        <addColumn tableName="acm_note">
            <column name="cm_note_type" afterColumn="cm_note_text" beforeColumn="cm_note_creator" defaultValue="GENERAL"
                type="VARCHAR(1024)">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="03-acm_note-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_note_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_note_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_note"></column>
        </insert>
    </changeSet>

    <changeSet id="04-acm_note_tag" author="dragan.simonovski">
        <addColumn tableName="acm_note">
            <column name="cm_note_tag" type="varchar(1000)"></column>
        </addColumn>
    </changeSet>

    <changeSet id="05-acm_note-add-modified-and-modifier" author="ilinpetar">
        <addColumn tableName="acm_note">
            <column name="cm_note_modified" type="${timestampType}" defaultValueComputed="${timestampFunction}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_note_modifier" type="VARCHAR(1024)" defaultValue="SYSTEM">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="06-acm_note-add-parent-title" author="johnfaniyi">
        <addColumn tableName="acm_note">
            <column name="cm_parent_object_title" type="VARCHAR(1024)"></column>
        </addColumn>
    </changeSet>

    <changeSet id="06-acm_note-add-author" author="manoj.dhungana">
        <addColumn tableName="acm_note">
            <column name="cm_note_author" type="VARCHAR(128)"/>
        </addColumn>
        <sql>UPDATE acm_note SET cm_note_author=cm_note_creator</sql>
    </changeSet>

    <changeSet id="07-acm_note-set-created-date-default-value" author="matt.reese" dbms="mysql">
        <sql>ALTER TABLE acm_note MODIFY cm_note_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP</sql>
    </changeSet>

    <!-- adding discriminator column for oracle,postgresql,mssql ... need for extensibility -->
    <changeSet id="08-acm_note-add-class-name" author="riste.tutureski" dbms="oracle,postgresql,mssql">
        <addColumn tableName="acm_note">
            <column name="cm_class_name" type="VARCHAR(512)"/>
        </addColumn>
    </changeSet>
    <!-- adding discriminator column for mysql ... need for extensibility -->
    <changeSet id="08-acm_note-add-class-name" author="riste.tutureski" dbms="mysql">
        <addColumn tableName="acm_note">
            <column name="cm_class_name" type="TEXT"/>
        </addColumn>
    </changeSet>

    <changeSet id="09-change_cm_note_datetime" author="mario.gjurcheski" dbms="mysql">
        <modifyDataType tableName="acm_note" columnName="cm_note_created" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_note" columnName="cm_note_modified" newDataType="DATETIME"/>
    </changeSet>

</databaseChangeLog>
