[Glass] Position method for BtreePlusReadStream classes

bruno buzzi brassesco smalltalk at adinet.com.uy
Mon Jun 8 13:11:26 PDT 2020


Which is the difference of your solution with the following ?
btreePlusReadStream := gsQuery reversedReadStream.
position := 1.
[btreePlusReadStream atEnd not and: [position < collectionSize]] 
whileTrue: [btreePlusReadStream next. position := position + 1].

What i want is to have a very large (a millon ?) GsQuery result set (in 
index order) and go to a position (K) without faulting into memory 
objects previous to the (K) position.


On 8/6/2020 16:18, Dale Henrichs via Glass wrote:
> Bruno,
> There is no backing collection for the BtreePlusReadStream, so being 
> able to go to a certain position is not possible without counting....
> We should be able to quickly produce a result set of the entire query 
> results, but it would be a set not an ordered collection:( And to get 
> results _in order_ the streaming API is the only solution... To get 
> the kind of performance that you would want, I would think that it 
> should be possible to create a primitive that would produce the result 
> set in the form of an Array (in order) instead of a Set.
> For now you would have to produce the Array yourself using:
>     | result |
>     result := {}.
>     gsQuery do: [:each | result add: each]
> #do: uses the BtreePlusReadStream api underneath covers, so the #do: 
> elements are processed in order ...
> Let me know if you you would need a primitive for performance and I 
> can submit a feature request ...
> Dale
> On 6/8/20 11:53 AM, smalltalk--- via Glass wrote:
>> Hi,
>> aRcIdentitySet has an index on 'each.modifiedTime' and it can have a 
>> lot of instances.
>> In order to get a list of sorted instances (by modifiedTime) i do:
>> |gsQuery|
>> gsQuery := GsQuery fromString: 'each.modifiedTime <= timeNow'.
>> gsQuery bind: 'timeNow' to: TimeStamp now.
>> gsQuery on: aRcIdentitySet .
>> Now i want to 'jump' to a given position in this stream...
>> It is possible to use some kind of #position: message in 
>> aBtreePlusReadStream ?
>> (position: does no exist in BtreePlusReadStream)
>> I could use #next to 'jump' to a given position, but the query can be 
>> very very large.
>> At the end it show a paging web page to a user that can click to get 
>> the next bunch of objects.
>> So i do not want to do #next over a large collection.
>> regards,
>> bruno
>> _______________________________________________
>> Glass mailing list
>> Glass at lists.gemtalksystems.com
>> https://lists.gemtalksystems.com/mailman/listinfo/glass
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> https://lists.gemtalksystems.com/mailman/listinfo/glass
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gemtalksystems.com/mailman/private/glass/attachments/20200608/015e6bed/attachment.htm>

More information about the Glass mailing list