| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(sort_key_buf), | intent(in), | target | :: | keys(:) |
the keys, primary first. |
|
| integer(kind=int64), | intent(in) | :: | nrows |
rows each key describes. |
||
| character(len=*), | intent(in) | :: | proc |
calling procedure, for messages. |
||
| integer(kind=int64), | intent(out), | allocatable | :: | perm(:) |
the 1-based permutation. |
|
| integer, | intent(in), | optional | :: | threads |
thread request; absent = auto. |
|
| integer(kind=int64), | intent(out), | optional, | allocatable | :: | group_offsets(:) |
group bounds. |
| integer, | intent(in), | optional | :: | group_ekeys |
ENGINE keys defining a group; absent = all. |
drive_engine, plus the group boundaries when group_offsets is asked for.
Absent group_offsets is exactly drive_engine, one-shot fast path and all. Present,
it routes through engine_build_runs instead, which always uses the builder -- so
asking for boundaries costs one extra copy of a single key. That is the documented
price of one entry point serving three operations rather than three of them.