diff options
author | Eike Stepper | 2016-01-11 07:24:33 +0000 |
---|---|---|
committer | Eike Stepper | 2016-01-11 07:24:33 +0000 |
commit | 9f0637117104cd867cccf5deb3e05bb3261eb7a1 (patch) | |
tree | d1d2416667529ef27a10f8a2b8c06b1c6a321166 | |
parent | 5579f08d30afb9100e05e5a9cf95686621db3a2d (diff) | |
download | cdo-9f0637117104cd867cccf5deb3e05bb3261eb7a1.tar.gz cdo-9f0637117104cd867cccf5deb3e05bb3261eb7a1.tar.xz cdo-9f0637117104cd867cccf5deb3e05bb3261eb7a1.zip |
[485499] [DB] Store instances from 2 different EPackages with the same name
https://bugs.eclipse.org/bugs/show_bug.cgi?id=485499
2 files changed, 25 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBAnnotation.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBAnnotation.java index b82fd591a1..b230924c0f 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBAnnotation.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBAnnotation.java @@ -23,6 +23,7 @@ import org.eclipse.emf.ecore.util.EcoreUtil; public enum DBAnnotation { TABLE_MAPPING("tableMapping"), // + TABLE_NAME_PREFIX("tableNamePrefix"), // TABLE_NAME("tableName"), // COLUMN_NAME("columnName"), // COLUMN_TYPE("columnType"), // 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 75f0c06381..9552980072 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 @@ -60,7 +60,9 @@ import org.eclipse.net4j.util.om.monitor.OMMonitor.Async; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EModelElement; import org.eclipse.emf.ecore.ENamedElement; +import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; @@ -329,6 +331,24 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp // -- database name demangling methods --------------------------------- + private String getTableNamePrefix(EModelElement element) + { + String prefix = StringUtil.safe(DBAnnotation.TABLE_NAME_PREFIX.getValue(element)); + if (prefix.length() != 0 && !prefix.endsWith(NAME_SEPARATOR)) + { + prefix += NAME_SEPARATOR; + } + + EObject eContainer = element.eContainer(); + if (eContainer instanceof EModelElement) + { + EModelElement parent = (EModelElement)eContainer; + prefix = getTableNamePrefix(parent) + prefix; + } + + return prefix; + } + public String getTableName(ENamedElement element) { String name = null; @@ -363,6 +383,8 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp prefix += NAME_SEPARATOR; } + prefix += getTableNamePrefix(element); + String suffix = typePrefix + getUniqueID(element); int maxTableNameLength = getMaxTableNameLength(); @@ -387,6 +409,8 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp prefix += NAME_SEPARATOR; } + prefix += getTableNamePrefix(feature); + String suffix = TYPE_PREFIX_FEATURE + getUniqueID(feature); int maxTableNameLength = getMaxTableNameLength(); |