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}