Re: SDataSet.removeRecord(SRecordInstance rinst)

damien hostin <[email protected]> Fri, 20 Feb 2009 11:49:51 +0100
Newsgroups gmane.comp.java.orm.simpleorm
Message-ID <[email protected]>
Hello,


SDataSet.removeRecord now call instance.setDirty(false), and it works fine.

I don't really see why it would be interesting to move removeRecord to 
SRecordInstance.
It would mean "The record removes himself from the dataSet" instead of
"We ask the dataset to remove a record".

Anyway I can commit the fix and let you check for where to put removeRecord.


Damien

[email protected] a écrit :
>
> Hello Damien,
>
> The checks "if records obtained from SDataSet.getDirtyRecords are not 
> null" should already be there, but please check the checks. Note that 
> DataSet.removeFromDirtyList set it to null.
>
> removeRecord should call instance.setDirty(false) which will remove it 
> from the cache and clear the updateListIndex (which should be 
> renamed). (Maybe removeRecord should be moved to 
> SRecordInstance.rawRemoveRecord, although all the other DataSet only 
> methods are on the DataSet. The comment should certainly refer to the 
> delete method.)
>
> Please check this in when done.
>
> Anthony
>
> At 11:54 PM 17/02/2009, you wrote:
>
> >I've just implemented the fix with setting null the removed record in
> >dirty list.
> >
> >The only thing it implies is to check if records obtained from
> >SDataSet.getDirtyRecords are not null before working with them.
> >
> >I also add a test in SDataSet.removeRecord to check consistence between
> >dirtyRecordList from SDataset and dirtyRecordsIndex from SRecordInstance.
> >
> >It seems to work better when encountering this case !
> >
> >I answer about the serialization in the other thread.
> >
> ><mailto:anthony%40berglas.org>[email protected] 
> <mailto:anthony%40berglas.org> a écrit :
> >>
> >> Hello Damien,
> >>
> >> Yes, I think that you have found a bug.
> >>
> >> It will only arise in practice if you actually call removeRecord.
> >> Normal operations such as Flush and Delete do not remove the records
> >> from the dirty list, and so will not trigger the bug.
> >>
> >> For now please just null the entry in dirtyRecords. Do not try to
> >> update the updateListIndex references. That is because Flush and
> >> Delete just null the entry, and the behavior should be consistent.
> >>
> >> (If ever you did want to actually dirtyRecords.remove the entry then
> >> it should be done consistently everywhere. That is a substantial job,
> >> and I think that the benefit, if any, would be minimal.)
> >>
> >> Please also rename updateListIndex to dirtyRecordsIndex to be
> >> consistent. (dirtyRecords used to be called updateList.)
> >>
> >> But first please also look at the exception that you received when you
> >> found the error. It should have been a clear, fail fast message about
> >> inconsistent data structures. If not, we may need another test. Also
> >> please add a failing test case before fixing the bug.
> >>
> >> Finally, please do try commenting out "implements Serializable" from
> >> SRecordMeta and SFieldMeta. If it does not break your application then
> >> we will remove them for good. I was always suspicious about them, and
> >> now I am pretty sure they are plain wrong.
> >>
> >> Thanks,
> >>
> >> Anthony
> >>
> >> At 08:27 PM 16/02/2009, you wrote:
> >>
> >> >Hello,
> >> >
> >> >I just find a bug in the method removeRecord from the SDataSet object.
> >> >It seems that each SRecordInstance in the dataset have a 
> updateListIndex
> >> >attribute. This attribute is used to quickly find the index in the 
> dirty
> >> >record list from a dataset. When removeRecord is used, the dirty 
> record
> >> >list shifts all elements from the deleted one to the end of the 
> list, so
> >> >that the deleted record is removed ! All the record 
> updateListIndex from
> >> >this point are no longer correct. They bind their old position in the
> >> >list, not the new.
> >> >
> >> >I don't know which way is better to avoid the bug, substract 1 
> from all
> >> >index that have been shifted or not remove the record but set the 
> array
> >> >entry to null ... ? Setting to null is quicker but may be the cause of
> >> >futur bugs. I could trust the unit test to validate the fix. I think
> >> >shifting the updateListIndex is more reliable even if it add more cpu
> >> work.
> >> >
> >> >--
> >> >HOSTIN Damien - Equipe R&D
> >> >Tel:+33(0)4 63 05 95 40
> >> >Société Axège
> >> >23 rue Saint Simon
> >> >63000 Clermont Ferrand
> >> >www.axege.com
> >> >
> >> >
> >>
> >> Dr Anthony Berglas, 
> <mailto:anthony%40berglas.org>[email protected] 
> <mailto:anthony%40berglas.org> <mailto:anthony%40berglas.org>
> >> Mobile: +61 4 4838 8874
> >> Just because it is possible to push twigs along the ground with 
> ones nose
> >> does not necessarily mean that is the best way to collect firewood.
> >>
> >>
> >>
> >> ----------------------------------------------------------
> >>
> >
> >--
> >HOSTIN Damien - Equipe R&D
> >Tel:+33(0)4 63 05 95 40
> >Société Axège
> >23 rue Saint Simon
> >63000 Clermont Ferrand
> >www.axege.com
> >
> >
>
> Dr Anthony Berglas, [email protected] <mailto:anthony%40berglas.org> 
> Mobile: +61 4 4838 8874
> Just because it is possible to push twigs along the ground with ones nose
> does not necessarily mean that is the best way to collect firewood.
>
> 


-- 
HOSTIN Damien - Equipe R&D
Tel:+33(0)4 63 05 95 40
Société Axège
23 rue Saint Simon
63000 Clermont Ferrand
www.axege.com




------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/SimpleORM/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/SimpleORM/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[email protected] 
    mailto:[email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/