Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-01-11 07:24:33 +0000
committerEike Stepper2016-01-11 07:24:33 +0000
commit9f0637117104cd867cccf5deb3e05bb3261eb7a1 (patch)
treed1d2416667529ef27a10f8a2b8c06b1c6a321166
parent5579f08d30afb9100e05e5a9cf95686621db3a2d (diff)
downloadcdo-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
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBAnnotation.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java24
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();

Back to the top