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
Best regards
Marek