protected override void LoadChildren() { IOptimizedPersistable parentObj = (IOptimizedPersistable)m_session.Open(m_parentId, false, null, false, 0, Int32.MaxValue); if (parentObj != null) { object memberObj = m_member.GetMemberValue(parentObj.WrappedObject); Array a = memberObj as Array; if (a != null) { Type elementType = a.GetType().GetElementType(); TypeCode tCode = elementType.GetTypeCode(); bool isValueType = elementType.GetTypeInfo().IsValueType; if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray) { base.Children.Add(new ArrayViewModelNoExpansions(a, this, m_isEncodedOidArray, parentObj.Page, m_session)); } else { int i = 0; foreach (object arrayObj in a) { if (arrayObj != null) { base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session)); } } } } else { IOptimizedPersistable p = memberObj as IOptimizedPersistable; if (p != null) { base.Children.Add(new ObjectViewModel(p, this, m_session)); } else if (m_member.WeakIOptimizedPersistableReference) { WeakIOptimizedPersistableReferenceBase weakRef = memberObj as VelocityDb.WeakIOptimizedPersistableReferenceBase; p = m_session.Open(weakRef.Id, false, null, false, 0, Int32.MaxValue); base.Children.Add(new ObjectViewModel(p, this, m_session)); } else { IList list = memberObj as IList; Type elementType = list.GetType(); if (elementType.IsGenericType) { elementType = elementType.GetGenericArguments()[0]; } else { elementType = elementType.GetElementType(); } TypeCode tCode = elementType.GetTypeCode(); bool isValueType = elementType.GetTypeInfo().IsValueType; if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray) { base.Children.Add(new ListViewModel(list, this, parentObj.Page)); } else { int i = 0; foreach (object arrayObj in list) { base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session)); } } } } } }
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); } }