Example #1
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);
                }
            }
        }
Example #2
0
 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));
                }
            }
        }
Example #4
0
 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 <>);
 }
Example #6
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);
     }
 }
Example #7
0
        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);
            }
        }
Example #8
0
        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);
        }
Example #9
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 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);
 }
Example #12
0
        /// <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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #13
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());
        }
Example #14
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());
        }
 public TypeVersionViewModelNoExpansion(TypeVersion typeVersion, TreeViewItemViewModel parentDatabase, SessionBase session)
     : base(parentDatabase, true)
 {
     _typeVersion = typeVersion;
     m_session    = session;
 }
Example #16
0
        /// <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!
        }
Example #19
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)
           {
             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();
 }
Example #20
0
 /// <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);
 }
Example #21
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;
   }
 }
Example #22
0
        /// <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));
        }
Example #23
0
 //-------------------------------------
 public CTypeVersion(TypeVersion typeVersion)
     : base(typeVersion)
 {
 }
Example #24
0
        /// <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
            }
        }
Example #25
0
 public TypeVersionViewModel(TypeVersion typeVersion, TreeViewItemViewModel parentDatabase, SchemasViewModel schemaViewModel)
     : base(parentDatabase, true)
 {
     _typeVersion     = typeVersion;
     _schemaViewModel = schemaViewModel;
 }