/// <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(); }
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); }
/// <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)); } } }
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(); }
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 ListViewModel(IList list, FieldViewModel parentObject, Page page) : base(parentObject, true) { listAsString = OptimizedPersistable.ListToString(list, page); }
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> /// 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)); }
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); } }
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); }
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(); }