public IOptimizedPersistable ShallowCopyTo(Page page) { IOptimizedPersistable copy = (IOptimizedPersistable)this.MemberwiseClone(); copy.Page = page; return(copy); }
public ObjectViewModel(IOptimizedPersistable obj, TreeViewItemViewModel parentPage, SessionBase session) : base(parentPage, true) { m_objectId = obj.Id; m_session = session; SetName(obj); }
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); } } }
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); }
/// <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)); }
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); }
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); }
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(); }
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(); }
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); }
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); }
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(); } }
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(); } }
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"); } }
/// <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); } }
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"; } } }
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); } }
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)); } }
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)); } } }
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); }
/// <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(); }
public TypePlusObj(IOptimizedPersistable o) { Type = o.GetType(); Id = new Oid(o.Id).ToString(); Obj = o; }
public FieldViewModelNoExpansions(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentView, SessionBase session) : base(parentView, true) { fieldAsString = Utilities.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true); }
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; } }
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()); }
/// <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); }
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)); } } } } } }
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); } }