Beispiel #1
0
        /// <summary>
        /// Load assemblies and get exported persistable types
        /// from them.
        /// </summary>
        /// <param name="pClassesFilenames">Filenames of all assemblies to
        /// load.</param>
        /// <param name="pAssemblies">Loaded assemblies.</param>
        /// <param name="pTypes">Types found.</param>
        private static void GetAssembliesAndTypes(string[] pClassFilenames, string[] pDependencyFilenames, ref SchemaInfo pSchema)
        {
            // Creates a SchemaExtractor instance on a new domain. This is done
            // so that no assembly is loaded on process start, and at the end,
            // only needed assemblies are loaded.
            //Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
            AppDomain            lDomain = AppDomain.CreateDomain("User assemblies domain.");
            SchemaExtractor      lExtractor;
            OptimizedPersistable pObj = (OptimizedPersistable)lDomain.CreateInstanceFromAndUnwrap(typeof(OptimizedPersistable).Assembly.CodeBase, typeof(OptimizedPersistable).FullName);

            lExtractor = (SchemaExtractor)lDomain.CreateInstanceFromAndUnwrap(typeof(SchemaExtractor).Assembly.CodeBase, typeof(SchemaExtractor).FullName);
            // Load assemblies and types on the new domain.
            List <string> lTypeNames          = null;
            List <string> lAssemblyNames      = null;
            List <string> lActualDependencies = null;

            lExtractor.GetAssembliesAndTypesHelper(pClassFilenames, pDependencyFilenames, ref lAssemblyNames, ref lTypeNames, ref lActualDependencies);
            AppDomain.Unload(lDomain);

            // Load assemblies on this domain (to be able to access types).
            Assembly l;

            foreach (string lDep in lActualDependencies)
            {
                l = Assembly.LoadFrom(lDep);
            }

            // Obtain types from names and fill in schema.
            pSchema.PersistableTypes      = lTypeNames.Select(lTypeName => Type.GetType(lTypeName, true)).ToArray();
            pSchema.LoadedAssemblies      = lActualDependencies.ToArray();
            pSchema.LoadedAssembliesNames = lAssemblyNames.ToArray();
        }
Beispiel #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);
 }
 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);
 }
Beispiel #4
0
        /// <summary>
        /// Object details as a string
        /// </summary>
        /// <param name="pObj">The object extended</param>
        /// <param name="session">The session managing this object</param>
        /// <param name="skipArrays">Indicates if string should contain detailed array data.</param>
        ///<returns><see cref="string"/> containing all details of this object.</returns>
        static public string ToStringDetails(this OptimizedPersistable pObj, SessionBase session, bool skipArrays = true)
        {
            Schema schema = session.OpenSchema(false);

            if (pObj.WrappedObject == null)
            {
                return(pObj.ToString() + pObj.ToStringDetails(schema, pObj.Shape, skipArrays));
            }
            else
            {
                Array array = pObj.WrappedObject as Array;
                if (array != null)
                {
                    return(pObj.WrappedObject.ToString() + " (" + array.Length + ") " + Oid.AsString(pObj.Id) + pObj.ToStringDetails(schema, pObj.Shape, skipArrays));
                }
                else
                {
                    return(pObj.WrappedObject.ToString() + " " + Oid.AsString(pObj.Id) + pObj.ToStringDetails(schema, pObj.Shape, skipArrays));
                }
            }
        }
Beispiel #5
0
        public void SandeepGraph(bool useServerSession)
        {
            bool dirExist = Directory.Exists(systemDir);

            try
            {
                if (Directory.Exists(systemDir))
                {
                    Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases.
                }
                Directory.CreateDirectory(systemDir);
                File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb"));
            }
            catch
            {
                File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb"));
            }
            using (SessionBase session = useServerSession ? (SessionBase) new ServerClientSession(systemDir) : (SessionBase) new SessionNoServer(systemDir))
            {
                session.BeginUpdate();
                session.DefaultDatabaseLocation().CompressPages = PageInfo.compressionKind.None;
                Graph g = new Graph(session);
                session.Persist(g);

                // SCHEMA
                VertexType userType = g.NewVertexType("User");
                // Add a node type for the movies, with a unique identifier and two indexed Propertys
                VertexType   movieType                 = g.NewVertexType("MOVIE");
                PropertyType movieTitleType            = g.NewVertexProperty(movieType, "TITLE", DataType.String, PropertyKind.Indexed);
                PropertyType movieYearType             = g.NewVertexProperty(movieType, "YEAR", DataType.Integer, PropertyKind.Indexed);
                PropertyType objectPropertyType        = g.NewVertexProperty(movieType, "object", DataType.Object, PropertyKind.NotIndexed);
                PropertyType objectPropertyTypeIndexed = g.NewVertexProperty(movieType, "object2", DataType.IOptimizedPersistable, PropertyKind.Indexed);

                Vertex mVickyCB = movieType.NewVertex();
                mVickyCB.SetProperty(movieTitleType, "Vicky Cristina Barcelona");
                mVickyCB.SetProperty(movieYearType, (int)(2008));
                OptimizedPersistable pObj = new OptimizedPersistable();
                session.Persist(pObj);
                mVickyCB.SetProperty(objectPropertyType, pObj);
                pObj = new OptimizedPersistable();
                session.Persist(pObj);
                mVickyCB.SetProperty(objectPropertyTypeIndexed, pObj);
                Vertex mMatsCB = movieType.NewVertex();
                mMatsCB.SetProperty(movieTitleType, "Mats Cristina Barcelona");
                mMatsCB.SetProperty(movieYearType, (int)(2008));
                pObj = new OptimizedPersistable();
                session.Persist(pObj);
                mMatsCB.SetProperty(objectPropertyType, pObj);
                session.Commit();
                session.BeginUpdate();
                try
                {
                    mMatsCB.SetProperty(objectPropertyTypeIndexed, null);
                    throw new UnexpectedException();
                }
                catch (NullObjectException)
                {
                }
                mMatsCB.Remove();
                session.Commit();
                //session.Persist(g);
                //session.Commit();
            }

            using (SessionBase session = useServerSession ? (SessionBase) new ServerClientSession(systemDir) : (SessionBase) new SessionNoServer(systemDir))
            {
                session.BeginUpdate();
                Graph      g         = Graph.Open(session);
                VertexType movieType = g.FindVertexType("MOVIE");
                Assert.NotNull(movieType);
            }
            Task taskB = new Task(() => WatchUser());

            taskB.Start();
            Task taskA = new Task(() => CreateUser());

            taskA.Start();
            taskB.Wait();
            taskA.Wait();
        }
Beispiel #6
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));
 }
Beispiel #7
0
 public ListViewModel(IList list, FieldViewModel parentObject, Page page)
     : base(parentObject, true)
 {
     listAsString = OptimizedPersistable.ListToString(list, page);
 }
Beispiel #8
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());
        }
Beispiel #9
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));
        }
Beispiel #10
0
        static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                System.Console.WriteLine("ERROR, no boot path specified. Restart Verify and add bootup database path as a command line parameter");
                return(1);
            }
            int ct = 0;

            try
            {
                using (SessionNoServer session = new SessionNoServer(args[0]))
                {
                    DataCache.MaximumMemoryUse = 10000000000; // 10 GB, set this to what fits your case
                    session.BeginRead();
                    List <Database> dbList = session.OpenAllDatabases();
                    foreach (Database db in dbList)
                    {
                        foreach (Page page in db)
                        {
                            foreach (IOptimizedPersistable iPers in page)
                            {
                                object obj = iPers.GetWrappedObject();
                                ++ct;
                                if (iPers.GetWrappedObject() is IOptimizedPersistable)
                                {
                                    UInt64 id = iPers.Id;
                                    OptimizedPersistable pObj = iPers as OptimizedPersistable;
                                    if (pObj != null)
                                    {
                                        session.LoadFields(pObj);
                                        foreach (OptimizedPersistable fObj in pObj.OptimizedPersistableFieldValues())
                                        {
                                            session.LoadFields(fObj);
                                        }
                                        foreach (object value in pObj.GetFieldValues())
                                        {
                                            WeakIOptimizedPersistableReferenceBase weakRef = value as WeakIOptimizedPersistableReferenceBase;
                                            if (weakRef != null)
                                            {
                                                if (session.Open(weakRef.Id) == null)
                                                {
                                                    throw new UnexpectedException("WeakRefence object is null");
                                                }
                                            }
                                        }
                                    }
                                }
                                else if (obj is string)
                                {
                                    continue;
                                }
                                else if (obj is Array)
                                {
                                    continue;
                                }
                                IEnumerable anEnum = obj as IEnumerable;
                                if (anEnum != null)
                                {
                                    foreach (object o in anEnum)
                                    {
                                    }
                                }
                            }
                        }
                    }
                    session.Commit();
                }
                Console.WriteLine("OK, verfied " + ct + " objects");
                return(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine("FAILED, verfied " + ct + " objects");
                Console.WriteLine(ex.ToString());
                return(-1);
            }
        }
Beispiel #11
0
 public FieldViewModelNoExpansions(IOptimizedPersistable parentObj, DataMember member, ObjectViewModel parentView, SessionBase session)
     : base(parentView, true)
 {
     fieldAsString = OptimizedPersistable.ToStringDetails(member, parentObj.WrappedObject, parentObj, parentObj.Page, true);
 }
 public ArrayViewModel(Array a, FieldViewModel parentObject, bool isEncodedOidArray, Page page, SessionBase session)
     : base(parentObject, true)
 {
     arrayAsString = OptimizedPersistable.ArrayToString(a, isEncodedOidArray, page, "");
 }
 public SchemaListViewModel(IList list, TreeViewItemViewModel parentObject, Page page)
     : base(parentObject, true)
 {
     listAsString = OptimizedPersistable.ListToString(list, page);
 }
Beispiel #14
0
        public ActionResult Put([BindRequired, FromQuery] string path, [FromBody] TypePlusObj obj)
        {
            if (path == null)
            {
                return(BadRequest("path not set"));
            }

            try
            {
                var         pool      = GetSessionPool(path);
                int         sessionId = -1;
                SessionBase session   = null;
                try
                {
                    session = pool.GetSession(out sessionId);
                    if (session.InTransaction)
                    {
                        session.Abort();
                    }
                    session.BeginUpdate();
                    var id = Oid.IdFromString(obj.Id);
                    OptimizedPersistable pObj = null;
                    if (id != 0)
                    {
                        pObj = session.Open <OptimizedPersistable>(id);
                    }
                    string objAsString = obj.Obj.ToString();
                    var    pObj2       = JsonConvert.DeserializeObject(objAsString, obj.Type, _jsonSettings);
                    if (pObj != null)
                    {
                        pObj.Update();
                        UpdateFields(pObj, pObj2);
                        session.Commit();
                        return(Ok($"{obj.Id} updated"));
                    }
                    else if (pObj2 != null)
                    {
                        var pId = session.Persist(pObj2);
                        session.Commit();
                        return(Ok(new Oid(pId).ToString()));
                    }
                    session.Abort();
                    return(BadRequest($"Failed to deserialize json to object of type: {obj.Type}"));
                }
                catch (Exception ex)
                {
                    session.Abort();
                    return(BadRequest(ex.Message));
                }
                finally
                {
                    if (session != null)
                    {
                        pool.FreeSession(sessionId, session);
                    }
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
    public void SandeepGraph(bool useServerSession)
    {
      bool dirExist = Directory.Exists(systemDir);
      try
      {
        if (Directory.Exists(systemDir))
          Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases.
        Directory.CreateDirectory(systemDir);
        File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb"));
      }
      catch
      {
        File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb"));
      }
      using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir))
      {
        session.BeginUpdate();
        session.DefaultDatabaseLocation().CompressPages = PageInfo.compressionKind.None;
        Graph g = new Graph(session);
        session.Persist(g);

        // SCHEMA
        VertexType userType = g.NewVertexType("User");
        // Add a node type for the movies, with a unique identifier and two indexed Propertys
        VertexType movieType = g.NewVertexType("MOVIE");
        PropertyType movieTitleType = g.NewVertexProperty(movieType, "TITLE", DataType.String, PropertyKind.Indexed);
        PropertyType movieYearType = g.NewVertexProperty(movieType, "YEAR", DataType.Integer, PropertyKind.Indexed);
        PropertyType objectPropertyType = g.NewVertexProperty(movieType, "object", DataType.Object, PropertyKind.NotIndexed);
        PropertyType objectPropertyTypeIndexed = g.NewVertexProperty(movieType, "object2", DataType.IOptimizedPersistable, PropertyKind.Indexed);

        Vertex mVickyCB = movieType.NewVertex();
        mVickyCB.SetProperty(movieTitleType, "Vicky Cristina Barcelona");
        mVickyCB.SetProperty(movieYearType, (int)(2008));
        OptimizedPersistable pObj = new OptimizedPersistable();
        session.Persist(pObj);
        mVickyCB.SetProperty(objectPropertyType, pObj);
        pObj = new OptimizedPersistable();
        session.Persist(pObj);
        mVickyCB.SetProperty(objectPropertyTypeIndexed, pObj);
        Vertex mMatsCB = movieType.NewVertex();
        mMatsCB.SetProperty(movieTitleType, "Mats Cristina Barcelona");
        mMatsCB.SetProperty(movieYearType, (int)(2008));
        pObj = new OptimizedPersistable();
        session.Persist(pObj);
        mMatsCB.SetProperty(objectPropertyType, pObj);
        session.Commit();
        session.BeginUpdate();
        try
        {
          mMatsCB.SetProperty(objectPropertyTypeIndexed, null);
          throw new UnexpectedException();
        }
        catch (NullObjectException)
        {

        }
        mMatsCB.Remove();
        session.Commit();
        //session.Persist(g);
        //session.Commit();
      }

      using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir))
      {
        session.BeginUpdate();
        Graph g = Graph.Open(session);
        VertexType movieType = g.FindVertexType("MOVIE");
        Assert.NotNull(movieType);
      }
      Task taskB = new Task(() => WatchUser());
      taskB.Start();
      Task taskA = new Task(() => CreateUser());
      taskA.Start();
      taskB.Wait();
      taskA.Wait();
    }