github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/internal/keyspan/testdata/interleaving_iter (about) 1 define-rangekeys 2 a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 3 c-d:{(#4,RANGEKEYSET,@3,coconut)} 4 e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)} 5 h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)} 6 l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)} 7 q-z:{(#14,RANGEKEYSET,@9,mangos)} 8 ---- 9 OK 10 11 define-pointkeys 12 artichoke.SET.10 13 artichoke.SET.8 14 carrot.SET.13 15 cauliflower.DEL.9 16 parsnip.SET.3 17 tomato.SET.2 18 zucchini.MERGE.12 19 ---- 20 OK 21 22 iter 23 first 24 next 25 next 26 next 27 next 28 next 29 next 30 next 31 next 32 next 33 next 34 next 35 ---- 36 -- SpanChanged(nil) 37 -- SpanChanged(a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 38 PointKey: a#72057594037927935,21 39 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 40 - 41 PointKey: artichoke#10,1 42 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 43 - 44 PointKey: artichoke#8,1 45 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 46 - 47 -- SpanChanged(c-d:{(#4,RANGEKEYSET,@3,coconut)}) 48 PointKey: c#72057594037927935,21 49 Span: c-d:{(#4,RANGEKEYSET,@3,coconut)} 50 - 51 PointKey: carrot#13,1 52 Span: c-d:{(#4,RANGEKEYSET,@3,coconut)} 53 - 54 PointKey: cauliflower#9,0 55 Span: c-d:{(#4,RANGEKEYSET,@3,coconut)} 56 - 57 -- SpanChanged(e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)}) 58 PointKey: e#72057594037927935,21 59 Span: e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)} 60 - 61 -- SpanChanged(h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)}) 62 PointKey: h#72057594037927935,19 63 Span: h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)} 64 - 65 -- SpanChanged(l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)}) 66 PointKey: l#72057594037927935,20 67 Span: l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)} 68 - 69 -- SpanChanged(nil) 70 PointKey: parsnip#3,1 71 Span: <invalid> 72 - 73 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 74 PointKey: q#72057594037927935,21 75 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 76 - 77 PointKey: tomato#2,1 78 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 79 - 80 81 # Test set-bounds passes through to the underlying point iterator and truncates 82 # a range key's end. 83 84 iter 85 set-bounds b carrot 86 seek-ge b 87 next 88 next 89 ---- 90 -- SpanChanged(nil) 91 -- SpanChanged(b-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 92 PointKey: b#72057594037927935,21 93 Span: b-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 94 - 95 -- SpanChanged(c-carrot:{(#4,RANGEKEYSET,@3,coconut)}) 96 PointKey: c#72057594037927935,21 97 Span: c-carrot:{(#4,RANGEKEYSET,@3,coconut)} 98 - 99 -- SpanChanged(nil) 100 . 101 102 103 # Test set-bounds passes through to the underlying point iterator and truncates 104 # a range key's start. 105 106 iter 107 set-bounds b carrot 108 seek-lt carrot 109 prev 110 prev 111 ---- 112 -- SpanChanged(nil) 113 -- SpanChanged(c-carrot:{(#4,RANGEKEYSET,@3,coconut)}) 114 PointKey: c#72057594037927935,21 115 Span: c-carrot:{(#4,RANGEKEYSET,@3,coconut)} 116 - 117 -- SpanChanged(b-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 118 PointKey: b#72057594037927935,21 119 Span: b-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 120 - 121 -- SpanChanged(nil) 122 . 123 124 # Test seek-ge. 125 # NB: The `seek-ge yyy` case demonstrates truncation to the search key. 126 127 iter 128 first 129 seek-ge a 130 seek-ge p 131 seek-ge yyy 132 seek-ge z 133 ---- 134 -- SpanChanged(nil) 135 -- SpanChanged(a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 136 PointKey: a#72057594037927935,21 137 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 138 - 139 -- SpanChanged(nil) 140 -- SpanChanged(a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 141 PointKey: a#72057594037927935,21 142 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 143 - 144 -- SpanChanged(nil) 145 -- SpanChanged(nil) 146 PointKey: parsnip#3,1 147 Span: <invalid> 148 - 149 -- SpanChanged(nil) 150 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 151 PointKey: yyy#72057594037927935,21 152 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 153 - 154 -- SpanChanged(nil) 155 -- SpanChanged(nil) 156 PointKey: zucchini#12,2 157 Span: <invalid> 158 - 159 160 iter 161 last 162 prev 163 prev 164 prev 165 prev 166 next 167 next 168 next 169 next 170 ---- 171 -- SpanChanged(nil) 172 -- SpanChanged(nil) 173 PointKey: zucchini#12,2 174 Span: <invalid> 175 - 176 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 177 PointKey: tomato#2,1 178 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 179 - 180 PointKey: q#72057594037927935,21 181 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 182 - 183 -- SpanChanged(nil) 184 PointKey: parsnip#3,1 185 Span: <invalid> 186 - 187 -- SpanChanged(l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)}) 188 PointKey: l#72057594037927935,20 189 Span: l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)} 190 - 191 -- SpanChanged(nil) 192 -- SpanChanged(nil) 193 PointKey: parsnip#3,1 194 Span: <invalid> 195 - 196 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 197 PointKey: q#72057594037927935,21 198 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 199 - 200 PointKey: tomato#2,1 201 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 202 - 203 -- SpanChanged(nil) 204 PointKey: zucchini#12,2 205 Span: <invalid> 206 - 207 208 iter 209 seek-ge tomato 210 next 211 seek-ge q 212 seek-ge parsnip 213 next 214 ---- 215 -- SpanChanged(nil) 216 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 217 PointKey: tomato#72057594037927935,21 218 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 219 - 220 PointKey: tomato#2,1 221 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 222 - 223 -- SpanChanged(nil) 224 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 225 PointKey: q#72057594037927935,21 226 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 227 - 228 -- SpanChanged(nil) 229 -- SpanChanged(nil) 230 PointKey: parsnip#3,1 231 Span: <invalid> 232 - 233 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 234 PointKey: q#72057594037927935,21 235 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 236 - 237 238 iter 239 seek-lt tomato 240 prev 241 seek-lt a 242 seek-lt tomato 243 seek-lt tomago 244 ---- 245 -- SpanChanged(nil) 246 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 247 PointKey: q#72057594037927935,21 248 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 249 - 250 -- SpanChanged(nil) 251 PointKey: parsnip#3,1 252 Span: <invalid> 253 - 254 -- SpanChanged(nil) 255 -- SpanChanged(nil) 256 . 257 -- SpanChanged(nil) 258 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 259 PointKey: q#72057594037927935,21 260 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 261 - 262 -- SpanChanged(nil) 263 -- SpanChanged(q-z:{(#14,RANGEKEYSET,@9,mangos)}) 264 PointKey: q#72057594037927935,21 265 Span: q-z:{(#14,RANGEKEYSET,@9,mangos)} 266 - 267 268 define-rangekeys 269 a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 270 c-d:{(#4,RANGEKEYSET,@3,coconut)} 271 e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)} 272 h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)} 273 l-m:{(#2,RANGEKEYUNSET,@9) (#2,RANGEKEYUNSET,@5)} 274 q-z:{(#14,RANGEKEYSET,@9,mangos)} 275 ---- 276 OK 277 278 define-pointkeys 279 a.SET.10 280 a.SET.8 281 b.SET.13 282 c.DEL.9 283 d.SET.3 284 e.SET.2 285 ---- 286 OK 287 288 iter 289 seek-ge a 290 next 291 next 292 next 293 ---- 294 -- SpanChanged(nil) 295 -- SpanChanged(a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 296 PointKey: a#72057594037927935,21 297 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 298 - 299 PointKey: a#10,1 300 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 301 - 302 PointKey: a#8,1 303 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 304 - 305 PointKey: b#13,1 306 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 307 - 308 309 iter 310 seek-lt a 311 ---- 312 -- SpanChanged(nil) 313 -- SpanChanged(nil) 314 . 315 316 iter 317 seek-ge ab 318 next 319 next 320 next 321 next 322 next 323 next 324 next 325 ---- 326 -- SpanChanged(nil) 327 -- SpanChanged(a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)}) 328 PointKey: ab#72057594037927935,21 329 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 330 - 331 PointKey: b#13,1 332 Span: a-c:{(#10,RANGEKEYSET,@5,apples) (#10,RANGEKEYDEL) (#8,RANGEKEYUNSET,@1) (#4,RANGEKEYSET,@3,bananas) (#4,RANGEKEYSET,@2,oranges)} 333 - 334 -- SpanChanged(c-d:{(#4,RANGEKEYSET,@3,coconut)}) 335 PointKey: c#72057594037927935,21 336 Span: c-d:{(#4,RANGEKEYSET,@3,coconut)} 337 - 338 PointKey: c#9,0 339 Span: c-d:{(#4,RANGEKEYSET,@3,coconut)} 340 - 341 -- SpanChanged(nil) 342 PointKey: d#3,1 343 Span: <invalid> 344 - 345 -- SpanChanged(e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)}) 346 PointKey: e#72057594037927935,21 347 Span: e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)} 348 - 349 PointKey: e#2,1 350 Span: e-f:{(#20,RANGEKEYSET,@5,pineapple) (#20,RANGEKEYSET,@3,guava)} 351 - 352 -- SpanChanged(h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)}) 353 PointKey: h#72057594037927935,19 354 Span: h-j:{(#22,RANGEKEYDEL) (#21,RANGEKEYSET,@5,peaches) (#21,RANGEKEYSET,@3,starfruit)} 355 - 356 357 define-rangekeys 358 a-z:{(#5,RANGEKEYSET,@5,apples)} 359 ---- 360 OK 361 362 define-pointkeys 363 a.SET.10 364 a.SET.8 365 b.SET.13 366 c.DEL.9 367 d.SET.3 368 e.SET.2 369 ---- 370 OK 371 372 iter 373 first 374 next 375 next 376 next 377 next 378 next 379 ---- 380 -- SpanChanged(nil) 381 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 382 PointKey: a#72057594037927935,21 383 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 384 - 385 PointKey: a#10,1 386 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 387 - 388 PointKey: a#8,1 389 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 390 - 391 PointKey: b#13,1 392 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 393 - 394 PointKey: c#9,0 395 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 396 - 397 PointKey: d#3,1 398 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 399 - 400 401 # Switch to reverse within a range key. 402 # NB: The seek-ge b should truncate the range key a-z to b. 403 404 iter 405 seek-ge b 406 prev 407 ---- 408 -- SpanChanged(nil) 409 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 410 PointKey: b#72057594037927935,21 411 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 412 - 413 -- SpanChanged(nil) 414 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 415 PointKey: a#8,1 416 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 417 - 418 419 # Switch to reverse after a seek-ge. Reverse iteration should not revisit the 420 # interleaved range-key start at the seek-ge bound: The range-key start should 421 # be interleaved at its true start key. 422 423 iter 424 seek-ge b 425 next 426 prev 427 prev 428 prev 429 ---- 430 -- SpanChanged(nil) 431 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 432 PointKey: b#72057594037927935,21 433 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 434 - 435 PointKey: b#13,1 436 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 437 - 438 -- SpanChanged(nil) 439 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 440 PointKey: a#8,1 441 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 442 - 443 PointKey: a#10,1 444 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 445 - 446 PointKey: a#72057594037927935,21 447 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 448 - 449 450 # Switch to forward iteration after a seek-lt. 451 452 iter 453 seek-lt c 454 next 455 ---- 456 -- SpanChanged(nil) 457 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 458 PointKey: b#13,1 459 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 460 - 461 -- SpanChanged(nil) 462 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 463 PointKey: c#9,0 464 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 465 - 466 467 iter 468 seek-lt c 469 prev 470 next 471 ---- 472 -- SpanChanged(nil) 473 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 474 PointKey: b#13,1 475 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 476 - 477 PointKey: a#8,1 478 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 479 - 480 -- SpanChanged(nil) 481 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@5,apples)}) 482 PointKey: b#13,1 483 Span: a-z:{(#5,RANGEKEYSET,@5,apples)} 484 - 485 486 # Test sparse range keys. 487 488 define-rangekeys 489 ace-bat:{(#5,RANGEKEYSET,@5,v5)} 490 x-z:{(#6,RANGEKEYSET,@6,v5)} 491 ---- 492 OK 493 494 define-pointkeys 495 a.SET.9 496 b.SET.13 497 c.DEL.9 498 d.SET.18 499 m.SET.4 500 o.MERGE.3 501 r.SET.22 502 y.SET.3 503 z.SET.3 504 ---- 505 OK 506 507 iter 508 first 509 next 510 next 511 prev 512 next 513 next 514 ---- 515 -- SpanChanged(nil) 516 -- SpanChanged(nil) 517 PointKey: a#9,1 518 Span: <invalid> 519 - 520 -- SpanChanged(ace-bat:{(#5,RANGEKEYSET,@5,v5)}) 521 PointKey: ace#72057594037927935,21 522 Span: ace-bat:{(#5,RANGEKEYSET,@5,v5)} 523 - 524 PointKey: b#13,1 525 Span: ace-bat:{(#5,RANGEKEYSET,@5,v5)} 526 - 527 -- SpanChanged(nil) 528 -- SpanChanged(ace-bat:{(#5,RANGEKEYSET,@5,v5)}) 529 PointKey: ace#72057594037927935,21 530 Span: ace-bat:{(#5,RANGEKEYSET,@5,v5)} 531 - 532 -- SpanChanged(nil) 533 -- SpanChanged(ace-bat:{(#5,RANGEKEYSET,@5,v5)}) 534 PointKey: b#13,1 535 Span: ace-bat:{(#5,RANGEKEYSET,@5,v5)} 536 - 537 -- SpanChanged(nil) 538 PointKey: c#9,0 539 Span: <invalid> 540 - 541 542 iter 543 seek-lt ace 544 seek-lt zoo 545 ---- 546 -- SpanChanged(nil) 547 -- SpanChanged(nil) 548 PointKey: a#9,1 549 Span: <invalid> 550 - 551 -- SpanChanged(nil) 552 -- SpanChanged(nil) 553 PointKey: z#3,1 554 Span: <invalid> 555 - 556 557 iter 558 last 559 prev 560 next 561 next 562 ---- 563 -- SpanChanged(nil) 564 -- SpanChanged(nil) 565 PointKey: z#3,1 566 Span: <invalid> 567 - 568 -- SpanChanged(x-z:{(#6,RANGEKEYSET,@6,v5)}) 569 PointKey: y#3,1 570 Span: x-z:{(#6,RANGEKEYSET,@6,v5)} 571 - 572 -- SpanChanged(nil) 573 -- SpanChanged(nil) 574 PointKey: z#3,1 575 Span: <invalid> 576 - 577 -- SpanChanged(nil) 578 . 579 580 iter 581 seek-lt m 582 next 583 seek-ge m 584 prev 585 ---- 586 -- SpanChanged(nil) 587 -- SpanChanged(nil) 588 PointKey: d#18,1 589 Span: <invalid> 590 - 591 -- SpanChanged(nil) 592 -- SpanChanged(nil) 593 PointKey: m#4,1 594 Span: <invalid> 595 - 596 -- SpanChanged(nil) 597 -- SpanChanged(nil) 598 PointKey: m#4,1 599 Span: <invalid> 600 - 601 -- SpanChanged(nil) 602 -- SpanChanged(nil) 603 PointKey: d#18,1 604 Span: <invalid> 605 - 606 607 # First, Last, SeekLT and SeekGE elide spans without Sets. 608 609 define-rangekeys 610 b-d:{(#5,RANGEKEYDEL)} 611 f-g:{(#6,RANGEKEYDEL)} 612 ---- 613 OK 614 615 define-pointkeys 616 c.SET.8 617 ---- 618 OK 619 620 iter 621 first 622 last 623 seek-ge a 624 seek-lt d 625 ---- 626 -- SpanChanged(nil) 627 -- SpanChanged(b-d:{(#5,RANGEKEYDEL)}) 628 PointKey: b#72057594037927935,19 629 Span: b-d:{(#5,RANGEKEYDEL)} 630 - 631 -- SpanChanged(nil) 632 -- SpanChanged(f-g:{(#6,RANGEKEYDEL)}) 633 PointKey: f#72057594037927935,19 634 Span: f-g:{(#6,RANGEKEYDEL)} 635 - 636 -- SpanChanged(nil) 637 -- SpanChanged(b-d:{(#5,RANGEKEYDEL)}) 638 PointKey: b#72057594037927935,19 639 Span: b-d:{(#5,RANGEKEYDEL)} 640 - 641 -- SpanChanged(nil) 642 -- SpanChanged(b-d:{(#5,RANGEKEYDEL)}) 643 PointKey: c#8,1 644 Span: b-d:{(#5,RANGEKEYDEL)} 645 - 646 647 # Test a scenario where Next is out of point keys, the current range key has 648 # already been interleaved, and there are no more range keys. 649 650 define-rangekeys 651 w-y:{(#5,RANGEKEYSET,@1,v1)} 652 y-z:{(#5,RANGEKEYDEL)} 653 ---- 654 OK 655 656 define-pointkeys 657 x.SET.8 658 ---- 659 OK 660 661 iter 662 first 663 next 664 next 665 ---- 666 -- SpanChanged(nil) 667 -- SpanChanged(w-y:{(#5,RANGEKEYSET,@1,v1)}) 668 PointKey: w#72057594037927935,21 669 Span: w-y:{(#5,RANGEKEYSET,@1,v1)} 670 - 671 PointKey: x#8,1 672 Span: w-y:{(#5,RANGEKEYSET,@1,v1)} 673 - 674 -- SpanChanged(y-z:{(#5,RANGEKEYDEL)}) 675 PointKey: y#72057594037927935,19 676 Span: y-z:{(#5,RANGEKEYDEL)} 677 - 678 679 # Test a scenario where we change direction on a synthetic range key boundary 680 # key. 681 iter 682 first 683 prev 684 ---- 685 -- SpanChanged(nil) 686 -- SpanChanged(w-y:{(#5,RANGEKEYSET,@1,v1)}) 687 PointKey: w#72057594037927935,21 688 Span: w-y:{(#5,RANGEKEYSET,@1,v1)} 689 - 690 -- SpanChanged(nil) 691 -- SpanChanged(nil) 692 . 693 694 define-rangekeys 695 a-z:{(#5,RANGEKEYSET,@1,v1)} 696 ---- 697 OK 698 699 define-pointkeys 700 z.SET.8 701 ---- 702 OK 703 704 iter 705 seek-ge c 706 prev 707 next 708 ---- 709 -- SpanChanged(nil) 710 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@1,v1)}) 711 PointKey: c#72057594037927935,21 712 Span: a-z:{(#5,RANGEKEYSET,@1,v1)} 713 - 714 -- SpanChanged(nil) 715 -- SpanChanged(a-z:{(#5,RANGEKEYSET,@1,v1)}) 716 PointKey: a#72057594037927935,21 717 Span: a-z:{(#5,RANGEKEYSET,@1,v1)} 718 - 719 -- SpanChanged(nil) 720 -- SpanChanged(nil) 721 PointKey: z#8,1 722 Span: <invalid> 723 - 724 725 iter 726 set-bounds . c 727 first 728 set-bounds c . 729 last 730 prev 731 prev 732 ---- 733 -- SpanChanged(nil) 734 -- SpanChanged(a-c:{(#5,RANGEKEYSET,@1,v1)}) 735 PointKey: a#72057594037927935,21 736 Span: a-c:{(#5,RANGEKEYSET,@1,v1)} 737 - 738 -- SpanChanged(nil) 739 -- SpanChanged(nil) 740 PointKey: z#8,1 741 Span: <invalid> 742 - 743 -- SpanChanged(c-z:{(#5,RANGEKEYSET,@1,v1)}) 744 PointKey: c#72057594037927935,21 745 Span: c-z:{(#5,RANGEKEYSET,@1,v1)} 746 - 747 -- SpanChanged(nil) 748 . 749 750 # Test switching directions after exhausting a range key iterator. 751 # Switching reverse to forward iteration. 752 753 define-rangekeys 754 j-l:{(#3,RANGEKEYSET,@1,v0)} 755 ---- 756 OK 757 758 define-pointkeys 759 g.SET.1 760 s.SET.1 761 v.SET.2 762 v.SET.1 763 z.SET.1 764 ---- 765 OK 766 767 iter 768 last 769 prev 770 prev 771 prev 772 prev 773 prev 774 next 775 ---- 776 -- SpanChanged(nil) 777 -- SpanChanged(nil) 778 PointKey: z#1,1 779 Span: <invalid> 780 - 781 -- SpanChanged(nil) 782 PointKey: v#1,1 783 Span: <invalid> 784 - 785 -- SpanChanged(nil) 786 PointKey: v#2,1 787 Span: <invalid> 788 - 789 -- SpanChanged(nil) 790 PointKey: s#1,1 791 Span: <invalid> 792 - 793 -- SpanChanged(j-l:{(#3,RANGEKEYSET,@1,v0)}) 794 PointKey: j#72057594037927935,21 795 Span: j-l:{(#3,RANGEKEYSET,@1,v0)} 796 - 797 -- SpanChanged(nil) 798 PointKey: g#1,1 799 Span: <invalid> 800 - 801 -- SpanChanged(nil) 802 -- SpanChanged(j-l:{(#3,RANGEKEYSET,@1,v0)}) 803 PointKey: j#72057594037927935,21 804 Span: j-l:{(#3,RANGEKEYSET,@1,v0)} 805 - 806 807 # Test switching directions after exhausting a range key iterator. 808 # Switching forward to reverse iteration. 809 810 define-rangekeys 811 j-l:{(#3,RANGEKEYSET,@1,v0)} 812 ---- 813 OK 814 815 define-pointkeys 816 a.SET.1 817 k.SET.1 818 m.SET.1 819 ---- 820 OK 821 822 iter 823 first 824 next 825 next 826 next 827 prev 828 ---- 829 -- SpanChanged(nil) 830 -- SpanChanged(nil) 831 PointKey: a#1,1 832 Span: <invalid> 833 - 834 -- SpanChanged(j-l:{(#3,RANGEKEYSET,@1,v0)}) 835 PointKey: j#72057594037927935,21 836 Span: j-l:{(#3,RANGEKEYSET,@1,v0)} 837 - 838 PointKey: k#1,1 839 Span: j-l:{(#3,RANGEKEYSET,@1,v0)} 840 - 841 -- SpanChanged(nil) 842 PointKey: m#1,1 843 Span: <invalid> 844 - 845 -- SpanChanged(nil) 846 -- SpanChanged(j-l:{(#3,RANGEKEYSET,@1,v0)}) 847 PointKey: k#1,1 848 Span: j-l:{(#3,RANGEKEYSET,@1,v0)} 849 - 850 851 # Test a seek that moves the lower bound beyond the upper bound. 852 853 define-rangekeys 854 a-d:{(#10,RANGEKEYSET,@5,apples)} 855 ---- 856 OK 857 858 define-pointkeys 859 b.SET.8 860 ---- 861 OK 862 863 864 iter 865 set-bounds a c 866 seek-ge c 867 ---- 868 -- SpanChanged(nil) 869 -- SpanChanged(nil) 870 . 871 872 iter 873 set-bounds a c 874 seek-lt a 875 ---- 876 -- SpanChanged(nil) 877 -- SpanChanged(nil) 878 . 879 880 # Test a SeekLT that searches a keyspace exclusive with the iterator's bounds. 881 # Previously, there was a bug that would incorrectly surface the span with the 882 # iterator's bounds, despite the fact the SeekLT search key is exclusive. See 883 # the comment in keyspanSeekLT. 884 885 define-rangekeys 886 b-f:{(#1,RANGEKEYSET,@1,foo)} 887 ---- 888 OK 889 890 define-pointkeys 891 f.SET.3 892 ---- 893 OK 894 895 iter 896 set-bounds d e 897 seek-lt d 898 ---- 899 -- SpanChanged(nil) 900 -- SpanChanged(nil) 901 . 902 903 # Test seek-prefix-ge and its truncation of bounds to the prefix's bounds. 904 905 define-rangekeys 906 b-d:{(#5,RANGEKEYSET,@1,foo)} 907 f-g:{(#6,RANGEKEYSET,@1,foo)} 908 ---- 909 OK 910 911 define-pointkeys 912 c.SET.8 913 ---- 914 OK 915 916 iter 917 seek-prefix-ge b 918 next 919 seek-prefix-ge c 920 next 921 seek-ge c 922 ---- 923 -- SpanChanged(nil) 924 -- SpanChanged(b-b\x00:{(#5,RANGEKEYSET,@1,foo)}) 925 PointKey: b#72057594037927935,21 926 Span: b-b\x00:{(#5,RANGEKEYSET,@1,foo)} 927 - 928 PointKey: c#8,1 929 Span: b-b\x00:{(#5,RANGEKEYSET,@1,foo)} 930 - 931 -- SpanChanged(nil) 932 -- SpanChanged(c-c\x00:{(#5,RANGEKEYSET,@1,foo)}) 933 PointKey: c#72057594037927935,21 934 Span: c-c\x00:{(#5,RANGEKEYSET,@1,foo)} 935 - 936 PointKey: c#8,1 937 Span: c-c\x00:{(#5,RANGEKEYSET,@1,foo)} 938 - 939 -- SpanChanged(nil) 940 -- SpanChanged(b-d:{(#5,RANGEKEYSET,@1,foo)}) 941 PointKey: c#72057594037927935,21 942 Span: b-d:{(#5,RANGEKEYSET,@1,foo)} 943 - 944 945 # Test NextPrefix 946 947 define-rangekeys 948 b-e:{(#5,RANGEKEYSET,@9,foo)} 949 f-g:{(#6,RANGEKEYSET,@9,foo)} 950 ---- 951 OK 952 953 define-pointkeys 954 a@4.SET.8 955 c@11.SET.8 956 c@3.SET.8 957 c@1.SET.4 958 d@5.SET.3 959 e@9.SET.2 960 ---- 961 OK 962 963 iter 964 first 965 next-prefix 966 next-prefix 967 next-prefix 968 next-prefix 969 next-prefix 970 next-prefix 971 next-prefix 972 ---- 973 -- SpanChanged(nil) 974 -- SpanChanged(nil) 975 PointKey: a@4#8,1 976 Span: <invalid> 977 - 978 -- SpanChanged(b-e:{(#5,RANGEKEYSET,@9,foo)}) 979 PointKey: b#72057594037927935,21 980 Span: b-e:{(#5,RANGEKEYSET,@9,foo)} 981 - 982 PointKey: c@11#8,1 983 Span: b-e:{(#5,RANGEKEYSET,@9,foo)} 984 - 985 PointKey: d@5#3,1 986 Span: b-e:{(#5,RANGEKEYSET,@9,foo)} 987 - 988 -- SpanChanged(nil) 989 PointKey: e@9#2,1 990 Span: <invalid> 991 - 992 -- SpanChanged(f-g:{(#6,RANGEKEYSET,@9,foo)}) 993 PointKey: f#72057594037927935,21 994 Span: f-g:{(#6,RANGEKEYSET,@9,foo)} 995 - 996 -- SpanChanged(nil) 997 . 998 .