Ejemplo n.º 1
0
        public QCandidate ReadSubCandidate(QueryingReadContext context, ITypeHandler4 handler
                                           )
        {
            ObjectID objectID = ObjectID.NotPossible;

            try
            {
                int offset = context.Offset();
                if (handler is IReadsObjectIds)
                {
                    objectID = ((IReadsObjectIds)handler).ReadObjectID(context);
                }
                if (objectID.IsValid())
                {
                    return(new QCandidate(this, null, objectID._id));
                }
                if (objectID == ObjectID.NotPossible)
                {
                    context.Seek(offset);
                    object obj = context.Read(handler);
                    if (obj != null)
                    {
                        QCandidate candidate = new QCandidate(this, obj, context.Container().GetID(context
                                                                                                   .Transaction(), obj));
                        candidate.ClassMetadata(context.Container().ClassMetadataForObject(obj));
                        return(candidate);
                    }
                }
            }
            catch (Exception)
            {
            }
            // FIXME: Catchall
            return(null);
        }
Ejemplo n.º 2
0
        public override ITypeHandler4 ReadCandidateHandler(QueryingReadContext context)
        {
            int id     = 0;
            int offset = context.Offset();

            try
            {
                id = context.ReadInt();
            }
            catch (Exception)
            {
            }
            context.Seek(offset);
            if (id != 0)
            {
                StatefulBuffer reader = context.Container().ReadStatefulBufferById(context.Transaction
                                                                                       (), id);
                if (reader != null)
                {
                    ObjectHeader oh = new ObjectHeader(context.Container(), reader);
                    try
                    {
                        if (oh.ClassMetadata() != null)
                        {
                            context.Buffer(reader);
                            return(oh.ClassMetadata().SeekCandidateHandler(context));
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            // TODO: Check Exception Types
            // Errors typically occur, if classes don't match
            return(null);
        }
Ejemplo n.º 3
0
        public virtual ITypeHandler4 ReadCandidateHandler(QueryingReadContext context)
        {
            int payLoadOffSet = context.ReadInt();

            if (payLoadOffSet == 0)
            {
                return(null);
            }
            context.Seek(payLoadOffSet);
            int           classMetadataID = context.ReadInt();
            ClassMetadata classMetadata   = context.Container().ClassMetadataForID(classMetadataID
                                                                                   );

            if (classMetadata == null)
            {
                return(null);
            }
            return(classMetadata.ReadCandidateHandler(context));
        }
        /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
        private void CollectIDsByInstantiatingCollection(QueryingReadContext context)
        {
            int id = context.CollectionID();

            if (id == 0)
            {
                return;
            }
            Transaction         transaction = context.Transaction();
            ObjectContainerBase container   = context.Container();
            object obj = container.GetByID(transaction, id);

            if (obj == null)
            {
                return;
            }
            // FIXME: [TA] review activation depth
            int depth = DepthUtil.AdjustDepthToBorders(2);

            container.Activate(transaction, obj, container.ActivationDepthProvider().ActivationDepth
                                   (depth, ActivationMode.Activate));
            Platform4.ForEachCollectionElement(obj, new _IVisitor4_390(context));
        }