diff options
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.java | 48 |
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); } |