<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Below is&nbsp;code that produces an error.&nbsp; 
You can add this method to OmniBase on the class side and run it.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>test21<BR>&nbsp;"test if btrees mark themselves 
dirty when they aren't persistent"<BR>&nbsp;| db col btree |<BR>&nbsp;^ [db _ 
OmniBase openOn: self testDir.<BR>&nbsp;[btree _ OmniBase newBTreeDictionary: 
5.<BR>&nbsp;btree at: 'test2' put: 'item2'.<BR>&nbsp;col _ OrderedCollection 
new.<BR>&nbsp;col add: btree.<BR>&nbsp;OmniBase root at: 'col' put: 
col.<BR>&nbsp;]<BR>&nbsp;&nbsp;evaluateAndCommitIn: db 
newTransaction.<BR>&nbsp;[btree _ (OmniBase root at: 'col') first. "Craps out 
here"<BR>&nbsp;btree at: 'test1' put: 
'item1'.<BR>&nbsp;]<BR>&nbsp;&nbsp;evaluateAndCommitIn: db 
newTransaction.<BR>&nbsp;[btree _ (OmniBase root at: 'col') 
first.<BR>&nbsp;((btree at: 'test1')<BR>&nbsp;&nbsp;&nbsp;= 'item1' and: [(btree 
at: 'test2') = 'item2'])<BR>&nbsp;&nbsp;ifFalse: [self error: 'Object was not 
stored']]<BR>&nbsp;&nbsp;evaluateIn: db newTransaction]<BR>&nbsp;&nbsp;ensure: 
[db close]</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Here's the stack trace:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>VM: Win32 - Squeak3.4 of 1 March 2003 [latest 
update: #5170]<BR>Image: Squeak3.5 [latest update: #5180]</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>ByteArray(Object)&gt;&gt;error:<BR>&nbsp;Receiver: 
a ByteArray(58 0 0 0 0)<BR>&nbsp;Arguments and temporary variables: 
<BR>&nbsp;&nbsp;aString: &nbsp;'Improper store into indexable 
object'<BR>&nbsp;Receiver's instance variables: <BR>a ByteArray(58 0 0 0 
0)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial 
size=2>ByteArray(Object)&gt;&gt;errorImproperStore<BR>&nbsp;Receiver: a 
ByteArray(58 0 0 0 0)<BR>&nbsp;Arguments and temporary variables: </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;Receiver's instance variables: <BR>a 
ByteArray(58 0 0 0 0)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial 
size=2>ByteArray(Object)&gt;&gt;basicAt:put:<BR>&nbsp;Receiver: a ByteArray(58 0 
0 0 0)<BR>&nbsp;Arguments and temporary variables: <BR>&nbsp;&nbsp;index: 
&nbsp;2<BR>&nbsp;&nbsp;value: &nbsp;-50<BR>&nbsp;Receiver's instance variables: 
<BR>a ByteArray(58 0 0 0 0)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>ByteArray class(Object 
class)&gt;&gt;odbLoadVariables:classInfo:<BR>&nbsp;Receiver: 
ByteArray<BR>&nbsp;Arguments and temporary variables: 
<BR>&nbsp;&nbsp;deserializer: &nbsp;an ODBDeserializer<BR>&nbsp;&nbsp;classInfo: 
&nbsp;an ODBClassDescription<BR>&nbsp;&nbsp;stream: &nbsp;an 
ODBMemoryReadStream<BR>&nbsp;&nbsp;order: &nbsp;nil<BR>&nbsp;&nbsp;iSize: 
&nbsp;nil<BR>&nbsp;&nbsp;object: &nbsp;a ByteArray(58 0 0 0 
0)<BR>&nbsp;&nbsp;basicSize: &nbsp;5<BR>&nbsp;&nbsp;varArray: 
&nbsp;nil<BR>&nbsp;&nbsp;i: &nbsp;2<BR>&nbsp;&nbsp;iLimiT: 
&nbsp;nil<BR>&nbsp;Receiver's instance variables: <BR>&nbsp;&nbsp;superclass: 
&nbsp;ArrayedCollection<BR>&nbsp;&nbsp;methodDict: &nbsp;a 
MethodDictionary(#asBtreeKeyOfSize:-&gt;a CompiledMethod (198) 
#asBy...etc...<BR>&nbsp;&nbsp;format: 
&nbsp;1026<BR>&nbsp;&nbsp;instanceVariables: 
&nbsp;nil<BR>&nbsp;&nbsp;organization: &nbsp;('accessing' atAllPut: byteAt: 
byteAt:put: byteSize bytesPerEleme...etc...<BR>&nbsp;&nbsp;subclasses: 
&nbsp;#(CompiledMethod CompiledApplescript ExternalAddress 
UUID)<BR>&nbsp;&nbsp;name: &nbsp;#ByteArray<BR>&nbsp;&nbsp;classPool: &nbsp;a 
Dictionary()<BR>&nbsp;&nbsp;sharedPools: &nbsp;nil<BR>&nbsp;&nbsp;environment: 
&nbsp;nil<BR>&nbsp;&nbsp;category: &nbsp;nil</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><BR>--- The full stack 
---<BR>ByteArray(Object)&gt;&gt;error:<BR>ByteArray(Object)&gt;&gt;errorImproperStore<BR>ByteArray(Object)&gt;&gt;basicAt:put:<BR>ByteArray 
class(Object class)&gt;&gt;odbLoadVariables:classInfo:<BR>&nbsp;- - - - - - - - 
- - - - - - - - - - - - - - - - - - - - - - - - 
-<BR>ODBDeserializer&gt;&gt;newObjectNewClass<BR>ODBNewObjectNewClass 
class&gt;&gt;odbDeserialize:<BR>ODBDeserializer&gt;&gt;nextObject<BR>Array 
class&gt;&gt;odbDeserialize:<BR>ODBDeserializer&gt;&gt;nextObject<BR>ODBSortedDictionary 
class(Object 
class)&gt;&gt;odbLoadVariables:classInfo:<BR>ODBDeserializer&gt;&gt;newObjectNewClass<BR>ODBNewObjectNewClass 
class&gt;&gt;odbDeserialize:<BR>ODBDeserializer&gt;&gt;nextObject<BR>ODBBTreeDictionary 
class(Object 
class)&gt;&gt;odbLoadVariables:classInfo:<BR>ODBDeserializer&gt;&gt;newObjectNewClass<BR>ODBNewObjectNewClass 
class&gt;&gt;odbDeserialize:<BR>ODBDeserializer&gt;&gt;nextObject<BR>[] in 
OrderedCollection 
class&gt;&gt;odbDeserialize:<BR>SmallInteger(Integer)&gt;&gt;timesRepeat:<BR>OrderedCollection 
class&gt;&gt;odbDeserialize:<BR>ODBDeserializer&gt;&gt;nextObject<BR>ODBDeserializer&gt;&gt;deserializeFrom:referenceManager:transaction:<BR>ODBSerializedDBObjectWithoutReferences&gt;&gt;makeTransactionObject:<BR>[] 
in 
ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>BlockContext&gt;&gt;ifCurtailed:<BR>[] 
in 
ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>BlockContext&gt;&gt;ensure:<BR>BlockContext&gt;&gt;valueUnpreemptively<BR>ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>ODBDemandLoader&gt;&gt;getObject<BR>ODBDemandLoader&gt;&gt;perform:withArguments:<BR>ODBReference&gt;&gt;doesNotUnderstand:<BR>[] 
in OmniBase class&gt;&gt;DoIt<BR>BlockContext&gt;&gt;ifCurtailed:<BR>[] in 
BlockContext&gt;&gt;evaluateAndCommitIn:<BR>BlockContext&gt;&gt;ensure:<BR>BlockContext&gt;&gt;evaluateAndCommitIn:<BR>[] 
in OmniBase class&gt;&gt;DoIt<BR>BlockContext&gt;&gt;ensure:<BR>OmniBase 
class&gt;&gt;DoIt<BR>Compiler&gt;&gt;evaluate:in:to:notifying:ifFail:<BR>[] in 
TextMorphEditor(ParagraphEditor)&gt;&gt;evaluateSelection<BR>BlockContext&gt;&gt;on:do:<BR>TextMorphEditor(ParagraphEditor)&gt;&gt;evaluateSelection<BR>TextMorphEditor(ParagraphEditor)&gt;&gt;doIt<BR>[] 
in 
TextMorphEditor(ParagraphEditor)&gt;&gt;doIt:<BR>TextMorphEditor(Controller)&gt;&gt;terminateAndInitializeAround:<BR>TextMorphEditor(ParagraphEditor)&gt;&gt;doIt:<BR>TextMorphEditor(ParagraphEditor)&gt;&gt;dispatchOnCharacter:with:<BR>TextMorphEditor&gt;&gt;dispatchOnCharacter:with:<BR>TextMorphEditor(ParagraphEditor)&gt;&gt;readKeyboard<BR>TextMorphEditor&gt;&gt;readKeyboard<BR>[] 
in 
TextMorphForEditView(TextMorph)&gt;&gt;keyStroke:<BR>TextMorphForEditView(TextMorph)&gt;&gt;handleInteraction:fromEvent:<BR>TextMorphForEditView&gt;&gt;handleInteraction:fromEvent:<BR>TextMorphForEditView(TextMorph)&gt;&gt;keyStroke:<BR>TextMorphForEditView&gt;&gt;keyStroke:<BR>TextMorphForEditView(TextMorph)&gt;&gt;handleKeystroke:<BR>KeyboardEvent&gt;&gt;sentTo:<BR>TextMorphForEditView(Morph)&gt;&gt;handleEvent:<BR>TextMorphForEditView(Morph)&gt;&gt;handleFocusEvent:<BR>-- 
and more not shown --</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Derek Brans<BR>Nerd on a Wire<BR>Web design that's 
anything but square<BR><A 
href="http://www.nerdonawire.com">http://www.nerdonawire.com</A> <BR>mailto: <A 
href="mailto:brans@nerdonawire.com">brans@nerdonawire.com</A><BR>phone: 
604.874.6463<BR>toll-free: 1-877-NERD-ON-A-WIRE</FONT></DIV></BODY></HTML>