001package io.ebeaninternal.dbmigration.ddlgeneration.platform;
002
003import io.ebean.annotation.ConstraintMode;
004import io.ebean.config.dbplatform.DatabasePlatform;
005
006/**
007 * Oracle platform specific DDL.
008 */
009public class OracleDdl extends PlatformDdl {
010
011  public OracleDdl(DatabasePlatform platform) {
012    super(platform);
013    this.dropTableIfExists = "drop table ";
014    this.dropSequenceIfExists = "drop sequence ";
015    this.dropConstraintIfExists = "drop constraint";
016    this.dropIndexIfExists = "drop index ";
017    this.dropTableCascade = " cascade constraints purge";
018    this.alterColumn = "modify";
019    this.columnSetNotnull = "not null";
020    this.columnSetNull = "null";
021    this.columnSetDefault = "default";
022    this.identitySuffix = " generated by default as identity";
023  }
024
025  @Override
026  public String alterTableAddUniqueConstraint(String tableName, String uqName, String[] columns, String[] nullableColumns) {
027    if (nullableColumns == null || nullableColumns.length == 0) {
028      return super.alterTableAddUniqueConstraint(tableName, uqName, columns, nullableColumns);
029    } else {
030      // Hmm: https://stackoverflow.com/questions/11893134/oracle-create-unique-index-but-ignore-nulls
031      return "-- NOT YET IMPLEMENTED: " + super.alterTableAddUniqueConstraint(tableName, uqName, columns, nullableColumns);
032    }
033  }
034
035  @Override
036  protected void appendForeignKeyOnUpdate(StringBuilder buffer, ConstraintMode mode) {
037    // do nothing, no on update clause for oracle
038  }
039
040  @Override
041  protected void appendForeignKeyMode(StringBuilder buffer, String onMode, ConstraintMode mode) {
042    switch (mode) {
043      case SET_NULL:
044      case CASCADE:
045        super.appendForeignKeyMode(buffer, onMode, mode);
046      default:
047        // do nothing, defaults to RESTRICT effectively
048    }
049  }
050
051  /**
052   * Modify and return the column definition for autoincrement or identity definition.
053   */
054  @Override
055  public String asIdentityColumn(String columnDefn, DdlIdentity identity) {
056    return asIdentityStandardOptions(columnDefn, identity);
057  }
058
059}