<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
  ~ Copyright 2016 Red Hat, Inc. and/or its affiliates
  ~ and other contributors as indicated by the @author tags.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<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 author="keycloak" id="1.9.2">

        <!-- Optimized as lookup user by email is often operation -->
        <createIndex indexName="IDX_USER_EMAIL" tableName="USER_ENTITY">
            <column name="EMAIL" type="VARCHAR(255)"/>
        </createIndex>

        <!-- Indexes for foreign keys are available by default on some RDBMS (for example MySQL) but not on some others (for example PostgreSQL), so explicitly creating them here -->
        <createIndex indexName="IDX_USER_ROLE_MAPPING" tableName="USER_ROLE_MAPPING">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_USER_GROUP_MAPPING" tableName="USER_GROUP_MEMBERSHIP">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_USER_CONSENT" tableName="USER_CONSENT">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_CONSENT_PROTMAPPER" tableName="USER_CONSENT_PROT_MAPPER">
            <column name="USER_CONSENT_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_CONSENT_ROLE" tableName="USER_CONSENT_ROLE">
            <column name="USER_CONSENT_ID" type="VARCHAR(36)"/>
        </createIndex>

        <createIndex indexName="IDX_USER_ATTRIBUTE" tableName="USER_ATTRIBUTE">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_USER_CREDENTIAL" tableName="CREDENTIAL">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_USER_REQACTIONS" tableName="USER_REQUIRED_ACTION">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>

        <createIndex indexName="IDX_FEDIDENTITY_USER" tableName="FEDERATED_IDENTITY">
            <column name="USER_ID" type="VARCHAR(36)"/>
        </createIndex>
        <createIndex indexName="IDX_FEDIDENTITY_FEDUSER" tableName="FEDERATED_IDENTITY">
            <column name="FEDERATED_USER_ID" type="VARCHAR(255)"/>
        </createIndex>

    </changeSet>
</databaseChangeLog>