From f1daeb41e640b867015d605b86b8be69f8d89fa1 Mon Sep 17 00:00:00 2001 From: jurgen Date: Thu, 15 Oct 2015 15:48:09 +0000 Subject: [PATCH] Oracle NULL/NOT NULL alter fixed. Default value quotes fixed Former-commit-id: 9ecaba3fb9bfd066dccef85f254234f21b922eb0 --- .../oracle/edit/OracleTableColumnManager.java | 2 +- .../edit/struct/SQLTableColumnManager.java | 39 +++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/edit/OracleTableColumnManager.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/edit/OracleTableColumnManager.java index 2e8179a188..a3ac9a2b13 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/edit/OracleTableColumnManager.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/edit/OracleTableColumnManager.java @@ -52,7 +52,7 @@ public class OracleTableColumnManager extends SQLTableColumnManager { - void appendModifier(OBJECT_TYPE column, StringBuilder sql); + protected interface ColumnModifier { + void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command); } protected final ColumnModifier DataTypeModifier = new ColumnModifier() { @Override - public void appendModifier(OBJECT_TYPE column, StringBuilder sql) { + public void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command) { final String typeName = column.getTypeName(); final DBSDataType dataType = findDataType(column.getDataSource(), typeName); sql.append(' ').append(typeName); @@ -72,7 +73,7 @@ public abstract class SQLTableColumnManager NotNullModifier = new ColumnModifier() { @Override - public void appendModifier(OBJECT_TYPE column, StringBuilder sql) { + public void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command) { if (column.isRequired()) { sql.append(" NOT NULL"); //$NON-NLS-1$ } @@ -81,19 +82,41 @@ public abstract class SQLTableColumnManager NullNotNullModifier = new ColumnModifier() { @Override - public void appendModifier(OBJECT_TYPE column, StringBuilder sql) { + public void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command) { sql.append(column.isRequired() ? " NOT NULL" : " NULL"); } }; + protected final ColumnModifier NullNotNullModifierConditional = new ColumnModifier() { + @Override + public void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command) { + if (command instanceof DBECommandComposite) { + if (((DBECommandComposite) command).getProperty("required") == null) { + // Do not set NULL/NOT NULL if it wasn't chaged + return; + } + } + NullNotNullModifier.appendModifier(column, sql, command); + } + }; + protected final ColumnModifier DefaultModifier = new ColumnModifier() { @Override - public void appendModifier(OBJECT_TYPE column, StringBuilder sql) { + public void appendModifier(OBJECT_TYPE column, StringBuilder sql, DBECommandAbstract command) { String defaultValue = CommonUtils.toString(column.getDefaultValue()); if (!CommonUtils.isEmpty(defaultValue)) { - boolean useQuotes = false; + boolean useQuotes = + column.getDataKind() == DBPDataKind.STRING || + column.getDataKind() == DBPDataKind.DATETIME; + + if (useQuotes && defaultValue.trim().startsWith(QUOTE)) { + useQuotes = false; + } + sql.append(" DEFAULT "); //$NON-NLS-1$ + if (useQuotes) sql.append(QUOTE); sql.append(defaultValue); + if (useQuotes) sql.append(QUOTE); } } }; @@ -201,7 +224,7 @@ public abstract class SQLTableColumnManager