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/mapping/horizontal/HorizontalAuditClassMapping.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java
index ac645fe2ea..2a01364ab0 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java
@@ -35,6 +35,7 @@ import org.eclipse.emf.ecore.EStructuralFeature;
import java.sql.PreparedStatement;
import java.sql.SQLException;
+import java.util.Map;
/**
* TODO use async monitors
@@ -68,6 +69,8 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
private void initSqlStrings()
{
+ Map<EStructuralFeature, String> unsettableFields = getUnsettableFields();
+
// ----------- Select Revision ---------------------------
StringBuilder builder = new StringBuilder();
@@ -90,6 +93,15 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
builder.append(singleMapping.getField().getName());
}
+ if (unsettableFields != null)
+ {
+ for (String fieldName : unsettableFields.values())
+ {
+ builder.append(", ");
+ builder.append(fieldName);
+ }
+ }
+
builder.append(" FROM "); //$NON-NLS-1$
builder.append(getTable().getName());
builder.append(" WHERE "); //$NON-NLS-1$
@@ -149,6 +161,15 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
builder.append(singleMapping.getField().getName());
}
+ if (unsettableFields != null)
+ {
+ for (String fieldName : unsettableFields.values())
+ {
+ builder.append(", ");
+ builder.append(fieldName);
+ }
+ }
+
builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < getValueMappings().size(); i++)
@@ -156,6 +177,14 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
builder.append(", ?"); //$NON-NLS-1$
}
+ if (unsettableFields != null)
+ {
+ for (int i = 0; i < unsettableFields.size(); i++)
+ {
+ builder.append(", ?"); //$NON-NLS-1$
+ }
+ }
+
builder.append(")"); //$NON-NLS-1$
sqlInsertAttributes = builder.toString();
@@ -387,8 +416,27 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
.getContainerID()));
stmt.setInt(col++, revision.getContainingFeatureID());
+ int isSetCol = col + getValueMappings().size();
+
for (ITypeMapping mapping : getValueMappings())
{
+ EStructuralFeature feature = mapping.getFeature();
+ if (feature.isUnsettable())
+ {
+ if (revision.getValue(feature) == null)
+ {
+ stmt.setBoolean(isSetCol++, false);
+
+ // also set value column to default value
+ mapping.setDefaultValue(stmt, col++);
+
+ continue;
+ }
+ else
+ {
+ stmt.setBoolean(isSetCol++, true);
+ }
+ }
mapping.setValueFromRevision(stmt, col++, revision);
}

Back to the top