Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.common/.options1
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMeta.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMetaRange.java40
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDTempMeta.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java24
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageInfo.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataInput.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataOutput.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java75
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaRangeImpl.java118
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectUUIDImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java76
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java280
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataInputImpl.java21
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataOutputImpl.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageRegistry.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.location/.options9
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java31
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitXATransactionPhase3Request.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IExternalReferenceManager.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMetaDataManager.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/CDODBSchema.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java33
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java17
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java90
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java36
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractFeatureMapTableMapping.java41
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java66
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java2968
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/DelegatingObjectTypeMapper.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/NonAuditFeatureMapTableMapping.java26
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/ObjectTypeTable.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/messages/messages.properties2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml20
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java17
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDMetaRangeUserType.java132
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java27
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java39
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java34
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingCommitContext.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java67
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDOPackageRegistry.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerExporter.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalStore.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java34
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/logic/TestLogic.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java27
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java138
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java37
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/FSMUtil.java63
-rw-r--r--plugins/org.eclipse.net4j.db.tests/src/org/eclipse/net4j/db/tests/TestSchema.java5
89 files changed, 1776 insertions, 3308 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/.options b/plugins/org.eclipse.emf.cdo.common/.options
index a933232c86..71d542d56e 100644
--- a/plugins/org.eclipse.emf.cdo.common/.options
+++ b/plugins/org.eclipse.emf.cdo.common/.options
@@ -2,7 +2,6 @@
org.eclipse.emf.cdo.common/debug = true
org.eclipse.emf.cdo.common/debug.protocol = true
-org.eclipse.emf.cdo.common/debug.metaid = false
org.eclipse.emf.cdo.common/debug.id = true
org.eclipse.emf.cdo.common/debug.revision= true
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
index 77c0654b9e..af1054882c 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
@@ -31,8 +31,6 @@ public interface CDOID extends Serializable, Comparable<CDOID>
public boolean isObject();
- public boolean isMeta();
-
public boolean isTemporary();
/**
@@ -72,9 +70,7 @@ public interface CDOID extends Serializable, Comparable<CDOID>
* @since 2.0
*/
EXTERNAL_TEMP_OBJECT('e'), //
- TEMP_OBJECT('t'), //
- META('M'), //
- TEMP_META('m');
+ TEMP_OBJECT('t');
private static Enum<?>[] chars;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMeta.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMeta.java
deleted file mode 100644
index 1ea0215219..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMeta.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.common.id;
-
-/**
- * @author Eike Stepper
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface CDOIDMeta extends CDOID
-{
- public long getLongValue();
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMetaRange.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMetaRange.java
deleted file mode 100644
index 6aa32b10fb..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDMetaRange.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID.Type;
-
-import java.io.Serializable;
-
-/**
- * @author Eike Stepper
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface CDOIDMetaRange extends Serializable
-{
- public CDOID getLowerBound();
-
- public CDOID getUpperBound();
-
- public CDOID get(int index);
-
- public int size();
-
- public boolean isEmpty();
-
- public boolean contains(CDOID id);
-
- public CDOIDMetaRange increase();
-
- public Type getType();
-
- public boolean isTemporary();
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDTempMeta.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDTempMeta.java
deleted file mode 100644
index 72d536747d..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDTempMeta.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- * Simon McDuff - bug 213402
- */
-package org.eclipse.emf.cdo.common.id;
-
-/**
- * @author Eike Stepper
- * @noimplement This interface is not intended to be implemented by clients.
- * @since 2.0
- */
-public interface CDOIDTempMeta extends CDOIDTemp
-{
- public int getIntValue();
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
index b4d86b1f14..30eea895af 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
@@ -20,14 +20,11 @@ import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndBranchImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndVersionImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaRangeImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongWithClassifierImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectStringImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectStringWithClassifierImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectUUIDImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
import org.eclipse.emf.cdo.internal.common.messages.Messages;
@@ -78,10 +75,6 @@ public final class CDOIDUtil
throw new IllegalArgumentException(MessageFormat.format(
Messages.getString("CDOIDUtil.0"), id.getClass().getName())); //$NON-NLS-1$
- case META:
- return ((CDOIDMeta)id).getLongValue();
-
- case TEMP_META:
case TEMP_OBJECT:
throw new IllegalArgumentException(Messages.getString("CDOIDUtil.1")); //$NON-NLS-1$
@@ -108,11 +101,6 @@ public final class CDOIDUtil
return null;
}
- public static CDOIDTemp createTempMeta(int value)
- {
- return new CDOIDTempMetaImpl(value);
- }
-
public static CDOIDTemp createTempObject(int value)
{
return new CDOIDTempObjectImpl(value);
@@ -160,16 +148,6 @@ public final class CDOIDUtil
return new CDOIDExternalImpl(uri);
}
- public static CDOIDMeta createMeta(long value)
- {
- return new CDOIDMetaImpl(value);
- }
-
- public static CDOIDMetaRange createMetaRange(CDOID lowerBound, int count)
- {
- return new CDOIDMetaRangeImpl(lowerBound, count);
- }
-
public static CDOIDAndVersion createIDAndVersion(CDOID id, int version)
{
return new CDOIDAndVersionImpl(id, version);
@@ -305,12 +283,6 @@ public final class CDOIDUtil
case TEMP_OBJECT:
return new CDOIDTempObjectImpl(Integer.valueOf(fragment));
- case TEMP_META:
- return new CDOIDTempMetaImpl(Integer.valueOf(fragment));
-
- case META:
- return new CDOIDMetaImpl(Long.valueOf(fragment));
-
case EXTERNAL_OBJECT:
return new CDOIDExternalImpl(fragment);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
index 2e7d70cbe7..dafb50dd41 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
@@ -425,6 +425,18 @@ public final class CDOModelUtil
}
/**
+ * @since 3.0
+ */
+ public static EPackage readPackage(ExtendedDataInput in, ResourceSet resourceSet, boolean lookForResource)
+ throws IOException
+ {
+ String uri = in.readString();
+ boolean zipped = in.readBoolean();
+ byte[] bytes = in.readByteArray();
+ return EMFUtil.createEPackage(uri, bytes, zipped, resourceSet, lookForResource);
+ }
+
+ /**
* @since 2.0
*/
public static void writePackage(ExtendedDataOutput out, EPackage ePackage, boolean zipped,
@@ -506,16 +518,4 @@ public final class CDOModelUtil
}
}
}
-
- /**
- * @since 3.0
- */
- public static EPackage readPackage(ExtendedDataInput in, ResourceSet resourceSet, boolean lookForResource)
- throws IOException
- {
- String uri = in.readString();
- boolean zipped = in.readBoolean();
- byte[] bytes = in.readByteArray();
- return EMFUtil.createEPackage(uri, bytes, zipped, resourceSet, lookForResource);
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageInfo.java
index 136d3bf8d1..a857a0a8fe 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageInfo.java
@@ -10,12 +10,9 @@
*/
package org.eclipse.emf.cdo.common.model;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit.State;
import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EPackage;
/**
@@ -49,12 +46,6 @@ public interface CDOPackageInfo extends Adapter, EPackage.Descriptor, Comparable
public String getParentURI();
/**
- * Returns the consecutive range of {@link CDOID ids} permanently assigned to the {@link EModelElement model elements}
- * in the package described by this package info.
- */
- public CDOIDMetaRange getMetaIDRange();
-
- /**
* Returns the {@link EPackage package} described by this package info.
*
* @param loadOnDemand
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataInput.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataInput.java
index c44ca1dec6..3eb46583a1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataInput.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataInput.java
@@ -20,7 +20,6 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndBranch;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
@@ -87,8 +86,6 @@ public interface CDODataInput extends ExtendedDataInput
public CDOIDAndBranch readCDOIDAndBranch() throws IOException;
- public CDOIDMetaRange readCDOIDMetaRange() throws IOException;
-
// /////////////////////////////////////////////////////////////////////////////////////////////////
public CDORevisionKey readCDORevisionKey() throws IOException;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataOutput.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataOutput.java
index 859f76c393..8c30addb56 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataOutput.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDODataOutput.java
@@ -20,7 +20,6 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndBranch;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
@@ -92,8 +91,6 @@ public interface CDODataOutput extends ExtendedDataOutput
public void writeCDOIDAndBranch(CDOIDAndBranch idAndBranch) throws IOException;
- public void writeCDOIDMetaRange(CDOIDMetaRange metaRange) throws IOException;
-
// /////////////////////////////////////////////////////////////////////////////////////////////////
public void writeCDORevisionKey(CDORevisionKey revisionKey) throws IOException;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
index 80d1dc8bc5..bdd040b0f6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
@@ -31,8 +31,6 @@ public abstract class OM
public static final OMTracer DEBUG_PROTOCOL = DEBUG.tracer("protocol"); //$NON-NLS-1$
- public static final OMTracer DEBUG_METAID = DEBUG.tracer("metaid"); //$NON-NLS-1$
-
public static final OMTracer DEBUG_ID = DEBUG.tracer("id"); //$NON-NLS-1$
public static final OMTracer DEBUG_REVISION = DEBUG.tracer("revision"); //$NON-NLS-1$
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
index a518bd2dbc..9e6373ece2 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
@@ -50,11 +50,6 @@ public class CDOIDExternalImpl extends AbstractCDOID implements CDOIDExternal
return true;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
deleted file mode 100644
index a058b39681..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
-
-/**
- * @author Eike Stepper
- */
-public class CDOIDMetaImpl extends AbstractCDOIDLong implements CDOIDMeta
-{
- private static final long serialVersionUID = 1L;
-
- public CDOIDMetaImpl(long value)
- {
- super(value);
- }
-
- public Type getType()
- {
- return Type.META;
- }
-
- public boolean isDangling()
- {
- return false;
- }
-
- public boolean isExternal()
- {
- return false;
- }
-
- public boolean isMeta()
- {
- return true;
- }
-
- public boolean isNull()
- {
- return false;
- }
-
- public boolean isObject()
- {
- return false;
- }
-
- public boolean isTemporary()
- {
- return false;
- }
-
- @Override
- public String toString()
- {
- return "MID" + getLongValue(); //$NON-NLS-1$
- }
-
- @Override
- protected int doCompareTo(CDOID o) throws ClassCastException
- {
- return new Long(getLongValue()).compareTo(((CDOIDMetaImpl)o).getLongValue());
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaRangeImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaRangeImpl.java
deleted file mode 100644
index ff08ef6d95..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaRangeImpl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOID.Type;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-
-import java.text.MessageFormat;
-
-/**
- * @author Eike Stepper
- */
-public final class CDOIDMetaRangeImpl implements CDOIDMetaRange
-{
- private static final long serialVersionUID = 1L;
-
- private CDOID lowerBound;
-
- private int size;
-
- public CDOIDMetaRangeImpl(CDOID lowerBound, int size)
- {
- if (size < 0)
- {
- throw new IllegalArgumentException("size < 0"); //$NON-NLS-1$
- }
-
- this.lowerBound = lowerBound;
- this.size = size;
- }
-
- public CDOID getLowerBound()
- {
- return lowerBound;
- }
-
- public CDOID getUpperBound()
- {
- return size > 0 ? get(size - 1) : null;
- }
-
- public CDOID get(int index)
- {
- if (index < 0 || index >= size)
- {
- throw new IllegalArgumentException("ids < 0 || ids >= size"); //$NON-NLS-1$
- }
-
- if (isTemporary())
- {
- return new CDOIDTempMetaImpl(((CDOIDTempMetaImpl)lowerBound).getIntValue() + index);
- }
-
- return new CDOIDMetaImpl(((CDOIDMetaImpl)lowerBound).getLongValue() + index);
- }
-
- public int size()
- {
- return size;
- }
-
- public boolean isEmpty()
- {
- return size == 0;
- }
-
- public boolean contains(CDOID id)
- {
- if (isTemporary())
- {
- if (id.getType() != Type.TEMP_META)
- {
- throw new IllegalArgumentException("id.getType() != Type.TEMP_META"); //$NON-NLS-1$
- }
-
- int index = ((CDOIDTempMetaImpl)id).getIntValue() - ((CDOIDTempMetaImpl)lowerBound).getIntValue();
- return 0 <= index && index < size;
- }
-
- if (id.getType() != Type.META)
- {
- throw new IllegalArgumentException("id.getType() != Type.META"); //$NON-NLS-1$
- }
-
- long index = ((CDOIDMetaImpl)id).getLongValue() - ((CDOIDMetaImpl)lowerBound).getLongValue();
- return 0L <= index && index < size;
- }
-
- public CDOIDMetaRange increase()
- {
- return new CDOIDMetaRangeImpl(lowerBound, size + 1);
- }
-
- public Type getType()
- {
- return lowerBound.getType();
- }
-
- public boolean isTemporary()
- {
- return lowerBound.isTemporary();
- }
-
- @Override
- public String toString()
- {
- return MessageFormat.format("[{0}:{1}]", lowerBound, getUpperBound()); //$NON-NLS-1$
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
index 301779022e..d492df5c35 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
@@ -13,7 +13,6 @@
package org.eclipse.emf.cdo.internal.common.id;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDObject;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
@@ -26,7 +25,7 @@ import java.io.IOException;
/**
* @author Eike Stepper
*/
-public final class CDOIDNullImpl extends AbstractCDOID implements CDOIDMeta, CDOIDTemp, CDOIDObject
+public final class CDOIDNullImpl extends AbstractCDOID implements CDOIDTemp, CDOIDObject
{
public static final CDOIDNullImpl INSTANCE = new CDOIDNullImpl();
@@ -51,11 +50,6 @@ public final class CDOIDNullImpl extends AbstractCDOID implements CDOIDMeta, CDO
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return true;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
index 749354ca9a..0312b05075 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
@@ -46,11 +46,6 @@ public class CDOIDObjectLongImpl extends AbstractCDOIDLong implements InternalCD
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
index dbb8f21e07..84a2842fec 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
@@ -47,11 +47,6 @@ public class CDOIDObjectStringImpl extends AbstractCDOIDString implements Intern
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectUUIDImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectUUIDImpl.java
index 6561da37b1..b7d6ac91ba 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectUUIDImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectUUIDImpl.java
@@ -47,11 +47,6 @@ public class CDOIDObjectUUIDImpl extends AbstractCDOIDString implements Internal
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
deleted file mode 100644
index a5596a57c4..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- * Simon McDuff - bug 213402
- */
-package org.eclipse.emf.cdo.internal.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDTempMeta;
-import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDInteger;
-
-/**
- * @author Eike Stepper
- */
-public class CDOIDTempMetaImpl extends AbstractCDOIDInteger implements CDOIDTempMeta
-{
- private static final long serialVersionUID = 1L;
-
- public CDOIDTempMetaImpl(int value)
- {
- super(value);
- }
-
- public Type getType()
- {
- return Type.TEMP_META;
- }
-
- public boolean isDangling()
- {
- return false;
- }
-
- public boolean isExternal()
- {
- return false;
- }
-
- public boolean isMeta()
- {
- return true;
- }
-
- public boolean isNull()
- {
- return false;
- }
-
- public boolean isObject()
- {
- return false;
- }
-
- public boolean isTemporary()
- {
- return true;
- }
-
- @Override
- public String toString()
- {
- return "mid" + getIntValue(); //$NON-NLS-1$
- }
-
- @Override
- protected int doCompareTo(CDOID o) throws ClassCastException
- {
- return new Integer(getIntValue()).compareTo(((CDOIDTempMetaImpl)o).getIntValue());
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
index 5f5da8161c..a69251ccff 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
@@ -41,11 +41,6 @@ public class CDOIDTempObjectImpl extends AbstractCDOIDInteger implements CDOIDTe
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties
index 5a639f71e1..19067d6b71 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties
@@ -27,9 +27,6 @@ CDOIDUtil.5=Invalid ID type: {0}
CDOModelUtil.6=No type for id {0}
CDOModelUtil.7=Not a primitive type nor String nor Date: {0}
CDOPackageRegistryImpl.0=No package unit available for: {0}
-CDOPackageRegistryImpl.1=No meta instance mapped for {0}
-CDOPackageRegistryImpl.10=Unknown meta instance ID: {0}
-CDOPackageRegistryImpl.6=No meta ID mapped for {0}\nContaining package: {1}
CDOPackageUnit.0=Package unit type is unknown
CDOPackageUnitImpl.0=UNINITIALIZED
CDOPackageUnitImpl.1=Package unit not initialized
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
index 28a98d4ae4..f0c811dfaa 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
@@ -10,7 +10,6 @@
*/
package org.eclipse.emf.cdo.internal.common.model;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
@@ -41,8 +40,6 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
private String parentURI;
- private CDOIDMetaRange metaIDRange;
-
public CDOPackageInfoImpl()
{
}
@@ -77,16 +74,6 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
this.parentURI = parentURI;
}
- public CDOIDMetaRange getMetaIDRange()
- {
- return metaIDRange;
- }
-
- public void setMetaIDRange(CDOIDMetaRange metaIDRange)
- {
- this.metaIDRange = metaIDRange;
- }
-
public void write(CDODataOutput out) throws IOException
{
if (TRACER.isEnabled())
@@ -96,14 +83,12 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
out.writeCDOPackageURI(packageURI);
out.writeCDOPackageURI(parentURI);
- out.writeCDOIDMetaRange(getMetaIDRange());
}
public void read(CDODataInput in) throws IOException
{
packageURI = in.readCDOPackageURI();
parentURI = in.readCDOPackageURI();
- metaIDRange = in.readCDOIDMetaRange();
if (TRACER.isEnabled())
{
TRACER.format("Read {0}", this); //$NON-NLS-1$
@@ -165,7 +150,6 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
@Override
public String toString()
{
- return MessageFormat.format("CDOPackageInfo[packageURI={0}, parentURI={1}, metaIDRange={2}]", packageURI, //$NON-NLS-1$
- parentURI, metaIDRange);
+ return MessageFormat.format("CDOPackageInfo[packageURI={0}, parentURI={1}]", packageURI, parentURI); //$NON-NLS-1$
}
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
index b3db8a0893..bb16ac1b74 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
@@ -11,11 +11,6 @@
package org.eclipse.emf.cdo.internal.common.model;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.id.CDOIDTemp;
-import org.eclipse.emf.cdo.common.id.CDOIDTempMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
@@ -43,18 +38,12 @@ import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -70,12 +59,8 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, CDOPackageRegistryImpl.class);
- private static final ContextTracer METAID_TRACER = new ContextTracer(OM.DEBUG_METAID, MetaInstanceMapperImpl.class);
-
private static final boolean eagerInternalCaches = false;
- private MetaInstanceMapperImpl metaInstanceMapper = new MetaInstanceMapperImpl();
-
private boolean replacingDescriptors;
private PackageProcessor packageProcessor;
@@ -98,11 +83,6 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
{
}
- public MetaInstanceMapper getMetaInstanceMapper()
- {
- return metaInstanceMapper;
- }
-
public boolean isReplacingDescriptors()
{
return replacingDescriptors;
@@ -210,10 +190,6 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
EPackage oldPackage = (EPackage)oldValue;
InternalCDOPackageInfo oldPackageInfo = getPackageInfo(oldPackage);
InternalCDOPackageInfo newPackageInfo = (InternalCDOPackageInfo)value;
- if (oldPackageInfo.getMetaIDRange().isTemporary() && !newPackageInfo.getMetaIDRange().isTemporary())
- {
- oldPackageInfo.setMetaIDRange(newPackageInfo.getMetaIDRange());
- }
InternalCDOPackageUnit oldPackageUnit = oldPackageInfo.getPackageUnit();
InternalCDOPackageUnit newPackageUnit = newPackageInfo.getPackageUnit();
@@ -610,8 +586,6 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
try
{
disposePackageUnits();
- metaInstanceMapper.clear();
-
clear();
active = false;
}
@@ -659,258 +633,4 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
packageUnit.setPackageRegistry(this);
return packageUnit;
}
-
- /**
- * @author Eike Stepper
- */
- public class MetaInstanceMapperImpl implements MetaInstanceMapper
- {
- private Map<CDOID, InternalEObject> idToMetaInstanceMap = new HashMap<CDOID, InternalEObject>();
-
- private Map<InternalEObject, CDOID> metaInstanceToIDMap = new HashMap<InternalEObject, CDOID>();
-
- @ExcludeFromDump
- private transient int lastTempMetaID;
-
- public MetaInstanceMapperImpl()
- {
- }
-
- public synchronized InternalEObject lookupMetaInstance(CDOID id)
- {
- LifecycleUtil.checkActive(CDOPackageRegistryImpl.this);
- InternalEObject metaInstance = idToMetaInstanceMap.get(id);
- if (metaInstance != null)
- {
- return metaInstance;
- }
-
- if (delegateRegistry instanceof InternalCDOPackageRegistry)
- {
- try
- {
- InternalCDOPackageRegistry delegate = (InternalCDOPackageRegistry)delegateRegistry;
- return delegate.getMetaInstanceMapper().lookupMetaInstance(id);
- }
- catch (RuntimeException ex)
- {
- // Fall-through
- }
- }
-
- for (InternalCDOPackageInfo packageInfo : getPackageInfos())
- {
- CDOIDMetaRange metaIDRange = packageInfo.getMetaIDRange();
- if (metaIDRange != null && metaIDRange.contains(id))
- {
- EPackage ePackage = packageInfo.getEPackage();
- mapMetaInstances(ePackage, packageInfo.getMetaIDRange());
- metaInstance = idToMetaInstanceMap.get(id);
- if (metaInstance != null)
- {
- return metaInstance;
- }
-
- break;
- }
- }
-
- throw new IllegalStateException(
- MessageFormat.format(Messages.getString("CDOPackageRegistryImpl.1"), id) + "\n" + dump()); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public synchronized CDOID lookupMetaInstanceID(InternalEObject metaInstance)
- {
- LifecycleUtil.checkActive(CDOPackageRegistryImpl.this);
- CDOID metaID = metaInstanceToIDMap.get(metaInstance);
- if (metaID != null)
- {
- return metaID;
- }
-
- if (delegateRegistry instanceof InternalCDOPackageRegistry)
- {
- try
- {
- InternalCDOPackageRegistry delegate = (InternalCDOPackageRegistry)delegateRegistry;
- return delegate.getMetaInstanceMapper().lookupMetaInstanceID(metaInstance);
- }
- catch (RuntimeException ex)
- {
- if (TRACER.isEnabled())
- {
- TRACER.trace(ex);
- }
- }
- }
-
- EPackage ePackage = getContainingPackage(metaInstance);
- if (ePackage != null)
- {
- InternalCDOPackageInfo packageInfo = getPackageInfo(ePackage);
- if (packageInfo != null)
- {
- mapMetaInstances(ePackage, packageInfo.getMetaIDRange());
- metaID = metaInstanceToIDMap.get(metaInstance);
- if (metaID != null)
- {
- return metaID;
- }
- }
- }
-
- throw new IllegalStateException(MessageFormat.format(Messages.getString("CDOPackageRegistryImpl.6"),
- metaInstance, ePackage) // $NON-NLS-1$
- // + "\n" + dump() // $NON-NLS-1$
- );
- }
-
- private EPackage getContainingPackage(InternalEObject metaInstance)
- {
- EObject object = metaInstance;
- while ((object = object.eContainer()) != null)
- {
- if (object instanceof EPackage)
- {
- return (EPackage)object;
- }
- }
-
- return null;
- }
-
- public synchronized CDOIDMetaRange mapMetaInstances(EPackage ePackage)
- {
- LifecycleUtil.checkActive(CDOPackageRegistryImpl.this);
- CDOIDMetaRange range = map(ePackage, lastTempMetaID + 1);
- lastTempMetaID = ((CDOIDTempMeta)range.getUpperBound()).getIntValue();
- return range;
- }
-
- public synchronized void mapMetaInstances(EPackage ePackage, CDOIDMetaRange metaIDRange)
- {
- LifecycleUtil.checkActive(CDOPackageRegistryImpl.this);
- CDOIDMetaRange range = CDOIDUtil.createMetaRange(metaIDRange.getLowerBound(), 0);
- range = map((InternalEObject)ePackage, range);
- if (range.size() != metaIDRange.size())
- {
- throw new IllegalStateException("range.size() != metaIDRange.size()"); //$NON-NLS-1$
- }
- }
-
- public void mapMetaInstances(MetaInstanceMapper source)
- {
- for (Map.Entry<CDOID, InternalEObject> entry : source.getEntrySet())
- {
- map(entry.getKey(), entry.getValue());
- }
- }
-
- public Set<Map.Entry<CDOID, InternalEObject>> getEntrySet()
- {
- return idToMetaInstanceMap.entrySet();
- }
-
- public synchronized void remapMetaInstanceID(CDOID oldID, CDOID newID)
- {
- LifecycleUtil.checkActive(CDOPackageRegistryImpl.this);
- InternalEObject metaInstance = idToMetaInstanceMap.remove(oldID);
- if (metaInstance == null)
- {
- throw new IllegalArgumentException(MessageFormat.format(Messages.getString("CDOPackageRegistryImpl.10"), oldID)); //$NON-NLS-1$
- }
-
- if (METAID_TRACER.isEnabled())
- {
- METAID_TRACER.format("Remapping meta instance: {0} --> {1} <-> {2}", oldID, newID, metaInstance); //$NON-NLS-1$
- }
-
- map(newID, metaInstance);
- }
-
- public void clear()
- {
- idToMetaInstanceMap.clear();
- metaInstanceToIDMap.clear();
- lastTempMetaID = 0;
- }
-
- private String dump()
- {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- PrintStream stream = new PrintStream(baos);
-
- stream.println();
- stream.println();
- stream.println(CDOPackageRegistryImpl.this);
-
- stream.println();
- List<Map.Entry<CDOID, InternalEObject>> list = new ArrayList<Map.Entry<CDOID, InternalEObject>>(
- idToMetaInstanceMap.entrySet());
- Collections.sort(list, new Comparator<Map.Entry<CDOID, InternalEObject>>()
- {
- public int compare(Map.Entry<CDOID, InternalEObject> o1, Map.Entry<CDOID, InternalEObject> o2)
- {
- return o1.getKey().compareTo(o2.getKey());
- }
- });
-
- for (Map.Entry<CDOID, InternalEObject> entry : list)
- {
- stream.println(" " + entry.getKey() + " --> " + entry.getValue()); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- return baos.toString();
- }
-
- private CDOIDMetaRange map(EPackage ePackage, int firstMetaID)
- {
- CDOIDTemp lowerBound = CDOIDUtil.createTempMeta(firstMetaID);
- CDOIDMetaRange range = CDOIDUtil.createMetaRange(lowerBound, 0);
- return map((InternalEObject)ePackage, range);
- }
-
- private CDOIDMetaRange map(InternalEObject metaInstance, CDOIDMetaRange range)
- {
- range = range.increase();
- CDOID id = range.getUpperBound();
- checkID(id);
- if (METAID_TRACER.isEnabled())
- {
- METAID_TRACER.format("Registering meta instance: {0} <-> {1}", id, metaInstance); //$NON-NLS-1$
- }
-
- idToMetaInstanceMap.put(id, metaInstance);
- CDOID oldID = metaInstanceToIDMap.put(metaInstance, id);
- if (oldID != null)
- {
- idToMetaInstanceMap.remove(oldID);
- }
-
- for (EObject content : metaInstance.eContents())
- {
- if (!(content instanceof EPackage))
- {
- range = map((InternalEObject)content, range);
- }
- }
-
- return range;
- }
-
- private void map(CDOID metaID, InternalEObject metaInstance)
- {
- checkID(metaID);
- idToMetaInstanceMap.put(metaID, metaInstance);
- metaInstanceToIDMap.put(metaInstance, metaID);
- }
-
- private void checkID(CDOID id)
- {
- if (!id.isMeta())
- {
- throw new IllegalArgumentException("Not a meta ID: " + id);
- }
- }
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
index 423ff098f1..4f10265550 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
@@ -339,7 +339,6 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
packageInfo.setPackageUnit(this);
packageInfo.setPackageURI(ePackage.getNsURI());
packageInfo.setParentURI(ePackage.getESuperPackage() == null ? null : ePackage.getESuperPackage().getNsURI());
- packageInfo.setMetaIDRange(packageRegistry.getMetaInstanceMapper().mapMetaInstances(ePackage));
EMFUtil.addAdapter(ePackage, packageInfo);
packageRegistry.basicPut(ePackage.getNsURI(), ePackage);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataInputImpl.java
index 2e767e4e1a..696b9e28f7 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataInputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataInputImpl.java
@@ -23,7 +23,6 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOID.Type;
import org.eclipse.emf.cdo.common.id.CDOIDAndBranch;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -49,10 +48,7 @@ import org.eclipse.emf.cdo.internal.common.commit.CDOCommitDataImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndBranchImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndVersionImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaRangeImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
import org.eclipse.emf.cdo.internal.common.messages.Messages;
@@ -287,12 +283,6 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
case TEMP_OBJECT:
return new CDOIDTempObjectImpl(readInt());
- case TEMP_META:
- return new CDOIDTempMetaImpl(readInt());
-
- case META:
- return new CDOIDMetaImpl(readLong());
-
case EXTERNAL_OBJECT:
return new CDOIDExternalImpl(readString());
@@ -352,17 +342,6 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
return new CDOIDAndBranchImpl(id, branch);
}
- public CDOIDMetaRange readCDOIDMetaRange() throws IOException
- {
- boolean exist = readBoolean();
- if (exist)
- {
- return new CDOIDMetaRangeImpl(readCDOID(), readInt());
- }
-
- return null;
- }
-
public CDORevisionKey readCDORevisionKey() throws IOException
{
CDOID id = readCDOID();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataOutputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataOutputImpl.java
index c0d5213cb5..ab8fffbc87 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataOutputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/protocol/CDODataOutputImpl.java
@@ -19,7 +19,6 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndBranch;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -253,20 +252,6 @@ public abstract class CDODataOutputImpl extends ExtendedDataOutput.Delegating im
writeCDOBranch(idAndBranch.getBranch());
}
- public void writeCDOIDMetaRange(CDOIDMetaRange metaRange) throws IOException
- {
- if (metaRange == null)
- {
- writeBoolean(false);
- }
- else
- {
- writeBoolean(true);
- writeCDOID(metaRange.getLowerBound());
- writeInt(metaRange.size());
- }
- }
-
public void writeCDORevisionKey(CDORevisionKey revisionKey) throws IOException
{
writeCDOID(revisionKey.getID());
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
index c720dd1723..e55e140c0d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
@@ -10,7 +10,6 @@
*/
package org.eclipse.emf.cdo.spi.common.model;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
@@ -33,8 +32,6 @@ public interface InternalCDOPackageInfo extends CDOPackageInfo, Adapter.Internal
public void setParentURI(String parentURI);
- public void setMetaIDRange(CDOIDMetaRange metaIDRange);
-
/**
* @since 3.0
*/
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageRegistry.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageRegistry.java
index b74b644424..aa675f1397 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageRegistry.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageRegistry.java
@@ -10,8 +10,6 @@
*/
package org.eclipse.emf.cdo.spi.common.model;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit.State;
@@ -19,7 +17,6 @@ import org.eclipse.emf.cdo.common.model.CDOPackageUnit.State;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.InternalEObject;
import java.util.Set;
@@ -29,8 +26,6 @@ import java.util.Set;
*/
public interface InternalCDOPackageRegistry extends CDOPackageRegistry, ILifecycle
{
- public MetaInstanceMapper getMetaInstanceMapper();
-
public void setReplacingDescriptors(boolean replacingDescriptors);
public PackageProcessor getPackageProcessor();
@@ -105,24 +100,4 @@ public interface InternalCDOPackageRegistry extends CDOPackageRegistry, ILifecyc
{
public EPackage[] loadPackages(CDOPackageUnit packageUnit);
}
-
- /**
- * @author Eike Stepper
- */
- public interface MetaInstanceMapper
- {
- public Set<Entry<CDOID, InternalEObject>> getEntrySet();
-
- public InternalEObject lookupMetaInstance(CDOID id);
-
- public CDOID lookupMetaInstanceID(InternalEObject metaInstance);
-
- public CDOIDMetaRange mapMetaInstances(EPackage ePackage);
-
- public void mapMetaInstances(EPackage ePackage, CDOIDMetaRange metaIDRange);
-
- public void mapMetaInstances(MetaInstanceMapper source);
-
- public void remapMetaInstanceID(CDOID oldID, CDOID newID);
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.location/.options b/plugins/org.eclipse.emf.cdo.location/.options
index a933232c86..fedbcac2fb 100644
--- a/plugins/org.eclipse.emf.cdo.location/.options
+++ b/plugins/org.eclipse.emf.cdo.location/.options
@@ -1,12 +1,3 @@
# Debugging and tracing options
org.eclipse.emf.cdo.common/debug = true
-org.eclipse.emf.cdo.common/debug.protocol = true
-org.eclipse.emf.cdo.common/debug.metaid = false
-org.eclipse.emf.cdo.common/debug.id = true
-org.eclipse.emf.cdo.common/debug.revision= true
-
-org.eclipse.emf.cdo.common/perf = false
-org.eclipse.emf.cdo.common/perf.revision = false
-org.eclipse.emf.cdo.common/perf.revision.reading = false
-org.eclipse.emf.cdo.common/perf.revision.writing = false
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
index 1e8bc4d029..cad82ec322 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
@@ -14,11 +14,9 @@ import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
-import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.model.lob.CDOLob;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.MetaInstanceMapper;
import org.eclipse.emf.ecore.EClass;
@@ -62,10 +60,4 @@ public class CommitDelegationRequest extends CommitTransactionRequest
{
return detachedObjectTypes.get(id);
}
-
- @Override
- protected void remapMetaInstanceID(MetaInstanceMapper metaInstanceMapper, CDOIDTemp oldID, CDOID newID)
- {
- // Do nothing
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
index 5af184e81d..c6b9a5cd06 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
@@ -19,11 +19,9 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.lob.CDOBlob;
import org.eclipse.emf.cdo.common.model.lob.CDOClob;
@@ -35,8 +33,6 @@ import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.internal.net4j.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.MetaInstanceMapper;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
@@ -219,7 +215,6 @@ public class CommitTransactionRequest extends CDOClientRequestWithMonitoring<Com
}
result = confirmingResult(in);
- confirmingMappingNewPackages(in, result);
confirmingMappingNewObjects(in, result);
return result;
}
@@ -244,32 +239,6 @@ public class CommitTransactionRequest extends CDOClientRequestWithMonitoring<Com
return new CommitTransactionResult(idProvider, branchPoint, previousTimeStamp);
}
- protected void confirmingMappingNewPackages(CDODataInput in, CommitTransactionResult result) throws IOException
- {
- MetaInstanceMapper metaInstanceMapper = getSession().getPackageRegistry().getMetaInstanceMapper();
- for (CDOPackageUnit newPackageUnit : commitData.getNewPackageUnits())
- {
- for (CDOPackageInfo packageInfo : newPackageUnit.getPackageInfos())
- {
- CDOIDMetaRange oldRange = packageInfo.getMetaIDRange();
- CDOIDMetaRange newRange = in.readCDOIDMetaRange();
- ((InternalCDOPackageInfo)packageInfo).setMetaIDRange(newRange);
- for (int i = 0; i < oldRange.size(); i++)
- {
- CDOIDTemp oldID = (CDOIDTemp)oldRange.get(i);
- CDOID newID = newRange.get(i);
- result.addIDMapping(oldID, newID);
- remapMetaInstanceID(metaInstanceMapper, oldID, newID);
- }
- }
- }
- }
-
- protected void remapMetaInstanceID(MetaInstanceMapper metaInstanceMapper, CDOIDTemp oldID, CDOID newID)
- {
- metaInstanceMapper.remapMetaInstanceID(oldID, newID);
- }
-
protected void confirmingMappingNewObjects(CDODataInput in, CommitTransactionResult result) throws IOException
{
for (;;)
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitXATransactionPhase3Request.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitXATransactionPhase3Request.java
index 804c9c4e98..a6a3f5bd9c 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitXATransactionPhase3Request.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitXATransactionPhase3Request.java
@@ -54,7 +54,6 @@ public class CommitXATransactionPhase3Request extends CommitXATransactionRequest
}
InternalCDOXACommitContext context = getCommitContext();
- confirmingMappingNewPackages(in, context.getResult());
return context.getResult();
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IExternalReferenceManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IExternalReferenceManager.java
index d070df1da8..98a1c770ad 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IExternalReferenceManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IExternalReferenceManager.java
@@ -23,6 +23,16 @@ public interface IExternalReferenceManager
public long mapExternalReference(IDBStoreAccessor accessor, CDOIDExternal id, long commitTime);
public CDOIDExternal unmapExternalReference(IDBStoreAccessor accessor, long mappedId);
+
+ /**
+ * @since 4.0
+ */
+ public long mapURI(IDBStoreAccessor accessor, String uri, long commitTime);
+
+ /**
+ * @since 4.0
+ */
+ public String unmapURI(IDBStoreAccessor accessor, long mappedId);
/**
* @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMetaDataManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMetaDataManager.java
index bbdba0595f..2f88234848 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMetaDataManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMetaDataManager.java
@@ -39,17 +39,17 @@ public interface IMetaDataManager
* @param modelElement
* the element
* @return the corresponding ID
- * @since 2.0
+ * @since 4.0
*/
- public long getMetaID(EModelElement modelElement);
+ public long getMetaID(IDBStoreAccessor accessor, EModelElement modelElement, long commitTime);
/**
* Returns the {@link EModelElement} referred to by the given ID. <code> getMetaInstance(getMetaID(m))</code> yields
* <code>m</code>
*
- * @since 2.0
+ * @since 4.0
*/
- public EModelElement getMetaInstance(long id);
+ public EModelElement getMetaInstance(IDBStoreAccessor accessor, long id);
/**
* Loads a package unit from the database.
@@ -64,6 +64,11 @@ public interface IMetaDataManager
public EPackage[] loadPackageUnit(Connection connection, InternalCDOPackageUnit packageUnit);
/**
+ * @since 4.0
+ */
+ public void clearMetaIDMappings();
+
+ /**
* Reads information about package units present in the database.
*
* @param connection
@@ -98,4 +103,5 @@ public interface IMetaDataManager
*/
public Collection<InternalCDOPackageUnit> rawImport(Connection connection, CDODataInput in, long fromCommitTime,
long toCommitTime, OMMonitor monitor) throws IOException;
+
}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/CDODBSchema.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/CDODBSchema.java
index 2efe138189..26f1098f1b 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/CDODBSchema.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/CDODBSchema.java
@@ -86,12 +86,6 @@ public class CDODBSchema extends DBSchema
public static final IDBField PACKAGE_INFOS_UNIT = //
PACKAGE_INFOS.addField("unit", DBType.VARCHAR, 255); //$NON-NLS-1$
- public static final IDBField PACKAGE_INFOS_META_LB = //
- PACKAGE_INFOS.addField("meta_lb", DBType.BIGINT); //$NON-NLS-1$
-
- public static final IDBField PACKAGE_INFOS_META_UB = //
- PACKAGE_INFOS.addField("meta_ub", DBType.BIGINT); //$NON-NLS-1$
-
public static final IDBIndex INDEX_PACKAGE_INFOS_PK = //
PACKAGE_INFOS.addIndex(IDBIndex.Type.PRIMARY_KEY, PACKAGE_INFOS_URI);
@@ -209,7 +203,7 @@ public class CDODBSchema extends DBSchema
public static final String SQL_QUERY_LOBS = "SELECT 1 FROM " + CDODBSchema.LOBS + " WHERE " + CDODBSchema.LOBS_ID + "=?"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- public static final String SQL_HANDLE_LOBS = "SELECT " + CDODBSchema.LOBS_ID + ", " + CDODBSchema.LOBS_SIZE + ", " + CDODBSchema.LOBS_BDATA + ", " + CDODBSchema.LOBS_CDATA + " FROM " + CDODBSchema.LOBS; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ public static final String SQL_HANDLE_LOBS = "SELECT " + CDODBSchema.LOBS_ID + ", " + CDODBSchema.LOBS_SIZE + ", " + CDODBSchema.LOBS_BDATA + ", " + CDODBSchema.LOBS_CDATA + " FROM " + CDODBSchema.LOBS; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
public static final String SQL_LOAD_LOB = "SELECT " + CDODBSchema.LOBS_SIZE + ", " + CDODBSchema.LOBS_BDATA + ", " + CDODBSchema.LOBS_CDATA + " FROM " + CDODBSchema.LOBS + " WHERE " + CDODBSchema.LOBS_ID + "=?"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java
index 552923e83f..5db8da2838 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java
@@ -75,8 +75,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
private static final String PROP_LAST_CDOID = "org.eclipse.emf.cdo.server.db.lastCDOID"; //$NON-NLS-1$
- private static final String PROP_LAST_METAID = "org.eclipse.emf.cdo.server.db.lastMetaID"; //$NON-NLS-1$
-
private static final String PROP_LAST_BRANCHID = "org.eclipse.emf.cdo.server.db.lastBranchID"; //$NON-NLS-1$
private static final String PROP_LAST_LOCAL_BRANCHID = "org.eclipse.emf.cdo.server.db.lastLocalBranchID"; //$NON-NLS-1$
@@ -487,12 +485,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
connection.commit();
}
- dbSchema = createSchema();
- metaDataManager = new MetaDataManager(this);
- LifecycleUtil.activate(metaDataManager);
-
- LifecycleUtil.activate(mappingStrategy);
-
createdTables = CDODBSchema.INSTANCE.create(dbAdapter, connection);
connection.commit();
}
@@ -501,6 +493,17 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
DBUtil.close(connection);
}
+ dbSchema = createSchema();
+
+ externalReferenceManager = createExternalReferenceManager();
+ externalReferenceManager.setStore(this);
+ LifecycleUtil.activate(externalReferenceManager);
+
+ metaDataManager = new MetaDataManager(this);
+ LifecycleUtil.activate(metaDataManager);
+
+ LifecycleUtil.activate(mappingStrategy);
+
if (isFirstStart(createdTables))
{
firstStart();
@@ -509,10 +512,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
{
reStart();
}
-
- externalReferenceManager = createExternalReferenceManager();
- externalReferenceManager.setStore(this);
- LifecycleUtil.activate(externalReferenceManager);
}
@Override
@@ -527,7 +526,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
map.put(PROP_REPOSITORY_STOPPED, Long.toString(getRepository().getTimeStamp()));
map.put(PROP_NEXT_LOCAL_CDOID, Long.toString(getNextLocalObjectID()));
map.put(PROP_LAST_CDOID, Long.toString(getLastObjectID()));
- map.put(PROP_LAST_METAID, Long.toString(getLastMetaID()));
map.put(PROP_LAST_BRANCHID, Integer.toString(getLastBranchID()));
map.put(PROP_LAST_LOCAL_BRANCHID, Integer.toString(getLastLocalBranchID()));
map.put(PROP_LAST_COMMITTIME, Long.toString(getLastCommitTime()));
@@ -579,7 +577,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
names.clear();
names.add(PROP_NEXT_LOCAL_CDOID);
names.add(PROP_LAST_CDOID);
- names.add(PROP_LAST_METAID);
names.add(PROP_LAST_BRANCHID);
names.add(PROP_LAST_LOCAL_BRANCHID);
names.add(PROP_LAST_COMMITTIME);
@@ -588,7 +585,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
setNextLocalObjectID(Long.valueOf(map.get(PROP_NEXT_LOCAL_CDOID)));
setLastObjectID(Long.valueOf(map.get(PROP_LAST_CDOID)));
- setLastMetaID(Long.valueOf(map.get(PROP_LAST_METAID)));
setLastBranchID(Integer.valueOf(map.get(PROP_LAST_BRANCHID)));
setLastLocalBranchID(Integer.valueOf(map.get(PROP_LAST_LOCAL_BRANCHID)));
setLastCommitTime(Long.valueOf(map.get(PROP_LAST_COMMITTIME)));
@@ -608,9 +604,6 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
setNextLocalObjectID(result[0]);
setLastObjectID(result[1]);
- long lastMetaID = DBUtil.selectMaximumLong(connection, CDODBSchema.PACKAGE_INFOS_META_UB);
- setLastMetaID(lastMetaID);
-
int branchID = DBUtil.selectMaximumInt(connection, CDODBSchema.BRANCHES_ID);
setLastBranchID(branchID > 0 ? branchID : 0);
@@ -624,7 +617,9 @@ public class DBStore extends LongIDStore implements IDBStore, CDOAllRevisionsPro
CDOBranch.MAIN_BRANCH_ID + "<=" + CDODBSchema.COMMIT_INFOS_BRANCH);
setLastNonLocalCommitTime(lastNonLocalCommitTime);
- OM.LOG.info(MessageFormat.format(Messages.getString("DBStore.10"), getLastObjectID(), getLastMetaID())); //$NON-NLS-1$
+ OM.LOG
+ .info(MessageFormat.format(
+ Messages.getString("DBStore.10"), getLastObjectID(), getNextLocalObjectID(), getLastBranchID(), getLastCommitTime(), getLastNonLocalCommitTime())); //$NON-NLS-1$
}
catch (SQLException e)
{
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 9d425f47f3..dcc9052a5e 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
@@ -705,6 +705,8 @@ public class DBStoreAccessor extends LongIDStoreAccessor implements IDBStoreAcce
@Override
protected final void rollback(IStoreAccessor.CommitContext commitContext)
{
+ getStore().getMetaDataManager().clearMetaIDMappings();
+
if (TRACER.isEnabled())
{
TRACER.format("--- DB ROLLBACK ---"); //$NON-NLS-1$
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java
index d88492f8aa..c519471363 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java
@@ -68,18 +68,27 @@ public class ExternalReferenceManager extends Lifecycle implements IExternalRefe
public long mapExternalReference(IDBStoreAccessor accessor, CDOIDExternal id, long commitTime)
{
- String uri = id.getURI();
+ return mapURI(accessor, id.getURI(), commitTime);
+ }
+
+ public CDOIDExternal unmapExternalReference(IDBStoreAccessor accessor, long mappedId)
+ {
+ return CDOIDUtil.createExternal(unmapURI(accessor, mappedId));
+ }
+
+ public long mapURI(IDBStoreAccessor accessor, String uri, long commitTime)
+ {
long result = lookupByID(accessor, uri);
if (result < DBStore.NULL)
{
// mapping found
return result;
}
-
+
return insertNew(accessor, uri, commitTime);
}
- public CDOIDExternal unmapExternalReference(IDBStoreAccessor accessor, long mappedId)
+ public String unmapURI(IDBStoreAccessor accessor, long mappedId)
{
PreparedStatement stmt = null;
ResultSet rs = null;
@@ -97,7 +106,7 @@ public class ExternalReferenceManager extends Lifecycle implements IExternalRefe
}
String uri = rs.getString(1);
- return CDOIDUtil.createExternal(uri);
+ return uri;
}
catch (SQLException e)
{
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java
index 15532ce94c..d577a6d7eb 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java
@@ -13,17 +13,15 @@
*/
package org.eclipse.emf.cdo.server.internal.db;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
-import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.server.db.IDBStore;
+import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
+import org.eclipse.emf.cdo.server.db.IExternalReferenceManager;
+import org.eclipse.emf.cdo.server.db.IExternalReferenceManager.Internal;
import org.eclipse.emf.cdo.server.db.IMetaDataManager;
import org.eclipse.emf.cdo.server.internal.db.bundle.OM;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
@@ -39,10 +37,12 @@ import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import java.io.IOException;
import java.sql.Connection;
@@ -66,22 +66,53 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
private IDBStore store;
+ private Map<EModelElement, Long> modelElementToMetaID = new HashMap<EModelElement, Long>();
+
+ private Map<Long, EModelElement> metaIDToModelElement = new HashMap<Long, EModelElement>();
+
public MetaDataManager(IDBStore store)
{
this.store = store;
}
- public long getMetaID(EModelElement modelElement)
+ public synchronized long getMetaID(IDBStoreAccessor accessor, EModelElement modelElement, long commitTime)
{
- CDOID cdoid = getPackageRegistry().getMetaInstanceMapper().lookupMetaInstanceID((InternalEObject)modelElement);
- return CDOIDUtil.getLong(cdoid);
+ Long metaID = modelElementToMetaID.get(modelElement);
+ if (metaID != null)
+ {
+ return metaID;
+ }
+
+ IExternalReferenceManager.Internal manager = (Internal)getStore().getExternalReferenceManager();
+ String uri = EcoreUtil.getURI(modelElement).toString();
+
+ metaID = manager.mapURI(accessor, uri, commitTime);
+ cacheMetaIDMapping(modelElement, metaID);
+
+ return metaID;
}
- public EModelElement getMetaInstance(long id)
+ public synchronized EModelElement getMetaInstance(IDBStoreAccessor accessor, long id)
{
- CDOIDMeta cdoid = CDOIDUtil.createMeta(id);
- InternalEObject metaInstance = getPackageRegistry().getMetaInstanceMapper().lookupMetaInstance(cdoid);
- return (EModelElement)metaInstance;
+ EModelElement modelElement = metaIDToModelElement.get(id);
+ if (modelElement != null)
+ {
+ return modelElement;
+ }
+
+ IExternalReferenceManager.Internal externalManager = (Internal)getStore().getExternalReferenceManager();
+ String uri = externalManager.unmapURI(accessor, id);
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ resourceSet.setPackageRegistry(getStore().getRepository().getPackageRegistry());
+
+ return (EModelElement)resourceSet.getEObject(URI.createURI(uri), true);
+ }
+
+ public synchronized void clearMetaIDMappings()
+ {
+ modelElementToMetaID.clear();
+ metaIDToModelElement.clear();
}
public final EPackage[] loadPackageUnit(Connection connection, InternalCDOPackageUnit packageUnit)
@@ -152,7 +183,14 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
@Override
protected void doBeforeActivate() throws Exception
{
- checkState(store != null, "Store is not set"); //$NON-NLS-1$
+ checkState(store, "Store is not set"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ clearMetaIDMappings();
+ super.doDeactivate();
}
protected InternalCDOPackageInfo createPackageInfo()
@@ -179,8 +217,7 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
private byte[] getEPackageBytes(InternalCDOPackageUnit packageUnit)
{
EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
- CDOPackageRegistry packageRegistry = getStore().getRepository().getPackageRegistry();
- return EMFUtil.getEPackageBytes(ePackage, ZIP_PACKAGE_BYTES, packageRegistry);
+ return EMFUtil.getEPackageBytes(ePackage, ZIP_PACKAGE_BYTES, getPackageRegistry());
}
private void fillSystemTables(Connection connection, InternalCDOPackageUnit packageUnit, OMMonitor monitor)
@@ -269,11 +306,8 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
String packageURI = packageInfo.getPackageURI();
String parentURI = packageInfo.getParentURI();
String unitID = packageInfo.getPackageUnit().getID();
- CDOIDMetaRange metaIDRange = packageInfo.getMetaIDRange();
- long metaLB = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getLowerBound()).getLongValue();
- long metaUB = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getUpperBound()).getLongValue();
- String sql = "INSERT INTO " + CDODBSchema.PACKAGE_INFOS + " VALUES (?, ?, ?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
+ String sql = "INSERT INTO " + CDODBSchema.PACKAGE_INFOS + " VALUES (?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
DBUtil.trace(sql);
PreparedStatement pstmt = null;
Async async = monitor.forkAsync();
@@ -284,8 +318,6 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
pstmt.setString(1, packageURI);
pstmt.setString(2, parentURI);
pstmt.setString(3, unitID);
- pstmt.setLong(4, metaLB);
- pstmt.setLong(5, metaUB);
if (pstmt.execute())
{
@@ -344,15 +376,9 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
{
public boolean handle(int row, final Object... values)
{
- long metaLB = (Long)values[3];
- long metaUB = (Long)values[4];
- CDOIDMetaRange metaIDRange = metaLB == 0 ? null : CDOIDUtil.createMetaRange(CDOIDUtil.createMeta(metaLB),
- (int)(metaUB - metaLB) + 1);
-
InternalCDOPackageInfo packageInfo = createPackageInfo();
packageInfo.setPackageURI((String)values[1]);
packageInfo.setParentURI((String)values[2]);
- packageInfo.setMetaIDRange(metaIDRange);
String unit = (String)values[0];
List<InternalCDOPackageInfo> list = packageInfos.get(unit);
@@ -373,7 +399,7 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
try
{
DBUtil.select(connection, infoRowHandler, CDODBSchema.PACKAGE_INFOS_UNIT, CDODBSchema.PACKAGE_INFOS_URI,
- CDODBSchema.PACKAGE_INFOS_PARENT, CDODBSchema.PACKAGE_INFOS_META_LB, CDODBSchema.PACKAGE_INFOS_META_UB);
+ CDODBSchema.PACKAGE_INFOS_PARENT);
}
finally
{
@@ -393,4 +419,10 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager
return packageUnits.values();
}
+
+ private void cacheMetaIDMapping(EModelElement modelElement, Long metaID)
+ {
+ modelElementToMetaID.put(modelElement, metaID);
+ metaIDToModelElement.put(metaID, modelElement);
+ }
}
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 c890bde45e..d10093802a 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
@@ -45,6 +45,8 @@ import org.eclipse.net4j.util.ImplementationError;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.collection.CloseableIterator;
import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.monitor.Monitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
@@ -316,7 +318,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
prefix += NAME_SEPARATOR;
}
- return getName(prefix + name, typePrefix + getMetaDataManager().getMetaID(element), getMaxTableNameLength());
+ return getName(prefix + name, typePrefix + getUniqueID(element), getMaxTableNameLength());
}
public String getTableName(EClass eClass, EStructuralFeature feature)
@@ -337,8 +339,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
prefix += NAME_SEPARATOR;
}
- return getName(prefix + name, TYPE_PREFIX_FEATURE + getMetaDataManager().getMetaID(feature),
- getMaxTableNameLength());
+ return getName(prefix + name, TYPE_PREFIX_FEATURE + getUniqueID(feature), getMaxTableNameLength());
}
public String getFieldName(EStructuralFeature feature)
@@ -346,8 +347,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
String name = DBAnnotation.COLUMN_NAME.getValue(feature);
if (name == null)
{
- name = getName(feature.getName(), TYPE_PREFIX_FEATURE + getMetaDataManager().getMetaID(feature),
- getMaxFieldNameLength());
+ name = getName(feature.getName(), TYPE_PREFIX_FEATURE + getUniqueID(feature), getMaxFieldNameLength());
}
return name;
@@ -361,7 +361,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
return CDO_SET_PREFIX + name;
}
- return getName(CDO_SET_PREFIX + feature.getName(), TYPE_PREFIX_FEATURE + getMetaDataManager().getMetaID(feature),
+ return getName(CDO_SET_PREFIX + feature.getName(), TYPE_PREFIX_FEATURE + getUniqueID(feature),
getMaxFieldNameLength());
}
@@ -388,6 +388,30 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
return name;
}
+ private long getUniqueID(ENamedElement element)
+ {
+ // TODO: replace with a better logic. For now, we fall back to the
+ // element IDs...
+
+ IDBStoreAccessor accessor = getStore().getWriter(null);
+
+ try
+ {
+ long result = getMetaDataManager().getMetaID(accessor, element, System.currentTimeMillis());
+ accessor.commit(new Monitor());
+ return Math.abs(result);
+ }
+ catch (Throwable t)
+ {
+ accessor.rollback();
+ throw new DBException(t);
+ }
+ finally
+ {
+ LifecycleUtil.deactivate(accessor); // do not let the null-accessor go into the pool!
+ }
+ }
+
// -- factories for mapping of classes, values, lists ------------------
public void createMapping(Connection connection, InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractFeatureMapTableMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractFeatureMapTableMapping.java
index a2961d8c2c..c2c556c472 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractFeatureMapTableMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractFeatureMapTableMapping.java
@@ -299,14 +299,14 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
while ((listChunk == CDORevision.UNCHUNKED || --listChunk >= 0) && resultSet.next())
{
Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
+ Object value = getTypeMapping(accessor, tag).readValue(resultSet);
if (TRACER.isEnabled())
{
TRACER.format("Read value for index {0} from result set: {1}", list.size(), value);
}
- list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
+ list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(accessor, tag), value));
}
}
catch (SQLException ex)
@@ -326,9 +326,9 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
}
}
- private void addFeature(Long tag)
+ private void addFeature(IDBStoreAccessor accessor, long tag)
{
- EStructuralFeature modelFeature = getFeatureByTag(tag);
+ EStructuralFeature modelFeature = getFeatureByTag(accessor, tag);
ITypeMapping typeMapping = getMappingStrategy().createValueMapping(modelFeature);
String column = CDODBSchema.FEATUREMAP_VALUE + "_" + typeMapping.getDBType();
@@ -375,7 +375,7 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
while (resultSet.next())
{
Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
+ Object value = getTypeMapping(chunkReader.getAccessor(), tag).readValue(resultSet);
if (chunk == null)
{
@@ -394,7 +394,8 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
TRACER.format("Read value for chunk index {0} from result set: {1}", indexInChunk, value);
}
- chunk.add(indexInChunk++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
+ chunk.add(indexInChunk++,
+ CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(chunkReader.getAccessor(), tag), value));
if (indexInChunk == chunkSize)
{
if (TRACER.isEnabled())
@@ -409,8 +410,8 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
if (TRACER.isEnabled())
{
- TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}v{3}", getContainingClass().getName(),
- getTagByFeature(getFeature()), chunkReader.getRevision().getID(), chunkReader.getRevision().getVersion());
+ TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}", getContainingClass().getName(),
+ getFeature(), chunkReader.getRevision());
}
}
catch (SQLException ex)
@@ -444,15 +445,15 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
{
TRACER
.format(
- "Writing value for feature {0}.{1} index {2} of {3}v{4} : {5}", getContainingClass().getName(), getTagByFeature(getFeature()), idx, revision.getID(), revision.getVersion(), value); //$NON-NLS-1$
+ "Writing value for feature {0}.{1} index {2} of {3} : {4}", getContainingClass().getName(), getFeature(), idx, revision, value); //$NON-NLS-1$
}
try
{
FeatureMap.Entry entry = (FeatureMap.Entry)value;
EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
+ Long tag = getTagByFeature(accessor, entryFeature, revision.getTimeStamp());
+ String column = getColumnName(accessor, tag);
String sql = sqlInsert;
stmt = statementCache.getPreparedStatement(sql, ReuseProbability.HIGH);
@@ -463,7 +464,7 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
{
if (columnNames.get(i).equals(column))
{
- getTypeMapping(tag).setValue(stmt, stmtIndex++, entry.getValue());
+ getTypeMapping(accessor, tag).setValue(stmt, stmtIndex++, entry.getValue());
}
else
{
@@ -492,12 +493,12 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
* The feature's MetaID in CDO
* @return the column name where the values are stored
*/
- protected String getColumnName(Long tag)
+ protected String getColumnName(IDBStoreAccessor accessor, Long tag)
{
String column = tagMap.get(tag);
if (column == null)
{
- addFeature(tag);
+ addFeature(accessor, tag);
column = tagMap.get(tag);
}
@@ -511,12 +512,12 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
* The feature's MetaID in CDO
* @return the corresponding type mapping
*/
- protected ITypeMapping getTypeMapping(Long tag)
+ protected ITypeMapping getTypeMapping(IDBStoreAccessor accessor, Long tag)
{
ITypeMapping typeMapping = typeMappings.get(tag);
if (typeMapping == null)
{
- addFeature(tag);
+ addFeature(accessor, tag);
typeMapping = typeMappings.get(tag);
}
@@ -527,9 +528,9 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
* @param metaID
* @return the column name where the values are stored
*/
- private EStructuralFeature getFeatureByTag(Long tag)
+ private EStructuralFeature getFeatureByTag(IDBStoreAccessor accessor, long tag)
{
- return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(tag);
+ return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(accessor, tag);
}
/**
@@ -537,9 +538,9 @@ public abstract class AbstractFeatureMapTableMapping extends BasicAbstractListTa
* The EStructuralFeature
* @return The feature's MetaID in CDO
*/
- protected Long getTagByFeature(EStructuralFeature feature)
+ protected Long getTagByFeature(IDBStoreAccessor accessor, EStructuralFeature feature, long timeStamp)
{
- return getMappingStrategy().getStore().getMetaDataManager().getMetaID(feature);
+ return getMappingStrategy().getStore().getMetaDataManager().getMetaID(accessor, feature, timeStamp);
}
/**
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 a10fadd826..ec1c15b849 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
@@ -119,7 +119,6 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping
IDBField branchField = addBranchingField(table);
- table.addField(CDODBSchema.ATTRIBUTES_CLASS, DBType.BIGINT, true);
table.addField(CDODBSchema.ATTRIBUTES_CREATED, DBType.BIGINT, true);
IDBField revisedField = table.addField(CDODBSchema.ATTRIBUTES_REVISED, DBType.BIGINT, true);
table.addField(CDODBSchema.ATTRIBUTES_RESOURCE, DBType.BIGINT, true);
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
index a8f8ada17f..8583c3c78a 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
@@ -424,14 +424,14 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
while ((listChunk == CDORevision.UNCHUNKED || --listChunk >= 0) && resultSet.next())
{
Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
+ Object value = getTypeMapping(accessor, tag).readValue(resultSet);
if (TRACER.isEnabled())
{
TRACER.format("Read value for index {0} from result set: {1}", list.size(), value); //$NON-NLS-1$
}
- list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
+ list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(accessor, tag), value));
}
}
catch (SQLException ex)
@@ -451,9 +451,9 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
}
- private void addFeature(Long tag)
+ private void addFeature(IDBStoreAccessor accessor, Long tag)
{
- EStructuralFeature modelFeature = getFeatureByTag(tag);
+ EStructuralFeature modelFeature = getFeatureByTag(accessor, tag);
ITypeMapping typeMapping = getMappingStrategy().createValueMapping(modelFeature);
String column = CDODBSchema.FEATUREMAP_VALUE + "_" + typeMapping.getDBType(); //$NON-NLS-1$
@@ -502,7 +502,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
while (resultSet.next())
{
Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
+ Object value = getTypeMapping(chunkReader.getAccessor(), tag).readValue(resultSet);
if (chunk == null)
{
@@ -521,7 +521,8 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
TRACER.format("Read value for chunk index {0} from result set: {1}", indexInChunk, value); //$NON-NLS-1$
}
- chunk.add(indexInChunk++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
+ chunk.add(indexInChunk++,
+ CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(chunkReader.getAccessor(), tag), value));
if (indexInChunk == chunkSize)
{
if (TRACER.isEnabled())
@@ -536,8 +537,8 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
if (TRACER.isEnabled())
{
- TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}v{3}", getContainingClass().getName(), //$NON-NLS-1$
- getTagByFeature(getFeature()), chunkReader.getRevision().getID(), chunkReader.getRevision().getVersion());
+ TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
+ getFeature(), chunkReader.getRevision());
}
}
catch (SQLException ex)
@@ -573,10 +574,10 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
{
TRACER
.format(
- "Writing value for feature {0}.{1} index {2} of {3}v{4} : {5}", getContainingClass().getName(), getTagByFeature(getFeature()), idx, revision.getID(), revision.getVersion(), value); //$NON-NLS-1$
+ "Writing value for feature {0}.{1} index {2} of {3} : {4}", getContainingClass().getName(), getFeature(), idx, revision, value); //$NON-NLS-1$
}
- addEntry(accessor, revision.getID(), revision.getVersion(), idx, value);
+ addEntry(accessor, revision.getID(), revision.getVersion(), idx, value, revision.getTimeStamp());
}
/**
@@ -586,12 +587,12 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
* The feature's MetaID in CDO
* @return the column name where the values are stored
*/
- protected String getColumnName(Long tag)
+ protected String getColumnName(IDBStoreAccessor accessor, Long tag)
{
String column = tagMap.get(tag);
if (column == null)
{
- addFeature(tag);
+ addFeature(accessor, tag);
column = tagMap.get(tag);
}
@@ -605,12 +606,12 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
* The feature's MetaID in CDO
* @return the corresponding type mapping
*/
- protected ITypeMapping getTypeMapping(Long tag)
+ protected ITypeMapping getTypeMapping(IDBStoreAccessor accessor, Long tag)
{
ITypeMapping typeMapping = typeMappings.get(tag);
if (typeMapping == null)
{
- addFeature(tag);
+ addFeature(accessor, tag);
typeMapping = typeMappings.get(tag);
}
@@ -621,9 +622,9 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
* @param metaID
* @return the column name where the values are stored
*/
- private EStructuralFeature getFeatureByTag(Long tag)
+ private EStructuralFeature getFeatureByTag(IDBStoreAccessor accessor, Long tag)
{
- return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(tag);
+ return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(accessor, tag);
}
/**
@@ -631,9 +632,9 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
* The EStructuralFeature
* @return The feature's MetaID in CDO
*/
- protected Long getTagByFeature(EStructuralFeature feature)
+ protected Long getTagByFeature(IDBStoreAccessor accessor, EStructuralFeature feature, long timestamp)
{
- return getMappingStrategy().getStore().getMetaDataManager().getMetaID(feature);
+ return getMappingStrategy().getStore().getMetaDataManager().getMetaID(accessor, feature, timestamp);
}
/**
@@ -718,7 +719,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
// let the visitor collect the changes
- ListDeltaVisitor visitor = new ListDeltaVisitor(accessor, originalRevision, oldVersion, newVersion);
+ ListDeltaVisitor visitor = new ListDeltaVisitor(accessor, originalRevision, oldVersion, newVersion, created);
if (TRACER.isEnabled())
{
@@ -745,8 +746,10 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
private int lastIndex;
+ private long timestamp;
+
public ListDeltaVisitor(IDBStoreAccessor accessor, InternalCDORevision originalRevision, int oldVersion,
- int newVersion)
+ int newVersion, long timestamp)
{
this.accessor = accessor;
this.originalRevision = originalRevision;
@@ -754,6 +757,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
this.oldVersion = oldVersion;
this.newVersion = newVersion;
lastIndex = originalRevision.getList(getFeature()).size() - 1;
+ this.timestamp = timestamp;
}
public void visit(CDOMoveFeatureDelta delta)
@@ -782,7 +786,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
// create the item
- addEntry(accessor, id, newVersion, toIdx, value);
+ addEntry(accessor, id, newVersion, toIdx, value, timestamp);
}
public void visit(CDOAddFeatureDelta delta)
@@ -802,7 +806,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
// create the item
- addEntry(accessor, id, newVersion, startIndex, delta.getValue());
+ addEntry(accessor, id, newVersion, startIndex, delta.getValue(), timestamp);
++lastIndex;
}
@@ -839,7 +843,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
removeEntry(accessor, id, oldVersion, newVersion, index);
// create the item
- addEntry(accessor, id, newVersion, index, delta.getValue());
+ addEntry(accessor, id, newVersion, index, delta.getValue(), timestamp);
}
public void visit(CDOUnsetFeatureDelta delta)
@@ -918,7 +922,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
TRACER.format("moveOneUp add: {0}", index - 1); //$NON-NLS-1$
}
- addEntry(accessor, id, newVersion, index - 1, value);
+ addEntry(accessor, id, newVersion, index - 1, value, timestamp);
break;
case 1:
@@ -987,7 +991,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
TRACER.format("moveOneDown add: {0}", index + 1); //$NON-NLS-1$
}
- addEntry(accessor, id, newVersion, index + 1, value);
+ addEntry(accessor, id, newVersion, index + 1, value, timestamp);
break;
case 1:
@@ -1019,7 +1023,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
}
- private void addEntry(IDBStoreAccessor accessor, CDOID id, int version, int index, Object value)
+ private void addEntry(IDBStoreAccessor accessor, CDOID id, int version, int index, Object value, long timestamp)
{
IPreparedStatementCache statementCache = accessor.getStatementCache();
PreparedStatement pstmt = null;
@@ -1034,8 +1038,8 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
{
FeatureMap.Entry entry = (FeatureMap.Entry)value;
EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
+ Long tag = getTagByFeature(accessor, entryFeature, timestamp);
+ String column = getColumnName(accessor, tag);
pstmt = statementCache.getPreparedStatement(sqlInsert, ReuseProbability.HIGH);
@@ -1048,7 +1052,7 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
{
if (columnNames.get(i).equals(column))
{
- getTypeMapping(tag).setValue(pstmt, stmtIndex++, entry.getValue());
+ getTypeMapping(accessor, tag).setValue(pstmt, stmtIndex++, entry.getValue());
}
else
{
@@ -1172,8 +1176,8 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
- result = CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value);
+ Object value = getTypeMapping(accessor, tag).readValue(resultSet);
+ result = CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(accessor, tag), value);
if (TRACER.isEnabled())
{
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
index 57076ca100..0fe1abbc87 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
@@ -1,1479 +1,1489 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stefan Winkler - initial API and implementation taken from AuditFeatureMapTableMappingWithRanges
- * Stefan Winkler - Bug 329025: [DB] Support branching for range-based mapping strategy
- */
-package org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.revision.CDOList;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
-import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
-import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
-import org.eclipse.emf.cdo.server.IStoreAccessor.QueryXRefsContext;
-import org.eclipse.emf.cdo.server.IStoreChunkReader;
-import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk;
-import org.eclipse.emf.cdo.server.db.CDODBUtil;
-import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
-import org.eclipse.emf.cdo.server.db.IDBStoreChunkReader;
-import org.eclipse.emf.cdo.server.db.IPreparedStatementCache;
-import org.eclipse.emf.cdo.server.db.IPreparedStatementCache.ReuseProbability;
-import org.eclipse.emf.cdo.server.db.mapping.IListMappingDeltaSupport;
-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.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-import org.eclipse.net4j.db.DBException;
-import org.eclipse.net4j.db.DBType;
-import org.eclipse.net4j.db.DBUtil;
-import org.eclipse.net4j.db.ddl.IDBField;
-import org.eclipse.net4j.db.ddl.IDBIndex.Type;
-import org.eclipse.net4j.db.ddl.IDBTable;
-import org.eclipse.net4j.util.ImplementationError;
-import org.eclipse.net4j.util.collection.MoveableList;
-import org.eclipse.net4j.util.om.trace.ContextTracer;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.util.FeatureMap;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * This is a featuremap-table mapping for audit mode. It is optimized for frequent insert operations at the list's end,
- * which causes just 1 DB row to be changed. This is achieved by introducing a version range (columns
- * {@link CDODBSchema#LIST_REVISION_VERSION_ADDED cdo_version_added} and
- * {@link CDODBSchema#LIST_REVISION_VERSION_REMOVED cdo_version_removed}) which records for which revisions a particular
- * entry existed. Also, this mapping is mainly optimized for potentially very large lists: the need for having the
- * complete list stored in memory to do in-the-middle-moved and inserts is traded in for a few more DB access
- * operations.
- *
- * @author Eike Stepper
- * @author Stefan Winkler
- * @author Lothar Werzinger
- * @since 3.0
- */
-public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractListTableMapping implements
- IListMappingDeltaSupport
-{
- private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG,
- BranchingFeatureMapTableMappingWithRanges.class);
-
- /**
- * Used to clean up lists for detached objects.
- */
- private static final int FINAL_VERSION = Integer.MAX_VALUE;
-
- /**
- * The table of this mapping.
- */
- private IDBTable table;
-
- /**
- * The tags mapped to column names
- */
- private HashMap<Long, String> tagMap;
-
- /**
- * Column name Set
- */
- private List<String> columnNames;
-
- /**
- * The type mappings for the value fields.
- */
- private Map<Long, ITypeMapping> typeMappings;
-
- // --------- SQL strings - see initSQLStrings() -----------------
- private String sqlSelectChunksPrefix;
-
- private String sqlOrderByIndex;
-
- protected String sqlInsert;
-
- private List<DBType> dbTypes;
-
- private String sqlRemoveEntry;
-
- private String sqlDeleteEntry;
-
- private String sqlUpdateIndex;
-
- private String sqlGetValue;
-
- private String sqlClearList;
-
- public BranchingFeatureMapTableMappingWithRanges(IMappingStrategy mappingStrategy, EClass eClass,
- EStructuralFeature feature)
- {
- super(mappingStrategy, eClass, feature);
- initDBTypes();
- initTable();
- initSQLStrings();
- }
-
- private void initDBTypes()
- {
- // TODO add annotation processing here ...
- ITypeMapping.Registry registry = ITypeMapping.Registry.INSTANCE;
- dbTypes = new ArrayList<DBType>(registry.getDefaultFeatureMapDBTypes());
- }
-
- private void initTable()
- {
- String tableName = getMappingStrategy().getTableName(getContainingClass(), getFeature());
- table = getMappingStrategy().getStore().getDBSchema().addTable(tableName);
-
- // add fields for CDOID
- IDBField idField = table.addField(CDODBSchema.FEATUREMAP_REVISION_ID, DBType.INTEGER);
-
- IDBField branchField = table.addField(CDODBSchema.LIST_REVISION_BRANCH, DBType.INTEGER);
-
- // add fields for version range
- IDBField versionAddedField = table.addField(CDODBSchema.FEATUREMAP_VERSION_ADDED, DBType.INTEGER);
- IDBField versionRemovedField = table.addField(CDODBSchema.FEATUREMAP_VERSION_REMOVED, DBType.INTEGER);
-
- // add field for list index
- IDBField idxField = table.addField(CDODBSchema.FEATUREMAP_IDX, DBType.INTEGER);
-
- // add field for FeatureMap tag (MetaID for Feature in CDO registry)
- IDBField tagField = table.addField(CDODBSchema.FEATUREMAP_TAG, DBType.INTEGER);
-
- tagMap = new HashMap<Long, String>();
- typeMappings = new HashMap<Long, ITypeMapping>();
- columnNames = new ArrayList<String>();
-
- // create columns for all DBTypes
- for (DBType type : getDBTypes())
- {
- String column = CDODBSchema.FEATUREMAP_VALUE + "_" + type.name();
- table.addField(column, type);
- columnNames.add(column);
- }
-
- table.addIndex(Type.NON_UNIQUE, idField);
- table.addIndex(Type.NON_UNIQUE, branchField);
- table.addIndex(Type.NON_UNIQUE, versionAddedField);
- table.addIndex(Type.NON_UNIQUE, versionRemovedField);
- table.addIndex(Type.NON_UNIQUE, idxField);
- table.addIndex(Type.NON_UNIQUE, tagField);
- }
-
- public Collection<IDBTable> getDBTables()
- {
- return Arrays.asList(table);
- }
-
- private void initSQLStrings()
- {
- String tableName = getTable().getName();
-
- // ---------------- SELECT to read chunks ----------------------------
- StringBuilder builder = new StringBuilder();
- builder.append("SELECT "); //$NON-NLS-1$
-
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_TAG);
- builder.append(", "); //$NON-NLS-1$
-
- Iterator<String> iter = columnNames.iterator();
- while (iter.hasNext())
- {
- builder.append(iter.next());
- if (iter.hasNext())
- {
- builder.append(", "); //$NON-NLS-1$
- }
- }
-
- builder.append(" FROM "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
- builder.append("<=? AND ("); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(" IS NULL OR "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(">?)"); //$NON-NLS-1$
- sqlSelectChunksPrefix = builder.toString();
-
- sqlOrderByIndex = " ORDER BY " + CDODBSchema.FEATUREMAP_IDX; //$NON-NLS-1$
-
- // ----------------- INSERT - prefix -----------------
- builder = new StringBuilder("INSERT INTO "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append("("); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(","); //$NON-NLS-1$
-
- for (int i = 0; i < columnNames.size(); i++)
- {
- builder.append(columnNames.get(i));
- builder.append(", "); //$NON-NLS-1$
- }
-
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_TAG);
- builder.append(") VALUES (?, ?, ?, ?, "); //$NON-NLS-1$
- for (int i = 0; i < columnNames.size(); i++)
- {
- builder.append("?, "); //$NON-NLS-1$
- }
-
- builder.append("?, ?)"); //$NON-NLS-1$
- sqlInsert = builder.toString();
-
- // ----------------- remove current entry -----------------
- builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" SET "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append("=? "); //$NON-NLS-1$
- builder.append(" WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(" IS NULL"); //$NON-NLS-1$
- sqlRemoveEntry = builder.toString();
-
- // ----------------- delete temporary entry -----------------
- builder = new StringBuilder("DELETE FROM "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
- builder.append("=?"); //$NON-NLS-1$
- sqlDeleteEntry = builder.toString();
-
- // ----------------- update index -----------------
- builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" SET "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append("=? WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append("=?"); //$NON-NLS-1$
- sqlUpdateIndex = builder.toString();
-
- // ----------------- get current value -----------------
- builder = new StringBuilder("SELECT "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_TAG);
- builder.append(", "); //$NON-NLS-1$
-
- iter = columnNames.iterator();
- while (iter.hasNext())
- {
- builder.append(iter.next());
- if (iter.hasNext())
- {
- builder.append(", "); //$NON-NLS-1$
- }
- }
-
- builder.append(" FROM "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(" IS NULL"); //$NON-NLS-1$
- sqlGetValue = builder.toString();
-
- // ----------- clear list items -------------------------
- builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
- builder.append(tableName);
- builder.append(" SET "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append("=? "); //$NON-NLS-1$
- builder.append(" WHERE "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append("=? AND "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(" IS NULL"); //$NON-NLS-1$
- sqlClearList = builder.toString();
- }
-
- protected List<DBType> getDBTypes()
- {
- return dbTypes;
- }
-
- protected final IDBTable getTable()
- {
- return table;
- }
-
- protected final List<String> getColumnNames()
- {
- return columnNames;
- }
-
- protected final Map<Long, ITypeMapping> getTypeMappings()
- {
- return typeMappings;
- }
-
- protected final Map<Long, String> getTagMap()
- {
- return tagMap;
- }
-
- public void readValues(IDBStoreAccessor accessor, InternalCDORevision revision, int listChunk)
- {
- MoveableList<Object> list = revision.getList(getFeature());
- int valuesToRead = list.size();
-
- if (listChunk != CDORevision.UNCHUNKED && listChunk < valuesToRead)
- {
- valuesToRead = listChunk;
- }
-
- if (valuesToRead == 0)
- {
- // nothing to read take shortcut
- return;
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Reading list values for feature {0}.{1} of {2}", getContainingClass().getName(), getFeature() //$NON-NLS-1$
- .getName(), revision);
- }
-
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
- ResultSet resultSet = null;
-
- IStoreChunkReader baseReader = null;
- try
- {
- String sql = sqlSelectChunksPrefix + sqlOrderByIndex;
-
- CDOID id = revision.getID();
- int branchID = revision.getBranch().getID();
-
- pstmt = statementCache.getPreparedStatement(sql, ReuseProbability.HIGH);
- pstmt.setLong(1, CDOIDUtil.getLong(id));
- pstmt.setInt(2, branchID);
- pstmt.setInt(3, revision.getVersion());
- pstmt.setInt(4, revision.getVersion());
-
- pstmt.setMaxRows(valuesToRead); // optimization - don't read unneeded rows.
-
- resultSet = pstmt.executeQuery();
-
- int currentIndex = 0;
-
- while (valuesToRead > 0 && resultSet.next())
- {
- int index = resultSet.getInt(1);
- if (index > currentIndex)
- {
- if (baseReader == null)
- {
- baseReader = createBaseChunkReader(accessor, id, branchID);
- }
-
- baseReader.addRangedChunk(currentIndex, index);
- if (TRACER.isEnabled())
- {
- TRACER.format("Scheduling range {0}-{1} to be read from base revision", currentIndex, index); //$NON-NLS-1$
- }
-
- valuesToRead -= index - currentIndex;
- currentIndex = index;
- }
-
- Long tag = resultSet.getLong(2);
- Object value = getTypeMapping(tag).readValue(resultSet);
- if (TRACER.isEnabled())
- {
- TRACER.format("Read value for index {0} from result set: {1}", currentIndex, value); //$NON-NLS-1$
- }
-
- list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
- valuesToRead--;
- }
-
- if (valuesToRead > 0)
- {
- if (baseReader == null)
- {
- baseReader = createBaseChunkReader(accessor, id, branchID);
- }
-
- baseReader.addRangedChunk(currentIndex, currentIndex + valuesToRead);
- }
- }
- catch (SQLException ex)
- {
- throw new DBException(ex);
- }
- finally
- {
- DBUtil.close(resultSet);
- statementCache.releasePreparedStatement(pstmt);
- }
-
- if (baseReader != null)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("Reading base revision chunks for featureMap {0}.{1} of {2} from base revision {3}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), revision, baseReader.getRevision());
- }
-
- List<Chunk> baseChunks = baseReader.executeRead();
- for (Chunk chunk : baseChunks)
- {
- int startIndex = chunk.getStartIndex();
- for (int i = 0; i < chunk.size(); i++)
- {
- list.set(startIndex + i, chunk.get(i));
- }
- }
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Reading list values done for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
- getFeature().getName(), revision);
- }
- }
-
- private void addFeature(Long tag)
- {
- EStructuralFeature modelFeature = getFeatureByTag(tag);
-
- ITypeMapping typeMapping = getMappingStrategy().createValueMapping(modelFeature);
- String column = CDODBSchema.FEATUREMAP_VALUE + "_" + typeMapping.getDBType(); //$NON-NLS-1$
-
- tagMap.put(tag, column);
- typeMapping.setDBField(table, column);
- typeMappings.put(tag, typeMapping);
- }
-
- public final void readChunks(IDBStoreChunkReader chunkReader, List<Chunk> chunks, String where)
- {
- CDORevision revision = chunkReader.getRevision();
- if (TRACER.isEnabled())
- {
- TRACER.format("Reading list chunk values for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
- getFeature().getName(), revision);
- }
-
- IPreparedStatementCache statementCache = chunkReader.getAccessor().getStatementCache();
- PreparedStatement pstmt = null;
- ResultSet resultSet = null;
-
- IStoreChunkReader baseReader = null;
- try
- {
- StringBuilder builder = new StringBuilder(sqlSelectChunksPrefix);
- if (where != null)
- {
- builder.append(" AND "); //$NON-NLS-1$
- builder.append(where);
- }
-
- builder.append(sqlOrderByIndex);
-
- String sql = builder.toString();
- pstmt = statementCache.getPreparedStatement(sql, ReuseProbability.LOW);
- pstmt.setLong(1, CDOIDUtil.getLong(revision.getID()));
- pstmt.setInt(2, revision.getBranch().getID());
- pstmt.setInt(3, revision.getVersion());
- pstmt.setInt(4, revision.getVersion());
-
- resultSet = pstmt.executeQuery();
-
- int nextDBIndex = Integer.MAX_VALUE; // next available DB index
- if (resultSet.next())
- {
- nextDBIndex = resultSet.getInt(1);
- }
-
- for (Chunk chunk : chunks)
- {
- int startIndex = chunk.getStartIndex();
- int missingValueStartIndex = -1;
-
- for (int i = 0; i < chunk.size(); i++)
- {
- int nextListIndex = startIndex + i; // next expected list index
-
- if (nextDBIndex == nextListIndex)
- {
- // DB value is available. check first if missing indexes were present before.
- if (missingValueStartIndex != -1)
- {
- // read missing indexes from missingValueStartIndex to currentIndex
- if (baseReader == null)
- {
- baseReader = createBaseChunkReader(chunkReader.getAccessor(), chunkReader.getRevision().getID(),
- chunkReader.getRevision().getBranch().getID());
- }
- if (TRACER.isEnabled())
- {
- TRACER.format(
- "Scheduling range {0}-{1} to be read from base revision", missingValueStartIndex, nextListIndex); //$NON-NLS-1$
- }
-
- baseReader.addRangedChunk(missingValueStartIndex, nextListIndex);
-
- // reset missingValueStartIndex
- missingValueStartIndex = -1;
- }
-
- // now read value and set to chunk
- Long tag = resultSet.getLong(2);
- Object value = getTypeMapping(tag).readValue(resultSet);
- if (TRACER.isEnabled())
- {
- TRACER.format("ChunkReader read value for index {0} from result set: {1}", nextDBIndex, value); //$NON-NLS-1$
- }
- chunk.add(i, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value));
-
- // advance DB cursor and read next available index
- if (resultSet.next())
- {
- nextDBIndex = resultSet.getInt(1);
- }
- else
- {
- // no more DB indexes available, but we have to continue checking for gaps, therefore set to MAX_VALUE
- nextDBIndex = Integer.MAX_VALUE;
- }
- }
- else
- {
- // gap between next DB index and next list index detected.
- // skip until end of chunk or until DB value becomes available
- if (missingValueStartIndex == -1)
- {
- missingValueStartIndex = nextListIndex;
- }
- }
- }
-
- // chunk complete. check for missing values at the end of the chunk.
- if (missingValueStartIndex != -1)
- {
- // read missing indexes from missingValueStartIndex to last chunk index
- if (baseReader == null)
- {
- baseReader = createBaseChunkReader(chunkReader.getAccessor(), chunkReader.getRevision().getID(),
- chunkReader.getRevision().getBranch().getID());
- }
- baseReader.addRangedChunk(missingValueStartIndex, chunk.getStartIndex() + chunk.size());
- }
- }
- }
- catch (SQLException ex)
- {
- throw new DBException(ex);
- }
- finally
- {
- DBUtil.close(resultSet);
- statementCache.releasePreparedStatement(pstmt);
- }
-
- // now read missing values from base revision.
- if (baseReader != null)
- {
- List<Chunk> baseChunks = baseReader.executeRead();
-
- Iterator<Chunk> thisIterator = chunks.iterator();
- Chunk thisChunk = thisIterator.next();
-
- for (Chunk baseChunk : baseChunks)
- {
- int baseStartIndex = baseChunk.getStartIndex();
-
- while (baseStartIndex > thisChunk.getStartIndex() + thisChunk.size())
- {
- // advance thisChunk, because it does not match baseChunk
- thisChunk = thisIterator.next();
- }
-
- // baseChunk now corresponds to this chunk, but startIndex of baseChunk may be higher.
- // therefore calculate offset
- int offset = thisChunk.getStartIndex() - baseStartIndex;
-
- // and copy values.
- for (int i = 0; i < baseChunk.size(); i++)
- {
- thisChunk.add(i + offset, baseChunk.get(i));
- }
- } // finally, continue with the next baseChunk
-
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
- getTagByFeature(getFeature()), revision);
- }
- }
-
- public void writeValues(IDBStoreAccessor accessor, InternalCDORevision revision)
- {
- CDOList values = revision.getList(getFeature());
-
- int idx = 0;
- for (Object element : values)
- {
- writeValue(accessor, revision, idx++, element);
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Writing done"); //$NON-NLS-1$
- }
- }
-
- protected final void writeValue(IDBStoreAccessor accessor, CDORevision revision, int idx, Object value)
- {
- if (TRACER.isEnabled())
- {
- TRACER
- .format(
- "Writing value for feature {0}.{1} index {2} of {3} : {4}", getContainingClass().getName(), getTagByFeature(getFeature()), idx, revision, value); //$NON-NLS-1$
- }
-
- addEntry(accessor, revision.getID(), revision.getBranch().getID(), revision.getVersion(), idx, value);
- }
-
- /**
- * Get column name (lazy).
- *
- * @param tag
- * The feature's MetaID in CDO
- * @return the column name where the values are stored
- */
- protected String getColumnName(Long tag)
- {
- String column = tagMap.get(tag);
- if (column == null)
- {
- addFeature(tag);
- column = tagMap.get(tag);
- }
-
- return column;
- }
-
- /**
- * Get type mapping (lazy).
- *
- * @param tag
- * The feature's MetaID in CDO
- * @return the corresponding type mapping
- */
- protected ITypeMapping getTypeMapping(Long tag)
- {
- ITypeMapping typeMapping = typeMappings.get(tag);
- if (typeMapping == null)
- {
- addFeature(tag);
- typeMapping = typeMappings.get(tag);
- }
-
- return typeMapping;
- }
-
- /**
- * @param metaID
- * @return the column name where the values are stored
- */
- private EStructuralFeature getFeatureByTag(Long tag)
- {
- return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(tag);
- }
-
- /**
- * @param feature
- * The EStructuralFeature
- * @return The feature's MetaID in CDO
- */
- protected Long getTagByFeature(EStructuralFeature feature)
- {
- return getMappingStrategy().getStore().getMetaDataManager().getMetaID(feature);
- }
-
- /**
- * Clear a list of a given revision.
- *
- * @param accessor
- * the accessor to use
- * @param id
- * the id of the revision from which to remove all items
- */
- public void clearList(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion, int lastIndex)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmtDeleteTemp = null;
- PreparedStatement pstmtClear = null;
-
- try
- {
- // check for each index if the value exists in the current branch
- for (int i = 0; i <= lastIndex; i++)
- {
- if (getValue(accessor, id, branchId, i, false) == null)
- {
- // if not, add a historic entry for missing ones.
- addHistoricEntry(accessor, id, branchId, 0, newVersion, i, getValueFromBase(accessor, id, branchId, i));
- }
- }
-
- // clear rest of the list
- pstmtClear = statementCache.getPreparedStatement(sqlClearList, ReuseProbability.HIGH);
- pstmtClear.setInt(1, newVersion);
- pstmtClear.setLong(2, CDOIDUtil.getLong(id));
- pstmtClear.setInt(3, branchId);
-
- int result = CDODBUtil.sqlUpdate(pstmtClear, false);
- if (TRACER.isEnabled())
- {
- TRACER.format("ClearList result: {0}", result); //$NON-NLS-1$
- }
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmtDeleteTemp);
- statementCache.releasePreparedStatement(pstmtClear);
- }
- }
-
- public void objectDetached(IDBStoreAccessor accessor, CDOID id, long revised)
- {
- InternalCDORevision revision = (InternalCDORevision)accessor.getTransaction().getRevision(id);
- int branchId = accessor.getTransaction().getBranch().getID();
-
- if (TRACER.isEnabled())
- {
- TRACER.format("objectDetached {1}", revision); //$NON-NLS-1$
- }
-
- clearList(accessor, id, branchId, revision.getVersion(), FINAL_VERSION, revision.getList(getFeature()).size() - 1);
- }
-
- public void processDelta(final IDBStoreAccessor accessor, final CDOID id, final int branchId, int oldVersion,
- final int newVersion, long created, CDOListFeatureDelta delta)
- {
- List<CDOFeatureDelta> listChanges = delta.getListChanges();
- if (listChanges.size() == 0)
- {
- // nothing to do.
- return;
- }
-
- InternalCDORevision originalRevision = (InternalCDORevision)accessor.getTransaction().getRevision(id);
- int oldListSize = originalRevision.getList(getFeature()).size();
-
- if (TRACER.isEnabled())
- {
- TRACER.format("ListTableMapping.processDelta for revision {0} - previous list size: {1}", originalRevision, //$NON-NLS-1$
- oldListSize);
- }
-
- // let the visitor collect the changes
- ListDeltaVisitor visitor = new ListDeltaVisitor(accessor, originalRevision, branchId, oldVersion, newVersion);
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Processing deltas..."); //$NON-NLS-1$
- }
-
- // optimization: it's only necessary to process deltas
- // starting with the last feature delta which clears the list
- // (any operation before the clear is cascaded by it anyway)
- int index = listChanges.size() - 1;
- while (index > 0)
- {
- CDOFeatureDelta listDelta = listChanges.get(index);
- if (listDelta instanceof CDOClearFeatureDelta || listDelta instanceof CDOUnsetFeatureDelta)
- {
- break;
- }
- index--;
- }
- while (index < listChanges.size())
- {
- listChanges.get(index++).accept(visitor);
- }
- }
-
- private class ListDeltaVisitor implements CDOFeatureDeltaVisitor
- {
- private IDBStoreAccessor accessor;
-
- private InternalCDORevision originalRevision;
-
- private CDOID id;
-
- private int branchID;
-
- private int oldVersion;
-
- private int newVersion;
-
- private int lastIndex;
-
- public ListDeltaVisitor(IDBStoreAccessor accessor, InternalCDORevision originalRevision, int targetBranchID,
- int oldVersion, int newVersion)
- {
- this.accessor = accessor;
- this.originalRevision = originalRevision;
- id = this.originalRevision.getID();
- branchID = targetBranchID;
- this.oldVersion = oldVersion;
- this.newVersion = newVersion;
- lastIndex = originalRevision.getList(getFeature()).size() - 1;
- }
-
- public void visit(CDOMoveFeatureDelta delta)
- {
- int fromIdx = delta.getOldPosition();
- int toIdx = delta.getNewPosition();
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Moving: {0} to {1}", fromIdx, toIdx); //$NON-NLS-1$
- }
-
- Object value = getValue(accessor, id, branchID, fromIdx, true);
-
- // remove the item
- removeEntry(accessor, id, branchID, oldVersion, newVersion, fromIdx);
-
- // adjust indexes and shift either up or down
- if (fromIdx < toIdx)
- {
- moveOneUp(accessor, id, branchID, oldVersion, newVersion, fromIdx + 1, toIdx);
- }
- else
- { // fromIdx > toIdx here
- moveOneDown(accessor, id, branchID, oldVersion, newVersion, toIdx, fromIdx - 1);
- }
-
- // create the item
- addEntry(accessor, id, branchID, newVersion, toIdx, value);
- }
-
- public void visit(CDOAddFeatureDelta delta)
- {
- int startIndex = delta.getIndex();
- int endIndex = lastIndex;
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Adding at: {0}", startIndex); //$NON-NLS-1$
- }
-
- if (startIndex <= endIndex)
- {
- // make room for the new item
- moveOneDown(accessor, id, branchID, oldVersion, newVersion, startIndex, endIndex);
- }
-
- // create the item
- addEntry(accessor, id, branchID, newVersion, startIndex, delta.getValue());
-
- ++lastIndex;
- }
-
- public void visit(CDORemoveFeatureDelta delta)
- {
- int startIndex = delta.getIndex();
- int endIndex = lastIndex;
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Removing at: {0}", startIndex); //$NON-NLS-1$
- }
-
- // remove the item
- removeEntry(accessor, id, branchID, oldVersion, newVersion, startIndex);
-
- // make room for the new item
- moveOneUp(accessor, id, branchID, oldVersion, newVersion, startIndex + 1, endIndex);
-
- --lastIndex;
- }
-
- public void visit(CDOSetFeatureDelta delta)
- {
- int index = delta.getIndex();
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Setting at: {0}", index); //$NON-NLS-1$
- }
-
- // remove the item
- removeEntry(accessor, id, branchID, oldVersion, newVersion, index);
-
- // create the item
- addEntry(accessor, id, branchID, newVersion, index, delta.getValue());
- }
-
- public void visit(CDOUnsetFeatureDelta delta)
- {
- if (delta.getFeature().isUnsettable())
- {
- throw new ImplementationError("Should not be called"); //$NON-NLS-1$
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Unsetting"); //$NON-NLS-1$
- }
-
- clearList(accessor, id, branchID, oldVersion, newVersion, lastIndex);
- lastIndex = -1;
- }
-
- public void visit(CDOListFeatureDelta delta)
- {
- throw new ImplementationError("Should not be called"); //$NON-NLS-1$
- }
-
- public void visit(CDOClearFeatureDelta delta)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("Delta Clearing"); //$NON-NLS-1$
- }
-
- clearList(accessor, id, branchID, oldVersion, newVersion, lastIndex);
- lastIndex = -1;
- }
-
- public void visit(CDOContainerFeatureDelta delta)
- {
- throw new ImplementationError("Should not be called"); //$NON-NLS-1$
- }
-
- private void moveOneUp(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
- int startIndex, int endIndex)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
-
- try
- {
- pstmt = statementCache.getPreparedStatement(sqlUpdateIndex, ReuseProbability.HIGH);
-
- for (int index = startIndex; index <= endIndex; ++index)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneUp moving: {0} -> {1}", index, index - 1); //$NON-NLS-1$
- }
-
- int stmtIndex = 1;
- pstmt.setInt(stmtIndex++, index - 1);
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, newVersion);
- pstmt.setInt(stmtIndex++, index);
-
- int result = CDODBUtil.sqlUpdate(pstmt, false);
- switch (result)
- {
- case 1:
- // entry for current revision was already present.
- // index update succeeded.
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneUp updated: {0} -> {1}", index, index - 1); //$NON-NLS-1$
- }
-
- break;
- case 0:
- Object value = getValue(accessor, id, branchId, index, false);
-
- if (value != null)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneUp remove: {0}", index); //$NON-NLS-1$
- }
-
- removeEntry(accessor, id, branchId, oldVersion, newVersion, index);
- }
- else
- {
- value = getValueFromBase(accessor, id, branchId, index);
- {
- TRACER.format("moveOneUp add historic entry at: {0}", index); //$NON-NLS-1$
- }
-
- addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value);
- }
-
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneUp add: {0}", index - 1); //$NON-NLS-1$
- }
-
- addEntry(accessor, id, branchId, newVersion, index - 1, value);
- break;
- default:
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneUp Too many results: {0} -> {1}: {2}", index, index + 1, result); //$NON-NLS-1$
- }
-
- throw new DBException("Too many results"); //$NON-NLS-1$
- }
- }
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
- }
-
- private void moveOneDown(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
- int startIndex, int endIndex)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
-
- try
- {
- pstmt = statementCache.getPreparedStatement(sqlUpdateIndex, ReuseProbability.HIGH);
- for (int index = endIndex; index >= startIndex; --index)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneDown moving: {0} -> {1}", index, index + 1); //$NON-NLS-1$
- }
-
- int stmtIndex = 1;
- pstmt.setInt(stmtIndex++, index + 1);
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, newVersion);
- pstmt.setInt(stmtIndex++, index);
-
- int result = CDODBUtil.sqlUpdate(pstmt, false);
- switch (result)
- {
- case 1:
- // entry for current revision was already present.
- // index update succeeded.
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneDown updated: {0} -> {1}", index, index + 1); //$NON-NLS-1$
- }
-
- break;
- case 0:
- Object value = getValue(accessor, id, branchId, index, false);
- if (value != null)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneDown remove: {0}", index); //$NON-NLS-1$
- }
-
- removeEntry(accessor, id, branchId, oldVersion, newVersion, index);
- }
- else
- {
- value = getValueFromBase(accessor, id, branchId, index);
- {
- TRACER.format("moveOneDown add historic entry at: {0}", index); //$NON-NLS-1$
- }
-
- addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value);
- }
-
- addEntry(accessor, id, branchId, newVersion, index + 1, value);
- break;
- default:
- if (TRACER.isEnabled())
- {
- TRACER.format("moveOneDown Too many results: {0} -> {1}: {2}", index, index + 1, result); //$NON-NLS-1$
- }
-
- throw new DBException("Too many results"); //$NON-NLS-1$
- }
- }
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
- }
- }
-
- private void addEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int version, int index, Object value)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Adding value for feature() {0}.{1} index {2} of {3}v{4} : {5}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), index, id, version, value);
- }
-
- try
- {
- FeatureMap.Entry entry = (FeatureMap.Entry)value;
- EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
-
- pstmt = statementCache.getPreparedStatement(sqlInsert, ReuseProbability.HIGH);
-
- int stmtIndex = 1;
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, version);
- pstmt.setNull(stmtIndex++, DBType.INTEGER.getCode()); // versionRemoved
-
- for (int i = 0; i < columnNames.size(); i++)
- {
- if (columnNames.get(i).equals(column))
- {
- getTypeMapping(tag).setValue(pstmt, stmtIndex++, entry.getValue());
- }
- else
- {
- pstmt.setNull(stmtIndex++, getDBTypes().get(i).getCode());
- }
- }
-
- pstmt.setInt(stmtIndex++, index);
- pstmt.setLong(stmtIndex++, tag);
- CDODBUtil.sqlUpdate(pstmt, true);
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- catch (IllegalStateException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
- }
-
- private void addHistoricEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int versionAdded,
- int versionRemoved, int index, Object value)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
-
- if (TRACER.isEnabled())
- {
- TRACER.format(
- "Adding historic value for feature {0}.{1} index {2} of {3}:{4}v{5}-v{6} : {7}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), index, id, branchId, versionAdded, versionRemoved,
- value);
- }
-
- try
- {
- FeatureMap.Entry entry = (FeatureMap.Entry)value;
- EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
-
- pstmt = statementCache.getPreparedStatement(sqlInsert, ReuseProbability.HIGH);
-
- int stmtIndex = 1;
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, versionAdded);
- pstmt.setNull(stmtIndex++, versionRemoved);
- pstmt.setInt(stmtIndex++, index);
-
- for (int i = 0; i < columnNames.size(); i++)
- {
- if (columnNames.get(i).equals(column))
- {
- getTypeMapping(tag).setValue(pstmt, stmtIndex++, entry.getValue());
- }
- else
- {
- pstmt.setNull(stmtIndex++, getDBTypes().get(i).getCode());
- }
- }
-
- pstmt.setInt(stmtIndex++, index);
- pstmt.setLong(stmtIndex++, tag);
- CDODBUtil.sqlUpdate(pstmt, true);
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- catch (IllegalStateException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
- }
-
- private void removeEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion, int index)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
-
- if (TRACER.isEnabled())
- {
- TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), index, id, newVersion);
- }
-
- try
- {
- // try to delete a temporary entry first
- pstmt = statementCache.getPreparedStatement(sqlDeleteEntry, ReuseProbability.HIGH);
-
- int stmtIndex = 1;
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, index);
- pstmt.setInt(stmtIndex++, newVersion);
-
- int result = CDODBUtil.sqlUpdate(pstmt, false);
- if (result == 1)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("removeEntry deleted: {0}", index); //$NON-NLS-1$
- }
- }
- else if (result > 1)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("removeEntry Too many results: {0}: {1}", index, result); //$NON-NLS-1$
- }
-
- throw new DBException("Too many results"); //$NON-NLS-1$
- }
- else
- {
- // no temporary entry found, so mark the entry as removed
- statementCache.releasePreparedStatement(pstmt);
- pstmt = statementCache.getPreparedStatement(sqlRemoveEntry, ReuseProbability.HIGH);
-
- stmtIndex = 1;
- pstmt.setInt(stmtIndex++, newVersion);
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, index);
- result = CDODBUtil.sqlUpdate(pstmt, false);
-
- if (result == 0)
- {
- // no entry removed -> this means that we are in a branch and
- // the entry has not been modified since the branch fork.
- // therefore, we have to copy the base value and mark it as removed
- Object value = getValueFromBase(accessor, id, branchId, index);
- addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value);
- }
- }
- }
- catch (SQLException e)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4} FAILED {5}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), index, id, newVersion, e.getMessage());
- }
-
- throw new DBException(e);
- }
- catch (IllegalStateException e)
- {
- if (TRACER.isEnabled())
- {
- TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4} FAILED {5}", //$NON-NLS-1$
- getContainingClass().getName(), getFeature().getName(), index, id, newVersion, e.getMessage());
- }
-
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
- }
-
- private FeatureMap.Entry getValue(IDBStoreAccessor accessor, CDOID id, int branchId, int index, boolean getFromBase)
- {
- IPreparedStatementCache statementCache = accessor.getStatementCache();
- PreparedStatement pstmt = null;
- FeatureMap.Entry result = null;
-
- try
- {
- pstmt = statementCache.getPreparedStatement(sqlGetValue, ReuseProbability.HIGH);
-
- int stmtIndex = 1;
- pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
- pstmt.setInt(stmtIndex++, branchId);
- pstmt.setInt(stmtIndex++, index);
-
- ResultSet resultSet = pstmt.executeQuery();
- if (resultSet.next())
- {
- Long tag = resultSet.getLong(1);
- Object value = getTypeMapping(tag).readValue(resultSet);
- result = CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(tag), value);
- }
- else
- {
- // value is not in this branch.
- // -> read from base revision
- if (getFromBase)
- {
- result = getValueFromBase(accessor, id, branchId, index);
- } // else: result remains null
- }
- if (TRACER.isEnabled())
- {
- TRACER.format("Read value (index {0}) from result set: {1}", index, result); //$NON-NLS-1$
- }
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(pstmt);
- }
-
- return result;
- }
-
- /**
- * Read a single value (at a given index) from the base revision
- *
- * @param accessor
- * the DBStoreAccessor
- * @param id
- * the ID of the revision
- * @param branchID
- * the ID of the current (child) branch
- * @param index
- * the index to read the value from
- * @return the value which is at index <code>index</code> in revision with ID <code>id</code> in the parent branch at
- * the base of this branch (indicated by <code>branchID</code>).
- */
- private FeatureMap.Entry getValueFromBase(IDBStoreAccessor accessor, CDOID id, int branchID, int index)
- {
- IStoreChunkReader chunkReader = createBaseChunkReader(accessor, id, branchID);
- chunkReader.addSimpleChunk(index);
- List<Chunk> chunks = chunkReader.executeRead();
- return (FeatureMap.Entry)chunks.get(0).get(0);
- }
-
- private IStoreChunkReader createBaseChunkReader(IDBStoreAccessor accessor, CDOID id, int branchID)
- {
- CDOBranchPoint base = accessor.getStore().getRepository().getBranchManager().getBranch(branchID).getBase();
- InternalCDORevision baseRevision = (InternalCDORevision)accessor.getStore().getRepository().getRevisionManager()
- .getRevision(id, base, /* referenceChunk = */0, /* prefetchDepth = */CDORevision.DEPTH_NONE, true);
- IStoreChunkReader chunkReader = accessor.createChunkReader(baseRevision, getFeature());
- return chunkReader;
- }
-
- public final boolean queryXRefs(IDBStoreAccessor accessor, String mainTableName, String mainTableWhere,
- QueryXRefsContext context, String idString)
- {
- // must never be called (a feature map is not associated with an EReference feature, so XRefs are nor supported
- // here)
- throw new ImplementationError("Should never be called!");
- }
-}
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Stefan Winkler - initial API and implementation taken from AuditFeatureMapTableMappingWithRanges
+ * Stefan Winkler - Bug 329025: [DB] Support branching for range-based mapping strategy
+ */
+package org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
+import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
+import org.eclipse.emf.cdo.server.IStoreAccessor.QueryXRefsContext;
+import org.eclipse.emf.cdo.server.IStoreChunkReader;
+import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk;
+import org.eclipse.emf.cdo.server.db.CDODBUtil;
+import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
+import org.eclipse.emf.cdo.server.db.IDBStoreChunkReader;
+import org.eclipse.emf.cdo.server.db.IPreparedStatementCache;
+import org.eclipse.emf.cdo.server.db.IPreparedStatementCache.ReuseProbability;
+import org.eclipse.emf.cdo.server.db.mapping.IListMappingDeltaSupport;
+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.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.net4j.db.DBException;
+import org.eclipse.net4j.db.DBType;
+import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.ddl.IDBField;
+import org.eclipse.net4j.db.ddl.IDBIndex.Type;
+import org.eclipse.net4j.db.ddl.IDBTable;
+import org.eclipse.net4j.util.ImplementationError;
+import org.eclipse.net4j.util.collection.MoveableList;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This is a featuremap-table mapping for audit mode. It is optimized for frequent insert operations at the list's end,
+ * which causes just 1 DB row to be changed. This is achieved by introducing a version range (columns
+ * {@link CDODBSchema#LIST_REVISION_VERSION_ADDED cdo_version_added} and
+ * {@link CDODBSchema#LIST_REVISION_VERSION_REMOVED cdo_version_removed}) which records for which revisions a particular
+ * entry existed. Also, this mapping is mainly optimized for potentially very large lists: the need for having the
+ * complete list stored in memory to do in-the-middle-moved and inserts is traded in for a few more DB access
+ * operations.
+ *
+ * @author Eike Stepper
+ * @author Stefan Winkler
+ * @author Lothar Werzinger
+ * @since 3.0
+ */
+public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractListTableMapping implements
+ IListMappingDeltaSupport
+{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG,
+ BranchingFeatureMapTableMappingWithRanges.class);
+
+ /**
+ * Used to clean up lists for detached objects.
+ */
+ private static final int FINAL_VERSION = Integer.MAX_VALUE;
+
+ /**
+ * The table of this mapping.
+ */
+ private IDBTable table;
+
+ /**
+ * The tags mapped to column names
+ */
+ private HashMap<Long, String> tagMap;
+
+ /**
+ * Column name Set
+ */
+ private List<String> columnNames;
+
+ /**
+ * The type mappings for the value fields.
+ */
+ private Map<Long, ITypeMapping> typeMappings;
+
+ // --------- SQL strings - see initSQLStrings() -----------------
+ private String sqlSelectChunksPrefix;
+
+ private String sqlOrderByIndex;
+
+ protected String sqlInsert;
+
+ private List<DBType> dbTypes;
+
+ private String sqlRemoveEntry;
+
+ private String sqlDeleteEntry;
+
+ private String sqlUpdateIndex;
+
+ private String sqlGetValue;
+
+ private String sqlClearList;
+
+ public BranchingFeatureMapTableMappingWithRanges(IMappingStrategy mappingStrategy, EClass eClass,
+ EStructuralFeature feature)
+ {
+ super(mappingStrategy, eClass, feature);
+ initDBTypes();
+ initTable();
+ initSQLStrings();
+ }
+
+ private void initDBTypes()
+ {
+ // TODO add annotation processing here ...
+ ITypeMapping.Registry registry = ITypeMapping.Registry.INSTANCE;
+ dbTypes = new ArrayList<DBType>(registry.getDefaultFeatureMapDBTypes());
+ }
+
+ private void initTable()
+ {
+ String tableName = getMappingStrategy().getTableName(getContainingClass(), getFeature());
+ table = getMappingStrategy().getStore().getDBSchema().addTable(tableName);
+
+ // add fields for CDOID
+ IDBField idField = table.addField(CDODBSchema.FEATUREMAP_REVISION_ID, DBType.INTEGER);
+
+ IDBField branchField = table.addField(CDODBSchema.LIST_REVISION_BRANCH, DBType.INTEGER);
+
+ // add fields for version range
+ IDBField versionAddedField = table.addField(CDODBSchema.FEATUREMAP_VERSION_ADDED, DBType.INTEGER);
+ IDBField versionRemovedField = table.addField(CDODBSchema.FEATUREMAP_VERSION_REMOVED, DBType.INTEGER);
+
+ // add field for list index
+ IDBField idxField = table.addField(CDODBSchema.FEATUREMAP_IDX, DBType.INTEGER);
+
+ // add field for FeatureMap tag (MetaID for Feature in CDO registry)
+ IDBField tagField = table.addField(CDODBSchema.FEATUREMAP_TAG, DBType.INTEGER);
+
+ tagMap = new HashMap<Long, String>();
+ typeMappings = new HashMap<Long, ITypeMapping>();
+ columnNames = new ArrayList<String>();
+
+ // create columns for all DBTypes
+ for (DBType type : getDBTypes())
+ {
+ String column = CDODBSchema.FEATUREMAP_VALUE + "_" + type.name();
+ table.addField(column, type);
+ columnNames.add(column);
+ }
+
+ table.addIndex(Type.NON_UNIQUE, idField);
+ table.addIndex(Type.NON_UNIQUE, branchField);
+ table.addIndex(Type.NON_UNIQUE, versionAddedField);
+ table.addIndex(Type.NON_UNIQUE, versionRemovedField);
+ table.addIndex(Type.NON_UNIQUE, idxField);
+ table.addIndex(Type.NON_UNIQUE, tagField);
+ }
+
+ public Collection<IDBTable> getDBTables()
+ {
+ return Arrays.asList(table);
+ }
+
+ private void initSQLStrings()
+ {
+ String tableName = getTable().getName();
+
+ // ---------------- SELECT to read chunks ----------------------------
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_TAG);
+ builder.append(", "); //$NON-NLS-1$
+
+ Iterator<String> iter = columnNames.iterator();
+ while (iter.hasNext())
+ {
+ builder.append(iter.next());
+ if (iter.hasNext())
+ {
+ builder.append(", "); //$NON-NLS-1$
+ }
+ }
+
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
+ builder.append("<=? AND ("); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(" IS NULL OR "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(">?)"); //$NON-NLS-1$
+ sqlSelectChunksPrefix = builder.toString();
+
+ sqlOrderByIndex = " ORDER BY " + CDODBSchema.FEATUREMAP_IDX; //$NON-NLS-1$
+
+ // ----------------- INSERT - prefix -----------------
+ builder = new StringBuilder("INSERT INTO "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append("("); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append(","); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append(","); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
+ builder.append(","); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(","); //$NON-NLS-1$
+
+ for (int i = 0; i < columnNames.size(); i++)
+ {
+ builder.append(columnNames.get(i));
+ builder.append(", "); //$NON-NLS-1$
+ }
+
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_TAG);
+ builder.append(") VALUES (?, ?, ?, ?, "); //$NON-NLS-1$
+ for (int i = 0; i < columnNames.size(); i++)
+ {
+ builder.append("?, "); //$NON-NLS-1$
+ }
+
+ builder.append("?, ?)"); //$NON-NLS-1$
+ sqlInsert = builder.toString();
+
+ // ----------------- remove current entry -----------------
+ builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" SET "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append("=? "); //$NON-NLS-1$
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(" IS NULL"); //$NON-NLS-1$
+ sqlRemoveEntry = builder.toString();
+
+ // ----------------- delete temporary entry -----------------
+ builder = new StringBuilder("DELETE FROM "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
+ builder.append("=?"); //$NON-NLS-1$
+ sqlDeleteEntry = builder.toString();
+
+ // ----------------- update index -----------------
+ builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" SET "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append("=? WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append("=?"); //$NON-NLS-1$
+ sqlUpdateIndex = builder.toString();
+
+ // ----------------- get current value -----------------
+ builder = new StringBuilder("SELECT "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_TAG);
+ builder.append(", "); //$NON-NLS-1$
+
+ iter = columnNames.iterator();
+ while (iter.hasNext())
+ {
+ builder.append(iter.next());
+ if (iter.hasNext())
+ {
+ builder.append(", "); //$NON-NLS-1$
+ }
+ }
+
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(" IS NULL"); //$NON-NLS-1$
+ sqlGetValue = builder.toString();
+
+ // ----------- clear list items -------------------------
+ builder = new StringBuilder("UPDATE "); //$NON-NLS-1$
+ builder.append(tableName);
+ builder.append(" SET "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append("=? "); //$NON-NLS-1$
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_BRANCH);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(" IS NULL"); //$NON-NLS-1$
+ sqlClearList = builder.toString();
+ }
+
+ protected List<DBType> getDBTypes()
+ {
+ return dbTypes;
+ }
+
+ protected final IDBTable getTable()
+ {
+ return table;
+ }
+
+ protected final List<String> getColumnNames()
+ {
+ return columnNames;
+ }
+
+ protected final Map<Long, ITypeMapping> getTypeMappings()
+ {
+ return typeMappings;
+ }
+
+ protected final Map<Long, String> getTagMap()
+ {
+ return tagMap;
+ }
+
+ public void readValues(IDBStoreAccessor accessor, InternalCDORevision revision, int listChunk)
+ {
+ MoveableList<Object> list = revision.getList(getFeature());
+ int valuesToRead = list.size();
+
+ if (listChunk != CDORevision.UNCHUNKED && listChunk < valuesToRead)
+ {
+ valuesToRead = listChunk;
+ }
+
+ if (valuesToRead == 0)
+ {
+ // nothing to read take shortcut
+ return;
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading list values for feature {0}.{1} of {2}", getContainingClass().getName(), getFeature() //$NON-NLS-1$
+ .getName(), revision);
+ }
+
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+ ResultSet resultSet = null;
+
+ IStoreChunkReader baseReader = null;
+ try
+ {
+ String sql = sqlSelectChunksPrefix + sqlOrderByIndex;
+
+ CDOID id = revision.getID();
+ int branchID = revision.getBranch().getID();
+
+ pstmt = statementCache.getPreparedStatement(sql, ReuseProbability.HIGH);
+ pstmt.setLong(1, CDOIDUtil.getLong(id));
+ pstmt.setInt(2, branchID);
+ pstmt.setInt(3, revision.getVersion());
+ pstmt.setInt(4, revision.getVersion());
+
+ pstmt.setMaxRows(valuesToRead); // optimization - don't read unneeded rows.
+
+ resultSet = pstmt.executeQuery();
+
+ int currentIndex = 0;
+
+ while (valuesToRead > 0 && resultSet.next())
+ {
+ int index = resultSet.getInt(1);
+ if (index > currentIndex)
+ {
+ if (baseReader == null)
+ {
+ baseReader = createBaseChunkReader(accessor, id, branchID);
+ }
+
+ baseReader.addRangedChunk(currentIndex, index);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Scheduling range {0}-{1} to be read from base revision", currentIndex, index); //$NON-NLS-1$
+ }
+
+ valuesToRead -= index - currentIndex;
+ currentIndex = index;
+ }
+
+ Long tag = resultSet.getLong(2);
+ Object value = getTypeMapping(accessor, tag).readValue(resultSet);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Read value for index {0} from result set: {1}", currentIndex, value); //$NON-NLS-1$
+ }
+
+ list.set(currentIndex++, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(accessor, tag), value));
+ valuesToRead--;
+ }
+
+ if (valuesToRead > 0)
+ {
+ if (baseReader == null)
+ {
+ baseReader = createBaseChunkReader(accessor, id, branchID);
+ }
+
+ baseReader.addRangedChunk(currentIndex, currentIndex + valuesToRead);
+ }
+ }
+ catch (SQLException ex)
+ {
+ throw new DBException(ex);
+ }
+ finally
+ {
+ DBUtil.close(resultSet);
+ statementCache.releasePreparedStatement(pstmt);
+ }
+
+ if (baseReader != null)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading base revision chunks for featureMap {0}.{1} of {2} from base revision {3}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), revision, baseReader.getRevision());
+ }
+
+ List<Chunk> baseChunks = baseReader.executeRead();
+ for (Chunk chunk : baseChunks)
+ {
+ int startIndex = chunk.getStartIndex();
+ for (int i = 0; i < chunk.size(); i++)
+ {
+ list.set(startIndex + i, chunk.get(i));
+ }
+ }
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading list values done for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
+ getFeature().getName(), revision);
+ }
+ }
+
+ private void addFeature(IDBStoreAccessor accessor, Long tag)
+ {
+ EStructuralFeature modelFeature = getFeatureByTag(accessor, tag);
+
+ ITypeMapping typeMapping = getMappingStrategy().createValueMapping(modelFeature);
+ String column = CDODBSchema.FEATUREMAP_VALUE + "_" + typeMapping.getDBType(); //$NON-NLS-1$
+
+ tagMap.put(tag, column);
+ typeMapping.setDBField(table, column);
+ typeMappings.put(tag, typeMapping);
+ }
+
+ public final void readChunks(IDBStoreChunkReader chunkReader, List<Chunk> chunks, String where)
+ {
+ CDORevision revision = chunkReader.getRevision();
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading list chunk values for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
+ getFeature().getName(), revision);
+ }
+
+ IPreparedStatementCache statementCache = chunkReader.getAccessor().getStatementCache();
+ PreparedStatement pstmt = null;
+ ResultSet resultSet = null;
+
+ IStoreChunkReader baseReader = null;
+ try
+ {
+ StringBuilder builder = new StringBuilder(sqlSelectChunksPrefix);
+ if (where != null)
+ {
+ builder.append(" AND "); //$NON-NLS-1$
+ builder.append(where);
+ }
+
+ builder.append(sqlOrderByIndex);
+
+ String sql = builder.toString();
+ pstmt = statementCache.getPreparedStatement(sql, ReuseProbability.LOW);
+ pstmt.setLong(1, CDOIDUtil.getLong(revision.getID()));
+ pstmt.setInt(2, revision.getBranch().getID());
+ pstmt.setInt(3, revision.getVersion());
+ pstmt.setInt(4, revision.getVersion());
+
+ resultSet = pstmt.executeQuery();
+
+ int nextDBIndex = Integer.MAX_VALUE; // next available DB index
+ if (resultSet.next())
+ {
+ nextDBIndex = resultSet.getInt(1);
+ }
+
+ for (Chunk chunk : chunks)
+ {
+ int startIndex = chunk.getStartIndex();
+ int missingValueStartIndex = -1;
+
+ for (int i = 0; i < chunk.size(); i++)
+ {
+ int nextListIndex = startIndex + i; // next expected list index
+
+ if (nextDBIndex == nextListIndex)
+ {
+ // DB value is available. check first if missing indexes were present before.
+ if (missingValueStartIndex != -1)
+ {
+ // read missing indexes from missingValueStartIndex to currentIndex
+ if (baseReader == null)
+ {
+ baseReader = createBaseChunkReader(chunkReader.getAccessor(), chunkReader.getRevision().getID(),
+ chunkReader.getRevision().getBranch().getID());
+ }
+ if (TRACER.isEnabled())
+ {
+ TRACER.format(
+ "Scheduling range {0}-{1} to be read from base revision", missingValueStartIndex, nextListIndex); //$NON-NLS-1$
+ }
+
+ baseReader.addRangedChunk(missingValueStartIndex, nextListIndex);
+
+ // reset missingValueStartIndex
+ missingValueStartIndex = -1;
+ }
+
+ // now read value and set to chunk
+ Long tag = resultSet.getLong(2);
+ Object value = getTypeMapping(chunkReader.getAccessor(), tag).readValue(resultSet);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("ChunkReader read value for index {0} from result set: {1}", nextDBIndex, value); //$NON-NLS-1$
+ }
+ chunk.add(i, CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(chunkReader.getAccessor(), tag), value));
+
+ // advance DB cursor and read next available index
+ if (resultSet.next())
+ {
+ nextDBIndex = resultSet.getInt(1);
+ }
+ else
+ {
+ // no more DB indexes available, but we have to continue checking for gaps, therefore set to MAX_VALUE
+ nextDBIndex = Integer.MAX_VALUE;
+ }
+ }
+ else
+ {
+ // gap between next DB index and next list index detected.
+ // skip until end of chunk or until DB value becomes available
+ if (missingValueStartIndex == -1)
+ {
+ missingValueStartIndex = nextListIndex;
+ }
+ }
+ }
+
+ // chunk complete. check for missing values at the end of the chunk.
+ if (missingValueStartIndex != -1)
+ {
+ // read missing indexes from missingValueStartIndex to last chunk index
+ if (baseReader == null)
+ {
+ baseReader = createBaseChunkReader(chunkReader.getAccessor(), chunkReader.getRevision().getID(),
+ chunkReader.getRevision().getBranch().getID());
+ }
+ baseReader.addRangedChunk(missingValueStartIndex, chunk.getStartIndex() + chunk.size());
+ }
+ }
+ }
+ catch (SQLException ex)
+ {
+ throw new DBException(ex);
+ }
+ finally
+ {
+ DBUtil.close(resultSet);
+ statementCache.releasePreparedStatement(pstmt);
+ }
+
+ // now read missing values from base revision.
+ if (baseReader != null)
+ {
+ List<Chunk> baseChunks = baseReader.executeRead();
+
+ Iterator<Chunk> thisIterator = chunks.iterator();
+ Chunk thisChunk = thisIterator.next();
+
+ for (Chunk baseChunk : baseChunks)
+ {
+ int baseStartIndex = baseChunk.getStartIndex();
+
+ while (baseStartIndex > thisChunk.getStartIndex() + thisChunk.size())
+ {
+ // advance thisChunk, because it does not match baseChunk
+ thisChunk = thisIterator.next();
+ }
+
+ // baseChunk now corresponds to this chunk, but startIndex of baseChunk may be higher.
+ // therefore calculate offset
+ int offset = thisChunk.getStartIndex() - baseStartIndex;
+
+ // and copy values.
+ for (int i = 0; i < baseChunk.size(); i++)
+ {
+ thisChunk.add(i + offset, baseChunk.get(i));
+ }
+ } // finally, continue with the next baseChunk
+
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Reading list chunk values done for feature {0}.{1} of {2}", getContainingClass().getName(), //$NON-NLS-1$
+ getFeature(), revision);
+ }
+ }
+
+ public void writeValues(IDBStoreAccessor accessor, InternalCDORevision revision)
+ {
+ CDOList values = revision.getList(getFeature());
+
+ int idx = 0;
+ for (Object element : values)
+ {
+ writeValue(accessor, revision, idx++, element);
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Writing done"); //$NON-NLS-1$
+ }
+ }
+
+ protected final void writeValue(IDBStoreAccessor accessor, CDORevision revision, int idx, Object value)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER
+ .format(
+ "Writing value for feature {0}.{1} index {2} of {3} : {4}", getContainingClass().getName(), getFeature(), idx, revision, value); //$NON-NLS-1$
+ }
+
+ addEntry(accessor, revision.getID(), revision.getBranch().getID(), revision.getVersion(), idx, value,
+ revision.getTimeStamp());
+ }
+
+ /**
+ * Get column name (lazy).
+ *
+ * @param tag
+ * The feature's MetaID in CDO
+ * @return the column name where the values are stored
+ */
+ protected String getColumnName(IDBStoreAccessor accessor, Long tag)
+ {
+ String column = tagMap.get(tag);
+ if (column == null)
+ {
+ addFeature(accessor, tag);
+ column = tagMap.get(tag);
+ }
+
+ return column;
+ }
+
+ /**
+ * Get type mapping (lazy).
+ *
+ * @param tag
+ * The feature's MetaID in CDO
+ * @return the corresponding type mapping
+ */
+ protected ITypeMapping getTypeMapping(IDBStoreAccessor accessor, Long tag)
+ {
+ ITypeMapping typeMapping = typeMappings.get(tag);
+ if (typeMapping == null)
+ {
+ addFeature(accessor, tag);
+ typeMapping = typeMappings.get(tag);
+ }
+
+ return typeMapping;
+ }
+
+ /**
+ * @param metaID
+ * @return the column name where the values are stored
+ */
+ private EStructuralFeature getFeatureByTag(IDBStoreAccessor accessor, Long tag)
+ {
+ return (EStructuralFeature)getMappingStrategy().getStore().getMetaDataManager().getMetaInstance(accessor, tag);
+ }
+
+ /**
+ * @param feature
+ * The EStructuralFeature
+ * @return The feature's MetaID in CDO
+ */
+ protected Long getTagByFeature(IDBStoreAccessor accessor, EStructuralFeature feature, long created)
+ {
+ return getMappingStrategy().getStore().getMetaDataManager().getMetaID(accessor, feature, created);
+ }
+
+ /**
+ * Clear a list of a given revision.
+ *
+ * @param accessor
+ * the accessor to use
+ * @param id
+ * the id of the revision from which to remove all items
+ */
+ public void clearList(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
+ int lastIndex, long timestamp)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmtDeleteTemp = null;
+ PreparedStatement pstmtClear = null;
+
+ try
+ {
+ // check for each index if the value exists in the current branch
+ for (int i = 0; i <= lastIndex; i++)
+ {
+ if (getValue(accessor, id, branchId, i, false) == null)
+ {
+ // if not, add a historic entry for missing ones.
+ addHistoricEntry(accessor, id, branchId, 0, newVersion, i, getValueFromBase(accessor, id, branchId, i),
+ timestamp);
+ }
+ }
+
+ // clear rest of the list
+ pstmtClear = statementCache.getPreparedStatement(sqlClearList, ReuseProbability.HIGH);
+ pstmtClear.setInt(1, newVersion);
+ pstmtClear.setLong(2, CDOIDUtil.getLong(id));
+ pstmtClear.setInt(3, branchId);
+
+ int result = CDODBUtil.sqlUpdate(pstmtClear, false);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("ClearList result: {0}", result); //$NON-NLS-1$
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmtDeleteTemp);
+ statementCache.releasePreparedStatement(pstmtClear);
+ }
+ }
+
+ public void objectDetached(IDBStoreAccessor accessor, CDOID id, long revised)
+ {
+ InternalCDORevision revision = (InternalCDORevision)accessor.getTransaction().getRevision(id);
+ int branchId = accessor.getTransaction().getBranch().getID();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("objectDetached {1}", revision); //$NON-NLS-1$
+ }
+
+ clearList(accessor, id, branchId, revision.getVersion(), FINAL_VERSION, revision.getList(getFeature()).size() - 1,
+ revised);
+ }
+
+ public void processDelta(final IDBStoreAccessor accessor, final CDOID id, final int branchId, int oldVersion,
+ final int newVersion, long created, CDOListFeatureDelta delta)
+ {
+ List<CDOFeatureDelta> listChanges = delta.getListChanges();
+ if (listChanges.size() == 0)
+ {
+ // nothing to do.
+ return;
+ }
+
+ InternalCDORevision originalRevision = (InternalCDORevision)accessor.getTransaction().getRevision(id);
+ int oldListSize = originalRevision.getList(getFeature()).size();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("ListTableMapping.processDelta for revision {0} - previous list size: {1}", originalRevision, //$NON-NLS-1$
+ oldListSize);
+ }
+
+ // let the visitor collect the changes
+ ListDeltaVisitor visitor = new ListDeltaVisitor(accessor, originalRevision, branchId, oldVersion, newVersion,
+ created);
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Processing deltas..."); //$NON-NLS-1$
+ }
+
+ // optimization: it's only necessary to process deltas
+ // starting with the last feature delta which clears the list
+ // (any operation before the clear is cascaded by it anyway)
+ int index = listChanges.size() - 1;
+ while (index > 0)
+ {
+ CDOFeatureDelta listDelta = listChanges.get(index);
+ if (listDelta instanceof CDOClearFeatureDelta || listDelta instanceof CDOUnsetFeatureDelta)
+ {
+ break;
+ }
+ index--;
+ }
+ while (index < listChanges.size())
+ {
+ listChanges.get(index++).accept(visitor);
+ }
+ }
+
+ private class ListDeltaVisitor implements CDOFeatureDeltaVisitor
+ {
+ private IDBStoreAccessor accessor;
+
+ private InternalCDORevision originalRevision;
+
+ private CDOID id;
+
+ private int branchID;
+
+ private int oldVersion;
+
+ private int newVersion;
+
+ private int lastIndex;
+
+ private long timestamp;
+
+ public ListDeltaVisitor(IDBStoreAccessor accessor, InternalCDORevision originalRevision, int targetBranchID,
+ int oldVersion, int newVersion, long timestamp)
+ {
+ this.accessor = accessor;
+ this.originalRevision = originalRevision;
+ id = this.originalRevision.getID();
+ branchID = targetBranchID;
+ this.oldVersion = oldVersion;
+ this.newVersion = newVersion;
+ lastIndex = originalRevision.getList(getFeature()).size() - 1;
+ this.timestamp = timestamp;
+ }
+
+ public void visit(CDOMoveFeatureDelta delta)
+ {
+ int fromIdx = delta.getOldPosition();
+ int toIdx = delta.getNewPosition();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Moving: {0} to {1}", fromIdx, toIdx); //$NON-NLS-1$
+ }
+
+ Object value = getValue(accessor, id, branchID, fromIdx, true);
+
+ // remove the item
+ removeEntry(accessor, id, branchID, oldVersion, newVersion, fromIdx, timestamp);
+
+ // adjust indexes and shift either up or down
+ if (fromIdx < toIdx)
+ {
+ moveOneUp(accessor, id, branchID, oldVersion, newVersion, fromIdx + 1, toIdx);
+ }
+ else
+ { // fromIdx > toIdx here
+ moveOneDown(accessor, id, branchID, oldVersion, newVersion, toIdx, fromIdx - 1);
+ }
+
+ // create the item
+ addEntry(accessor, id, branchID, newVersion, toIdx, value, timestamp);
+ }
+
+ public void visit(CDOAddFeatureDelta delta)
+ {
+ int startIndex = delta.getIndex();
+ int endIndex = lastIndex;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Adding at: {0}", startIndex); //$NON-NLS-1$
+ }
+
+ if (startIndex <= endIndex)
+ {
+ // make room for the new item
+ moveOneDown(accessor, id, branchID, oldVersion, newVersion, startIndex, endIndex);
+ }
+
+ // create the item
+ addEntry(accessor, id, branchID, newVersion, startIndex, delta.getValue(), timestamp);
+
+ ++lastIndex;
+ }
+
+ public void visit(CDORemoveFeatureDelta delta)
+ {
+ int startIndex = delta.getIndex();
+ int endIndex = lastIndex;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Removing at: {0}", startIndex); //$NON-NLS-1$
+ }
+
+ // remove the item
+ removeEntry(accessor, id, branchID, oldVersion, newVersion, startIndex, timestamp);
+
+ // make room for the new item
+ moveOneUp(accessor, id, branchID, oldVersion, newVersion, startIndex + 1, endIndex);
+
+ --lastIndex;
+ }
+
+ public void visit(CDOSetFeatureDelta delta)
+ {
+ int index = delta.getIndex();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Setting at: {0}", index); //$NON-NLS-1$
+ }
+
+ // remove the item
+ removeEntry(accessor, id, branchID, oldVersion, newVersion, index, timestamp);
+
+ // create the item
+ addEntry(accessor, id, branchID, newVersion, index, delta.getValue(), timestamp);
+ }
+
+ public void visit(CDOUnsetFeatureDelta delta)
+ {
+ if (delta.getFeature().isUnsettable())
+ {
+ throw new ImplementationError("Should not be called"); //$NON-NLS-1$
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Unsetting"); //$NON-NLS-1$
+ }
+
+ clearList(accessor, id, branchID, oldVersion, newVersion, lastIndex, timestamp);
+ lastIndex = -1;
+ }
+
+ public void visit(CDOListFeatureDelta delta)
+ {
+ throw new ImplementationError("Should not be called"); //$NON-NLS-1$
+ }
+
+ public void visit(CDOClearFeatureDelta delta)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Delta Clearing"); //$NON-NLS-1$
+ }
+
+ clearList(accessor, id, branchID, oldVersion, newVersion, lastIndex, timestamp);
+ lastIndex = -1;
+ }
+
+ public void visit(CDOContainerFeatureDelta delta)
+ {
+ throw new ImplementationError("Should not be called"); //$NON-NLS-1$
+ }
+
+ private void moveOneUp(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
+ int startIndex, int endIndex)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+
+ try
+ {
+ pstmt = statementCache.getPreparedStatement(sqlUpdateIndex, ReuseProbability.HIGH);
+
+ for (int index = startIndex; index <= endIndex; ++index)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneUp moving: {0} -> {1}", index, index - 1); //$NON-NLS-1$
+ }
+
+ int stmtIndex = 1;
+ pstmt.setInt(stmtIndex++, index - 1);
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, newVersion);
+ pstmt.setInt(stmtIndex++, index);
+
+ int result = CDODBUtil.sqlUpdate(pstmt, false);
+ switch (result)
+ {
+ case 1:
+ // entry for current revision was already present.
+ // index update succeeded.
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneUp updated: {0} -> {1}", index, index - 1); //$NON-NLS-1$
+ }
+
+ break;
+ case 0:
+ Object value = getValue(accessor, id, branchId, index, false);
+
+ if (value != null)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneUp remove: {0}", index); //$NON-NLS-1$
+ }
+
+ removeEntry(accessor, id, branchId, oldVersion, newVersion, index, timestamp);
+ }
+ else
+ {
+ value = getValueFromBase(accessor, id, branchId, index);
+ {
+ TRACER.format("moveOneUp add historic entry at: {0}", index); //$NON-NLS-1$
+ }
+
+ addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value, timestamp);
+ }
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneUp add: {0}", index - 1); //$NON-NLS-1$
+ }
+
+ addEntry(accessor, id, branchId, newVersion, index - 1, value, timestamp);
+ break;
+ default:
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneUp Too many results: {0} -> {1}: {2}", index, index + 1, result); //$NON-NLS-1$
+ }
+
+ throw new DBException("Too many results"); //$NON-NLS-1$
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+ }
+
+ private void moveOneDown(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
+ int startIndex, int endIndex)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+
+ try
+ {
+ pstmt = statementCache.getPreparedStatement(sqlUpdateIndex, ReuseProbability.HIGH);
+ for (int index = endIndex; index >= startIndex; --index)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneDown moving: {0} -> {1}", index, index + 1); //$NON-NLS-1$
+ }
+
+ int stmtIndex = 1;
+ pstmt.setInt(stmtIndex++, index + 1);
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, newVersion);
+ pstmt.setInt(stmtIndex++, index);
+
+ int result = CDODBUtil.sqlUpdate(pstmt, false);
+ switch (result)
+ {
+ case 1:
+ // entry for current revision was already present.
+ // index update succeeded.
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneDown updated: {0} -> {1}", index, index + 1); //$NON-NLS-1$
+ }
+
+ break;
+ case 0:
+ Object value = getValue(accessor, id, branchId, index, false);
+ if (value != null)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneDown remove: {0}", index); //$NON-NLS-1$
+ }
+
+ removeEntry(accessor, id, branchId, oldVersion, newVersion, index, timestamp);
+ }
+ else
+ {
+ value = getValueFromBase(accessor, id, branchId, index);
+ {
+ TRACER.format("moveOneDown add historic entry at: {0}", index); //$NON-NLS-1$
+ }
+
+ addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value, timestamp);
+ }
+
+ addEntry(accessor, id, branchId, newVersion, index + 1, value, timestamp);
+ break;
+ default:
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("moveOneDown Too many results: {0} -> {1}: {2}", index, index + 1, result); //$NON-NLS-1$
+ }
+
+ throw new DBException("Too many results"); //$NON-NLS-1$
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+ }
+ }
+
+ private void addEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int version, int index, Object value,
+ long timestamp)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Adding value for feature() {0}.{1} index {2} of {3}v{4} : {5}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), index, id, version, value);
+ }
+
+ try
+ {
+ FeatureMap.Entry entry = (FeatureMap.Entry)value;
+ EStructuralFeature entryFeature = entry.getEStructuralFeature();
+ Long tag = getTagByFeature(accessor, entryFeature, timestamp);
+ String column = getColumnName(accessor, tag);
+
+ pstmt = statementCache.getPreparedStatement(sqlInsert, ReuseProbability.HIGH);
+
+ int stmtIndex = 1;
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, version);
+ pstmt.setNull(stmtIndex++, DBType.INTEGER.getCode()); // versionRemoved
+
+ for (int i = 0; i < columnNames.size(); i++)
+ {
+ if (columnNames.get(i).equals(column))
+ {
+ getTypeMapping(accessor, tag).setValue(pstmt, stmtIndex++, entry.getValue());
+ }
+ else
+ {
+ pstmt.setNull(stmtIndex++, getDBTypes().get(i).getCode());
+ }
+ }
+
+ pstmt.setInt(stmtIndex++, index);
+ pstmt.setLong(stmtIndex++, tag);
+ CDODBUtil.sqlUpdate(pstmt, true);
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ catch (IllegalStateException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+ }
+
+ private void addHistoricEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int versionAdded,
+ int versionRemoved, int index, Object value, long timestamp)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format(
+ "Adding historic value for feature {0}.{1} index {2} of {3}:{4}v{5}-v{6} : {7}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), index, id, branchId, versionAdded, versionRemoved,
+ value);
+ }
+
+ try
+ {
+ FeatureMap.Entry entry = (FeatureMap.Entry)value;
+ EStructuralFeature entryFeature = entry.getEStructuralFeature();
+ Long tag = getTagByFeature(accessor, entryFeature, timestamp);
+ String column = getColumnName(accessor, tag);
+
+ pstmt = statementCache.getPreparedStatement(sqlInsert, ReuseProbability.HIGH);
+
+ int stmtIndex = 1;
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, versionAdded);
+ pstmt.setNull(stmtIndex++, versionRemoved);
+ pstmt.setInt(stmtIndex++, index);
+
+ for (int i = 0; i < columnNames.size(); i++)
+ {
+ if (columnNames.get(i).equals(column))
+ {
+ getTypeMapping(accessor, tag).setValue(pstmt, stmtIndex++, entry.getValue());
+ }
+ else
+ {
+ pstmt.setNull(stmtIndex++, getDBTypes().get(i).getCode());
+ }
+ }
+
+ pstmt.setInt(stmtIndex++, index);
+ pstmt.setLong(stmtIndex++, tag);
+ CDODBUtil.sqlUpdate(pstmt, true);
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ catch (IllegalStateException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+ }
+
+ private void removeEntry(IDBStoreAccessor accessor, CDOID id, int branchId, int oldVersion, int newVersion,
+ int index, long timestamp)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), index, id, newVersion);
+ }
+
+ try
+ {
+ // try to delete a temporary entry first
+ pstmt = statementCache.getPreparedStatement(sqlDeleteEntry, ReuseProbability.HIGH);
+
+ int stmtIndex = 1;
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, index);
+ pstmt.setInt(stmtIndex++, newVersion);
+
+ int result = CDODBUtil.sqlUpdate(pstmt, false);
+ if (result == 1)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("removeEntry deleted: {0}", index); //$NON-NLS-1$
+ }
+ }
+ else if (result > 1)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("removeEntry Too many results: {0}: {1}", index, result); //$NON-NLS-1$
+ }
+
+ throw new DBException("Too many results"); //$NON-NLS-1$
+ }
+ else
+ {
+ // no temporary entry found, so mark the entry as removed
+ statementCache.releasePreparedStatement(pstmt);
+ pstmt = statementCache.getPreparedStatement(sqlRemoveEntry, ReuseProbability.HIGH);
+
+ stmtIndex = 1;
+ pstmt.setInt(stmtIndex++, newVersion);
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, index);
+ result = CDODBUtil.sqlUpdate(pstmt, false);
+
+ if (result == 0)
+ {
+ // no entry removed -> this means that we are in a branch and
+ // the entry has not been modified since the branch fork.
+ // therefore, we have to copy the base value and mark it as removed
+ Object value = getValueFromBase(accessor, id, branchId, index);
+ addHistoricEntry(accessor, id, branchId, 0, newVersion, index, value, timestamp);
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4} FAILED {5}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), index, id, newVersion, e.getMessage());
+ }
+
+ throw new DBException(e);
+ }
+ catch (IllegalStateException e)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Removing value for feature() {0}.{1} index {2} of {3}v{4} FAILED {5}", //$NON-NLS-1$
+ getContainingClass().getName(), getFeature().getName(), index, id, newVersion, e.getMessage());
+ }
+
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+ }
+
+ private FeatureMap.Entry getValue(IDBStoreAccessor accessor, CDOID id, int branchId, int index, boolean getFromBase)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement pstmt = null;
+ FeatureMap.Entry result = null;
+
+ try
+ {
+ pstmt = statementCache.getPreparedStatement(sqlGetValue, ReuseProbability.HIGH);
+
+ int stmtIndex = 1;
+ pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
+ pstmt.setInt(stmtIndex++, branchId);
+ pstmt.setInt(stmtIndex++, index);
+
+ ResultSet resultSet = pstmt.executeQuery();
+ if (resultSet.next())
+ {
+ Long tag = resultSet.getLong(1);
+ Object value = getTypeMapping(accessor, tag).readValue(resultSet);
+ result = CDORevisionUtil.createFeatureMapEntry(getFeatureByTag(accessor, tag), value);
+ }
+ else
+ {
+ // value is not in this branch.
+ // -> read from base revision
+ if (getFromBase)
+ {
+ result = getValueFromBase(accessor, id, branchId, index);
+ } // else: result remains null
+ }
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Read value (index {0}) from result set: {1}", index, result); //$NON-NLS-1$
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(pstmt);
+ }
+
+ return result;
+ }
+
+ /**
+ * Read a single value (at a given index) from the base revision
+ *
+ * @param accessor
+ * the DBStoreAccessor
+ * @param id
+ * the ID of the revision
+ * @param branchID
+ * the ID of the current (child) branch
+ * @param index
+ * the index to read the value from
+ * @return the value which is at index <code>index</code> in revision with ID <code>id</code> in the parent branch at
+ * the base of this branch (indicated by <code>branchID</code>).
+ */
+ private FeatureMap.Entry getValueFromBase(IDBStoreAccessor accessor, CDOID id, int branchID, int index)
+ {
+ IStoreChunkReader chunkReader = createBaseChunkReader(accessor, id, branchID);
+ chunkReader.addSimpleChunk(index);
+ List<Chunk> chunks = chunkReader.executeRead();
+ return (FeatureMap.Entry)chunks.get(0).get(0);
+ }
+
+ private IStoreChunkReader createBaseChunkReader(IDBStoreAccessor accessor, CDOID id, int branchID)
+ {
+ CDOBranchPoint base = accessor.getStore().getRepository().getBranchManager().getBranch(branchID).getBase();
+ InternalCDORevision baseRevision = (InternalCDORevision)accessor.getStore().getRepository().getRevisionManager()
+ .getRevision(id, base, /* referenceChunk = */0, /* prefetchDepth = */CDORevision.DEPTH_NONE, true);
+ IStoreChunkReader chunkReader = accessor.createChunkReader(baseRevision, getFeature());
+ return chunkReader;
+ }
+
+ public final boolean queryXRefs(IDBStoreAccessor accessor, String mainTableName, String mainTableWhere,
+ QueryXRefsContext context, String idString)
+ {
+ // must never be called (a feature map is not associated with an EReference feature, so XRefs are nor supported
+ // here)
+ throw new ImplementationError("Should never be called!");
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/DelegatingObjectTypeMapper.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/DelegatingObjectTypeMapper.java
index b7211b1ee0..23fd28072e 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/DelegatingObjectTypeMapper.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/DelegatingObjectTypeMapper.java
@@ -57,7 +57,7 @@ public abstract class DelegatingObjectTypeMapper extends AbstractObjectTypeMappe
if (type != null)
{
long classID = type;
- EClass eClass = (EClass)getMetaDataManager().getMetaInstance(classID);
+ EClass eClass = (EClass)getMetaDataManager().getMetaInstance(accessor, classID);
return new CDOClassifierRef(eClass);
}
@@ -67,7 +67,7 @@ public abstract class DelegatingObjectTypeMapper extends AbstractObjectTypeMappe
public void putObjectType(IDBStoreAccessor accessor, long timeStamp, CDOID id, EClass type)
{
long longId = CDOIDUtil.getLong(id);
- long classID = getMetaDataManager().getMetaID(type);
+ long classID = getMetaDataManager().getMetaID(accessor, type, timeStamp);
doPutObjectType(longId, classID);
delegate.putObjectType(accessor, timeStamp, id, type);
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 2c5d4e2ada..bb349063fb 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
@@ -181,8 +181,6 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_VERSION);
builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.ATTRIBUTES_CLASS);
- builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_CREATED);
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_REVISED);
@@ -217,7 +215,7 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
}
}
- builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
+ builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < getValueMappings().size(); i++)
{
@@ -449,7 +447,6 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
stmt = statementCache.getPreparedStatement(sqlInsertAttributes, ReuseProbability.HIGH);
stmt.setLong(col++, CDOIDUtil.getLong(revision.getID()));
stmt.setInt(col++, revision.getVersion());
- stmt.setLong(col++, accessor.getStore().getMetaDataManager().getMetaID(revision.getEClass()));
stmt.setLong(col++, commitTime);
stmt.setLong(col++, revision.getRevised());
stmt.setLong(col++,
@@ -521,7 +518,6 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping
stmt.setLong(col++, CDOIDUtil.getLong(id));
stmt.setInt(col++, -version); // cdo_version
- stmt.setLong(col++, accessor.getStore().getMetaDataManager().getMetaID(getEClass()));
stmt.setLong(col++, timeStamp); // cdo_created
stmt.setLong(col++, DBStore.UNSPECIFIED_DATE); // cdo_revised
stmt.setLong(col++, DBStore.NULL); // resource
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 78a0b2610f..ace65f7d01 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
@@ -304,8 +304,6 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_BRANCH);
builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.ATTRIBUTES_CLASS);
- builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_CREATED);
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_REVISED);
@@ -340,7 +338,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp
}
}
- builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
+ builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < getValueMappings().size(); i++)
{
@@ -604,7 +602,6 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp
stmt.setLong(col++, CDOIDUtil.getLong(revision.getID()));
stmt.setInt(col++, revision.getVersion());
stmt.setInt(col++, revision.getBranch().getID());
- stmt.setLong(col++, accessor.getStore().getMetaDataManager().getMetaID(revision.getEClass()));
stmt.setLong(col++, commitTime);
stmt.setLong(col++, revision.getRevised());
stmt.setLong(col++,
@@ -675,7 +672,6 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp
stmt.setLong(col++, CDOIDUtil.getLong(id));
stmt.setInt(col++, -version); // cdo_version
stmt.setInt(col++, branch.getID());
- stmt.setLong(col++, accessor.getStore().getMetaDataManager().getMetaID(getEClass()));
stmt.setLong(col++, timeStamp); // cdo_created
stmt.setLong(col++, DBStore.UNSPECIFIED_DATE); // cdo_revised
stmt.setLong(col++, DBStore.NULL); // resource
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java
index af16f15e53..d9423f6dc3 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java
@@ -159,8 +159,6 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_VERSION);
builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.ATTRIBUTES_CLASS);
- builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_CREATED);
builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.ATTRIBUTES_REVISED);
@@ -195,8 +193,7 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi
}
}
- builder.append(") VALUES (?, ?, "); //$NON-NLS-1$
- builder.append("?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
+ builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < getValueMappings().size(); i++)
{
builder.append(", ?"); //$NON-NLS-1$
@@ -266,7 +263,6 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi
stmt = statementCache.getPreparedStatement(sqlInsertAttributes, ReuseProbability.HIGH);
stmt.setLong(col++, CDOIDUtil.getLong(revision.getID()));
stmt.setInt(col++, revision.getVersion());
- stmt.setLong(col++, accessor.getStore().getMetaDataManager().getMetaID(revision.getEClass()));
stmt.setLong(col++, commitTime);
stmt.setLong(col++, revision.getRevised());
stmt.setLong(col++,
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/NonAuditFeatureMapTableMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/NonAuditFeatureMapTableMapping.java
index 7add5d558e..96672ca40a 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/NonAuditFeatureMapTableMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/NonAuditFeatureMapTableMapping.java
@@ -247,13 +247,13 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
* @param value
* the value to insert.
*/
- public void insertListItem(IDBStoreAccessor accessor, CDOID id, int index, Object value)
+ public void insertListItem(IDBStoreAccessor accessor, CDOID id, int index, Object value, long timestamp)
{
move1up(accessor, id, index, UNBOUNDED_MOVE);
- insertValue(accessor, id, index, value);
+ insertValue(accessor, id, index, value, timestamp);
}
- private void insertValue(IDBStoreAccessor accessor, CDOID id, int index, Object value)
+ private void insertValue(IDBStoreAccessor accessor, CDOID id, int index, Object value, long timestamp)
{
PreparedStatement stmt = null;
@@ -261,8 +261,8 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
{
FeatureMap.Entry entry = (FeatureMap.Entry)value;
EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
+ Long tag = getTagByFeature(accessor, entryFeature, timestamp);
+ String column = getColumnName(accessor, tag);
String sql = sqlInsert;
@@ -275,7 +275,7 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
{
if (getColumnNames().get(i).equals(column))
{
- getTypeMapping(tag).setValue(stmt, stmtIndex++, entry.getValue());
+ getTypeMapping(accessor, tag).setValue(stmt, stmtIndex++, entry.getValue());
}
else
{
@@ -470,15 +470,15 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
* @param value
* the value to be set.
*/
- public void setListItem(IDBStoreAccessor accessor, CDOID id, int index, Object value)
+ public void setListItem(IDBStoreAccessor accessor, CDOID id, int index, Object value, long timestamp)
{
PreparedStatement stmt = null;
FeatureMap.Entry entry = (FeatureMap.Entry)value;
EStructuralFeature entryFeature = entry.getEStructuralFeature();
- Long tag = getTagByFeature(entryFeature);
- String column = getColumnName(tag);
- ITypeMapping mapping = getTypeMapping(tag);
+ Long tag = getTagByFeature(accessor, entryFeature, timestamp);
+ String column = getColumnName(accessor, tag);
+ ITypeMapping mapping = getTypeMapping(accessor, tag);
try
{
@@ -515,7 +515,7 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
}
public void processDelta(final IDBStoreAccessor accessor, final CDOID id, final int branchId, int oldVersion,
- final int newVersion, long created, CDOListFeatureDelta listDelta)
+ final int newVersion, final long created, CDOListFeatureDelta listDelta)
{
CDOFeatureDeltaVisitor visitor = new CDOFeatureDeltaVisitor()
{
@@ -526,7 +526,7 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
public void visit(CDOAddFeatureDelta delta)
{
- insertListItem(accessor, id, delta.getIndex(), delta.getValue());
+ insertListItem(accessor, id, delta.getIndex(), delta.getValue(), created);
}
public void visit(CDORemoveFeatureDelta delta)
@@ -536,7 +536,7 @@ public class NonAuditFeatureMapTableMapping extends AbstractFeatureMapTableMappi
public void visit(CDOSetFeatureDelta delta)
{
- setListItem(accessor, id, delta.getIndex(), delta.getValue());
+ setListItem(accessor, id, delta.getIndex(), delta.getValue(), created);
}
public void visit(CDOUnsetFeatureDelta delta)
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/ObjectTypeTable.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/ObjectTypeTable.java
index fd7e5e9cc4..0839d79437 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/ObjectTypeTable.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/ObjectTypeTable.java
@@ -88,7 +88,7 @@ public class ObjectTypeTable extends AbstractObjectTypeMapper
}
long classID = resultSet.getLong(1);
- EClass eClass = (EClass)getMetaDataManager().getMetaInstance(classID);
+ EClass eClass = (EClass)getMetaDataManager().getMetaInstance(accessor, classID);
return new CDOClassifierRef(eClass);
}
catch (SQLException ex)
@@ -109,7 +109,7 @@ public class ObjectTypeTable extends AbstractObjectTypeMapper
{
stmt = accessor.getStatementCache().getPreparedStatement(sqlInsert, ReuseProbability.MAX);
stmt.setLong(1, CDOIDUtil.getLong(id));
- stmt.setLong(2, getMetaDataManager().getMetaID(type));
+ stmt.setLong(2, getMetaDataManager().getMetaID(accessor, type, timeStamp));
stmt.setLong(3, timeStamp);
DBUtil.trace(stmt.toString());
int result = stmt.executeUpdate();
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/messages/messages.properties b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/messages/messages.properties
index e551313dbc..a225827d95 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/messages/messages.properties
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/messages/messages.properties
@@ -11,7 +11,7 @@
DBStore.0=dbConnectionProvider is null
DBStore.1=dbAdapter is null
-DBStore.10=Repaired after crash: maxObjectID={0}, maxMetaID={1}
+DBStore.10=Repaired after crash: lastObjectID={0}, nextLocalObjectID={1}, lastBranchID={2}, lastCommitTime={3}, lastNonLocalCommitTime={4}
DBStore.2=mappingStrategy is null
DBStore.7=AuditSupport of MappingStrategy and Store does not match. Please check configuration.
DBStore.8=First start: {0,date} {0,time}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
index 602ac165cf..2bbfdc284a 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
@@ -1,9 +1,8 @@
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.eclipse.emf.cdo.internal.common.model">
-
- <class name="org.eclipse.emf.cdo.server.internal.hibernate.HibernateCDOPackageUnitDTO" table="cdo_package_unit" lazy="false" entity-name="CDOPackageUnit">
+ <class name="org.eclipse.emf.cdo.server.internal.hibernate.HibernateCDOPackageUnitDTO" table="cdo_package_unit" lazy="false" entity-name="CDOPackageUnit">
<id name="nsUri" access="property"/>
<property name="originalType" access="field" />
@@ -12,7 +11,7 @@
<!-- Need to set an explicit length for derby:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2614
setting it to an arbitrary large value
- -->
+ -->
<property name="EPackageBlob" access="property" type="blob" length="65500"/>
<array name="packageInfos" cascade="all, delete-orphan" access="field">
@@ -20,28 +19,21 @@
<list-index column="idx"/>
<one-to-many class="CDOPackageInfoImpl"/>
</array>
-
+
</class>
-
- <class name="CDOPackageInfoImpl" table="cdo_package_info" lazy="false">
+ <class name="CDOPackageInfoImpl" table="cdo_package_info" lazy="false">
<id name="packageURI" access="property"/>
-
<property name="parentURI" length="255" access="field" />
- <property name="metaIDRange" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDMetaRangeUserType"
- not-null="true" access="field">
- <column name="metaIDStart" />
- <column name="metaIDSize" />
- </property>
</class>
-
+
<class name="org.eclipse.emf.cdo.server.internal.hibernate.SystemInformation" table="cdo_system_information" lazy="false">
<id column="id" type="int">
<generator class="native" />
</id>
<property name="creationTime"/>
</class>
-
+
<class name="org.eclipse.emf.cdo.server.internal.hibernate.SystemProperty" table="cdo_system_property" lazy="false">
<id name="name" type="string" length="255"/>
<property name="value" type="text" length="2000"/>
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java
index b8bc4d321e..45f94aec28 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java
@@ -12,7 +12,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -139,7 +138,7 @@ public class ContainerInfoConverter
cdoRevision.setContainerID(containerID);
final String containerFeatureStr = containerInfo.substring(index + SEPARATOR.length());
- if (containerID instanceof CDOIDMeta || containerID instanceof CDOIDExternal)
+ if (containerID instanceof CDOIDExternal)
{
cdoRevision.setContainingFeatureID(Integer.parseInt(containerFeatureStr));
return;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
index e65bebcef4..225ff864f9 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
@@ -14,7 +14,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
@@ -275,7 +274,7 @@ public class HibernateUtil
/**
* Converts a CDOID to an unique String representations. Null, {@link CDOIDTemp} and null CDOID's are returned as null
- * value. Supports {@link CDOID}, {@link CDOIDMeta} and {@link CDOIDExternal}.
+ * value. Supports {@link CDOID} and {@link CDOIDExternal}.
*
* @param cdoID
* the cdoID to convert
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java
index f345c42d55..9192bb5d89 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java
@@ -12,7 +12,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
@@ -28,15 +27,12 @@ import java.sql.Types;
import java.util.Properties;
/**
- * A user type which can handle both {@link CDOIDMeta} as well as {@link CDOIDExternal}. Both are stored in a single
- * varchar field.
+ * A user type which can handle {@link CDOIDExternal}. It's stored in a single varchar field.
*
* @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
*/
public class CDOIDExternalUserType implements UserType, ParameterizedType
{
- private static final String META_PREFIX = "MID"; //$NON-NLS-1$
-
private static final int[] SQL_TYPES = { Types.VARCHAR };
public CDOIDExternalUserType()
@@ -86,11 +82,6 @@ public class CDOIDExternalUserType implements UserType, ParameterizedType
return null;
}
- if (data.startsWith(META_PREFIX))
- {
- return CDOIDUtil.createMeta(Long.parseLong(data.substring(META_PREFIX.length())));
- }
-
return CDOIDUtil.createExternal(data);
}
@@ -112,11 +103,7 @@ public class CDOIDExternalUserType implements UserType, ParameterizedType
localValue = value;
}
- if (localValue instanceof CDOIDMeta)
- {
- statement.setString(index, META_PREFIX + ((CDOIDMeta)localValue).getLongValue());
- }
- else if (localValue instanceof CDOIDExternal)
+ if (localValue instanceof CDOIDExternal)
{
statement.setString(index, ((CDOIDExternal)localValue).getURI());
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDMetaRangeUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDMetaRangeUserType.java
deleted file mode 100644
index 17081305b9..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDMetaRangeUserType.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Taal - initial api
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
-
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-
-import org.hibernate.Hibernate;
-import org.hibernate.usertype.UserType;
-
-import java.io.Serializable;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-
-/**
- * @author Martin Taal
- */
-public class CDOIDMetaRangeUserType implements UserType
-{
- private static final int[] SQL_TYPES = { Types.INTEGER, Types.INTEGER };
-
- public CDOIDMetaRangeUserType()
- {
- }
-
- public int[] sqlTypes()
- {
- return SQL_TYPES;
- }
-
- public Class<?> returnedClass()
- {
- return CDOIDMetaRange.class;
- }
-
- public boolean isMutable()
- {
- return true;
- }
-
- public Object deepCopy(Object value)
- {
- if (value == null)
- {
- return null;
- }
-
- CDOIDMetaRange cdoRange = (CDOIDMetaRange)value;
- CDOIDMeta newCdoIDMeta = CDOIDUtil.createMeta(((CDOIDMeta)cdoRange.getLowerBound()).getLongValue());
- return CDOIDUtil.createMetaRange(newCdoIDMeta, cdoRange.size());
- }
-
- public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException
- {
- Integer start = (Integer)Hibernate.INTEGER.nullSafeGet(rs, names[0]);
- if (rs.wasNull())
- {
- return null;
- }
-
- Integer size = (Integer)Hibernate.INTEGER.nullSafeGet(rs, names[1]);
- if (rs.wasNull())
- {
- return null;
- }
-
- CDOIDMeta newCdoIDMeta = CDOIDUtil.createMeta(start);
- return CDOIDUtil.createMetaRange(newCdoIDMeta, size);
- }
-
- public void nullSafeSet(PreparedStatement statement, Object value, int index) throws SQLException
- {
- if (value != null)
- {
- CDOIDMetaRange cdoRange = (CDOIDMetaRange)value;
- statement.setLong(index, ((CDOIDMeta)cdoRange.getLowerBound()).getLongValue());
- statement.setInt(index + 1, cdoRange.size());
- }
- else
- {
- statement.setNull(index, Types.INTEGER);
- statement.setNull(index + 1, Types.INTEGER);
- }
- }
-
- public Serializable disassemble(Object value)
- {
- return (Serializable)value;
- }
-
- public Object assemble(Serializable cachedValue, Object owner)
- {
- return cachedValue;
- }
-
- public Object replace(Object original, Object target, Object owner)
- {
- return original;
- }
-
- public boolean equals(Object x, Object y)
- {
- if (x == y)
- {
- return true;
- }
-
- if (x == null || y == null)
- {
- return false;
- }
-
- return x.equals(y);
- }
-
- public int hashCode(Object x)
- {
- return x.hashCode();
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
index 448b5a842d..4cdf98a2af 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
@@ -13,7 +13,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
@@ -28,7 +27,7 @@ import java.sql.SQLException;
import java.sql.Types;
/**
- * Persists a CDOID in the DB. Currently {@link CDOIDMeta} and {@link CDOIDExternal} are supported.
+ * Persists a CDOID in the DB. Currently {@link CDOIDExternal} is supported.
*/
public class CDOIDUserType implements UserType
{
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java
index 5bec96ccd9..03abc592d7 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Martin Taal - copied from CDORevisionPropertyHandler and adapted
* Eike Stepper - maintenance
@@ -13,7 +13,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
@@ -39,7 +38,7 @@ public class CDOReferenceGetter extends CDOPropertyGetter
{
return null;
}
- else if (o instanceof CDOIDMeta || o instanceof CDOIDExternal)
+ else if (o instanceof CDOIDExternal)
{
return o;
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java
index 079eb600f6..1c548727de 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Martin Taal - copied from CDORevisionPropertyHandler and adapted
* Eike Stepper - maintenance
@@ -12,7 +12,6 @@
package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
import org.hibernate.HibernateException;
@@ -37,7 +36,7 @@ public class CDOReferenceSetter extends CDOPropertySetter
{
super.set(target, null, factory);
}
- else if (value instanceof CDOIDMeta || value instanceof CDOIDExternal)
+ else if (value instanceof CDOIDExternal)
{
super.set(target, value, factory);
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java
index d82a0da16f..1463902c23 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java
@@ -13,7 +13,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
@@ -46,7 +45,7 @@ public class HibernateMoveableListWrapper implements MoveableList<Object>
int size = size();
if (sourceIndex >= size)
{
- throw new IndexOutOfBoundsException("sourceIndex=" + sourceIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
+ throw new IndexOutOfBoundsException("sourceIndex=" + sourceIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
}
if (targetIndex >= size)
@@ -117,7 +116,7 @@ public class HibernateMoveableListWrapper implements MoveableList<Object>
{
return null;
}
- else if (o instanceof CDOIDMeta || o instanceof CDOIDExternal)
+ else if (o instanceof CDOIDExternal)
{
return o;
}
@@ -144,7 +143,7 @@ public class HibernateMoveableListWrapper implements MoveableList<Object>
protected Object getValue(Object o)
{
- if (o instanceof CDOIDMeta || o instanceof CDOIDExternal)
+ if (o instanceof CDOIDExternal)
{
return o;
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
index 40813ea2eb..77edd97d31 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
@@ -14,7 +14,6 @@
package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
@@ -41,7 +40,6 @@ import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
import java.io.IOException;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -244,7 +242,6 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori
if (success)
{
respondingResult(out);
- respondingMappingNewPackages(out);
respondingMappingNewObjects(out);
}
}
@@ -272,28 +269,15 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori
out.writeLong(commitContext.getPreviousTimeStamp());
}
- protected void respondingMappingNewPackages(CDODataOutput out) throws Exception
- {
- // Meta ID ranges
- List<CDOIDMetaRange> metaRanges = commitContext.getMetaIDRanges();
- for (CDOIDMetaRange metaRange : metaRanges)
- {
- out.writeCDOIDMetaRange(metaRange);
- }
- }
-
protected void respondingMappingNewObjects(CDODataOutput out) throws Exception
{
Map<CDOID, CDOID> idMappings = commitContext.getIDMappings();
for (Entry<CDOID, CDOID> entry : idMappings.entrySet())
{
CDOID oldID = entry.getKey();
- if (!oldID.isMeta())
- {
- CDOID newID = entry.getValue();
- out.writeCDOID(oldID);
- out.writeCDOID(newID);
- }
+ CDOID newID = entry.getValue();
+ out.writeCDOID(oldID);
+ out.writeCDOID(newID);
}
out.writeCDOID(CDOID.NULL);
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
index d0495120c7..114ee9f671 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
@@ -38,11 +38,6 @@ public class CommitXATransactionPhase3Indication extends CommitTransactionIndica
{
commitContext.commit(monitor);
boolean success = respondingException(out, commitContext.getRollbackMessage());
- if (success)
- {
- respondingMappingNewPackages(out);
- }
-
commitContext.postCommit(success);
}
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java
index db43ae7aa4..0dc4383887 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java
@@ -18,8 +18,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.model.lob.CDOLobHandler;
@@ -49,7 +47,6 @@ import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -66,10 +63,8 @@ import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.om.trace.ContextTracer;
import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import com.objy.db.app.oo;
@@ -692,28 +687,6 @@ public class ObjectivityStoreAccessor extends StoreAccessor implements IObjectiv
return getStore().getRepository().getPackageRegistry();
}
- private InternalCDOPackageRegistry getInternalPackageRegistry()
- {
- return (InternalCDOPackageRegistry)getPackageRegistry();
- }
-
- // TODO - move the following two calls to perhaps a MetaDataManager (as in cdo.db package).
- // we shouldn't pollute this class with extra stuff.
- // The meta info is definitely useful for FeatureMapEntry details.
- public long getMetaID(EModelElement modelElement)
- {
- CDOID cdoid = getInternalPackageRegistry().getMetaInstanceMapper().lookupMetaInstanceID(
- (InternalEObject)modelElement);
- return CDOIDUtil.getLong(cdoid);
- }
-
- public EModelElement getMetaInstance(long id)
- {
- CDOIDMeta cdoid = CDOIDUtil.createMeta(id);
- InternalEObject metaInstance = getInternalPackageRegistry().getMetaInstanceMapper().lookupMetaInstance(cdoid);
- return (EModelElement)metaInstance;
- }
-
/**
* TODO - 1) make sure that we return the root resource when we asked for "null" pathPrefix. 2) Create the "null"
* resource folder if it doesn't exist, perhaps when we initialize the store.
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java
index b7a455e3f8..a39584fa4c 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.common.id.CDOIDExternal;
import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor;
import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
import org.eclipse.emf.cdo.server.internal.objectivity.mapper.IManyTypeMapper;
@@ -463,11 +462,7 @@ public class ObjyObject
FeatureMap.Entry entry = (FeatureMap.Entry)value;
EStructuralFeature entryFeature = entry.getEStructuralFeature();
Object entryValue = entry.getValue();
- long metaId = storeAccessor.getMetaID(entryFeature);
- // System.out.println("-->> FeatureMap.Entry (" + i + ") -> feature:" + entryFeature.getName() +
- // " - value:"
- // + entryValue + " - MetaID: " + metaId);
ooId oid = null;
if (entryValue instanceof CDOIDExternal)
{
@@ -488,9 +483,10 @@ public class ObjyObject
TRACER_DEBUG.trace("OBJY: don't know what kind of entryValue is this!!! - " + entryValue);
}
}
+
// FeatureMapEntry is a presistent class.
- ObjyFeatureMapEntry featureMapEntry = new ObjyFeatureMapEntry(entryFeature.getName(), oid, metaId,
- objectId);
+ ObjyFeatureMapEntry featureMapEntry = new ObjyFeatureMapEntry(entryFeature.getName(), oid, objectId);
+
// this.cluster(featureMapEntry);
values[i] = featureMapEntry;
}
@@ -674,7 +670,6 @@ public class ObjyObject
else if (objects[i] instanceof ObjyFeatureMapEntry)
{
ObjyFeatureMapEntry mapEntry = (ObjyFeatureMapEntry)objects[i];
- long metaId = mapEntry.getMetaId();
ooId oid = mapEntry.getObject();
CDOID cdoId = null;
Class_Object refClassObject = Class_Object.class_object_from_oid(oid);
@@ -688,13 +683,13 @@ public class ObjyObject
{
cdoId = OBJYCDOIDUtil.getCDOID((ooId)objects[i]);
}
- EStructuralFeature entryFeature = (EStructuralFeature)storeAccessor.getMetaInstance(metaId);
- FeatureMap.Entry entry = CDORevisionUtil.createFeatureMapEntry(entryFeature, cdoId);
- // for verifications...
- entryFeature = entry.getEStructuralFeature();
- list.add(entry);
- refClassObject = null;
+ throw new UnsupportedOperationException("FIXME");
+
+ // FIXME Uncomment the following 3 lines:
+ // FeatureMap.Entry entry = CDORevisionUtil.createFeatureMapEntry(entryFeature, cdoId);
+ // list.add(entry);
+ // refClassObject = null;
}
else
{
@@ -786,7 +781,6 @@ public class ObjyObject
else if (objects[i] instanceof ObjyFeatureMapEntry)
{
ObjyFeatureMapEntry mapEntry = (ObjyFeatureMapEntry)objects[i];
- long metaId = mapEntry.getMetaId();
ooId oid = mapEntry.getObject();
CDOID cdoId = null;
Class_Object refClassObject = Class_Object.class_object_from_oid(oid);
@@ -799,13 +793,12 @@ public class ObjyObject
{
cdoId = OBJYCDOIDUtil.getCDOID((ooId)objects[i]);
}
- // get the entry feature using the metaId.
- EStructuralFeature entryFeature = (EStructuralFeature)storeAccessor.getMetaInstance(metaId);
- FeatureMap.Entry entry = CDORevisionUtil.createFeatureMapEntry(entryFeature, cdoId);
- // for verifications...
- entryFeature = entry.getEStructuralFeature();
- results.add(entry);
+ throw new UnsupportedOperationException("FIXME");
+
+ // FIXME Uncomment the following 2 lines:
+ // FeatureMap.Entry entry = CDORevisionUtil.createFeatureMapEntry(entryFeature, cdoId);
+ // results.add(entry);
}
}
}
@@ -1123,11 +1116,7 @@ public class ObjyObject
else if (objects[i] instanceof ObjyFeatureMapEntry)
{
ObjyFeatureMapEntry mapEntry = (ObjyFeatureMapEntry)objects[i];
- // long metaId = mapEntry.getMetaId();
- // String name = mapEntry.getTagName();
ooId oid = mapEntry.getObject();
- // System.out.println("-->> FeatureMapEntry (" + i + ") -> feature:" + name + " - value:" + oid
- // + " - metaId: " + metaId);
ooObj obj = ooObj.create_ooObj(oid);
obj.delete();
}
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java
index abcf249bbe..081ce80e5b 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java
@@ -10,8 +10,6 @@
*/
package org.eclipse.emf.cdo.server.internal.objectivity.db;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
@@ -19,7 +17,6 @@ import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageInfo;
import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageUnit;
-import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
import org.eclipse.emf.cdo.server.internal.objectivity.utils.SmartLock;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
@@ -141,12 +138,6 @@ public class ObjyPackageHandler
ooPackageInfo.setUnitID(packageInfo.getPackageUnit().getID());
ooPackageInfo.setPackageName(packageInfo.getEPackage().getName());
- CDOIDMetaRange metaIDRange = packageInfo.getMetaIDRange();
- long metaLB = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getLowerBound()).getLongValue();
- long metaUB = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getUpperBound()).getLongValue();
- ooPackageInfo.setMetaLB(metaLB);
- ooPackageInfo.setMetaUB(metaUB);
-
return ooPackageInfo;
}
@@ -224,11 +215,6 @@ public class ObjyPackageHandler
packageInfo.setPackageURI(ooPackageInfo.getPackageURI());
packageInfo.setParentURI(ooPackageInfo.getParentURI());
// TODO - do we need this!!!! setUnitID(packageInfo.getPackageUnit().getID());
- long metaLB = ooPackageInfo.getMetaLB();
- long metaUB = ooPackageInfo.getMetaUB();
- CDOIDMetaRange metaIDRange = metaLB == 0 ? null : OBJYCDOIDUtil.createMetaRange(OBJYCDOIDUtil.createMeta(metaLB),
- (int)(metaUB - metaLB) + 1);
- packageInfo.setMetaIDRange(metaIDRange);
return packageInfo;
}
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java
index fc0c662a9b..5f1abe7bf4 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Simon McDuff - initial API and implementation
* Ibrahim Sallam - code refactoring for CDO 3.0
@@ -14,19 +14,14 @@ package org.eclipse.emf.cdo.server.internal.objectivity.schema;
import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
import com.objy.as.app.Class_Object;
-import com.objy.as.app.Numeric_Value;
import com.objy.as.app.Proposed_Class;
import com.objy.as.app.String_Value;
import com.objy.as.app.d_Access_Kind;
import com.objy.as.app.d_Module;
-import com.objy.as.app.ooBaseType;
import com.objy.db.app.ooId;
public class ObjyFeatureMapEntry
{
- // caching some details.
- protected long metaId;
-
protected String tagName;
protected ooId object;
@@ -35,8 +30,6 @@ public class ObjyFeatureMapEntry
public static final String MapEntryClassName = "ObjyFeatureMapEntry";
- public static final String MetaId = "metaId";
-
public static final String EntryName = "tagName";
public static final String EntryObject = "object";
@@ -50,13 +43,6 @@ public class ObjyFeatureMapEntry
Proposed_Class B = top_mod.propose_new_class(MapEntryClassName);
B.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
- B.add_basic_attribute(com.objy.as.app.d_Module.LAST, // Access kind
- d_Access_Kind.d_PUBLIC, // Access kind
- ObjyFeatureMapEntry.MetaId, // Attribute name
- 1, // # elements in fixed-size array
- ooBaseType.ooINT64 // type
- );
-
B.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, // Access kind
d_Access_Kind.d_PUBLIC, // Access kind
ObjyFeatureMapEntry.EntryName, // Attribute name
@@ -78,16 +64,13 @@ public class ObjyFeatureMapEntry
* @param tagName
* @param oid
*/
- public ObjyFeatureMapEntry(String tagName, ooId oid, long metaId, ooId near)
+ public ObjyFeatureMapEntry(String tagName, ooId oid, ooId near)
{
this.tagName = tagName;
object = oid;
- this.metaId = metaId;
classObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(MapEntryClassName).getASClass(), near,
false);
- Numeric_Value numericValue = new Numeric_Value(metaId);
- classObject.nset_numeric(MetaId, numericValue);
String_Value stringValue = classObject.nget_string(EntryName);
stringValue.update();
String newValue = this.tagName;
@@ -105,9 +88,6 @@ public class ObjyFeatureMapEntry
{
this.classObject = classObject;
- Numeric_Value numericValue = classObject.nget_numeric(MetaId);
- metaId = numericValue.longValue();
-
String_Value value = classObject.nget_string(EntryName);
// for objy10.0 -> this.tagName = (value == null || value.toString() == null || value.toString().isEmpty()) ? null :
// value.toString();
@@ -140,14 +120,4 @@ public class ObjyFeatureMapEntry
{
return classObject.objectID();
}
-
- public long getMetaId()
- {
- return metaId;
- }
-
- public void setMetaId(long metaId)
- {
- this.metaId = metaId;
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java
index 27e6f9be6d..afd5840f69 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java
@@ -25,10 +25,6 @@ public class ObjyPackageInfo extends ooObj
protected String unitID;
- protected long metaLB;
-
- protected long metaUB;
-
protected ToOneRelationship packageUnit;
private String name;
@@ -105,30 +101,6 @@ public class ObjyPackageInfo extends ooObj
this.unitID = unitID;
}
- public long getMetaLB()
- {
- fetch();
- return metaLB;
- }
-
- public void setMetaLB(long metaLB)
- {
- markModified();
- this.metaLB = metaLB;
- }
-
- public long getMetaUB()
- {
- fetch();
- return metaUB;
- }
-
- public void setMetaUB(long metaUB)
- {
- markModified();
- this.metaUB = metaUB;
- }
-
public void setPackageName(String name)
{
markModified();
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java
index b1cc8dd951..729070e4bf 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java
@@ -13,8 +13,6 @@ package org.eclipse.emf.cdo.server.internal.objectivity.utils;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDObject;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProxy;
@@ -137,19 +135,8 @@ public class OBJYCDOIDUtil
return getContainerId(longCdoID);
}
- public static CDOIDMeta createMeta(long value)
- {
- return CDOIDUtil.createMeta(value);
- }
-
- public static CDOIDMetaRange createMetaRange(CDOID lowerBound, int count)
- {
- return CDOIDUtil.createMetaRange(lowerBound, count);
- }
-
public static CDOIDExternal createCDIDExternal(ObjyProxy proxyObject)
{
return CDOIDUtil.createExternal(proxyObject.getUri());
}
-
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingCommitContext.java
index 2b5b2290aa..197dca9c79 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingCommitContext.java
@@ -12,7 +12,6 @@ package org.eclipse.emf.cdo.internal.server;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
@@ -24,7 +23,6 @@ import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
import org.eclipse.emf.ecore.EClass;
-import java.util.List;
import java.util.Map;
/**
@@ -104,11 +102,6 @@ public abstract class DelegatingCommitContext implements IStoreAccessor.CommitCo
return getDelegate().getIDMappings();
}
- public List<CDOIDMetaRange> getMetaIDRanges()
- {
- return getDelegate().getMetaIDRanges();
- }
-
public String getRollbackMessage()
{
return getDelegate().getRollbackMessage();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index 8ad5225cb3..d19fd0ea02 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -23,7 +23,6 @@ import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -1299,9 +1298,6 @@ public class Repository extends Container<Object> implements InternalRepository
{
EMFUtil.registerPackage(ePackage, packageRegistry);
InternalCDOPackageInfo packageInfo = packageRegistry.getPackageInfo(ePackage);
- CDOIDMetaRange metaIDRange = store.getNextMetaIDRange(packageInfo.getMetaIDRange().size());
- packageInfo.setMetaIDRange(metaIDRange);
- packageRegistry.getMetaInstanceMapper().mapMetaInstances(ePackage, metaIDRange);
InternalCDOPackageUnit packageUnit = packageInfo.getPackageUnit();
packageUnit.setTimeStamp(store.getCreationTime());
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
index 8d6614966c..3bf3df93da 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
@@ -18,9 +18,7 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDObject;
-import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
@@ -67,7 +65,6 @@ import org.eclipse.net4j.util.collection.IndexedList;
import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
-import org.eclipse.net4j.util.om.trace.ContextTracer;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
@@ -93,8 +90,6 @@ import java.util.concurrent.ConcurrentMap;
*/
public class TransactionCommitContext implements InternalCommitContext
{
- private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_TRANSACTION, TransactionCommitContext.class);
-
private static final InternalCDORevision DETACHED = new StubCDORevision(null);
private InternalTransaction transaction;
@@ -129,8 +124,6 @@ public class TransactionCommitContext implements InternalCommitContext
private List<CDOID> lockedTargets;
- private List<CDOIDMetaRange> metaIDRanges = new ArrayList<CDOIDMetaRange>();
-
private ConcurrentMap<CDOID, CDOID> idMappings = new ConcurrentHashMap<CDOID, CDOID>();
private CDOReferenceAdjuster idMapper = new CDOIDMapper(idMappings);
@@ -274,11 +267,6 @@ public class TransactionCommitContext implements InternalCommitContext
return cache;
}
- public List<CDOIDMetaRange> getMetaIDRanges()
- {
- return Collections.unmodifiableList(metaIDRanges);
- }
-
public Map<CDOID, CDOID> getIDMappings()
{
return Collections.unmodifiableMap(idMappings);
@@ -382,10 +370,8 @@ public class TransactionCommitContext implements InternalCommitContext
monitor.begin(107);
dirtyObjects = new InternalCDORevision[dirtyObjectDeltas.length];
- adjustMetaRanges();
- monitor.worked();
-
lockObjects();
+ monitor.worked();
// Could throw an exception
long[] times = createTimeStamp(monitor.fork());
@@ -512,12 +498,6 @@ public class TransactionCommitContext implements InternalCommitContext
packageRegistry = null;
}
- if (metaIDRanges != null)
- {
- metaIDRanges.clear();
- metaIDRanges = null;
- }
-
if (idMappings != null)
{
idMappings.clear();
@@ -605,49 +585,6 @@ public class TransactionCommitContext implements InternalCommitContext
}
}
- protected void adjustMetaRanges()
- {
- for (InternalCDOPackageUnit newPackageUnit : newPackageUnits)
- {
- for (InternalCDOPackageInfo packageInfo : newPackageUnit.getPackageInfos())
- {
- adjustMetaRange(packageInfo);
- }
- }
- }
-
- private void adjustMetaRange(InternalCDOPackageInfo packageInfo)
- {
- CDOIDMetaRange oldRange = packageInfo.getMetaIDRange();
- if (!oldRange.isTemporary())
- {
- throw new IllegalStateException("!oldRange.isTemporary()"); //$NON-NLS-1$
- }
-
- int count = oldRange.size();
- CDOIDMetaRange newRange = transaction.getRepository().getStore().getNextMetaIDRange(count);
- packageInfo.setMetaIDRange(newRange);
- packageRegistry.getMetaInstanceMapper().mapMetaInstances(packageInfo.getEPackage(), newRange);
-
- for (int i = 0; i < count; i++)
- {
- CDOIDTemp oldID = (CDOIDTemp)oldRange.get(i);
- CDOID newID = newRange.get(i);
- idMappings.put(oldID, newID);
- }
-
- addMetaIDRange(newRange);
- if (TRACER.isEnabled())
- {
- TRACER.format("Mapping meta ID range: {0} --> {1}", oldRange, newRange); //$NON-NLS-1$
- }
- }
-
- protected void addMetaIDRange(CDOIDMetaRange range)
- {
- metaIDRanges.add(range);
- }
-
protected void lockObjects() throws InterruptedException
{
lockedObjects.clear();
@@ -1053,8 +990,6 @@ public class TransactionCommitContext implements InternalCommitContext
repositoryPackageRegistry.putPackageUnit(newPackageUnits[i]);
monitor.worked();
}
-
- repositoryPackageRegistry.getMetaInstanceMapper().mapMetaInstances(packageRegistry.getMetaInstanceMapper());
}
finally
{
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDOPackageRegistry.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDOPackageRegistry.java
index eea956c03b..4605bd9197 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDOPackageRegistry.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDOPackageRegistry.java
@@ -80,11 +80,6 @@ public abstract class DelegatingCDOPackageRegistry extends Lifecycle implements
return getDelegate().getEPackages();
}
- public MetaInstanceMapper getMetaInstanceMapper()
- {
- return getDelegate().getMetaInstanceMapper();
- }
-
public InternalCDOPackageInfo getPackageInfo(EPackage ePackage)
{
return getDelegate().getPackageInfo(ePackage);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java
index f4774bbdd9..7bdb6909ff 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java
@@ -69,12 +69,6 @@ public final class ReplicatorCommitContext extends TransactionCommitContext
}
@Override
- protected void adjustMetaRanges()
- {
- // Do nothing
- }
-
- @Override
protected void adjustForCommit()
{
// Do nothing
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java
index c879c6d1e9..2d4206cf12 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java
@@ -19,7 +19,6 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.lob.CDOLob;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
@@ -514,7 +513,6 @@ public abstract class SynchronizableRepository extends Repository.Default implem
// Prepare data needed for commit result and commit notifications
long timeStamp = result.getTimeStamp();
setTimeStamp(timeStamp);
- addMetaIDRanges(commitData.getNewPackageUnits());
addIDMappings(result.getIDMappings());
applyIDMappings(new Monitor());
@@ -555,23 +553,6 @@ public abstract class SynchronizableRepository extends Repository.Default implem
// Do nothing
}
- @Override
- protected void adjustMetaRanges()
- {
- // Do nothing
- }
-
- private void addMetaIDRanges(List<CDOPackageUnit> newPackageUnits)
- {
- for (CDOPackageUnit newPackageUnit : newPackageUnits)
- {
- for (CDOPackageInfo packageInfo : newPackageUnit.getPackageInfos())
- {
- addMetaIDRange(packageInfo.getMetaIDRange());
- }
- }
- }
-
private void addIDMappings(Map<CDOID, CDOID> idMappings)
{
for (Map.Entry<CDOID, CDOID> idMapping : idMappings.entrySet())
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerExporter.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerExporter.java
index d3ce41cfd5..5782937488 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerExporter.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerExporter.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
@@ -133,8 +132,7 @@ public abstract class CDOServerExporter<OUT>
for (InternalCDOPackageInfo packageInfo : packageUnit.getPackageInfos())
{
String packageURI = packageInfo.getPackageURI();
- CDOIDMetaRange metaIDRange = packageInfo.getMetaIDRange();
- exportPackageInfo(out, packageURI, metaIDRange);
+ exportPackageInfo(out, packageURI);
}
endPackageUnit(out);
@@ -146,7 +144,7 @@ public abstract class CDOServerExporter<OUT>
protected abstract void endPackageUnit(OUT out) throws Exception;
- protected abstract void exportPackageInfo(OUT out, String packageURI, CDOIDMetaRange metaIDRange) throws Exception;
+ protected abstract void exportPackageInfo(OUT out, String packageURI) throws Exception;
protected void exportBranches(final OUT out) throws Exception
{
@@ -286,10 +284,6 @@ public abstract class CDOServerExporter<OUT>
public static final String PACKAGE_INFO_URI = "uri";
- public static final String PACKAGE_INFO_FIRST = "first";
-
- public static final String PACKAGE_INFO_COUNT = "count";
-
public static final String INSTANCES = "instances";
public static final String BRANCH = "branch";
@@ -427,12 +421,10 @@ public abstract class CDOServerExporter<OUT>
}
@Override
- protected void exportPackageInfo(XMLOutput out, String uri, CDOIDMetaRange metaIDRange) throws Exception
+ protected void exportPackageInfo(XMLOutput out, String uri) throws Exception
{
out.element(PACKAGE_INFO);
out.attribute(PACKAGE_INFO_URI, uri);
- out.attribute(PACKAGE_INFO_FIRST, str(metaIDRange.getLowerBound()));
- out.attribute(PACKAGE_INFO_COUNT, metaIDRange.size());
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
index 06db2ea9b1..a43b69037d 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
@@ -13,7 +13,6 @@ package org.eclipse.emf.cdo.server;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -123,7 +122,7 @@ public abstract class CDOServerImporter
public InternalCDOPackageUnit handlePackageUnit(String id, Type type, long time, String data);
- public InternalCDOPackageInfo handlePackageInfo(String packageURI, CDOIDMetaRange metaIDRange);
+ public InternalCDOPackageInfo handlePackageInfo(String packageURI);
public InternalCDOPackageRegistry handleModels();
@@ -187,11 +186,10 @@ public abstract class CDOServerImporter
return packageUnit;
}
- public InternalCDOPackageInfo handlePackageInfo(String packageURI, CDOIDMetaRange metaIDRange)
+ public InternalCDOPackageInfo handlePackageInfo(String packageURI)
{
InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
packageInfo.setPackageURI(packageURI);
- packageInfo.setMetaIDRange(metaIDRange);
packageInfos.add(packageInfo);
return packageInfo;
}
@@ -358,10 +356,7 @@ public abstract class CDOServerImporter
else if (PACKAGE_INFO.equals(qName))
{
String packageURI = attributes.getValue(PACKAGE_INFO_URI);
- CDOID lowerBound = id(attributes.getValue(PACKAGE_INFO_FIRST));
- int count = Integer.parseInt(attributes.getValue(PACKAGE_INFO_COUNT));
- CDOIDMetaRange metaIDRange = CDOIDUtil.createMetaRange(lowerBound, count);
- handler.handlePackageInfo(packageURI, metaIDRange);
+ handler.handlePackageInfo(packageURI);
}
else if (BRANCH.equals(qName))
{
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java
index ce02ce289d..5cdfbc7ac0 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java
@@ -15,8 +15,6 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.net4j.util.om.monitor.ProgressDistributor;
-import org.eclipse.emf.ecore.EModelElement;
-
import java.util.Collection;
import java.util.Map;
import java.util.Set;
@@ -114,13 +112,6 @@ public interface IStore
public long getLastNonLocalCommitTime();
/**
- * Returns the id of the last {@link EModelElement} that has been committed to this store.
- *
- * @since 3.0
- */
- public long getLastMetaID();
-
- /**
* Returns a map filled with the property entries for the requested property <code>names</code> if names is not
* <code>null</code> and not {@link Collection#isEmpty() empty}, all existing property entries otherwise.
*
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
index a71624f868..107ab269ea 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
@@ -15,8 +15,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.lob.CDOBlob;
import org.eclipse.emf.cdo.common.model.lob.CDOClob;
@@ -374,19 +372,13 @@ public interface IStoreAccessor extends IQueryHandlerProvider, BranchLoader, Com
public ExtendedDataInputStream getLobs();
/**
- * Returns an unmodifiable map from all temporary IDs (meta or not) to their persistent counter parts. It is
- * initially populated with the mappings of all new <b>meta</b> objects.
+ * Returns an unmodifiable map from all temporary IDs to their persistent counter parts.
*/
public Map<CDOID, CDOID> getIDMappings();
/**
* @since 3.0
*/
- public List<CDOIDMetaRange> getMetaIDRanges();
-
- /**
- * @since 3.0
- */
public String getRollbackMessage();
}
@@ -541,8 +533,8 @@ public interface IStoreAccessor extends IQueryHandlerProvider, BranchLoader, Com
* Stores the given {@link CDOPackageUnit package units} in the backend represented by this
* {@link IStoreAccessor.Raw raw store accessor} without going through a regular
* {@link IStoreAccessor #commit(OMMonitor) commit}. A regular commit operation would assign new
- * {@link CDOPackageInfo#getMetaIDRange() meta IDs} and {@link CDOPackageUnit#getTimeStamp() time stamps}, which is
- * not desired in the context of a replication operation.
+ * {@link CDOPackageUnit#getTimeStamp() time stamps}, which is not desired in the context of a replication
+ * operation.
* <p>
* <b>Implementation note:</b> The implementor of this method may rely on the fact that multiple subsequent calls to
* this method are followed by a single final call to the {@link #rawCommit(OMMonitor) rawCommit()} method where the
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalStore.java
index 9691579ca8..cddcb3391e 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalStore.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalStore.java
@@ -11,7 +11,6 @@
package org.eclipse.emf.cdo.spi.server;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IStore;
@@ -31,8 +30,6 @@ public interface InternalStore extends IStore, ILifecycle
public void setRevisionParallelism(RevisionParallelism revisionParallelism);
- public CDOIDMetaRange getNextMetaIDRange(int count);
-
public int getNextBranchID();
public int getNextLocalBranchID();
@@ -45,8 +42,6 @@ public interface InternalStore extends IStore, ILifecycle
public void setLastNonLocalCommitTime(long lastNonLocalCommitTime);
- public void setLastMetaID(long lastMetaID);
-
/**
* @since 4.0
*/
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java
index 65b95ebb35..b6120aef18 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java
@@ -15,8 +15,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOID.ObjectType;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.server.IRepository;
@@ -88,12 +86,6 @@ public abstract class Store extends Lifecycle implements InternalStore
private transient int lastLocalBranchID;
@ExcludeFromDump
- private transient long lastMetaID;
-
- @ExcludeFromDump
- private transient Object lastMetaIDLock = new Object();
-
- @ExcludeFromDump
private transient long lastCommitTime;
@ExcludeFromDump
@@ -277,32 +269,6 @@ public abstract class Store extends Lifecycle implements InternalStore
return --lastLocalBranchID;
}
- public long getLastMetaID()
- {
- synchronized (lastMetaIDLock)
- {
- return lastMetaID;
- }
- }
-
- public void setLastMetaID(long lastMetaID)
- {
- synchronized (lastMetaIDLock)
- {
- this.lastMetaID = lastMetaID;
- }
- }
-
- public CDOIDMetaRange getNextMetaIDRange(int count)
- {
- synchronized (lastMetaIDLock)
- {
- CDOID lowerBound = CDOIDUtil.createMeta(lastMetaID + 1);
- lastMetaID += count;
- return CDOIDUtil.createMetaRange(lowerBound, count);
- }
- }
-
/**
* @since 3.0
*/
diff --git a/plugins/org.eclipse.emf.cdo.tests/logic/TestLogic.java b/plugins/org.eclipse.emf.cdo.tests/logic/TestLogic.java
index d00cce0076..ee71f67015 100644
--- a/plugins/org.eclipse.emf.cdo.tests/logic/TestLogic.java
+++ b/plugins/org.eclipse.emf.cdo.tests/logic/TestLogic.java
@@ -11,7 +11,6 @@
package org.eclipse.emf.cdo.tests.store.logic;
import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -239,7 +238,6 @@ public abstract class TestLogic extends AbstractOMTest
String name = ePackage.getName();
boolean dynamic = EMFUtil.isDynamicEPackage(ePackage);
String ecore = null;
- CDOIDMetaRange idRange = null;
if (parentURI == null)
{
@@ -247,12 +245,10 @@ public abstract class TestLogic extends AbstractOMTest
{
ecore = EMFUtil.ePackageToString(ePackage, EPackage.Registry.INSTANCE);
}
-
- idRange = SessionUtil.registerEPackage(ePackage, 1, null, null);
}
TransactionPackageRegistry packageManager = transactionCommitContext.getPackageRegistry();
- EPackage newPackage = CDOModelUtil.createPackage(packageManager, uri, name, ecore, dynamic, idRange, parentURI);
+ EPackage newPackage = CDOModelUtil.createPackage(packageManager, uri, name, ecore, dynamic, parentURI);
ModelUtil.initializeEPackage(ePackage, newPackage);
packageManager.addPackage(newPackage);
newPackages.add(newPackage);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
index 67ec0acd02..af0bb475cd 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
@@ -14,10 +14,8 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDNullImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
import org.eclipse.emf.cdo.session.CDOSession;
@@ -48,24 +46,12 @@ public class CDOIDTest extends AbstractCDOTest
assertEquals(123L, CDOIDUtil.getLong(id));
}
- public void testGetLong_MetaId()
- {
- CDOIDMetaImpl id = new CDOIDMetaImpl(135L);
- assertEquals(135, CDOIDUtil.getLong(id));
- }
-
public void testGetLong_TempId()
{
CDOIDTempObjectImpl id = new CDOIDTempObjectImpl(456);
assertIllegalArgument(id);
}
- public void testGetLong_TempMetaId()
- {
- CDOIDTempMetaImpl id = new CDOIDTempMetaImpl(789);
- assertIllegalArgument(id);
- }
-
public void testGetLong_ExtTempId()
{
CDOIDTempObjectExternalImpl id = new CDOIDTempObjectExternalImpl("cdo://repo123/resource456");
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java
index 10ef92a8f7..a7550ae29f 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java
@@ -464,7 +464,6 @@ public class PackageRegistryTest extends AbstractCDOTest
packageRegistry.putEPackage(model1Package);
CDOPackageUnit packageUnit = packageRegistry.getPackageUnit(model1Package);
- assertEquals(false, packageUnit.getTopLevelPackageInfo().getMetaIDRange().isTemporary());
assertEquals(CDOPackageUnit.State.LOADED, packageUnit.getState());
{
@@ -553,7 +552,6 @@ public class PackageRegistryTest extends AbstractCDOTest
Model1Package model1Package = getModel1Package();
CDOPackageUnit packageUnit = packageRegistry.getPackageUnit(model1Package);
- assertEquals(false, packageUnit.getTopLevelPackageInfo().getMetaIDRange().isTemporary());
assertEquals(CDOPackageUnit.State.LOADED, packageUnit.getState());
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
index ab5710a1be..2236477a07 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
@@ -47,13 +47,10 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EGenericType;
-import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.spi.cdo.FSMUtil;
@@ -329,30 +326,6 @@ public final class CDOUtil
/**
* @since 2.0
*/
- public static CDOObject getCDOObject(EModelElement object, CDOView view)
- {
- return FSMUtil.adaptMeta((InternalEObject)object, view);
- }
-
- /**
- * @since 2.0
- */
- public static CDOObject getCDOObject(EGenericType object, CDOView view)
- {
- return FSMUtil.adaptMeta((InternalEObject)object, view);
- }
-
- /**
- * @since 2.0
- */
- public static CDOObject getCDOObject(EStringToStringMapEntryImpl object, CDOView view)
- {
- return FSMUtil.adaptMeta(object, view);
- }
-
- /**
- * @since 2.0
- */
public static CDORevision getRevisionByVersion(CDOObject object, int version)
{
if (FSMUtil.isTransient(object))
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java
index 962cd580c2..35b748a7e3 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java
@@ -90,11 +90,6 @@ public class CDOIDDanglingImpl extends AbstractCDOID implements CDOIDDangling
return false;
}
- public boolean isMeta()
- {
- return false;
- }
-
public boolean isNull()
{
return false;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java
deleted file mode 100644
index 1fe6e15384..0000000000
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- * Martin Fluegge - bug 247226: Transparently support legacy models
- */
-package org.eclipse.emf.internal.cdo;
-
-import org.eclipse.emf.cdo.CDOState;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.spi.cdo.InternalCDOView;
-
-/**
- * @author Eike Stepper
- * @since 2.0
- */
-public class CDOMetaWrapper extends CDOObjectWrapper
-{
- public CDOMetaWrapper(InternalCDOView view, InternalEObject instance, CDOID id)
- {
- this.view = view;
- this.instance = instance;
- this.id = id;
- }
-
- public CDOState cdoState()
- {
- return CDOState.CLEAN;
- }
-
- public InternalCDORevision cdoRevision()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public CDOResourceImpl cdoResource()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public CDOResourceImpl cdoDirectResource()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public EClass eClass()
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoReload()
- {
- throw new UnsupportedOperationException();
- }
-
- public boolean cdoTransient()
- {
- return false;
- }
-
- public CDOState cdoInternalSetState(CDOState state)
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalSetRevision(CDORevision revision)
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalPreLoad()
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalPostLoad()
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalCleanup()
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalPostAttach()
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalPostDetach(boolean remote)
- {
- throw new UnsupportedOperationException();
- }
-
- public void cdoInternalPostInvalidate()
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * @since 3.0
- */
- public void cdoInternalPostRollback()
- {
- // Do nothing
- }
-
- public void cdoInternalPreCommit()
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String toString()
- {
- if (cdoID() == null)
- {
- return instance.eClass().getName() + "?"; //$NON-NLS-1$
- }
-
- return instance.eClass().getName() + "@" + cdoID(); //$NON-NLS-1$
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
index 2b4c84a54a..391232ec59 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
@@ -20,7 +20,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
-import org.eclipse.emf.cdo.common.id.CDOIDMeta;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
@@ -37,7 +36,6 @@ import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionDeltaImpl;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOURIUtil;
@@ -53,7 +51,6 @@ import org.eclipse.emf.cdo.view.CDOViewAdaptersNotifiedEvent;
import org.eclipse.emf.cdo.view.CDOViewEvent;
import org.eclipse.emf.cdo.view.CDOViewTargetChangedEvent;
-import org.eclipse.emf.internal.cdo.CDOMetaWrapper;
import org.eclipse.emf.internal.cdo.CDOStateMachine;
import org.eclipse.emf.internal.cdo.CDOStore;
import org.eclipse.emf.internal.cdo.CDOURIHandler;
@@ -691,23 +688,14 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi
InternalCDOObject localLookupObject = objects.get(id);
if (localLookupObject == null)
{
- if (id.isMeta())
+ if (!loadOnDemand)
{
- localLookupObject = createMetaObject((CDOIDMeta)id);
- }
- else
- {
- if (loadOnDemand)
- {
- excludeTempIDs(id);
- localLookupObject = createObject(id);
- }
- else
- {
- return null;
- }
+ return null;
}
+ excludeTempIDs(id);
+ localLookupObject = createObject(id);
+
// CDOResource have a special way to register to the view.
if (!CDOModelUtil.isResource(localLookupObject.eClass()))
{
@@ -792,21 +780,6 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi
/**
* @return Never <code>null</code>
*/
- private InternalCDOObject createMetaObject(CDOIDMeta id)
- {
- if (TRACER.isEnabled())
- {
- TRACER.trace("Creating meta object for " + id); //$NON-NLS-1$
- }
-
- InternalCDOPackageRegistry packageRegistry = getSession().getPackageRegistry();
- InternalEObject metaInstance = packageRegistry.getMetaInstanceMapper().lookupMetaInstance(id);
- return new CDOMetaWrapper(this, metaInstance, id);
- }
-
- /**
- * @return Never <code>null</code>
- */
private InternalCDOObject createObject(CDOID id)
{
if (TRACER.isEnabled())
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/FSMUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/FSMUtil.java
index a3e71784e1..ac4a27cbbc 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/FSMUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/FSMUtil.java
@@ -13,24 +13,16 @@ package org.eclipse.emf.spi.cdo;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.util.LegacyModeNotEnabledException;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.internal.cdo.CDOLegacyAdapter;
-import org.eclipse.emf.internal.cdo.CDOMetaWrapper;
import org.eclipse.emf.internal.cdo.CDOObjectImpl;
import org.eclipse.emf.internal.cdo.messages.Messages;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EGenericType;
-import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -71,37 +63,11 @@ public final class FSMUtil
return state == CDOState.NEW;
}
- public static boolean isMeta(Object object)
- {
- if (object instanceof EModelElement || object instanceof EGenericType)
- {
- EClass eClass = ((EObject)object).eClass();
- if (eClass == null)
- {
- return false;
- }
-
- EPackage ePackage = eClass.getEPackage();
- if (ePackage == null)
- {
- return false;
- }
-
- return ePackage.getNsURI() == EcorePackage.eNS_URI;
- }
-
- return object instanceof org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
- }
-
public static boolean isNative(EObject eObject)
{
return eObject instanceof CDOObjectImpl;
}
- /**
- * @param view
- * Only needed if object is a meta instance.
- */
public static InternalCDOObject adapt(Object object, CDOView view)
{
if (view.isClosed())
@@ -119,11 +85,6 @@ public final class FSMUtil
throw new IllegalArgumentException(Messages.getString("FSMUtil.1")); //$NON-NLS-1$
}
- if (isMeta(object))
- {
- return adaptMeta((InternalEObject)object, view);
- }
-
if (object instanceof InternalEObject)
{
if (!view.isLegacyModeEnabled())
@@ -137,30 +98,6 @@ public final class FSMUtil
return null;
}
- public static InternalCDOObject adaptMeta(InternalEObject object, CDOView view)
- {
- if (view == null)
- {
- throw new IllegalArgumentException(Messages.getString("FSMUtil.2")); //$NON-NLS-1$
- }
-
- if (object.eIsProxy())
- {
- object = (InternalEObject)EcoreUtil.resolve(object, view.getResourceSet());
- }
-
- try
- {
- InternalCDOPackageRegistry packageRegistry = (InternalCDOPackageRegistry)view.getSession().getPackageRegistry();
- CDOID id = packageRegistry.getMetaInstanceMapper().lookupMetaInstanceID(object);
- return new CDOMetaWrapper((InternalCDOView)view, object, id);
- }
- catch (RuntimeException ex)
- {
- return null;
- }
- }
-
/*
* IMPORTANT: Compile errors in this method might indicate an old version of EMF. Legacy support is only enabled for
* EMF with fixed bug #247130. These compile errors do not affect native models!
diff --git a/plugins/org.eclipse.net4j.db.tests/src/org/eclipse/net4j/db/tests/TestSchema.java b/plugins/org.eclipse.net4j.db.tests/src/org/eclipse/net4j/db/tests/TestSchema.java
index 8de0eb9928..98d14b4814 100644
--- a/plugins/org.eclipse.net4j.db.tests/src/org/eclipse/net4j/db/tests/TestSchema.java
+++ b/plugins/org.eclipse.net4j.db.tests/src/org/eclipse/net4j/db/tests/TestSchema.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
*/
@@ -46,9 +46,6 @@ public class TestSchema extends DBSchema
public static final IDBField REPOSITORY_NEXT_CDOID = //
REPOSITORY.addField("next_cdoid", DBType.BIGINT); //$NON-NLS-1$
- public static final IDBField REPOSITORY_NEXT_METAID = //
- REPOSITORY.addField("next_metaid", DBType.BIGINT); //$NON-NLS-1$
-
/**
* DBTable cdo_packages
*/

Back to the top