Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java74
1 files changed, 71 insertions, 3 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java
index 658465df49..f305a70979 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ValueMapping.java
@@ -16,6 +16,10 @@ import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.server.db.IAttributeMapping;
import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
import org.eclipse.emf.cdo.server.db.IReferenceMapping;
+import org.eclipse.emf.cdo.server.internal.db.bundle.OM;
+
+import org.eclipse.net4j.db.IDBField;
+import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
import java.util.ArrayList;
import java.util.List;
@@ -25,6 +29,8 @@ import java.util.List;
*/
public abstract class ValueMapping extends Mapping
{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, ValueMapping.class);
+
private List<IAttributeMapping> attributeMappings;
private List<IReferenceMapping> referenceMappings;
@@ -32,7 +38,7 @@ public abstract class ValueMapping extends Mapping
public ValueMapping(MappingStrategy mappingStrategy, CDOClass cdoClass, CDOFeature[] features)
{
super(mappingStrategy, cdoClass);
- mappingStrategy.initTable(getTable(), hasFullRevisionInfo());
+ initTable(getTable(), hasFullRevisionInfo());
attributeMappings = createAttributeMappings(features);
referenceMappings = createReferenceMappings(features);
}
@@ -50,13 +56,26 @@ public abstract class ValueMapping extends Mapping
}
}
+ public void readRevision(IDBStoreAccessor storeAccessor, CDORevisionImpl revision)
+ {
+ if (attributeMappings != null)
+ {
+ readAttributes(storeAccessor, revision);
+ }
+
+ if (referenceMappings != null)
+ {
+ readReferences(storeAccessor, revision);
+ }
+ }
+
protected void writeAttributes(IDBStoreAccessor storeAccessor, CDORevisionImpl revision)
{
StringBuilder builder = new StringBuilder();
builder.append("INSERT INTO ");
builder.append(getTable());
builder.append(" VALUES (");
- appendRevisionInfo(builder, revision, hasFullRevisionInfo());
+ appendRevisionInfos(builder, revision, hasFullRevisionInfo());
for (IAttributeMapping attributeMapping : attributeMappings)
{
@@ -65,7 +84,7 @@ public abstract class ValueMapping extends Mapping
}
builder.append(")");
- executeSQL(storeAccessor, builder.toString());
+ sqlUpdate(storeAccessor, builder.toString());
}
protected void writeReferences(IDBStoreAccessor storeAccessor, CDORevisionImpl revision)
@@ -76,6 +95,55 @@ public abstract class ValueMapping extends Mapping
}
}
+ protected void readAttributes(IDBStoreAccessor storeAccessor, CDORevisionImpl revision)
+ {
+ IDBField[] fields = getTable().getFields();
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT ");
+ for (int i = 1; i < 8; i++)
+ {
+ if (i > 1)
+ {
+ builder.append(", ");
+ }
+
+ builder.append(fields[i].getName());
+ }
+
+ builder.append(" FROM ");
+ builder.append(getTable());
+ builder.append(" WHERE ");
+ builder.append(fields[0].getName());
+ builder.append("=");
+ builder.append(revision.getID().getValue());
+ builder.append(" AND ");
+ builder.append(fields[0].getName());
+ builder.append("=0");
+
+ for (IAttributeMapping attributeMapping : attributeMappings)
+ {
+ builder.append(", ");
+ attributeMapping.appendValue(builder, revision);
+ }
+
+ builder.append(")");
+ String sql = builder.toString();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace(sql);
+ }
+
+ }
+
+ protected void readReferences(IDBStoreAccessor storeAccessor, CDORevisionImpl revision)
+ {
+ for (IReferenceMapping referenceMapping : referenceMappings)
+ {
+ referenceMapping.writeReference(storeAccessor, revision);
+ }
+ }
+
protected List<IAttributeMapping> createAttributeMappings(CDOFeature[] features)
{
List<IAttributeMapping> attributeMappings = new ArrayList();

Back to the top