If the sort criteria passed in an extended BASIC+ SELECT statement represent indexed fields, there is no need for the SELECT processor to execute an entire SELECT ... READNEXT ... READ loop in order to build a resolved list of keys. Instead, the list can be constructed directly from the Btree index.

The result of this condition is a latent index-based select. This is similar to a latent file-based select condition as established by a simple BASIC+ SELECT. However, it differs in that a latent index-based select can return keys in sorted order.

A latent index-based select condition is not a BFS-level function.  If an indexed field is passed as a sort criterion in a filing system SELECT call, SI.MFS traps the call. Other MFSs that follow SI.MFS, and the actual BFS, never receive the SELECT call.  SI.MFS returns a select mode of 2 in the RECORD argument (causing @LIST.ACTIVE to be set to 2), indicating an index-based select condition.

SI.MFS will then trap subsequent filing system READNEXT calls, providing blocks of keys out of the Btree index. Again, filing systems that follow SI.MFS will never receive this call, since it is trapped and fulfilled by SI.MFS.

  • No labels