[fpc-devel] TDataset.ClearBuffers change in svn revision 3138
Luiz Americo Pereira Camara
pascalive at bol.com.br
Thu Apr 6 01:48:49 CEST 2006
Joost van der Sluis escreveu:
> On Mon, 2006-04-03 at 21:29 -0300, Luiz Americo Pereira Camara wrote:
>
>> In revision 3138 TDataset.Clearbuffers call InternalInitRecord to empty
>> the ActiveBuffer. I have two comments:
>>
>
>
>> - In DoInsertAppend InternalInitRecord will be called twice: one through
>> ClearBuffers and other through InitRecord
>>
>
> Yes, but twice for very different records, and only if it's an append.
> That's because 'append' effectively does a 'last' and then 'insert'.
> That it's called for the insert is logical. For the 'last'-part, see
> below:
>
>
>> - ClearBuffers is called in First, Last, Resync: in this situations is
>> desired to clear the ActiveBuffer?
>>
>
> It is in the case of Resync. If a 'fuzzy resync' occurs that is most
> often because that the dataset is empty all of a sudden. For example if
> the last record is deleted. Or, for sqldb, if there are records added to
> a empty dataset, and cancelupdates is called.
> If InternalInitRecord isn't called then, you will still see the data of
> the latest record before the dataset became empty. If that record isn't
> cleared with InternalInitRecord, it will look like if there is still
> data. (although IsEmpty is true)
>
> So I've first added InternalInitRecord to Resync, but then I saw
> ClearBuffers and found it more logical to do it there. Since
> ClearBuffers clears the buffers if the dataset gets empty.
>
> Only I haven't thought about it that First and Last also calls it. On
> the other hand, if one does a 'first' and the dataset seems to be empty,
> the active record should be cleared. But I think you'll never encounter
> this problem, since the dataset most probably already was empty before
> the 'last' or 'first' calls...
>
> So, I think calling it in ClearBuffers is more logical, doing it in
> resync is somewhat better for performance?
>
I understood that the only place that it's necessary is inside Resync.
If so i am in favour of adding directly to it since won't hurt the
readability, the functionality or the code size since is only a line of
code. The performance will suffer mainly because of the call inside
InsertAppend (more or less depending of the TDataset implementation) .
Anyway i think we should keep TDataset as fast as possible.
Luiz
More information about the fpc-devel
mailing list