I have found a bug dealing with class refactorings and read only database mode.
When I save a database, refactor saved class and open the database in read only mode and do a query, CachedIoAdapter.ValidateReadOnly throws an exception. Here is the stack trace:
v Db4objects.Db4o.IO.CachedIoAdapter.ValidateReadOnly() v Db4objects.Db4o.IO.CachedIoAdapter.Write(Byte[] buffer, Int32 length) v Db4objects.Db4o.Internal.IoAdaptedObjectContainer.WriteBytes(ByteArrayBuffer buffer, Int32 blockedAddress, Int32 addressOffset) v Db4objects.Db4o.Internal.StatefulBuffer.Write() v Db4objects.Db4o.Internal.LocalTransaction.WritePointer(Int32 id, Slot slot) v Db4objects.Db4o.Internal.LocalTransaction.WriteZeroPointer(Int32 id) v Db4objects.Db4o.Internal.LocalObjectContainer.GetPointerSlot() v Db4objects.Db4o.Internal.LocalObjectContainer.NewSlot(Int32 length) v Db4objects.Db4o.Internal.PersistentBase.Write(Transaction trans) v Db4objects.Db4o.Internal.Btree.BTree..ctor(Transaction trans, Int32 id, IIndexable4 keyHandler, Int32 treeNodeSize, Int32 treeCacheHeight) v Db4objects.Db4o.Internal.Btree.BTree..ctor(Transaction trans, Int32 id, IIndexable4 keyHandler) v Db4objects.Db4o.Internal.LocalObjectContainer.CreateBTreeClassIndex(Int32 id) v Db4objects.Db4o.Internal.Classindex.BTreeClassIndexStrategy.CreateBTreeIndex(ObjectContainerBase stream, Int32 btreeID) v Db4objects.Db4o.Internal.Classindex.BTreeClassIndexStrategy.Initialize(ObjectContainerBase stream) v Db4objects.Db4o.Internal.ClassMetadata.Init(ObjectContainerBase a_stream, ClassMetadata a_ancestor, IReflectClass claxx) v Db4objects.Db4o.Internal.PartialObjectContainer.CreateClassMetadata(ClassMetadata classMeta, IReflectClass clazz, ClassMetadata superClassMeta) v Db4objects.Db4o.Internal.ClassMetadataRepository.CreateClassMetadata(ClassMetadata clazz, IReflectClass reflectClazz) v Db4objects.Db4o.Internal.ClassMetadataRepository.ProduceClassMetadata(IReflectClass reflectClazz) v Db4objects.Db4o.Internal.PartialObjectContainer.FieldHandlerForClass(IReflectClass claxx) v Db4objects.Db4o.Internal.ClassMetadata.CollectReflectFields(ObjectContainerBase container, Collection4 collectedFields) v Db4objects.Db4o.Internal.ClassMetadata.AddMembers(ObjectContainerBase container) v Db4objects.Db4o.Internal.ClassMetadata.CheckChanges() v Db4objects.Db4o.Internal.ClassMetadataRepository.ReadClassMetadata(ClassMetadata classMetadata, IReflectClass clazz) v Db4objects.Db4o.Internal.ClassMetadataRepository.GetClassMetadata(Int32 id) v Db4objects.Db4o.Internal.PartialObjectContainer.ClassMetadataForId(Int32 id) v Db4objects.Db4o.Internal.PartialObjectContainer.FieldHandlerForId(Int32 id) v Db4objects.Db4o.Internal.FieldMetadata.LoadHandlerById(ObjectContainerBase container) v Db4objects.Db4o.Internal.Marshall.FieldMarshaller0.FromSpec(RawFieldSpec spec, ObjectContainerBase stream, FieldMetadata field) v Db4objects.Db4o.Internal.Marshall.FieldMarshaller1.FromSpec(RawFieldSpec spec, ObjectContainerBase stream, FieldMetadata field) v Db4objects.Db4o.Internal.Marshall.FieldMarshaller0.Read(ObjectContainerBase stream, FieldMetadata field, ByteArrayBuffer reader) v Db4objects.Db4o.Internal.Marshall.ClassMarshaller.ReadFields(ObjectContainerBase stream, ByteArrayBuffer reader, FieldMetadata[] fields) v Db4objects.Db4o.Internal.Marshall.ClassMarshaller.Read(ObjectContainerBase stream, ClassMetadata clazz, ByteArrayBuffer reader) v Db4objects.Db4o.Internal.ClassMetadata.ForceRead() v Db4objects.Db4o.Internal.ClassMetadata.ReadThis() v Db4objects.Db4o.Internal.ClassMetadataRepository.ReadClassMetadata(ClassMetadata classMetadata, IReflectClass clazz) v Db4objects.Db4o.Internal.ClassMetadataIterator.Map(Object current) v Db4objects.Db4o.Foundation.MappingIterator.MoveNext() v Db4objects.Db4o.Internal.ClassMetadataRepository.ForInterface(IReflectClass claxx) v Db4objects.Db4o.Internal.Query.Processor.QQueryBase.AddInterfaceConstraint(IReflectClass claxx) v Db4objects.Db4o.Internal.Query.Processor.QQueryBase.AddClassConstraint(IReflectClass claxx) v Db4objects.Db4o.Internal.Query.Processor.QQueryBase.Constrain(Object example) v Db4objects.Db4o.Internal.PartialObjectContainer.Query[ElementType](Transaction trans, Type extent, IComparer`1 comparer) v Db4objects.Db4o.Internal.PartialObjectContainer.Query[ElementType](Type extent) v Db4objects.Db4o.Internal.PartialObjectContainer.Query[Extent]() v Astra92.Db4o.Db4oDocumentFactory.DoOpen(String filePath, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Db4o\Db4oDocumentFactory.cs:řádek 61 v Astra92.Db4o.WPF.Db4oOpcDocumentFactory.OpenDocument(Package package, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Db4o.WPF\Db4oOpcDocumentFactory.cs:řádek 163 v Astra92.Db4o.WPF.Db4oOpcDocumentFactory.DoOpen(String filePath, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Db4o.WPF\Db4oOpcDocumentFactory.cs:řádek 69 v Astra92.Collections.FileDocumentFactory.DoOpenIt(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\FileDocumentFactory.cs:řádek 131 v Astra92.Collections.DocumentFactory.DoOpen(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\DocumentFactory.cs:řádek 621 v Astra92.Collections.DocumentFactory.Open(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\DocumentFactory.cs:řádek 335 v Astra92.Collections.DocumentFactory.Open(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\DocumentFactory.cs:řádek 333 v Astra92.Collections.DocumentFactory.Open(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\DocumentFactory.cs:řádek 333 v Astra92.Collections.DocumentFactory.Open(Uri uri, Boolean& readOnly) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\DocumentFactory.cs:řádek 333 v Astra92.Collections.Documents.Open(Boolean readOnly, IList`1 uris) v D:\Data\Code\Current\Astra92.Libraries.OpenSource\Astra92.Collections\Documents.cs:řádek 456