diff options
author | Eike Stepper | 2010-03-17 14:24:52 +0000 |
---|---|---|
committer | Eike Stepper | 2010-03-17 14:24:52 +0000 |
commit | 4d3e7a9ed87a48b2cf25e35586a0aa6a23f9b909 (patch) | |
tree | 2bf99ad4ae2cef621036378bc04321af7585667f | |
parent | 8dbab7d3b66dd1d7ee49f1b8124caa997a5c4044 (diff) | |
download | cdo-4d3e7a9ed87a48b2cf25e35586a0aa6a23f9b909.tar.gz cdo-4d3e7a9ed87a48b2cf25e35586a0aa6a23f9b909.tar.xz cdo-4d3e7a9ed87a48b2cf25e35586a0aa6a23f9b909.zip |
hotfix for clone sync of detached revisions
4 files changed, 37 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBRevisionHandler.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBRevisionHandler.java new file mode 100644 index 0000000000..cf418358f9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBRevisionHandler.java @@ -0,0 +1,30 @@ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionHandler; +import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision; + +/** + * @author Eike Stepper + */ +public class DBRevisionHandler implements CDORevisionHandler +{ + private CDORevisionHandler delegate; + + public DBRevisionHandler(CDORevisionHandler delegate) + { + this.delegate = delegate; + } + + public void handleRevision(CDORevision revision) + { + if (revision.getVersion() < CDOBranchVersion.FIRST_VERSION - 1) + { + revision = new DetachedCDORevision(revision.getEClass(), revision.getID(), revision.getBranch(), -revision + .getVersion(), revision.getTimeStamp()); + } + + delegate.handleRevision(revision); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java index 29c02fef04..23f530b9fd 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java @@ -798,22 +798,10 @@ public class DBStoreAccessor extends LongIDStoreAccessor implements IDBStoreAcce * * @since 3.0 */ - public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, final CDORevisionHandler handler) + public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, CDORevisionHandler handler) { IMappingStrategy mappingStrategy = getStore().getMappingStrategy(); - mappingStrategy.handleRevisions(this, eClass, branch, timeStamp, new CDORevisionHandler() - { - public void handleRevision(CDORevision revision) - { - if (revision.getVersion() < CDOBranchVersion.FIRST_VERSION - 1) - { - revision = new DetachedCDORevision(revision.getEClass(), revision.getID(), revision.getBranch(), -revision - .getVersion(), revision.getTimeStamp()); - } - - handler.handleRevision(revision); - } - }); + mappingStrategy.handleRevisions(this, eClass, branch, timeStamp, new DBRevisionHandler(handler)); } /** diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java index 65adb4ddb3..839f8d0ea8 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java @@ -36,6 +36,7 @@ import org.eclipse.emf.cdo.server.db.mapping.IListMapping; import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; +import org.eclipse.emf.cdo.server.internal.db.DBRevisionHandler; import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; @@ -466,6 +467,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping // this does not make any difference for non-branching store. // see #handleRevisions() implementation in HorizontalBranchingClassMapping // for branch handling. + handler = new DBRevisionHandler(handler); IPreparedStatementCache statementCache = accessor.getStatementCache(); IRepository repository = accessor.getStore().getRepository(); diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java index 1e6161becb..623678fd43 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java @@ -32,6 +32,7 @@ import org.eclipse.emf.cdo.server.db.mapping.IClassMappingAuditSupport; import org.eclipse.emf.cdo.server.db.mapping.IListMapping; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; +import org.eclipse.emf.cdo.server.internal.db.DBRevisionHandler; import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; @@ -636,6 +637,8 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp @Override public void handleRevisions(IDBStoreAccessor accessor, CDOBranch branch, long timeStamp, CDORevisionHandler handler) { + handler = new DBRevisionHandler(handler); + StringBuilder builder = new StringBuilder(sqlSelectForHandle); boolean whereAppend = false; |