Author: toad
Date: 2008-10-18 17:53:16 +0000 (Sat, 18 Oct 2008)
New Revision: 23000
Added:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/MInstanceCount.java
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/Db4oVersion.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/Defragment.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/DefragmentServicesImpl.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/ext/StoredClass.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/ClassMetadata.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/Const4.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/FieldMetadata.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/HandlerVersionRegistry.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/InternalObjectContainer.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/LocalObjectContainer.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PartialEmbeddedClientObjectContainer.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PrimitiveFieldHandler.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/StoredClassImpl.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/ClientObjectContainer.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/Msg.java
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/marshall/ClassMarshaller.java
Log:
Update db4o to 7.4.63.11890 from website.
Modified: trunk/contrib/db4o/src/db4oj/core/src/com/db4o/Db4oVersion.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/Db4oVersion.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/Db4oVersion.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -24,9 +24,9 @@
* @exclude
*/
public class Db4oVersion {
- public static final String NAME = "7.4.58.11547";
+ public static final String NAME = "7.4.63.11890";
public static final int MAJOR = 7;
public static final int MINOR = 4;
- public static final int ITERATION = 58;
- public static final int REVISION = 11547;
+ public static final int ITERATION = 63;
+ public static final int REVISION = 11890;
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/Defragment.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/Defragment.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/Defragment.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -267,12 +267,12 @@
}
private static boolean parentHasIndex(ClassMetadata curClass) {
- ClassMetadata parentClass = curClass.i_ancestor;
+ ClassMetadata parentClass = curClass.getAncestor();
while (parentClass != null) {
if (parentClass.hasClassIndex()) {
return true;
}
- parentClass = parentClass.i_ancestor;
+ parentClass = parentClass.getAncestor();
}
return false;
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/DefragmentServicesImpl.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/DefragmentServicesImpl.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/defragment/DefragmentServicesImpl.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -334,15 +334,19 @@
return cachedHasFieldIndex.definiteYes();
}
final BooleanByRef hasFieldIndex = new BooleanByRef(false);
- clazz.forEachDeclaredField(new Procedure4() {
- public void apply(Object arg) {
- FieldMetadata curField = (FieldMetadata)arg;
- if (curField.hasIndex()
- && (curField.getHandler()
instanceof StringHandler)) {
- hasFieldIndex.value = true;
+ ClassMetadata curClazz = clazz;
+ while(!hasFieldIndex.value && curClazz != null) {
+ curClazz.forEachDeclaredField(new Procedure4() {
+ public void apply(Object arg) {
+ FieldMetadata curField =
(FieldMetadata)arg;
+ if (curField.hasIndex()
+ &&
(curField.getHandler() instanceof StringHandler)) {
+ hasFieldIndex.value = true;
+ }
}
- }
- });
+ });
+ curClazz = curClazz.getAncestor();
+ }
_hasFieldIndexCache.put(clazz,
TernaryBool.forBoolean(hasFieldIndex.value));
return hasFieldIndex.value;
}
Modified: trunk/contrib/db4o/src/db4oj/core/src/com/db4o/ext/StoredClass.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/ext/StoredClass.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/ext/StoredClass.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -74,5 +74,14 @@
* @return the {@link StoredField}
*/
public StoredField storedField(String name, Object type);
-
+
+ /**
+ * Returns the number of instances of this class that have been
persisted to the
+ * database, as seen by the transaction (container) that produces this
StoredClass
+ * instance.
+ *
+ * @return The number of instances
+ */
+ public int instanceCount();
+
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/ClassMetadata.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/ClassMetadata.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/ClassMetadata.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -768,7 +768,7 @@
}
- ClassMetadata getAncestor() {
+ public ClassMetadata getAncestor() {
return i_ancestor;
}
@@ -2001,5 +2001,12 @@
return _aspects == null;
}
-
+ public int instanceCount() {
+ return instanceCount(_container.transaction());
+ }
+
+ public int instanceCount(Transaction trans) {
+ return _container.instanceCount(this, trans);
+ }
+
}
Modified: trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/Const4.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/Const4.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/Const4.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -27,7 +27,9 @@
/**
* @exclude
*
- * TODO: Split into separate enums with defined range and values.
+ * TODO: Split into separate enums with defined range and values.
+ *
+ * @sharpen.partial
*/
public final class Const4
{
@@ -177,8 +179,9 @@
};
public static final String VIRTUAL_FIELD_PREFIX = "v4o";
-
+
+ /**
+ * @sharpen.ignore
+ */
public static final int MAX_STACK_DEPTH = 20;
-
-
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/FieldMetadata.java
===================================================================
--- trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/FieldMetadata.java
2008-10-18 14:39:52 UTC (rev 22999)
+++ trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/FieldMetadata.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -706,16 +706,15 @@
private boolean checkAlive(AspectVersionContext context){
if(! checkEnabled(context)){
- return false;
- }
-
- boolean alive = alive();
- if (! alive) {
- incrementOffset((ReadBuffer)context);
- }
- return alive;
+ return false;
+ }
+ boolean alive = alive();
+ if (!alive) {
+ incrementOffset((ReadBuffer)context);
+ }
+ return alive;
}
-
+
private void informAboutTransaction(Object obj, Transaction trans){
if (_db4oType != null && obj != null) {
((Db4oTypeImpl) obj).setTrans(trans);
@@ -887,12 +886,23 @@
}
public Object read(InternalReadContext context) {
- if (!checkAlive((AspectVersionContext)context)) {
+ if(!canReadFromSlot((AspectVersionContext) context)) {
+ incrementOffset(context);
return null;
}
return context.read(_handler);
}
+ private boolean canReadFromSlot(AspectVersionContext context) {
+ if(! enabled(context)){
+ return false;
+ }
+ if(alive()) {
+ return true;
+ }
+ return _state != FieldMetadataState.NOT_LOADED;
+ }
+
/** never called but keep for Rickie */
public void refreshActivated() {
_state = FieldMetadataState.AVAILABLE;
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/HandlerVersionRegistry.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/HandlerVersionRegistry.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/HandlerVersionRegistry.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -46,6 +46,9 @@
if(version >= HandlerRegistry.HANDLER_VERSION){
return originalHandler;
}
+ if(originalHandler == null){
+ return null; // HandlerVersionKey with null key will throw NPE.
+ }
TypeHandler4 replacement = (TypeHandler4) _versions.get(new
HandlerVersionKey(genericTemplate(originalHandler), version));
if(replacement == null){
return correctHandlerVersion(originalHandler, version + 1);
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/InternalObjectContainer.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/InternalObjectContainer.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/InternalObjectContainer.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -56,4 +56,6 @@
public Object syncExec(Closure4 block);
+ public int instanceCount(ClassMetadata clazz, Transaction trans);
+
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/LocalObjectContainer.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/LocalObjectContainer.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/LocalObjectContainer.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -865,5 +865,11 @@
public void onCommittedListener() {
// do nothing
}
+
+ public int instanceCount(ClassMetadata clazz, Transaction trans) {
+ synchronized(lock()) {
+ return clazz.indexEntryCount(trans);
+ }
+ }
}
\ No newline at end of file
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PartialEmbeddedClientObjectContainer.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PartialEmbeddedClientObjectContainer.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PartialEmbeddedClientObjectContainer.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -473,4 +473,8 @@
return _server.syncExec(block);
}
+ public int instanceCount(ClassMetadata clazz, Transaction trans) {
+ return _server.instanceCount(clazz, trans);
+ }
+
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PrimitiveFieldHandler.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PrimitiveFieldHandler.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/PrimitiveFieldHandler.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -18,231 +18,234 @@
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-package com.db4o.internal;
-
-import com.db4o.ext.*;
-import com.db4o.foundation.*;
-import com.db4o.internal.activation.*;
-import com.db4o.internal.delete.*;
-import com.db4o.internal.fieldhandlers.*;
-import com.db4o.internal.handlers.*;
-import com.db4o.internal.handlers.array.*;
-import com.db4o.internal.marshall.*;
-import com.db4o.marshall.*;
-import com.db4o.reflect.*;
-import com.db4o.typehandlers.*;
-
-
-/**
- * @exclude
- */
-public class PrimitiveFieldHandler extends ClassMetadata implements
FieldHandler, VersionedTypeHandler{
-
- private static final int HASHCODE_FOR_NULL = 283636383;
-
- private final TypeHandler4 _handler;
-
- public PrimitiveFieldHandler(ObjectContainerBase container, TypeHandler4
handler, int handlerID, ReflectClass classReflector) {
- super(container, classReflector);
- _aspects = FieldMetadata.EMPTY_ARRAY;
- _handler = handler;
- _id = handlerID;
- }
-
- public PrimitiveFieldHandler(){
- super(null, null);
- _handler = null;
- }
-
- public void activateFields(Transaction trans, Object obj, ActivationDepth
depth) {
- // Override
- // do nothing
- }
-
- final void addToIndex(Transaction trans, int id) {
- // Override
- // Primitive Indices will be created later.
- }
-
- boolean allowsQueries() {
- return false;
- }
-
- void cacheDirty(Collection4 col) {
- // do nothing
- }
-
- public boolean descendOnCascadingActivation() {
- return false;
- }
-
- public void delete(DeleteContext context) throws Db4oIOException {
- if(context.isLegacyHandlerVersion()){
- context.readInt();
- context.defragmentRecommended();
- }
- }
-
- void deleteMembers(MarshallerFamily mf, ObjectHeaderAttributes attributes,
StatefulBuffer a_bytes, int a_type, boolean isUpdate) {
- if (a_type == Const4.TYPE_ARRAY) {
- new ArrayHandler(this, true).deletePrimitiveEmbedded(a_bytes,
this);
- } else if (a_type == Const4.TYPE_NARRAY) {
- new MultidimensionalArrayHandler(this,
true).deletePrimitiveEmbedded(a_bytes, this);
- }
- }
-
- void deleteMembers(DeleteContextImpl context, int a_type, boolean
isUpdate) {
- if (a_type == Const4.TYPE_ARRAY) {
- new ArrayHandler(this,
true).deletePrimitiveEmbedded((StatefulBuffer) context.buffer(), this);
- } else if (a_type == Const4.TYPE_NARRAY) {
- new MultidimensionalArrayHandler(this,
true).deletePrimitiveEmbedded((StatefulBuffer) context.buffer(), this);
- }
- }
-
- final void free(StatefulBuffer a_bytes, int a_id) {
- a_bytes.transaction().slotFreePointerOnCommit(a_id, a_bytes.slot());
- }
-
- public boolean hasClassIndex() {
- return false;
- }
-
- public Object instantiate(UnmarshallingContext context) {
- Object obj = context.persistentObject();
- if (obj == null) {
- obj = context.read(_handler);
- context.setObjectWeak(obj);
- }
- context.setStateClean();
- return obj;
- }
-
- public Object instantiateTransient(UnmarshallingContext context) {
- return _handler.read(context);
- }
-
- Object instantiateFields(UnmarshallingContext context) {
- Object obj = context.read(_handler);
- if (obj == null || ! (_handler instanceof DateHandler)) {
- return obj;
- }
- final Object existing = context.persistentObject();
- Object newValue = dateHandler().copyValue(obj, existing);
-
- // FIXME: It should not be necessary to set persistentObject here
- context.persistentObject(newValue);
-
- return newValue;
- }
-
- private DateHandler dateHandler() {
- return ((DateHandler)_handler);
- }
-
- public boolean isArray() {
- return _id == Handlers4.ANY_ARRAY_ID || _id ==
Handlers4.ANY_ARRAY_N_ID;
- }
-
- public boolean isPrimitive(){
- return true;
- }
-
- public boolean isStrongTyped(){
- return false;
- }
-
- public PreparedComparison prepareComparison(Context context, Object
source) {
- return _handler.prepareComparison(context, source);
- }
-
- public TypeHandler4 readCandidateHandler(QueryingReadContext context) {
- if (isArray()) {
- return _handler;
- }
- return null;
- }
-
- public ObjectID readObjectID(InternalReadContext context){
- if(_handler instanceof ClassMetadata){
- return ((ClassMetadata)_handler).readObjectID(context);
- }
- if(_handler instanceof ArrayHandler){
- // TODO: Here we should theoretically read through the array and
collect candidates.
- // The respective construct is wild: "Contains query through an
array in an array."
- // Ignore for now.
- return ObjectID.IGNORE;
- }
- return ObjectID.NOT_POSSIBLE;
- }
-
- void removeFromIndex(Transaction ta, int id) {
- // do nothing
- }
-
- public final boolean writeObjectBegin() {
- return false;
- }
-
- public String toString(){
- return "Wraps " + _handler.toString() + " in YapClassPrimitive";
- }
-
- public void defragment(DefragmentContext context) {
- _handler.defragment(context);
- }
-
- public Object wrapWithTransactionContext(Transaction transaction, Object
value) {
- return value;
- }
-
- public Object read(ReadContext context) {
- return _handler.read(context);
- }
-
- public void write(WriteContext context, Object obj) {
- _handler.write(context, obj);
- }
-
- public TypeHandler4 typeHandler(){
- return _handler;
- }
-
- public TypeHandler4 delegateTypeHandler(){
- return _handler;
- }
-
- public TypeHandler4 unversionedTemplate() {
- return new PrimitiveFieldHandler(null, null, 0, null);
- }
-
- public boolean equals(Object obj) {
- if(! (obj instanceof PrimitiveFieldHandler)){
- return false;
- }
- PrimitiveFieldHandler other = (PrimitiveFieldHandler) obj;
- if(_handler == null){
- return other._handler == null;
- }
- return _handler.equals(other._handler);
- }
-
- public int hashCode() {
- if(_handler == null){
- return HASHCODE_FOR_NULL;
- }
- return _handler.hashCode();
- }
-
- public Object deepClone(Object context) {
- TypeHandlerCloneContext typeHandlerCloneContext =
(TypeHandlerCloneContext) context;
- PrimitiveFieldHandler original = (PrimitiveFieldHandler)
typeHandlerCloneContext.original;
- TypeHandler4 delegateTypeHandler =
typeHandlerCloneContext.correctHandlerVersion(original.delegateTypeHandler());
- return new PrimitiveFieldHandler(original.container(),
delegateTypeHandler, original._id, original.classReflector());
- }
-
- public boolean isSecondClass() {
- return isSecondClass(_handler);
- }
-
-
-}
+package com.db4o.internal;
+
+import com.db4o.ext.*;
+import com.db4o.foundation.*;
+import com.db4o.internal.activation.*;
+import com.db4o.internal.delete.*;
+import com.db4o.internal.fieldhandlers.*;
+import com.db4o.internal.handlers.*;
+import com.db4o.internal.handlers.array.*;
+import com.db4o.internal.marshall.*;
+import com.db4o.marshall.*;
+import com.db4o.reflect.*;
+import com.db4o.typehandlers.*;
+
+
+/**
+ * @exclude
+ */
+public class PrimitiveFieldHandler extends ClassMetadata implements
FieldHandler, VersionedTypeHandler{
+
+ private static final int HASHCODE_FOR_NULL = 283636383;
+
+ private final TypeHandler4 _handler;
+
+ public PrimitiveFieldHandler(ObjectContainerBase container, TypeHandler4
handler, int handlerID, ReflectClass classReflector) {
+ super(container, classReflector);
+ _aspects = FieldMetadata.EMPTY_ARRAY;
+ _handler = handler;
+ _id = handlerID;
+ }
+
+ public PrimitiveFieldHandler(){
+ super(null, null);
+ _handler = null;
+ }
+
+ public void activateFields(Transaction trans, Object obj, ActivationDepth
depth) {
+ // Override
+ // do nothing
+ }
+
+ final void addToIndex(Transaction trans, int id) {
+ // Override
+ // Primitive Indices will be created later.
+ }
+
+ boolean allowsQueries() {
+ return false;
+ }
+
+ void cacheDirty(Collection4 col) {
+ // do nothing
+ }
+
+ public boolean descendOnCascadingActivation() {
+ return false;
+ }
+
+ public void delete(DeleteContext context) throws Db4oIOException {
+ if(context.isLegacyHandlerVersion()){
+ context.readInt();
+ context.defragmentRecommended();
+ }
+ }
+
+ void deleteMembers(MarshallerFamily mf, ObjectHeaderAttributes attributes,
StatefulBuffer a_bytes, int a_type, boolean isUpdate) {
+ if (a_type == Const4.TYPE_ARRAY) {
+ new ArrayHandler(this, true).deletePrimitiveEmbedded(a_bytes,
this);
+ } else if (a_type == Const4.TYPE_NARRAY) {
+ new MultidimensionalArrayHandler(this,
true).deletePrimitiveEmbedded(a_bytes, this);
+ }
+ }
+
+ void deleteMembers(DeleteContextImpl context, int a_type, boolean
isUpdate) {
+ if (a_type == Const4.TYPE_ARRAY) {
+ new ArrayHandler(this,
true).deletePrimitiveEmbedded((StatefulBuffer) context.buffer(), this);
+ } else if (a_type == Const4.TYPE_NARRAY) {
+ new MultidimensionalArrayHandler(this,
true).deletePrimitiveEmbedded((StatefulBuffer) context.buffer(), this);
+ }
+ }
+
+ final void free(StatefulBuffer a_bytes, int a_id) {
+ a_bytes.transaction().slotFreePointerOnCommit(a_id, a_bytes.slot());
+ }
+
+ public boolean hasClassIndex() {
+ return false;
+ }
+
+ public Object instantiate(UnmarshallingContext context) {
+ Object obj = context.persistentObject();
+ if (obj == null) {
+ obj = context.read(_handler);
+ context.setObjectWeak(obj);
+ }
+ context.setStateClean();
+ return obj;
+ }
+
+ public Object instantiateTransient(UnmarshallingContext context) {
+ return correctHandlerVersion(context).read(context);
+ }
+
+ Object instantiateFields(UnmarshallingContext context) {
+ Object obj = context.read(_handler);
+ if (obj == null || ! (_handler instanceof DateHandler)) {
+ return obj;
+ }
+ final Object existing = context.persistentObject();
+ Object newValue = dateHandler().copyValue(obj, existing);
+
+ // FIXME: It should not be necessary to set persistentObject here
+ context.persistentObject(newValue);
+
+ return newValue;
+ }
+
+ private DateHandler dateHandler() {
+ return ((DateHandler)_handler);
+ }
+
+ public boolean isArray() {
+ return _id == Handlers4.ANY_ARRAY_ID || _id ==
Handlers4.ANY_ARRAY_N_ID;
+ }
+
+ public boolean isPrimitive(){
+ return true;
+ }
+
+ public boolean isStrongTyped(){
+ return false;
+ }
+
+ public PreparedComparison prepareComparison(Context context, Object
source) {
+ return _handler.prepareComparison(context, source);
+ }
+
+ public TypeHandler4 readCandidateHandler(QueryingReadContext context) {
+ if (isArray()) {
+ return _handler;
+ }
+ return null;
+ }
+
+ public ObjectID readObjectID(InternalReadContext context){
+ if(_handler instanceof ClassMetadata){
+ return ((ClassMetadata)_handler).readObjectID(context);
+ }
+ if(_handler instanceof ArrayHandler){
+ // TODO: Here we should theoretically read through the array and
collect candidates.
+ // The respective construct is wild: "Contains query through an
array in an array."
+ // Ignore for now.
+ return ObjectID.IGNORE;
+ }
+ return ObjectID.NOT_POSSIBLE;
+ }
+
+ void removeFromIndex(Transaction ta, int id) {
+ // do nothing
+ }
+
+ public final boolean writeObjectBegin() {
+ return false;
+ }
+
+ public String toString(){
+ return "Wraps " + _handler.toString() + " in YapClassPrimitive";
+ }
+
+ public void defragment(DefragmentContext context) {
+ correctHandlerVersion(context).defragment(context);
+ }
+
+ public Object wrapWithTransactionContext(Transaction transaction, Object
value) {
+ return value;
+ }
+
+ public Object read(ReadContext context) {
+ return correctHandlerVersion(context).read(context);
+ }
+
+ public void write(WriteContext context, Object obj) {
+ _handler.write(context, obj);
+ }
+
+ public TypeHandler4 typeHandler(){
+ return _handler;
+ }
+
+ public TypeHandler4 delegateTypeHandler(){
+ return _handler;
+ }
+
+ public TypeHandler4 unversionedTemplate() {
+ return new PrimitiveFieldHandler(null, null, 0, null);
+ }
+
+ public boolean equals(Object obj) {
+ if(! (obj instanceof PrimitiveFieldHandler)){
+ return false;
+ }
+ PrimitiveFieldHandler other = (PrimitiveFieldHandler) obj;
+ if(_handler == null){
+ return other._handler == null;
+ }
+ return _handler.equals(other._handler);
+ }
+
+ public int hashCode() {
+ if(_handler == null){
+ return HASHCODE_FOR_NULL;
+ }
+ return _handler.hashCode();
+ }
+
+ public Object deepClone(Object context) {
+ TypeHandlerCloneContext typeHandlerCloneContext =
(TypeHandlerCloneContext) context;
+ PrimitiveFieldHandler original = (PrimitiveFieldHandler)
typeHandlerCloneContext.original;
+ TypeHandler4 delegateTypeHandler =
typeHandlerCloneContext.correctHandlerVersion(original.delegateTypeHandler());
+ return new PrimitiveFieldHandler(original.container(),
delegateTypeHandler, original._id, original.classReflector());
+ }
+
+ public boolean isSecondClass() {
+ return isSecondClass(_handler);
+ }
+
+ private TypeHandler4 correctHandlerVersion(Context context){
+ return Handlers4.correctHandlerVersion((HandlerVersionContext)context,
_handler);
+ }
+
+}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/StoredClassImpl.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/StoredClassImpl.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/StoredClassImpl.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -96,4 +96,8 @@
return _classMetadata.equals(((StoredClassImpl) obj)._classMetadata);
}
+ public int instanceCount() {
+ return _classMetadata.instanceCount(_transaction);
+ }
+
}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/ClientObjectContainer.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/ClientObjectContainer.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/ClientObjectContainer.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -900,4 +900,11 @@
return response.readInt();
}
+ public int instanceCount(ClassMetadata clazz, Transaction trans) {
+ MsgD msg = Msg.INSTANCE_COUNT.getWriterForInt(trans, clazz.getID());
+ write(msg);
+ MsgD response = (MsgD) expectedResponse(Msg.INSTANCE_COUNT);
+ return response.readInt();
+ }
+
}
Added:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/MInstanceCount.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/MInstanceCount.java
(rev 0)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/MInstanceCount.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -0,0 +1,37 @@
+/* Copyright (C) 2004 - 2008 db4objects Inc. http://www.db4o.com
+
+This file is part of the db4o open source object database.
+
+db4o is free software; you can redistribute it and/or modify it under
+the terms of version 2 of the GNU General Public License as published
+by the Free Software Foundation and as clarified by db4objects' GPL
+interpretation policy, available at
+http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
+Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
+Suite 350, San Mateo, CA 94403, USA.
+
+db4o is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+package com.db4o.internal.cs.messages;
+
+import com.db4o.internal.*;
+
+public class MInstanceCount extends MsgD implements ServerSideMessage {
+
+ public boolean processAtServer() {
+ MsgD writer = null;
+ synchronized(streamLock()) {
+ ClassMetadata clazz =
file().classMetadataForId(readInt());
+ writer =
Msg.INSTANCE_COUNT.getWriterForInt(transaction(),
clazz.indexEntryCount(transaction()));
+ }
+ write(writer);
+ return true;
+ }
+
+}
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/Msg.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/Msg.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/cs/messages/Msg.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -103,6 +103,7 @@
public static final MWriteUpdateDeleteMembers
WRITE_UPDATE_DELETE_MEMBERS = new MWriteUpdateDeleteMembers();
public static final MWriteBatchedMessages WRITE_BATCHED_MESSAGES = new
MWriteBatchedMessages();
public static final MsgBlob DELETE_BLOB_FILE = new MDeleteBlobFile();
+ public static final MInstanceCount INSTANCE_COUNT = new
MInstanceCount();
Msg() {
_msgID = _messageIdGenerator++;
Modified:
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/marshall/ClassMarshaller.java
===================================================================
---
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/marshall/ClassMarshaller.java
2008-10-18 14:39:52 UTC (rev 22999)
+++
trunk/contrib/db4o/src/db4oj/core/src/com/db4o/internal/marshall/ClassMarshaller.java
2008-10-18 17:53:16 UTC (rev 23000)
@@ -153,17 +153,24 @@
context.writeInt(indexIDForWriting(classIndexID));
- // field length
- int numFields = context.readInt();
+ final int aspectCount = context.readInt();
- if(numFields > classMetadata.declaredAspectCount()) {
+ if(aspectCount > classMetadata.declaredAspectCount()) {
throw new IllegalStateException();
}
+
+ final IntByRef processedAspectCount = new IntByRef(0);
+
classMetadata.forEachDeclaredAspect(new Procedure4() {
public void apply(Object arg) {
+ if(processedAspectCount.value >= aspectCount){
+ return;
+ }
ClassAspect aspect = (ClassAspect) arg;
_family._field.defrag(classMetadata,aspect,sio,context);
+ processedAspectCount.value++;
}
});
+
}
}