001package io.ebeaninternal.dbmigration.ddlgeneration;
002
003import io.ebean.config.dbplatform.DatabasePlatform;
004import io.ebeaninternal.dbmigration.ddlgeneration.platform.ClickHouseDdl;
005import io.ebeaninternal.dbmigration.ddlgeneration.platform.CockroachDdl;
006import io.ebeaninternal.dbmigration.ddlgeneration.platform.DB2Ddl;
007import io.ebeaninternal.dbmigration.ddlgeneration.platform.H2Ddl;
008import io.ebeaninternal.dbmigration.ddlgeneration.platform.HanaColumnStoreDdl;
009import io.ebeaninternal.dbmigration.ddlgeneration.platform.HsqldbDdl;
010import io.ebeaninternal.dbmigration.ddlgeneration.platform.MariaDbDdl;
011import io.ebeaninternal.dbmigration.ddlgeneration.platform.MySqlDdl;
012import io.ebeaninternal.dbmigration.ddlgeneration.platform.NuoDbDdl;
013import io.ebeaninternal.dbmigration.ddlgeneration.platform.OracleDdl;
014import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
015import io.ebeaninternal.dbmigration.ddlgeneration.platform.Postgres9Ddl;
016import io.ebeaninternal.dbmigration.ddlgeneration.platform.PostgresDdl;
017import io.ebeaninternal.dbmigration.ddlgeneration.platform.SQLiteDdl;
018import io.ebeaninternal.dbmigration.ddlgeneration.platform.SqlServerDdl;
019
020/**
021 * Builds platform specific DDL handler.
022 */
023public class PlatformDdlBuilder {
024
025  /**
026   * Return platform specific DDL handler.
027   */
028  public static PlatformDdl create(DatabasePlatform platform) {
029
030    switch (platform.getPlatform()) {
031      case H2:
032        return new H2Ddl(platform);
033      case DB2:
034        return new DB2Ddl(platform);
035      case MARIADB:
036        return new MariaDbDdl(platform);
037      case MYSQL55:
038      case MYSQL:
039        return new MySqlDdl(platform);
040      case HSQLDB:
041        return new HsqldbDdl(platform);
042      case NUODB:
043        return new NuoDbDdl(platform);
044      case ORACLE:
045      case ORACLE11:
046        return new OracleDdl(platform);
047      case SQLITE:
048        return new SQLiteDdl(platform);
049      case POSTGRES9:
050        return new Postgres9Ddl(platform);
051      case POSTGRES:
052        return new PostgresDdl(platform);
053      case COCKROACH:
054        return new CockroachDdl(platform);
055      case SQLSERVER16:
056      case SQLSERVER17:
057      case SQLSERVER:
058        return new SqlServerDdl(platform);
059      case HANA:
060        return new HanaColumnStoreDdl(platform);
061      case CLICKHOUSE:
062        return new ClickHouseDdl(platform);
063      default:
064        return new PlatformDdl(platform);
065    }
066  }
067}