Hi, I was toying around with the last beta version of magma in order to have all my tests green. And I think I found a bug in MagmaCollectionReader : if you add an element in a MagmaCollection without commit, sending the size message to the collection will count this non-committed element. But if you send the size message to a MagmaCollectionReader, it will not. Or it's a feature ?
Here is the code of the test :
session begin session root news add: un. session root news add: deux. session commitAndBegin.
coll := (session root news read: #id descending: false). self assert: (coll size = coll collection asArray size). '=> assertion ok' "add without commit" session root add: trois inCollection: #news.
coll := (session root news read: #id descending: false). self assert: (coll size = coll collection asArray size). '=> assertion fails'
Florian
Hi Florian,
Man oh man, you reported this just in time. I had just posted gamma1 thinking it was totally clean and then you go and dig up this corner case, thank you!
The case occurs when the non-persistent addition is the highest key and accessed from a sorted reader. I have just posted r40Gamma2 which fixes this.
The code you provided me helped a lot, but it still was a game of interpretation. Please, in the future, the easiest way for us to have clarity is with a mutual script we can both run verbatim. Here is what I came up with based on your description:
| s reader path| path := 'c:\temp\florianBug1'. MagmaRepositoryController create: path root: (MagmaCollection new addIndex: (MaIntegerIndex attribute: #key) ; yourself). s := MagmaSession openLocal: path. s connectAs: 'test'. s inspect. s begin. {1. 2} do: [ : n | s root add: n->n printString ]. s commitAndBegin. reader := s root read: #key descending: false. s root add: 3->'three'. self assert: reader size = reader collection asArray size
This was not hard to write at all, and so I would like to request everyone please, if possible, submit bug reports in terms of a reproducible script isolated only within the context of Magma that we can all work directly from. I realize this may not always be possible but, when it is, it is easier. Juan had even gone further and sent me a Monticello package with classes. This provided a very common basis for our communication. Thanks for your understanding.
Regards, Chris
On 8/20/07, Florian Minjat florian.minjat@gmail.com wrote:
Hi, I was toying around with the last beta version of magma in order to have all my tests green. And I think I found a bug in MagmaCollectionReader : if you add an element in a MagmaCollection without commit, sending the size message to the collection will count this non-committed element. But if you send the size message to a MagmaCollectionReader, it will not. Or it's a feature ?
Here is the code of the test :
session begin session root news add: un. session root news add: deux. session commitAndBegin. coll := (session root news read: #id descending: false). self assert: (coll size = coll collection asArray size). '=>
assertion ok'
"add without commit" session root add: trois inCollection: #news. coll := (session root news read: #id descending: false). self assert: (coll size = coll collection asArray size). '=>
assertion fails'
Florian _______________________________________________ Magma mailing list Magma@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/magma
magma@lists.squeakfoundation.org