diff options
3 files changed, 50 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java index 3bd14d1340..6f22ca9faa 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java @@ -77,7 +77,7 @@ public class DBStore extends Store implements IDBStore, IMappingConstants, CDOAl { public static final String TYPE = "db"; //$NON-NLS-1$ - public static final int SCHEMA_VERSION = 3; + public static final int SCHEMA_VERSION = 4; private static final int FIRST_START = -1; @@ -956,8 +956,31 @@ public class DBStore extends Store implements IDBStore, IMappingConstants, CDOAl } }; + private static final SchemaMigrator NULLABLE_COLUMNS_MIGRATION = new SchemaMigrator() + { + @Override + public void migrateSchema(DBStore store, final Connection connection) throws Exception + { + IDBAdapter dbAdapter = store.getDBAdapter(); + IDBSchema schema = DBUtil.createSchema("MIGRATION"); + IDBField field1 = schema.addTable(null).addField(null, null); + + Statement statement = null; + + try + { + statement = connection.createStatement(); + statement.execute(dbAdapter.sqlModifyField(field1)); + } + finally + { + DBUtil.close(statement); + } + } + }; + private static final SchemaMigrator[] SCHEMA_MIGRATORS = { NO_MIGRATION_NEEDED, NON_AUDIT_MIGRATION, - LOB_SIZE_MIGRATION }; + LOB_SIZE_MIGRATION, NULLABLE_COLUMNS_MIGRATION }; static { diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java index 00817f0ae1..7460eb469b 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java @@ -139,4 +139,9 @@ public interface IDBAdapter * @since 4.2 */ public String sqlRenameField(IDBField field, String oldName); + + /** + * @since 4.2 + */ + public String sqlModifyField(IDBField field); } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java index ca043bc934..4b7ee9e4c8 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java @@ -1010,6 +1010,26 @@ public abstract class DBAdapter implements IDBAdapter /** * @since 4.2 */ + public String sqlModifyField(IDBField field) + { + String tableName = field.getTable().getName(); + String fieldName = field.getName(); + + String definition = createFieldDefinition(field); + return sqlModifyField(tableName, fieldName, definition); + } + + /** + * @since 4.2 + */ + protected String sqlModifyField(String tableName, String fieldName, String definition) + { + return "ALTER TABLE " + tableName + " ALTER COLUMN " + fieldName + " " + definition; + } + + /** + * @since 4.2 + */ public String format(PreparedStatement stmt) { return stmt.toString(); |