diff options
author | Eike Stepper | 2020-03-29 16:54:51 +0000 |
---|---|---|
committer | Eike Stepper | 2020-03-29 16:54:51 +0000 |
commit | de619e0fd03611c9e9875441acff0d7d12f98794 (patch) | |
tree | 7149ba34042d38f5c39f343814b9986135c3ed35 /plugins/org.eclipse.emf.cdo.server.db | |
parent | 8e538df3de586154012fa4392ea13bbf6645870e (diff) | |
download | cdo-de619e0fd03611c9e9875441acff0d7d12f98794.tar.gz cdo-de619e0fd03611c9e9875441acff0d7d12f98794.tar.xz cdo-de619e0fd03611c9e9875441acff0d7d12f98794.zip |
[561563] [DB] AbstractMappingStrategy.removeClassMapping() does not use a SchemaTransaction
https://bugs.eclipse.org/bugs/show_bug.cgi?id=561563
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db')
4 files changed, 52 insertions, 41 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF index 76297d29d4..e4a10d1238 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.emf.cdo.server.db;singleton:=true -Bundle-Version: 4.8.0.qualifier +Bundle-Version: 4.8.1.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -12,11 +12,11 @@ Bundle-ClassPath: . Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)", org.eclipse.net4j.db;bundle-version="[4.0.0,5.0.0)";visibility:=reexport, org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport -Export-Package: org.eclipse.emf.cdo.server.db;version="4.8.0", - org.eclipse.emf.cdo.server.db.mapping;version="4.8.0", - org.eclipse.emf.cdo.server.internal.db;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db,org.eclipse.emf.cdo.explorer.ui", - org.eclipse.emf.cdo.server.internal.db.bundle;version="4.8.0";x-internal:=true, - org.eclipse.emf.cdo.server.internal.db.mapping;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db", - org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db", - org.eclipse.emf.cdo.server.internal.db.messages;version="4.8.0";x-internal:=true +Export-Package: org.eclipse.emf.cdo.server.db;version="4.8.1", + org.eclipse.emf.cdo.server.db.mapping;version="4.8.1", + org.eclipse.emf.cdo.server.internal.db;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db,org.eclipse.emf.cdo.explorer.ui", + org.eclipse.emf.cdo.server.internal.db.bundle;version="4.8.1";x-internal:=true, + org.eclipse.emf.cdo.server.internal.db.mapping;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db", + org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db", + org.eclipse.emf.cdo.server.internal.db.messages;version="4.8.1";x-internal:=true Automatic-Module-Name: org.eclipse.emf.cdo.server.db diff --git a/plugins/org.eclipse.emf.cdo.server.db/pom.xml b/plugins/org.eclipse.emf.cdo.server.db/pom.xml index f413f2579a..b974e70780 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/pom.xml +++ b/plugins/org.eclipse.emf.cdo.server.db/pom.xml @@ -25,7 +25,7 @@ <groupId>org.eclipse.emf.cdo</groupId> <artifactId>org.eclipse.emf.cdo.server.db</artifactId> - <version>4.8.0-SNAPSHOT</version> + <version>4.8.1-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project> diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java index 8868ea1ad4..035d1cddaa 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java @@ -72,7 +72,6 @@ import org.eclipse.net4j.db.BatchedStatement; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBConnection; -import org.eclipse.net4j.db.IDBDatabase; import org.eclipse.net4j.db.IDBPreparedStatement; import org.eclipse.net4j.db.IDBPreparedStatement.ReuseProbability; import org.eclipse.net4j.db.IDBSchemaTransaction; @@ -819,35 +818,15 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor, try { connection.rollback(); - - // Bug 298632: Must rollback DBSchema to its prior state and drop the tables - IMappingStrategy mappingStrategy = store.getMappingStrategy(); - mappingStrategy.removeMapping(connection, commitContext.getNewPackageUnits()); - - if (createdTables != null) - { - IDBDatabase database = store.getDatabase(); - IDBSchemaTransaction schemaTransaction = database.openSchemaTransaction(); - - try - { - for (IDBTable table : createdTables) - { - table.remove(); - } - - schemaTransaction.commit(); - } - finally - { - schemaTransaction.close(); - } - } } catch (SQLException ex) { throw new DBException(ex); } + + // Bug 298632: Must rollback DBSchema to its prior state and drop the tables + IMappingStrategy mappingStrategy = store.getMappingStrategy(); + mappingStrategy.removeMapping(connection, commitContext.getNewPackageUnits()); } @Override diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java index 7e565fbb28..34e9697c75 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java @@ -43,6 +43,8 @@ import org.eclipse.emf.cdo.spi.server.InternalRepository; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; +import org.eclipse.net4j.db.IDBConnection; +import org.eclipse.net4j.db.IDBSchemaTransaction; import org.eclipse.net4j.db.ddl.IDBSchema; import org.eclipse.net4j.db.ddl.IDBTable; import org.eclipse.net4j.util.ImplementationError; @@ -524,11 +526,11 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp { EPackage ePackage = packageInfo.getEPackage(); EClass[] persistentClasses = EMFUtil.getPersistentClasses(ePackage); - mapClasses(connection, unmap, persistentClasses, classMappings); + mapClasses(persistentClasses, connection, unmap, classMappings); } } - private void mapClasses(Connection connection, boolean unmap, EClass[] eClasses, Set<IClassMapping> classMappings) + private void mapClasses(EClass[] eClasses, Connection connection, boolean unmap, Set<IClassMapping> classMappings) { for (EClass eClass : eClasses) { @@ -542,7 +544,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp continue; } - IClassMapping classMapping = unmap ? removeClassMapping(eClass) : createClassMapping(eClass); + IClassMapping classMapping = unmap ? removeClassMapping(eClass, connection) : createClassMapping(eClass); if (classMapping != null) { classMappings.add(classMapping); @@ -562,15 +564,45 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp return classMapping; } - private IClassMapping removeClassMapping(EClass eClass) + private IClassMapping removeClassMapping(EClass eClass, Connection connection) { IClassMapping classMapping = classMappings.get(eClass); if (classMapping != null) { - IDBSchema schema = getStore().getDBSchema(); - for (IDBTable table : classMapping.getDBTables()) + IDBSchemaTransaction schemaTransaction = null; + IDBSchema workingCopy = null; + + try + { + for (IDBTable table : classMapping.getDBTables()) + { + if (table != null) + { + String name = table.getName(); + if (name != null) + { + if (workingCopy == null) + { + schemaTransaction = getStore().getDatabase().openSchemaTransaction((IDBConnection)connection); + workingCopy = schemaTransaction.getWorkingCopy(); + } + + workingCopy.removeTable(name); + } + } + } + + if (schemaTransaction != null) + { + schemaTransaction.commit(); + } + } + finally { - schema.removeTable(table.getName()); + if (schemaTransaction != null) + { + schemaTransaction.close(); + } } classMappings.remove(eClass); |