Re: Need help with ScLookupCache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Luboš, Eike,

Op 21-06-2022 om 15:12 schreef Winfried Donkers:
Am I correct when stating that ScLookupCache currently cannot cope with the
combinations
  eOp SC_GREATER_EQUAL and sorted in ascending order
and
  eOp SC_LESSER_EQUAL and sorted in descending order?

As Luboš already said, ScLookupCache just caches results of lookups, to
be able to reuse them for same lookups with further columns. Using the
same for example SC_GREATER_EQUAL operator with different ascending or
descending sort orders should however invalidate the cache for that
position, so you'll probably also need to take the sort order into
account in ScLookupCache::QueryCriteria and ScLookupCache::QueryKey.

That could be accomplished without adding an extra field if the
ScLookupCache::QueryOp simply would have different values for
SC_GREATER_EQUAL ascending or descending, similar for SC_LESS_EQUAL; so
just add them and map accordingly in the
ScLookupCache::QueryCriteria::QueryCriteria() ctor. You'll probably need
to add some flag to ScQueryEntry anyway.

It is the function BinarySearch in sc/source/core/data/queryiter.cxx that presents 'challenges'. Currently its search direction (and probably whether the cells are ordered or not and in which direction) depends on rEntry.eOp. For MATCH, LOOKUP, HLOOKUP and VLOOKUP this is OK, for XLOOKUP this is quite different. XLOOKUP has 4 search modes (forwards and backwards (data not sorted) as well as ascending and descending (data sorted) and 4 match modes of which 3 are relevant here ( exact match (SC_EQUAL), exact or less (SC_LESS_EQUAL, exact or greater (SC_GREATER_EQUAL) and wildcard ( SC_EQUAL with wildcard/regexp enabled)). The search modes and match modes can be used in any combination.

Incorporating this in BinarySearch will be a lot of work and probably reduce performance for all other uses than XLOOKUP. I tend to make an XBinarySearch function that will be called from BinarySearch when an XLOOKUPIndicator is true. I hope to be able to use BinarySearch as foundation and expand it for XLOOKUP.

I wonder if this is a wise way to go or whether there are better alternative solutions?

Winfried



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux