Exemplo n.º 1
0
        public IOptimizedPersistable ShallowCopyTo(Page page)
        {
            IOptimizedPersistable copy = (IOptimizedPersistable)this.MemberwiseClone();

            copy.Page = page;
            return(copy);
        }
Exemplo n.º 2
0
 public ObjectViewModel(IOptimizedPersistable obj, TreeViewItemViewModel parentPage, SessionBase session)
     : base(parentPage, true)
 {
     m_objectId = obj.Id;
     m_session  = session;
     SetName(obj);
 }
Exemplo n.º 3
0
        protected override void LoadChildren()
        {
            IOptimizedPersistable pObj = (IOptimizedPersistable)m_session.Open(m_objectId, false, null, false, 0, Int32.MaxValue);

            if (pObj != null)
            {
                m_session.LoadFields(pObj);
                object      o         = pObj.WrappedObject;
                TypeVersion baseShape = pObj.Shape.BaseShape;
                while (baseShape != null)
                {
                    foreach (DataMember member in baseShape.DataMemberArray)
                    {
                        object memberObj = member.GetMemberValue(o);
                        LoadChild(member, memberObj);
                    }
                    baseShape = baseShape.BaseShape;
                }
                foreach (DataMember member in pObj.Shape.DataMemberArray)
                {
                    object memberObj = member.GetMemberValue(o);
                    LoadChild(member, memberObj);
                }
            }
        }
Exemplo n.º 4
0
        public Array GetFieldAsArray()
        {
            IOptimizedPersistable parentObj = (IOptimizedPersistable)m_session.Open(m_parentId, false, null, false, 0, Int32.MaxValue);
            object memberObj = m_member.GetMemberValue(parentObj.WrappedObject);

            return(memberObj as Array);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Persists this object.
        /// </summary>
        /// <param name="place">The placement rules to follow when persisting this object</param>
        /// <param name="session">The session managing this object</param>
        /// <param name="persistRefs">If true, objects referenced from this object will also be persisted</param>
        /// <param name="disableFlush">If true, disables possible flushing of updated pages while persisting this object; otherwise pasge flushing may occur</param>
        /// <returns>The object id of the persistent object</returns>
        public ulong Persist(SessionBase session, IOptimizedPersistable placeHint, bool persistRefs = true,
                             bool disableFlush = false)
        {
            Placement place = new Placement(session, placeHint, this, persistRefs, UInt32.MaxValue,
                                            placeHint.FlushIfPageFull);

            return(session.Persist(place, this, session.OpenSchema(false), UInt16.MaxValue - 1, disableFlush));
        }
Exemplo n.º 6
0
 public FieldViewModel(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentObject, SessionBase session)
   : base(parentObject, true)
 {
   _session = session;
   page = parentObj.Page;
   memberObj = member.GetMemberValue(parentObj.WrappedObject);
   isEncodedOidArray = (parentObj as BTreeNode) != null && memberObj != null && (memberObj as Array) != null && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray");
   fieldAsString = OptimizedPersistable.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
Exemplo n.º 7
0
 public FieldViewModel(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentObject, SessionBase session)
     : base(parentObject, true)
 {
     _session          = session;
     page              = parentObj.Page;
     memberObj         = member.GetMemberValue(parentObj.WrappedObject);
     isEncodedOidArray = (parentObj as BTreeNode) != null && memberObj != null && (memberObj as Array) != null && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray");
     fieldAsString     = OptimizedPersistable.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
Exemplo n.º 8
0
 public ObjectViewModel(IOptimizedPersistable obj, TreeViewItemViewModel parentPage, SessionBase session)
   : base(parentPage, true)
 {
   m_objectId = obj.Id;
   m_session = session;
   if (obj.WrappedObject != obj)
     m_objectAsString = obj.WrappedObject.ToString() + " " + new Oid(obj.Id);
   else
     m_objectAsString = obj.ToString();
 }
Exemplo n.º 9
0
 public ObjectViewModel(IOptimizedPersistable obj, FieldViewModel parentView, SessionBase session)
   : base(parentView, true)
 {
   _object = obj;
   _session = session;
   if (obj.WrappedObject != obj)
     objectAsString = obj.WrappedObject.ToString() + " " + new Oid(obj.Id);
   else
     objectAsString = obj.ToString();
 }
Exemplo n.º 10
0
 public FieldViewModel(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentObject, SessionBase session)
   : base(parentObject, true)
 {
   m_member = member;
   m_session = session;
   m_parentId = parentObj.Id; 
   object memberObj = member.GetMemberValue(parentObj.WrappedObject);
   m_isEncodedOidArray = (parentObj as BTreeNode) != null && memberObj != null && (memberObj as Array) != null && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray");
   m_isEncodedOidArray = m_isEncodedOidArray || parentObj.GetType().IsGenericType && parentObj.GetType().GetGenericTypeDefinition() == typeof(WeakReferenceList<>);
   m_fieldAsString = Utilities.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
Exemplo n.º 11
0
        public FieldViewModel(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentObject, SessionBase session)
            : base(parentObject, true)
        {
            m_member   = member;
            m_session  = session;
            m_parentId = parentObj.Id;
            object memberObj = member.GetMemberValue(parentObj.WrappedObject);

            m_isEncodedOidArray = (parentObj as BTreeNode) != null && memberObj != null && (memberObj as Array) != null && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray");
            m_isEncodedOidArray = m_isEncodedOidArray || parentObj.GetType().IsGenericType&& parentObj.GetType().GetGenericTypeDefinition() == typeof(WeakReferenceList <>);
            m_fieldAsString     = Utilities.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
        }
Exemplo n.º 12
0
 public ObjectViewModel(IOptimizedPersistable obj, FieldViewModel parentView, SessionBase session)
     : base(parentView, true)
 {
     m_objectId = obj.Id;
     m_session  = session;
     if (obj.WrappedObject != obj)
     {
         m_objectAsString = obj.WrappedObject.ToString() + " " + new Oid(obj.Id);
     }
     else
     {
         m_objectAsString = obj.ToString();
     }
 }
Exemplo n.º 13
0
 public ObjectViewModel(IOptimizedPersistable obj, TreeViewItemViewModel parentPage, SessionBase session)
     : base(parentPage, true)
 {
     m_object  = obj;
     m_session = session;
     if (obj.WrappedObject != obj)
     {
         m_objectAsString = obj.WrappedObject.ToString() + " " + new Oid(obj.Id);
     }
     else
     {
         m_objectAsString = obj.ToString();
     }
 }
Exemplo n.º 14
0
        public virtual int CompareTo(object obj)
        {
            IOptimizedPersistable otherPersistentObject = obj as IOptimizedPersistable;

            if (otherPersistentObject != null)
            {
                if (otherPersistentObject.Id == 0 || m_id == 0)
                {
                    throw new PersistedObjectExcpectedException("When comparing IOptimizedPersistable objects, both objects must first be persisted (have a non 0 Id)");
                }
                return(m_id.CompareTo(otherPersistentObject.Id));
            }
            else
            {
                throw new ArgumentException("Object is not a IOptimizedPersistable");
            }
        }
Exemplo n.º 15
0
 /// <summary>
 /// Loads all fields of an object if they are not already loaded.
 /// </summary>
 /// <param name="depth">Set this if you want to limit the depth of the graph loaded by this open.
 public virtual void LoadFields(int depth = Int32.MaxValue)
 {
     if (FieldsLoaded == false)
     {
         FieldsLoaded = true;
         Schema schema = Session.OpenSchema(false);
         List <IOptimizedPersistable> toLoadMembers = new List <IOptimizedPersistable>(shape.DataMemberArray.Length);
         toLoadMembers.Add(this);
         while (toLoadMembers.Count > 0)
         {
             IOptimizedPersistable toLoad = toLoadMembers[toLoadMembers.Count - 1];
             toLoadMembers.RemoveAt(toLoadMembers.Count - 1);
             toLoad.Shape.LoadMembers(toLoad, schema, toLoadMembers, 0, depth, Session);
         }
         InitializeAfterRead(Session);
     }
 }
Exemplo n.º 16
0
 public ObjectViewModel(object obj, FieldViewModel parentView, int arrayIndex, bool encodedOid, SessionBase session)
     : base(parentView, true)
 {
     m_session = session;
     if (encodedOid)
     {
         if (obj.GetType() == typeof(UInt64))
         {
             m_objectId       = (UInt64)obj;
             m_objectAsString = $"[{arrayIndex}] {new Oid(m_objectId)}";
         }
         else
         {
             Oid oid = new Oid(parentView.ParentId);
             oid              = new Oid(oid.Database, (UInt32)obj);
             m_objectId       = oid.Id;
             m_objectAsString = $"[{arrayIndex}] {new OidShort(oid.IdShort)}";
         }
     }
     else
     {
         IOptimizedPersistable pObj = obj as IOptimizedPersistable;
         if (pObj == null & obj != null)
         {
             session.GlobalObjWrapperGet(obj, out pObj);
         }
         if (pObj != null)
         {
             m_objectId = pObj.Id;
         }
         m_session = session;
         if (pObj != null && pObj.GetWrappedObject() != obj)
         {
             m_objectAsString = $"[{arrayIndex}] {pObj.GetWrappedObject()} {new Oid(pObj.Id)}";
         }
         else if (obj != null)
         {
             m_objectAsString = $"[{arrayIndex}] {obj}";
         }
         else
         {
             m_objectAsString = $"[{arrayIndex}] null";
         }
     }
 }
Exemplo n.º 17
0
 void SetName(IOptimizedPersistable obj)
 {
     try
     {
         if (obj.GetWrappedObject() != obj)
         {
             m_objectAsString = obj.GetWrappedObject().ToString() + " " + new Oid(obj.Id);
         }
         else
         {
             m_objectAsString = obj.ToString();
         }
     }
     catch (Exception)
     { // in case fields used in ToString() are not loaded
         m_objectAsString = obj.GetWrappedObject().GetType().ToGenericTypeString() + " " + Oid.AsString(obj.Id);
     }
 }
Exemplo n.º 18
0
        protected override void LoadChildren()
        {
            Array a = memberObj as Array;
            IOptimizedPersistable p = memberObj as IOptimizedPersistable;

            if (a != null)
            {
                base.Children.Add(new ArrayViewModel(a, this, isEncodedOidArray, page, _session));
            }
            else if (p != null)
            {
                base.Children.Add(new ObjectViewModel(p, this, _session));
            }
            else
            {
                base.Children.Add(new ListViewModel(memberObj as IList, this, page));
            }
        }
Exemplo n.º 19
0
        void LoadChild(DataMember member, object memberObj)
        {
            bool listWithItems = false;

            if (member.Field != null && member.Field.FieldType.IsGenericType && member.Field.FieldType.GetGenericTypeDefinition() == typeof(List <>))
            {
                IList list = (IList)memberObj;
                listWithItems = list != null && list.Count > 0;
            }
            IOptimizedPersistable pObj = (IOptimizedPersistable)m_session.Open(m_objectId, false, null, false, 0, Int32.MaxValue);

            if (pObj != null)
            {
                if (member.Field != null && memberObj != null & (member.Field.FieldType.IsArray || member.HasId || listWithItems || member.WeakIOptimizedPersistableReference))
                {
                    base.Children.Add(new FieldViewModel(pObj, member, this, m_session));
                }
                else
                {
                    base.Children.Add(new FieldViewModelNoExpansions(pObj, member, this, m_session));
                }
            }
        }
Exemplo n.º 20
0
 public virtual byte[] WriteMe(TypeVersion typeVersion, bool addShapeNumber, PageInfo pageInfo, IOptimizedPersistable owner, SessionBase session, bool inFlush)
 {
     return(OptimizedPersistable.WriteMeUsingSchemaReflection(typeVersion, this, addShapeNumber, pageInfo, owner, session, inFlush));
 }
 public FieldViewModelNoExpansions(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentView, SessionBase session)
   : base(parentView, true)
 {
   fieldAsString = Utilities.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
Exemplo n.º 22
0
 /// <summary>
 /// This is a support function for the VelocityDbBrowser. It converts a field into a string.
 /// </summary>
 /// <param name="member">A field in an object</param>
 /// <param name="obj">The object containing the field</param>
 /// <param name="pObj">The object containing the field or the owner of the object containing the field</param>
 /// <param name="page">The page of the object</param>
 /// <param name="skipArrays">Option to skip arrays of the object</param>
 /// <returns></returns>
 public static string ToStringDetails(DataMember member, object obj, IOptimizedPersistable pObj, Page page, bool skipArrays)
 {
   SessionBase session = pObj.Page.Database.Session;
   IOptimizedPersistable placeHolder;
   Schema schema = session.OpenSchema(false);
   FieldInfo field = member.Field;
   object o = member.GetMemberValue(obj);
   if (member.IsGuid)
   {
     Guid guid = (Guid)o;
     return guid.ToString();
   }
   StringBuilder sb = new StringBuilder(100);
   if (o == null)
     sb.Append("  " + member.FieldName + " : " + "null");
   else
   {
     bool foundIt = session.GlobalObjWrapperGet(o, out placeHolder);
     if (foundIt)
       sb.Append("  " + member.FieldName + " : " + placeHolder.WrappedObject.ToString() + " " + Oid.AsString(placeHolder.Id));
     else
     {
       Array array = o as Array;
       if (array != null)
       {
         sb.Append("  " + member.FieldName + " " + field.FieldType.ToGenericTypeString() + " size: " + array.Length.ToString());
         if (!skipArrays)
           sb.Append(ArrayToString(array, false, page));
       }
       else
       {
         IList list = o as IList;
         if (list != null)
         {
           int i = 0;
           string listObjStr = "  " + member.FieldName + " " + o.GetType().ToGenericTypeString() + " size: " + list.Count.ToString();
           sb.Append(listObjStr);
           if (!skipArrays)
             foreach (object listObj in list)
             {
               sb.AppendLine();
               pObj = listObj as OptimizedPersistable;
               if (listObj != null && pObj != null)
                 sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(pObj.Id));
               else
               {
                 foundIt = session.GlobalObjWrapperGet(listObj, out placeHolder);
                 if (foundIt)
                   sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(placeHolder.Id));
                 else
                   sb.Append("\t[" + i.ToString() + "]\t" + listObj.ToString());
               }
               i++;
             }
         }
         else
         {
           VelocityDbType t = null;
           if (field.FieldType == CommonTypes.s_typeOfType)
           {
             Type fieldType = o as Type;
             sb.Append("  " + field.Name + " : " + fieldType.ToGenericTypeString());
           }
           else
           {
             bool cond1 = field.FieldType.GetTypeInfo().IsPrimitive || member.HasId || field.FieldType == CommonTypes.s_typeOfString || field.FieldType.GetTypeInfo().IsEnum;
             if (cond1 || schema.LookupByType.TryGetValue(field.FieldType, out t) == false ||
               (field.FieldType.GetTypeInfo().IsGenericType && field.FieldType.GetGenericTypeDefinition() == CommonTypes.s_typeOfWeakIOptimizedPersistableReference))
               sb.Append("  " + field.Name + " : " + o.ToString());
             else
             {
               TypeVersion memberShape = t.LastShape();
               sb.Append("  " + field.Name + " : " + ToStringDetails(o, schema, page, memberShape, skipArrays));
             }
           }
         }
       }
     }
   }
   return sb.ToString();
 }
Exemplo n.º 23
0
 public TypePlusObj(IOptimizedPersistable o)
 {
     Type = o.GetType();
     Id   = new Oid(o.Id).ToString();
     Obj  = o;
 }
Exemplo n.º 24
0
 public FieldViewModelNoExpansions(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentView, SessionBase session)
     : base(parentView, true)
 {
     fieldAsString = Utilities.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
Exemplo n.º 25
0
 public override byte[] WriteMe(TypeVersion typeVersion, bool addShapeNumber, PageInfo pageInfo, IOptimizedPersistable owner, SessionBase session, bool inFlush)
 {
   //return base.WriteMe(typeVersion, addShapeNumber, pageInfo, owner, session, inFlush);
   byte[] bytes;
   using (MemoryStream memStream = new MemoryStream(100))
   {
     if (pageInfo.ShapeNumber == 0 && addShapeNumber)
       memStream.Write(BitConverter.GetBytes(typeVersion.ShortId), 0, sizeof(Int32));
     int byteCount = SessionBase.TextEncoding.GetByteCount(symbol);
     bytes = new byte[byteCount + sizeof(Int32)];
     if (byteCount == 0)
       byteCount = -1;
     Buffer.BlockCopy(BitConverter.GetBytes(byteCount), 0, bytes, 0, sizeof(Int32));
     SessionBase.TextEncoding.GetBytes(symbol, 0, symbol.Length, bytes, sizeof(Int32));
     memStream.Write(bytes, 0, bytes.Length);
     bytes = BitConverter.GetBytes(timestamp.Ticks);
     memStream.Write(bytes, 0, bytes.Length);
     bytes = BitConverter.GetBytes(bid);
     memStream.Write(bytes, 0, bytes.Length);
     bytes = BitConverter.GetBytes(ask);
     memStream.Write(bytes, 0, bytes.Length);
     bytes = BitConverter.GetBytes(askSize);
     memStream.Write(bytes, 0, bytes.Length);
     bytes = BitConverter.GetBytes(bidSize);
     memStream.Write(bytes, 0, bytes.Length);
     byteCount = SessionBase.TextEncoding.GetByteCount(provider);
     bytes = new byte[byteCount + sizeof(Int32)];
     if (byteCount == 0)
       byteCount = -1;
     Buffer.BlockCopy(BitConverter.GetBytes(byteCount), 0, bytes, 0, sizeof(Int32));
     SessionBase.TextEncoding.GetBytes(provider, 0, provider.Length, bytes, sizeof(Int32));
     memStream.Write(bytes, 0, bytes.Length);
     bytes = memStream.ToArray();
     return bytes;
   }
 }
Exemplo n.º 26
0
        internal static string ToStringDetails(object obj, Schema schema, Page page, TypeVersion _shape, bool skipArrays)
        {
            OptimizedPersistable pObj = obj as OptimizedPersistable;

            if (pObj != null && pObj.WrappedObject != null)
            {
                obj = pObj.WrappedObject;
            }
            IOptimizedPersistable ipObj = pObj;
            StringBuilder         sb    = new StringBuilder(100);
            Array       array           = obj as Array;
            SessionBase session         = page.Database.Session;

            if (array != null && !skipArrays)
            {
                int  i           = 0;
                bool isValueType = array.GetType().GetElementType().GetTypeInfo().IsValueType;
                foreach (object arrayObj in array)
                {
                    if (isValueType == false || i % 10 == 0)
                    {
                        //sb.AppendLine();
                        if (arrayObj == null)
                        {
                            sb.Append("\t[" + i.ToString() + "]\t" + "null");
                        }
                        else
                        {
                            ipObj = arrayObj as IOptimizedPersistable;
                            if (arrayObj != null && ipObj != null)
                            {
                                sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(ipObj.Id));
                            }
                            else
                            {
                                bool foundIt = session.GlobalObjWrapperGet(arrayObj, out ipObj);
                                if (foundIt)
                                {
                                    sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(ipObj.Id));
                                }
                                else
                                {
                                    sb.Append("\t[" + i.ToString() + "]\t" + arrayObj.ToString());
                                }
                            }
                        }
                    }
                    else
                    {
                        if (arrayObj == null)
                        {
                            sb.Append("\t" + "null");
                        }
                        else
                        {
                            ipObj = arrayObj as IOptimizedPersistable;
                            if (arrayObj != null && ipObj != null)
                            {
                                sb.Append("\t" + Oid.AsString(ipObj.Id));
                            }
                            else
                            {
                                bool foundIt = session.GlobalObjWrapperGet(arrayObj, out ipObj);
                                if (foundIt)
                                {
                                    sb.Append("\t" + Oid.AsString(ipObj.Id));
                                }
                                else
                                {
                                    sb.Append("\t" + arrayObj.ToString());
                                }
                            }
                        }
                    }
                    i++;
                }
            }
            else
            {
                if (_shape.BaseShape != null)
                {
                    //TypeVersion baseClassShape = schema.lookupByNumber.TypeVersionLookup(_shape.baseShape);
                    sb.Append(ToStringDetails(obj, schema, page, _shape.BaseShape, skipArrays));
                }
                foreach (DataMember m in _shape.DataMemberArray)
                {
                    FieldInfo field = m.GetField(_shape.Type);
                    object    o     = m.GetMemberValue(obj);
                    //sb.AppendLine();
                    if (o == null)
                    {
                        sb.Append("  " + field.Name + " : " + "null");
                    }
                    else
                    {
                        bool foundIt = session.GlobalObjWrapperGet(o, out ipObj);
                        if (foundIt)
                        {
                            sb.Append("  " + field.Name + " : " + pObj.WrappedObject.ToString() + " " + Oid.AsString(ipObj.Id));
                        }
                        else
                        {
                            array = o as Array;
                            if (array != null)
                            {
                                Type elementType = m.FieldType.GetElementType();
                                sb.Append("  " + field.Name + " " + field.FieldType.ToGenericTypeString());
                                if (!skipArrays)
                                {
                                    sb.Append(ArrayToString(array, false, page, elementType));
                                }
                            }
                            else
                            {
                                IList list = o as IList;
                                if (list != null)
                                {
                                    int i = 0;
                                    sb.Append("  " + field.Name + " " + o.ToString());
                                    foreach (object listObj in list)
                                    {
                                        //sb.AppendLine();
                                        ipObj = listObj as IOptimizedPersistable;
                                        if (listObj != null && pObj != null)
                                        {
                                            sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(ipObj.Id));
                                        }
                                        else
                                        {
                                            if (session.GlobalObjWrapperGet(listObj, out ipObj))
                                            {
                                                sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(ipObj.Id));
                                            }
                                            else
                                            {
                                                sb.Append("\t[" + i.ToString() + "]\t" + listObj.ToString());
                                            }
                                        }
                                        i++;
                                    }
                                }
                                else if (field.FieldType.GetTypeCode() != TypeCode.Object || m.HasId || !field.FieldType.GetTypeInfo().IsSerializable || (o as WeakIOptimizedPersistableReferenceBase) != null)
                                {
                                    sb.Append("  " + field.Name + " : " + o.ToString());
                                }
                                else
                                {
                                    TypeVersion memberShape = schema.RegisterClass(field.FieldType, session);
                                    sb.Append("  " + field.Name + " : " + ToStringDetails(o, schema, page, memberShape, skipArrays));
                                }
                            }
                        }
                    }
                }
            }
            return(sb.ToString());
        }
Exemplo n.º 27
0
        /// <summary>
        /// This is a support function for the VelocityDbBrowser. It converts a field into a string.
        /// </summary>
        /// <param name="member">A field in an object</param>
        /// <param name="obj">The object containing the field</param>
        /// <param name="page">The page of the object</param>
        /// <param name="skipArrays">Option to skip arrays of the object</param>
        /// <returns>A <see cref="string"/> containing all details of this field.</returns>
        public static string ToStringDetails(DataMember member, object obj, IOptimizedPersistable pObj, Page page, bool skipArrays)
        {
            SessionBase           session = pObj.Page.Database.Session;
            IOptimizedPersistable placeHolder;
            Schema    schema = session.OpenSchema(false);
            FieldInfo field  = member.Field;
            object    o      = member.GetMemberValue(obj);

            if (member.IsGuid)
            {
                Guid guid = (Guid)o;
                return(guid.ToString());
            }
            StringBuilder sb = new StringBuilder(100);

            if (o == null)
            {
                sb.Append("  " + member.FieldName + " : " + "null");
            }
            else
            {
                bool foundIt = session.GlobalObjWrapperGet(o, out placeHolder);
                if (foundIt)
                {
                    sb.Append("  " + member.FieldName + " : " + placeHolder.WrappedObject.ToString() + " " + Oid.AsString(placeHolder.Id));
                }
                else
                {
                    Array array = o as Array;
                    if (array != null)
                    {
                        Type elementType = member.FieldType.GetElementType();
                        sb.Append("  " + member.FieldName + " " + field.FieldType.ToGenericTypeString() + " size: " + array.Length.ToString());
                        if (!skipArrays)
                        {
                            sb.Append(ArrayToString(array, false, page, elementType));
                        }
                    }
                    else
                    {
                        IList list = o as IList;
                        if (list != null)
                        {
                            int    i          = 0;
                            string listObjStr = "  " + member.FieldName + " " + o.GetType().ToGenericTypeString() + " size: " + list.Count.ToString();
                            sb.Append(listObjStr);
                            if (!skipArrays)
                            {
                                foreach (object listObj in list)
                                {
                                    sb.AppendLine();
                                    pObj = listObj as OptimizedPersistable;
                                    if (listObj != null && pObj != null)
                                    {
                                        sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(pObj.Id));
                                    }
                                    else
                                    {
                                        foundIt = session.GlobalObjWrapperGet(listObj, out placeHolder);
                                        if (foundIt)
                                        {
                                            sb.Append("\t[" + i.ToString() + "]\t" + Oid.AsString(placeHolder.Id));
                                        }
                                        else
                                        {
                                            sb.Append("\t[" + i.ToString() + "]\t" + listObj.ToString());
                                        }
                                    }
                                    i++;
                                }
                            }
                        }
                        else
                        {
                            VelocityDbType t = null;
                            if (field.FieldType == CommonTypes.s_typeOfType)
                            {
                                Type fieldType = o as Type;
                                sb.Append("  " + field.Name + " : " + fieldType.ToGenericTypeString());
                            }
                            else
                            {
                                bool cond1 = field.FieldType.GetTypeInfo().IsPrimitive || member.HasId || field.FieldType == CommonTypes.s_typeOfString || field.FieldType.GetTypeInfo().IsEnum;
                                if (cond1 || schema.LookupByType.TryGetValue(field.FieldType, out t) == false ||
                                    (field.FieldType.GetTypeInfo().IsGenericType&& field.FieldType.GetGenericTypeDefinition() == CommonTypes.s_typeOfWeakIOptimizedPersistableReference))
                                {
                                    sb.Append("  " + field.Name + " : " + o.ToString());
                                }
                                else
                                {
                                    TypeVersion memberShape = t.LastShape();
                                    bool        isNullable  = memberShape.Type.GetTypeInfo().IsGenericType&& memberShape.Type.GetGenericTypeDefinition() == CommonTypes.s_typeOfNullable;
                                    if (isNullable)
                                    {
                                        Type elementType = memberShape.Type.GetTypeInfo().GetGenericArguments()[0];
                                        schema.LookupByType.TryGetValue(elementType, out t);
                                        memberShape = t.LastShape();
                                    }
                                    sb.Append("  " + field.Name + " : " + ToStringDetails(o, schema, page, memberShape, skipArrays));
                                }
                            }
                        }
                    }
                }
            }
            return(sb.ToString());
        }
 /// <summary>
 /// Persists this object.
 /// </summary>
 /// <param name="placeHint">Use placement as specified by this object type, see <see cref="OptimizedPersistable.PlacementDatabaseNumber"/>, <see cref="OptimizedPersistable.ObjectsPerPage()"/> and <see cref="OptimizedPersistable.PagesPerDatabase()"/></param>
 /// <param name="session">The session managing this object</param>
 /// <param name="persistRefs">Persist any referenced object now or delay until flush/commit</param>
 /// <param name="disableFlush">Controlls possible flushing of updated pages. Set to true if you want to prevent updated pages from being flushed to disk and setting such pages to a non updated state.</param>
 /// <returns>The object id of the persistent object</returns>
 public virtual UInt64 Persist(SessionBase session, IOptimizedPersistable placeHint, bool persistRefs = true, bool disableFlush = false)
 {
   Placement place = new Placement(session, placeHint, this, persistRefs, UInt32.MaxValue, placeHint.FlushIfPageFull);
   return session.Persist(place, this, session.OpenSchema(false), UInt16.MaxValue - 1, disableFlush);
 }
 public virtual byte[] WriteMe(TypeVersion typeVersion, bool addShapeNumber, PageInfo pageInfo, IOptimizedPersistable owner, SessionBase session, bool inFlush)
 {
   return OptimizedPersistable.WriteMeUsingSchemaReflection(typeVersion, this, addShapeNumber, pageInfo, owner, session, inFlush);
 }
Exemplo n.º 30
0
        protected override void LoadChildren()
        {
            IOptimizedPersistable parentObj = (IOptimizedPersistable)m_session.Open(m_parentId, false, null, false, 0, Int32.MaxValue);

            if (parentObj != null)
            {
                object memberObj = m_member.GetMemberValue(parentObj.WrappedObject);
                Array  a         = memberObj as Array;
                if (a != null)
                {
                    Type     elementType = a.GetType().GetElementType();
                    TypeCode tCode       = elementType.GetTypeCode();
                    bool     isValueType = elementType.GetTypeInfo().IsValueType;
                    if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray)
                    {
                        base.Children.Add(new ArrayViewModelNoExpansions(a, this, m_isEncodedOidArray, parentObj.Page, m_session));
                    }
                    else
                    {
                        int i = 0;
                        foreach (object arrayObj in a)
                        {
                            if (arrayObj != null)
                            {
                                base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session));
                            }
                        }
                    }
                }
                else
                {
                    IOptimizedPersistable p = memberObj as IOptimizedPersistable;
                    if (p != null)
                    {
                        base.Children.Add(new ObjectViewModel(p, this, m_session));
                    }
                    else if (m_member.WeakIOptimizedPersistableReference)
                    {
                        WeakIOptimizedPersistableReferenceBase weakRef = memberObj as VelocityDb.WeakIOptimizedPersistableReferenceBase;
                        p = m_session.Open(weakRef.Id, false, null, false, 0, Int32.MaxValue);
                        base.Children.Add(new ObjectViewModel(p, this, m_session));
                    }
                    else
                    {
                        IList list        = memberObj as IList;
                        Type  elementType = list.GetType();
                        if (elementType.IsGenericType)
                        {
                            elementType = elementType.GetGenericArguments()[0];
                        }
                        else
                        {
                            elementType = elementType.GetElementType();
                        }
                        TypeCode tCode       = elementType.GetTypeCode();
                        bool     isValueType = elementType.GetTypeInfo().IsValueType;
                        if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray)
                        {
                            base.Children.Add(new ListViewModel(list, this, parentObj.Page));
                        }
                        else
                        {
                            int i = 0;
                            foreach (object arrayObj in list)
                            {
                                base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session));
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 31
0
 public override byte[] WriteMe(TypeVersion typeVersion, bool addShapeNumber, PageInfo pageInfo, IOptimizedPersistable owner, SessionBase session, bool inFlush)
 {
     //return base.WriteMe(typeVersion, addShapeNumber, pageInfo, owner, session, inFlush);
     byte[] bytes;
     using (MemoryStream memStream = new MemoryStream(100))
     {
         if (pageInfo.ShapeNumber == 0 && addShapeNumber)
         {
             memStream.Write(BitConverter.GetBytes(typeVersion.ShortId), 0, sizeof(Int32));
         }
         int byteCount = SessionBase.TextEncoding.GetByteCount(symbol);
         bytes = new byte[byteCount + sizeof(Int32)];
         if (byteCount == 0)
         {
             byteCount = -1;
         }
         Buffer.BlockCopy(BitConverter.GetBytes(byteCount), 0, bytes, 0, sizeof(Int32));
         SessionBase.TextEncoding.GetBytes(symbol, 0, symbol.Length, bytes, sizeof(Int32));
         memStream.Write(bytes, 0, bytes.Length);
         bytes = BitConverter.GetBytes(timestamp.Ticks);
         memStream.Write(bytes, 0, bytes.Length);
         bytes = BitConverter.GetBytes(bid);
         memStream.Write(bytes, 0, bytes.Length);
         bytes = BitConverter.GetBytes(ask);
         memStream.Write(bytes, 0, bytes.Length);
         bytes = BitConverter.GetBytes(askSize);
         memStream.Write(bytes, 0, bytes.Length);
         bytes = BitConverter.GetBytes(bidSize);
         memStream.Write(bytes, 0, bytes.Length);
         byteCount = SessionBase.TextEncoding.GetByteCount(provider);
         bytes     = new byte[byteCount + sizeof(Int32)];
         if (byteCount == 0)
         {
             byteCount = -1;
         }
         Buffer.BlockCopy(BitConverter.GetBytes(byteCount), 0, bytes, 0, sizeof(Int32));
         SessionBase.TextEncoding.GetBytes(provider, 0, provider.Length, bytes, sizeof(Int32));
         memStream.Write(bytes, 0, bytes.Length);
         bytes = memStream.ToArray();
         return(bytes);
     }
 }