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 void ReadMe(TypeVersion typeVersion, byte[] memberBytes, ref int offset, SessionBase session, Page page, bool useOidShort, Schema schema, bool openRefs, List <IOptimizedPersistable> toLoadMembers, int graphDepth, int graphDepthToLoad, bool primitivesOnly) { OptimizedPersistable.ReadMeUsingSchemaReflection(typeVersion, memberBytes, ref offset, (IOptimizedPersistable)this, session, page, useOidShort, schema, openRefs, toLoadMembers, graphDepth, graphDepthToLoad, primitivesOnly); }
protected override void LoadChildren() { TypeVersion parentObj = (TypeVersion)m_session.Open(m_parentId, false, null, false, 0, Int32.MaxValue); if (parentObj != null) { VelocityDbType vdbType; Type t = m_member.FieldType; while (t.IsArray) { t = t.GetElementType(); } TypeCode tCode = t.GetTypeCode(); bool isValueType = t.IsValueType; bool isNullableElement = t.IsGenericType && t.GetGenericTypeDefinition() == CommonTypes.s_typeOfNullable; t = isNullableElement ? t.GetGenericArguments()[0] : t.IsEnum ? Enum.GetUnderlyingType(t) : t; if (t.IsArray) { t = t.GetElementType(); } if (t.IsGenericType) { Type genericTypeDef = t.GetGenericTypeDefinition(); Type key = t.GetGenericArguments()[0]; if (genericTypeDef == CommonTypes.s_typeOfList) { t = key; } } var lookupByType = m_session.OpenSchema(false).LookupByType; if (t != null && lookupByType.TryGetValue(t, out vdbType)) { foreach (VelocityDbType vType in m_session.OpenSchema(false).TypesByName) { if (vType != null && vType.Type != null) { var type = vType.Type; if (type.IsSubclassOf(vdbType.Type) || type == t) { for (int i = 0; i < vType.TypeVersions.Length; i++) { base.Children.Add(new TypeVersionViewModel(vType.TypeVersions[i], this, _schemasViewModel)); } } } else { Trace.WriteLine("vType or vType.type is unexpectedly null for VelocityDbType: " + vType); } } } else { base.Children.Add(new NotInSchemaViewModel("Type not registered in database schema", this, m_session)); } } }
public DataMemberViewModelNoExpansion(TypeVersion parentObj, DataMember member, DataMemberViewModel parentObject, SessionBase session) : base(parentObject, true) { m_member = member; m_session = session; m_parentId = parentObj.Id; m_isEncodedOidArray = parentObj.Type.IsAssignableFrom(typeof(BTreeNode)) && parentObj.Type.IsArray && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray"); m_isEncodedOidArray = m_isEncodedOidArray || parentObj.GetType().IsGenericType&& parentObj.GetType().GetGenericTypeDefinition() == typeof(WeakReferenceList <>); m_fieldAsString = member.ToString(); }
public WeakReferencedTypeViewModel(TypeVersion parentObj, Type weakReferencedType, TypeVersionViewModel parentObject, SessionBase session, SchemasViewModel schemasViewModel) : base(parentObject, true) { _weakReferencedType = weakReferencedType; _session = session; _parentId = parentObj.Id; _schemasViewModel = schemasViewModel; //_isEncodedOidArray = parentObj.Type.IsAssignableFrom(typeof(BTreeNode)) && parentObj.Type.IsArray && (member.Field.Name == "keysArray" || member.Field.Name == "valuesArray"); _isEncodedOidArray = _isEncodedOidArray || parentObj.GetType().IsGenericType&& parentObj.GetType().GetGenericTypeDefinition() == typeof(WeakReferenceList <>); }
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); } }
protected override void LoadChildren() { m_object.LoadFields(); object o = m_object.WrappedObject; TypeVersion baseShape = m_object.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 m_object.Shape.DataMemberArray) { object memberObj = member.GetMemberValue(o); LoadChild(member, memberObj); } }
public int CompareTo(State <T> other) { if (ReferenceEquals(this, other)) { return(0); } if (ReferenceEquals(null, other)) { return(1); } var result = string.Compare(Id, other.Id, StringComparison.InvariantCulture); if (result == 0) { result = string.Compare(Type, other.Type, StringComparison.InvariantCulture); } if (result == 0) { result = TypeVersion.CompareTo(other.TypeVersion); } if (result == 0) { result = DataVersion.CompareTo(other.DataVersion); } if (result == 0) { result = Comparer <Metadata> .Default.Compare(Metadata, other.Metadata); } return(result); }
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 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 void ReadMe(TypeVersion typeVersion, byte[] memberBytes, ref int offset, SessionBase session, Page page, bool useOidShort, Schema schema, bool openRefs, List<IOptimizedPersistable> toLoadMembers, int graphDepth, int graphDepthToLoad, bool primitivesOnly) { OptimizedPersistable.ReadMeUsingSchemaReflection(typeVersion, memberBytes, ref offset, this, session, page, useOidShort, schema, openRefs, toLoadMembers, graphDepth, graphDepthToLoad, primitivesOnly); }
/// <summary> /// Restores database files, pages and objects from a .csv file data created with ExportToCSV /// </summary> /// <param name="session">the active session</param> /// <param name="csvDirectory">Path to directory containing CSV files</param> static public void ImportFromCSV(this SessionBase session, string csvDirectory) { const char fieldSeperator = ','; DirectoryInfo di = new DirectoryInfo(csvDirectory); #if WINDOWS_PHONE List <FileInfo> files = di.GetFiles("*.csv").ToList(); #else List <FileInfo> files = di.GetFiles("*.csv", SearchOption.TopDirectoryOnly).ToList(); #endif Schema schema = session.OpenSchema(false); using (StreamReader textReader = new StreamReader(Path.Combine(csvDirectory, "Database.csv"))) { string header = textReader.ReadLine(); string dbInfoString = textReader.ReadLine(); while (dbInfoString != null) { string[] dbInfo = dbInfoString.Split(fieldSeperator); UInt32 dbNum = UInt32.Parse(dbInfo[0]); string dbName = dbInfo[1].Trim(new char[] { '"' }); Database db = null; if (dbNum < 10) { db = session.OpenDatabase(dbNum, false, false); } if (db == null) { db = session.NewDatabase(dbNum, 0, dbName); } dbInfoString = textReader.ReadLine(); } } using (StreamReader textReader = new StreamReader(Path.Combine(csvDirectory, "Page.csv"))) { string header = textReader.ReadLine(); string pageInfoString = textReader.ReadLine(); while (pageInfoString != null) { int i = 0; string[] pageInfo = pageInfoString.Split(fieldSeperator); UInt32 dbNum = UInt32.Parse(pageInfo[i++]); UInt16 pageNum = UInt16.Parse(pageInfo[i++]); UInt16 numberOfSlots = UInt16.Parse(pageInfo[i++]); UInt16 firstFreeSlot = UInt16.Parse(pageInfo[i++]); UInt64 versionNumber = UInt64.Parse(pageInfo[i++]); PageInfo.encryptionKind encryptionKind = (PageInfo.encryptionKind)Enum.Parse(typeof(PageInfo.encryptionKind), pageInfo[i++]); PageInfo.compressionKind compressed = (PageInfo.compressionKind)Enum.Parse(typeof(PageInfo.compressionKind), pageInfo[i++]); UInt32 typeVersion = UInt32.Parse(pageInfo[i]); Database db = session.OpenDatabase(dbNum, false, false); Page page = db.CachedPage(pageNum); if (page == null) { page = new Page(db, pageNum, typeVersion, numberOfSlots); page.PageInfo.Compressed = compressed; page.PageInfo.Encryption = encryptionKind; page.PageInfo.VersionNumber = versionNumber; page.PageInfo.NumberOfSlots = numberOfSlots; page.PageInfo.FirstFreeSlot = firstFreeSlot; session.UpdatePage(ref page); } pageInfoString = textReader.ReadLine(); } } for (int i = 0; i < 2; i++) { foreach (FileInfo info in files) { string numberString = Regex.Match(info.Name, @"\d+").Value; if (numberString.Length > 0) { UInt32 typeShortId = UInt32.Parse(numberString); UInt16 slotNumber = (UInt16)typeShortId; if ((i == 0 && slotNumber < Schema.s_bootupTypeCount) || (i == 1 && slotNumber >= Schema.s_bootupTypeCount)) { TypeVersion tv = schema.GetTypeVersion(typeShortId, session); if (tv != null) { using (StreamReader textReader = new StreamReader(info.FullName)) { CsvReader csvReader = new CsvReader(textReader, true); string[] fileldNames = csvReader.GetFieldHeaders(); foreach (string[] record in csvReader) { tv.ObjectBytesFromStrings(record, fileldNames, session, schema); } } } } } } } }
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()); }
public TypeVersionViewModelNoExpansion(TypeVersion typeVersion, TreeViewItemViewModel parentDatabase, SessionBase session) : base(parentDatabase, true) { _typeVersion = typeVersion; m_session = session; }
/// <summary> /// Restores database files, pages and objects from a .csv file data created with ExportToCSV /// </summary> /// <param name="session">the active session</param> /// <param name="csvDirectory">Path to directory containing CSV files</param> static public void ImportFromCSV(this SessionBase session, string csvDirectory) { const char fieldSeperator = ','; DirectoryInfo di = new DirectoryInfo(csvDirectory); #if WINDOWS_PHONE List <FileInfo> files = di.GetFiles("*.csv").ToList(); #else List <FileInfo> files = di.GetFiles("*.csv", SearchOption.TopDirectoryOnly).ToList(); #endif Schema schema = session.OpenSchema(false); using (StreamReader textReader = new StreamReader(Path.Combine(csvDirectory, "Database.csv"))) { string header = textReader.ReadLine(); string dbInfoString = textReader.ReadLine(); while (dbInfoString != null) { string[] dbInfo = dbInfoString.Split(fieldSeperator); UInt32 dbNum = UInt32.Parse(dbInfo[0]); string dbName = dbInfo[1].Trim(new char[] { '"' }); Database db = null; if (dbNum < 10) { db = session.OpenDatabase(dbNum, false, false); } if (db == null) { db = session.NewDatabase(dbNum, 0, dbName); } dbInfoString = textReader.ReadLine(); } } using (StreamReader textReader = new StreamReader(Path.Combine(csvDirectory, "Page.csv"))) { string header = textReader.ReadLine(); string pageInfoString = textReader.ReadLine(); while (pageInfoString != null) { int i = 0; string[] pageInfo = pageInfoString.Split(fieldSeperator); UInt32 dbNum = UInt32.Parse(pageInfo[i++]); UInt16 pageNum = UInt16.Parse(pageInfo[i++]); UInt16 numberOfSlots = UInt16.Parse(pageInfo[i++]); UInt16 firstFreeSlot = UInt16.Parse(pageInfo[i++]); UInt64 versionNumber = UInt64.Parse(pageInfo[i++]); PageInfo.encryptionKind encryptionKind = (PageInfo.encryptionKind)Enum.Parse(typeof(PageInfo.encryptionKind), pageInfo[i++]); PageInfo.compressionKind compressed = (PageInfo.compressionKind)Enum.Parse(typeof(PageInfo.compressionKind), pageInfo[i++]); UInt32 typeVersion = UInt32.Parse(pageInfo[i]); Database db = session.OpenDatabase(dbNum, false, false); Page page = db.CachedPage(pageNum); if (page == null) { page = new Page(db, pageNum, typeVersion, numberOfSlots); page.PageInfo.Compressed = compressed; page.PageInfo.Encryption = encryptionKind; page.PageInfo.VersionNumber = versionNumber; page.PageInfo.NumberOfSlots = numberOfSlots; page.PageInfo.FirstFreeSlot = firstFreeSlot; session.UpdatePage(ref page); } pageInfoString = textReader.ReadLine(); } } var schemaInternalTypeFiles = new[] { "VelocityDb.TypeInfo.Schema65747.csv", "VelocityDb.TypeInfo.TypeVersion65749.csv", "VelocityDb.TypeInfo.VelocityDbType65753.csv", "VelocityDb.TypeInfo.DataMember65745.csv", "VelocityDb.Collection.BTree.BTreeSetOidShortVelocityDb.TypeInfo.VelocityDbType65623.csv", "VelocityDb.Collection.Comparer.VelocityDbTypeComparer65655.csv" }; var schemaInternalTypeFileInfo = new List <FileInfo>(); foreach (var fileName in schemaInternalTypeFiles) { schemaInternalTypeFileInfo.Add(di.GetFiles(fileName, SearchOption.TopDirectoryOnly).First()); } foreach (FileInfo info in schemaInternalTypeFileInfo) { string numberString = Regex.Match(info.Name, @"\d+").Value; if (numberString.Length > 0) { UInt32 typeShortId = UInt32.Parse(numberString); UInt16 slotNumber = (UInt16)typeShortId; TypeVersion tv = schema.GetTypeVersion(typeShortId, session); if (tv != null) { using (StreamReader textReader = new StreamReader(info.FullName)) { CsvReader csvReader = new CsvReader(textReader, true); string[] fileldNames = csvReader.GetFieldHeaders(); foreach (string[] record in csvReader) { tv.ObjectBytesFromStrings(record, fileldNames, session, schema); } } } } } Database schemaDb = session.OpenDatabase(Schema.SchemaDB); Page schemaPage = schemaDb.CachedPage(1); schemaPage.FinishUpCsvImport(); var schemaTypes = new UInt32[] { 65747, 65749, 65753, 65745, 65623, 65655 }; for (int i = 0; i < 2; i++) { foreach (FileInfo info in files) { string numberString = Regex.Match(info.Name, @"\d+").Value; if (numberString.Length > 0) { UInt32 typeShortId = UInt32.Parse(numberString); UInt16 slotNumber = (UInt16)typeShortId; if (((i == 0 && slotNumber < Schema.s_bootupTypeCountExpanded) || (i == 1 && slotNumber >= Schema.s_bootupTypeCountExpanded)) && !schemaTypes.Contains(typeShortId)) { TypeVersion tv = schema.GetTypeVersion(typeShortId, session); if (tv != null) { using (StreamReader textReader = new StreamReader(info.FullName)) { var csvReader = new CsvReader(textReader, true); string[] fileldNames = csvReader.GetFieldHeaders(); foreach (string[] record in csvReader) { tv.ObjectBytesFromStrings(record, fileldNames, session, schema); } } } } } } } }
/// <inheritdoc /> public void SetTypeVersion(TypeVersion typeVersion) => m_shape = typeVersion;
public Array GetFieldAsArray() { TypeVersion parentObj = m_session.Open <TypeVersion>(m_parentId); return(null); // TO DO, FIX IT! }
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) { sb.Append(" " + field.Name + " " + field.FieldType.ToGenericTypeString()); if (!skipArrays) sb.Append(ArrayToString(array, false, page)); } 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> /// Currently only used by Database Manager /// </summary> /// <param name="pObj">Object for which we want detailed to string data</param> /// <param name="schema">The active schema</param> /// <param name="typeVersion">describes the type of the pObj</param> /// <param name="skipArrays">if <c>true</c> include array data in generated string</param> /// <returns>content of an object as string</returns> static public string ToStringDetails(this OptimizedPersistable pObj, Schema schema, TypeVersion typeVersion, bool skipArrays) { object obj = pObj.WrappedObject ?? pObj; return ToStringDetails(obj, schema, pObj.Page, typeVersion, skipArrays); }
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; } }
/// <summary> /// Currently only used by Database Manager /// </summary> /// <param name="pObj">Object for which we want detailed to string data</param> /// <param name="schema">The active schema</param> /// <param name="typeVersion">describes the type of the pObj</param> /// <param name="skipArrays">if <c>true</c> include array data in generated string</param> /// <returns>content of an object as string</returns> static public string ToStringDetails(this OptimizedPersistable pObj, Schema schema, TypeVersion typeVersion, bool skipArrays) { object obj = pObj.WrappedObject ?? pObj; return(ToStringDetails(obj, schema, pObj.Page, typeVersion, skipArrays)); }
//------------------------------------- public CTypeVersion(TypeVersion typeVersion) : base(typeVersion) { }
/// <summary> /// Export all persistent objects to .csv files, one file for each Type and version of Type. /// This is preview release, format may change. ImportFromCSV can be used to recreate your data. /// Note that Microsoft Excel can't handle many of these CSV files due to a field value limitation (at about 33000 chars) /// Notepad++ is one application that can read these files. /// Some fields like array data are encoded http://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110).aspx /// </summary> /// <param name="session">the active session</param> /// <param name="directory">Where to store the CSV files</param> static public void ExportToCSV(this SessionBase session, string directory) { const char fieldSeperator = ','; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } StreamWriter writer; StreamWriter dbWriter = null; StreamWriter pageWriter = null; Dictionary <UInt32, StreamWriter> files = new Dictionary <uint, StreamWriter>(); byte[] newLineBytes = Page.StringToByteArray(Environment.NewLine); try { List <Database> dbs = session.OpenAllDatabases(); string filePath = "Database.csv"; FileStream dbStream = new FileStream(Path.Combine(directory, filePath), FileMode.Create); dbWriter = new StreamWriter(dbStream); dbWriter.WriteLine($"Number{fieldSeperator}Name"); filePath = "Page.csv"; FileStream pageStream = new FileStream(Path.Combine(directory, filePath), FileMode.Create); pageWriter = new StreamWriter(pageStream); pageWriter.WriteLine($"DatabaseNumber{fieldSeperator}PageNumber{fieldSeperator}NumberOfSlots{fieldSeperator}FirstFreeSlot{fieldSeperator}Version{fieldSeperator}Encryption{fieldSeperator}Compression{fieldSeperator}TypeVersion"); foreach (Database db in dbs) { if (db != null && db.DatabaseNumber != 4 && db.DatabaseNumber != 0) // we skip the license database because we can't restore it without encryption key { dbWriter.WriteLine(db.DatabaseNumber.ToString() + fieldSeperator + "\"" + db.Name + "\""); foreach (Page page in db) { if (page.PageNumber > 0) { pageWriter.WriteLine(page.Database.DatabaseNumber.ToString() + fieldSeperator + page.PageNumber + fieldSeperator + page.PageInfo.NumberOfSlots + fieldSeperator + page.PageInfo.FirstFreeSlot + fieldSeperator + page.PageInfo.VersionNumber + fieldSeperator + page.PageInfo.Encryption + fieldSeperator + page.PageInfo.Compressed + fieldSeperator + page.PageInfo.ShapeNumber); foreach (IOptimizedPersistable pObj in page) { TypeVersion tv = pObj.GetTypeVersion(); if (!files.TryGetValue(tv.ShortId, out writer)) { Type type = tv.VelocityDbType.Type; string typeName = type == null ? "Unknown (not loaded)" : type.ToGenericTypeString(); string[] illegal = new string[] { "<", ">" }; foreach (var c in illegal) { typeName = typeName.Replace(c, string.Empty); } filePath = typeName + pObj.GetTypeVersion().ShortId + ".csv"; FileStream fStream = new FileStream(Path.Combine(directory, filePath), FileMode.Create); writer = new StreamWriter(fStream); files[pObj.GetTypeVersion().ShortId] = writer; List <DataMember> members = tv.GetDataMemberList(); byte[] bytes = Page.StringToByteArray($"IOptimizedPersistable.id{fieldSeperator}"); // special transient member fStream.Write(bytes, 0, bytes.Length); if (tv.IsString) { bytes = Page.StringToByteArray($"String"); fStream.Write(bytes, 0, bytes.Length); } else if (tv.IsISerializable) { bytes = Page.StringToByteArray($"IsISerializable"); fStream.Write(bytes, 0, bytes.Length); } else { int l = members.Count; for (int i = 0; i < l; i++) { if (i + 1 < l) { bytes = Page.StringToByteArray(members[i].FieldName + fieldSeperator); } else { bytes = Page.StringToByteArray(members[i].FieldName); } fStream.Write(bytes, 0, bytes.Length); } } //writer.Write("\"" + pObj.Shape.velocityDbType.type.AssemblyQualifiedName + "\""); writer.WriteLine(); } string aRow = tv.EncodeForCsv(pObj, page.PageInfo, session); writer.WriteLine(aRow); } } } } } } finally { foreach (StreamWriter s in files.Values) { #if WINDOWS_UWP s.Flush(); s.Dispose(); #else s.Close(); #endif } #if WINDOWS_UWP pageWriter?.Dispose(); dbWriter?.Dispose(); #else pageWriter?.Close(); dbWriter?.Close(); #endif } }
public TypeVersionViewModel(TypeVersion typeVersion, TreeViewItemViewModel parentDatabase, SchemasViewModel schemaViewModel) : base(parentDatabase, true) { _typeVersion = typeVersion; _schemaViewModel = schemaViewModel; }