# Test opts.MaxKeys.

# Put some test data.
run ok
with ts=1,0
  put      k=a v=val-a
  put      k=aa v=val-aa
  put      k=c v=val-c
  put      k=e v=val-e
  put      k=/row1/0 v=r1a
  put      k=/row1/1 v=r1b
  put      k=/row1/4 v=r1e # column family 2-3 omitted (e.g. if all NULLs)
  put      k=/row2   v=r2a
  put      k=/row3   v=r3a
  put      k=/row3/4 v=r3e # column family 1-3 omitted (e.g. if all NULLs)
del        k=aa ts=2,0
----
del: "aa": found key true
>> at end:
data: "a"/1.000000000,0 -> /BYTES/val-a
data: "aa"/2.000000000,0 -> /<empty>
data: "aa"/1.000000000,0 -> /BYTES/val-aa
data: "c"/1.000000000,0 -> /BYTES/val-c
data: "e"/1.000000000,0 -> /BYTES/val-e
data: /Table/1/1/"row1"/0/1.000000000,0 -> /BYTES/r1a
data: /Table/1/1/"row1"/1/1/1.000000000,0 -> /BYTES/r1b
data: /Table/1/1/"row1"/4/1/1.000000000,0 -> /BYTES/r1e
data: /Table/1/1/"row2"/0/1.000000000,0 -> /BYTES/r2a
data: /Table/1/1/"row3"/0/1.000000000,0 -> /BYTES/r3a
data: /Table/1/1/"row3"/4/1/1.000000000,0 -> /BYTES/r3e

# Limit 1 works.
run ok
with ts=300,0 k=a end=z max=1
  scan
  scan reverse=true
----
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: resume span ["aa","z") RESUME_KEY_LIMIT nextBytes=0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: resume span ["a","c\x00") RESUME_KEY_LIMIT nextBytes=0

# Limit -1 works: nothing is returned, go straight to resume span. We use this
# when executing the remaining scans in a batch after already exhausting the
# batch-wide allowable number of rows returned.
run ok
with ts=300,0 k=a end=z max=-1
  scan
  scan reverse=true
----
scan: resume span ["a","z") RESUME_KEY_LIMIT nextBytes=0
scan: "a"-"z" -> <no data>
scan: resume span ["a","z") RESUME_KEY_LIMIT nextBytes=0
scan: "a"-"z" -> <no data>

# Limit and tombstones: the tombstones count.
run ok
with ts=300,0 k=a end=z max=2 tombstones=true
  scan
----
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "aa" -> /<empty> @2.000000000,0
scan: resume span ["c","z") RESUME_KEY_LIMIT nextBytes=0

# Ditto in reverse.
run ok
with ts=300,0 k=a end=d max=2 tombstones=true reverse=true
  scan
----
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "aa" -> /<empty> @2.000000000,0
scan: resume span ["a","a\x00") RESUME_KEY_LIMIT nextBytes=0

# No limit = zero limit = infinity limit (zero is preferred).
run ok
with ts=300,0 k=a end=z
  scan
  scan reverse=true
  scan max=0
  scan reverse=true max=0
  scan max=99999
  scan reverse=true max=9999
----
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "a" -> /BYTES/val-a @1.000000000,0

# Regression test for #46652: Test appropriate termination when the MaxKeys-th
# key is in the intent history.

run ok
with t=A ts=11,0 max=3
  txn_begin
  txn_step  seq=10
  put       k=k  v=a
  put       k=l  v=a
  put       k=m  v=a
  put       k=n  v=a
  txn_step  seq=20
  put       k=k  v=b
  put       k=l  v=b
  put       k=m  v=b
  put       k=n  v=b
  txn_step  seq=30
  put       k=k  v=c
  put       k=l  v=c
  put       k=m  v=c
  put       k=n  v=c
  txn_step  seq=20
  scan      k=k end=o
  scan      k=k end=o reverse=true
----
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {l id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {m id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {n id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {l id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {m id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {n id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
put: lock acquisition = {l id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
put: lock acquisition = {m id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
put: lock acquisition = {n id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
scan: "k" -> /BYTES/b @11.000000000,0
scan: "l" -> /BYTES/b @11.000000000,0
scan: "m" -> /BYTES/b @11.000000000,0
scan: resume span ["n","o") RESUME_KEY_LIMIT nextBytes=0
scan: "n" -> /BYTES/b @11.000000000,0
scan: "m" -> /BYTES/b @11.000000000,0
scan: "l" -> /BYTES/b @11.000000000,0
scan: resume span ["k","k\x00") RESUME_KEY_LIMIT nextBytes=0
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20} lock=true stat=PENDING rts=11.000000000,0 wto=false gul=0,0
data: "a"/1.000000000,0 -> /BYTES/val-a
data: "aa"/2.000000000,0 -> /<empty>
data: "aa"/1.000000000,0 -> /BYTES/val-aa
data: "c"/1.000000000,0 -> /BYTES/val-c
data: "e"/1.000000000,0 -> /BYTES/val-e
meta: "k"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30} ts=11.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "k"/11.000000000,0 -> /BYTES/c
meta: "l"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30} ts=11.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "l"/11.000000000,0 -> /BYTES/c
meta: "m"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30} ts=11.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "m"/11.000000000,0 -> /BYTES/c
meta: "n"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30} ts=11.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "n"/11.000000000,0 -> /BYTES/c
data: /Table/1/1/"row1"/0/1.000000000,0 -> /BYTES/r1a
data: /Table/1/1/"row1"/1/1/1.000000000,0 -> /BYTES/r1b
data: /Table/1/1/"row1"/4/1/1.000000000,0 -> /BYTES/r1e
data: /Table/1/1/"row2"/0/1.000000000,0 -> /BYTES/r2a
data: /Table/1/1/"row3"/0/1.000000000,0 -> /BYTES/r3a
data: /Table/1/1/"row3"/4/1/1.000000000,0 -> /BYTES/r3e

run ok
with t=A ts=11,0 max=3
  txn_step  seq=30
  resolve_intent k=k status=COMMITTED
  resolve_intent k=l status=COMMITTED
  resolve_intent k=m status=COMMITTED
  resolve_intent k=n status=COMMITTED
----
resolve_intent: "k" -> resolved key = true
resolve_intent: "l" -> resolved key = true
resolve_intent: "m" -> resolved key = true
resolve_intent: "n" -> resolved key = true
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30} lock=true stat=PENDING rts=11.000000000,0 wto=false gul=0,0
data: "a"/1.000000000,0 -> /BYTES/val-a
data: "aa"/2.000000000,0 -> /<empty>
data: "aa"/1.000000000,0 -> /BYTES/val-aa
data: "c"/1.000000000,0 -> /BYTES/val-c
data: "e"/1.000000000,0 -> /BYTES/val-e
data: "k"/11.000000000,0 -> /BYTES/c
data: "l"/11.000000000,0 -> /BYTES/c
data: "m"/11.000000000,0 -> /BYTES/c
data: "n"/11.000000000,0 -> /BYTES/c
data: /Table/1/1/"row1"/0/1.000000000,0 -> /BYTES/r1a
data: /Table/1/1/"row1"/1/1/1.000000000,0 -> /BYTES/r1b
data: /Table/1/1/"row1"/4/1/1.000000000,0 -> /BYTES/r1e
data: /Table/1/1/"row2"/0/1.000000000,0 -> /BYTES/r2a
data: /Table/1/1/"row3"/0/1.000000000,0 -> /BYTES/r3a
data: /Table/1/1/"row3"/4/1/1.000000000,0 -> /BYTES/r3e

# Same case as above, except with a committed value at the key after MaxKeys.

run ok
with t=B ts=12,0 max=3
  txn_begin
  txn_step  seq=10
  put       k=k  v=a
  put       k=l  v=a
  put       k=m  v=a
  txn_step  seq=20
  put       k=k  v=b
  put       k=l  v=b
  put       k=m  v=b
  txn_step  seq=30
  put       k=k  v=c
  put       k=l  v=c
  put       k=m  v=c
  txn_step  seq=20
  scan      k=k end=o
----
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {l id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {m id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {l id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {m id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20 Replicated Intent []}
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30 Replicated Intent []}
put: lock acquisition = {l id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30 Replicated Intent []}
put: lock acquisition = {m id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30 Replicated Intent []}
scan: "k" -> /BYTES/b @12.000000000,0
scan: "l" -> /BYTES/b @12.000000000,0
scan: "m" -> /BYTES/b @12.000000000,0
scan: resume span ["n","o") RESUME_KEY_LIMIT nextBytes=0
>> at end:
txn: "B" meta={id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20} lock=true stat=PENDING rts=12.000000000,0 wto=false gul=0,0
data: "a"/1.000000000,0 -> /BYTES/val-a
data: "aa"/2.000000000,0 -> /<empty>
data: "aa"/1.000000000,0 -> /BYTES/val-aa
data: "c"/1.000000000,0 -> /BYTES/val-c
data: "e"/1.000000000,0 -> /BYTES/val-e
meta: "k"/0,0 -> txn={id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30} ts=12.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "k"/12.000000000,0 -> /BYTES/c
data: "k"/11.000000000,0 -> /BYTES/c
meta: "l"/0,0 -> txn={id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30} ts=12.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "l"/12.000000000,0 -> /BYTES/c
data: "l"/11.000000000,0 -> /BYTES/c
meta: "m"/0,0 -> txn={id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=30} ts=12.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "m"/12.000000000,0 -> /BYTES/c
data: "m"/11.000000000,0 -> /BYTES/c
data: "n"/11.000000000,0 -> /BYTES/c
data: /Table/1/1/"row1"/0/1.000000000,0 -> /BYTES/r1a
data: /Table/1/1/"row1"/1/1/1.000000000,0 -> /BYTES/r1b
data: /Table/1/1/"row1"/4/1/1.000000000,0 -> /BYTES/r1e
data: /Table/1/1/"row2"/0/1.000000000,0 -> /BYTES/r2a
data: /Table/1/1/"row3"/0/1.000000000,0 -> /BYTES/r3a
data: /Table/1/1/"row3"/4/1/1.000000000,0 -> /BYTES/r3e

# Whole SQL rows.
run ok
with ts=12,0
  scan k=/ end=/z max=2
  scan k=/ end=/z max=2 wholeRows=2 # we should not scan '/row1/4' key
  scan k=/ end=/z max=2 wholeRows
  scan k=/ end=/z max=2 wholeRows allowEmpty
----
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: resume span [/Table/1/1/"row1"/4/1,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: resume span [/Table/1/1/"row1"/4/1,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: resume span [/Table/1/1/"row2"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: resume span [/Table/1/1/"row1"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/""/0-/Table/1/1/"z"/0 -> <no data>

run ok
with ts=12,0
  scan k=/ end=/z max=1 wholeRows allowEmpty
  scan k=/ end=/z max=2 wholeRows allowEmpty
  scan k=/ end=/z max=3 wholeRows allowEmpty
  scan k=/ end=/z max=4 wholeRows allowEmpty
  scan k=/ end=/z max=5 wholeRows allowEmpty
  scan k=/ end=/z max=6 wholeRows allowEmpty
----
scan: resume span [/Table/1/1/"row1"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/""/0-/Table/1/1/"z"/0 -> <no data>
scan: resume span [/Table/1/1/"row1"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/""/0-/Table/1/1/"z"/0 -> <no data>
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: resume span [/Table/1/1/"row2"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: resume span [/Table/1/1/"row3"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: resume span [/Table/1/1/"row3"/0,/Table/1/1/"z"/0) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0

# Whole SQL rows in reverse.
run ok
with ts=12,0
  scan k=/ end=/z max=1 reverse
  scan k=/ end=/z max=1 reverse wholeRows=5
  scan k=/ end=/z max=1 reverse wholeRows allowEmpty
----
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row3"/0/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row2"/0/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row3"/4/1/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/""/0-/Table/1/1/"z"/0 -> <no data>

run ok
with ts=12,0
  scan k=/ end=/z max=1 reverse wholeRows allowEmpty
  scan k=/ end=/z max=2 reverse wholeRows allowEmpty
  scan k=/ end=/z max=3 reverse wholeRows allowEmpty
  scan k=/ end=/z max=4 reverse wholeRows allowEmpty
  scan k=/ end=/z max=5 reverse wholeRows allowEmpty
  scan k=/ end=/z max=6 reverse wholeRows allowEmpty
----
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row3"/4/1/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/""/0-/Table/1/1/"z"/0 -> <no data>
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row2"/0/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row1"/4/1/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row1"/4/1/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: resume span [/Table/1/1/""/0,/Table/1/1/"row1"/4/1/NULL) RESUME_KEY_LIMIT nextBytes=0
scan: /Table/1/1/"row3"/4/1 -> /BYTES/r3e @1.000000000,0
scan: /Table/1/1/"row3"/0 -> /BYTES/r3a @1.000000000,0
scan: /Table/1/1/"row2"/0 -> /BYTES/r2a @1.000000000,0
scan: /Table/1/1/"row1"/4/1 -> /BYTES/r1e @1.000000000,0
scan: /Table/1/1/"row1"/1/1 -> /BYTES/r1b @1.000000000,0
scan: /Table/1/1/"row1"/0 -> /BYTES/r1a @1.000000000,0

# WholeRows on non-SQL row data.
run ok
with ts=10,0
  scan k=a end=z max=3 wholeRows
----
scan: "a" -> /BYTES/val-a @1.000000000,0
scan: "c" -> /BYTES/val-c @1.000000000,0
scan: "e" -> /BYTES/val-e @1.000000000,0
