Micha Nelissen wrote:
On Sat, 01 Apr 2006 18:33:10 -0300
Luiz Americo Pereira Camara <[EMAIL PROTECTED]> wrote:

And what about recno? Just define it as -1, or do a quick count to get
the current record number?
Take a look at TCustomSqliteDataset implementation. In its implementation a count is done each time.
Store the recno with/in the linked list entry ?

It has two drawbacks: increase memory usage and when inserting, deleting all following records must be updated.

An array of records has the same problem, no ? So these are not drawbacks
IMHO.

I think, when using an array, the RecNo is implicit from the position in the 
array.


Implementing the RecordCount property is not so much a problem (using 
increments/decrements on changes), but updating RecNo's can be troublesome I 
think.

I can imagine it is possible to store some kind of relative RecNo's with only a 
sparse subset of the record in a smart way, allowing O(log N) times for 
inserting/deleting records and O(log N) time for getting RecNo's. I do not know 
whether this is indeed possible, and the implementation would not be easy I 
think.

Another option is to update the RecNo's only when requested, i.e.:
- each record stores a record number
- when inserting/deleting, all RecNo's from that record on are marked as 
'dirty' (this needs only storage of a LowestDirtyRecNoIndex)
- when requesting the RecNo of an item with 'dirty' stored RecNo, one could 
recalculate the RecNo's of record LowestDirtyRecNoIndex until the record whose 
RecNo is requested at that time

To prevent the memory overhead of storing RecNo's, it is even possible to only 
allocate the RecNo storage space only when some RecNo is retrieved for the 
first time. This allows people to save memory by never using RecNo, but still 
use RecNo if they really need.

Of course, using Bookmarks is a very good substitute for RecNo's! And if one 
wants to enumerate the records, one can still do so by keeping a private 
counter while traversing the dataset with calls to Next. (In one of my 
applications I even have an array of Bookmarks -- I think I overlooked the 
RecNo property, which would take away the necessity of using such an array, if 
I'm understanding things correctly).


Regards,

Bram Kuijvenhoven
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to