github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/testdata/compaction_iter_set_with_del (about) 1 define 2 a.SET.1:b 3 ---- 4 5 iter 6 first 7 next 8 ---- 9 a#1,1:b 10 . 11 12 define 13 a.SET.2:c 14 a.SET.1:b 15 ---- 16 17 iter 18 first 19 next 20 ---- 21 a#2,1:c 22 . 23 24 iter snapshots=0 25 first 26 next 27 ---- 28 a#2,1:c 29 . 30 31 iter snapshots=1 32 first 33 next 34 ---- 35 a#2,1:c 36 . 37 38 iter snapshots=2 39 first 40 next 41 next 42 ---- 43 a#2,1:c 44 a#1,1:b 45 . 46 47 define 48 a.DEL.2: 49 a.SET.1:b 50 ---- 51 52 iter 53 first 54 next 55 ---- 56 a#2,0: 57 . 58 59 iter elide-tombstones=true 60 first 61 ---- 62 . 63 64 iter elide-tombstones=true snapshots=2 65 first 66 next 67 next 68 ---- 69 a#2,0: 70 a#1,1:b 71 . 72 73 iter elide-tombstones=true snapshots=1 74 first 75 next 76 ---- 77 a#2,0: 78 . 79 80 define 81 a.DEL.2: 82 a.SET.1:b 83 b.SET.3:c 84 ---- 85 86 iter 87 first 88 next 89 next 90 ---- 91 a#2,0: 92 b#3,1:c 93 . 94 95 iter snapshots=1 96 first 97 next 98 next 99 ---- 100 a#2,0: 101 b#3,1:c 102 . 103 104 iter snapshots=2 105 first 106 next 107 next 108 next 109 ---- 110 a#2,0: 111 a#1,1:b 112 b#3,1:c 113 . 114 115 define 116 a.SET.1:a 117 b.SET.2:b 118 c.SET.3:c 119 ---- 120 121 iter 122 first 123 next 124 next 125 next 126 ---- 127 a#1,1:a 128 b#2,1:b 129 c#3,1:c 130 . 131 132 define 133 a.MERGE.3:d 134 a.MERGE.2:c 135 a.SET.1:b 136 b.MERGE.2:b 137 b.MERGE.1:a 138 ---- 139 140 iter 141 first 142 next 143 next 144 ---- 145 a#3,1:bcd[base] 146 b#2,2:ab 147 . 148 149 iter snapshots=3 150 first 151 next 152 next 153 next 154 ---- 155 a#3,2:d 156 a#2,1:bc[base] 157 b#2,2:ab 158 . 159 160 define 161 a.SET.9:b 162 a.DEL.8: 163 a.SET.7:d 164 a.DEL.6: 165 a.SET.5:f 166 ---- 167 168 iter 169 first 170 next 171 ---- 172 a#9,18:b 173 . 174 175 iter snapshots=6 176 first 177 next 178 next 179 ---- 180 a#9,18:b 181 a#5,1:f 182 . 183 184 iter snapshots=7 185 first 186 next 187 next 188 ---- 189 a#9,18:b 190 a#6,0: 191 . 192 193 iter snapshots=8 194 first 195 next 196 next 197 ---- 198 a#9,18:b 199 a#7,18:d 200 . 201 202 iter snapshots=9 203 first 204 next 205 next 206 ---- 207 a#9,1:b 208 a#8,0: 209 . 210 211 iter snapshots=10 212 first 213 next 214 ---- 215 a#9,18:b 216 . 217 218 iter snapshots=(5,6,7,8,9) 219 first 220 next 221 next 222 next 223 next 224 next 225 ---- 226 a#9,1:b 227 a#8,0: 228 a#7,1:d 229 a#6,0: 230 a#5,1:f 231 . 232 233 define 234 a.INVALID.2:b 235 a.SET.1:c 236 ---- 237 238 iter 239 first 240 ---- 241 err=invalid internal key kind: INVALID 242 243 define 244 a.SET.2:b 245 a.INVALID.1:c 246 ---- 247 248 iter 249 first 250 next 251 ---- 252 a#2,18:b 253 err=invalid internal key kind: INVALID 254 255 define 256 a.MERGE.2:b 257 a.INVALID.1:c 258 ---- 259 260 iter 261 first 262 next 263 ---- 264 a#2,2:b 265 err=invalid internal key kind: INVALID 266 267 define 268 a.INVALID.2:c 269 a.RANGEDEL.1:d 270 ---- 271 272 iter 273 first 274 tombstones 275 ---- 276 err=invalid internal key kind: INVALID 277 . 278 279 define 280 a.MERGE.2:b 281 a.MERGE.1:c 282 a.MERGE.0:d 283 ---- 284 285 iter snapshots=(1,2) 286 first 287 next 288 next 289 next 290 ---- 291 a#2,2:b 292 a#1,2:c 293 a#0,2:d 294 . 295 296 define 297 a.SET.2:b 298 a.RANGEDEL.1:c 299 b.RANGEDEL.4:d 300 b.SET.2:e 301 c.SET.3:f 302 ---- 303 304 iter 305 first 306 next 307 next 308 next 309 tombstones 310 ---- 311 a#2,18:b 312 a#1,15:c 313 b#4,15:d 314 . 315 a-b#1 316 b-c#4 317 c-d#4 318 . 319 320 iter snapshots=2 321 first 322 next 323 next 324 next 325 tombstones 326 ---- 327 a#2,1:b 328 a#1,15:c 329 b#4,15:d 330 . 331 a-b#1 332 b-c#4 333 b-c#1 334 c-d#4 335 . 336 337 iter snapshots=3 338 first 339 next 340 next 341 next 342 next 343 tombstones 344 ---- 345 a#2,18:b 346 a#1,15:c 347 b#4,15:d 348 b#2,1:e 349 . 350 a-b#1 351 b-c#4 352 b-c#1 353 c-d#4 354 . 355 356 iter snapshots=4 357 first 358 next 359 next 360 next 361 next 362 next 363 tombstones 364 ---- 365 a#2,18:b 366 a#1,15:c 367 b#4,15:d 368 b#2,1:e 369 c#3,1:f 370 . 371 a-b#1 372 b-c#4 373 b-c#1 374 c-d#4 375 . 376 377 define 378 a.RANGEDEL.3:e 379 b.SET.4:b 380 c.SET.3:c 381 d.SET.2:d 382 e.SET.1:e 383 ---- 384 385 iter 386 first 387 next 388 next 389 next 390 next 391 tombstones 392 ---- 393 a#3,15:e 394 b#4,1:b 395 c#3,1:c 396 e#1,1:e 397 . 398 a-e#3 399 . 400 401 define 402 a.RANGEDEL.3:e 403 b.MERGE.4:b 404 c.MERGE.3:c 405 d.MERGE.2:d 406 e.MERGE.1:e 407 ---- 408 409 iter 410 first 411 next 412 next 413 next 414 next 415 tombstones 416 ---- 417 a#3,15:e 418 b#4,2:b 419 c#3,2:c 420 e#1,2:e 421 . 422 a-e#3 423 . 424 425 define 426 a.RANGEDEL.3:c 427 b.MERGE.5:e 428 b.MERGE.4:d 429 b.MERGE.2:c 430 b.MERGE.1:b 431 d.MERGE.5:c 432 d.MERGE.4:b 433 d.RANGEDEL.3:f 434 d.MERGE.2:e 435 d.MERGE.1:d 436 ---- 437 438 iter 439 first 440 next 441 next 442 next 443 next 444 tombstones 445 ---- 446 a#3,15:c 447 b#5,2:de 448 d#5,2:bc 449 d#3,15:f 450 . 451 a-c#3 452 d-f#3 453 . 454 455 define 456 a.RANGEDEL.3:d 457 b.RANGEDEL.2:e 458 c.RANGEDEL.1:f 459 ---- 460 461 iter 462 first 463 next 464 next 465 next 466 tombstones 467 ---- 468 a#3,15:d 469 b#2,15:e 470 c#1,15:f 471 . 472 a-b#3 473 b-c#3 474 c-d#3 475 d-e#2 476 e-f#1 477 . 478 479 iter snapshots=2 480 first 481 next 482 next 483 next 484 tombstones 485 ---- 486 a#3,15:d 487 b#2,15:e 488 c#1,15:f 489 . 490 a-b#3 491 b-c#3 492 c-d#3 493 c-d#1 494 d-e#2 495 d-e#1 496 e-f#1 497 . 498 499 iter snapshots=3 500 first 501 next 502 next 503 next 504 tombstones 505 ---- 506 a#3,15:d 507 b#2,15:e 508 c#1,15:f 509 . 510 a-b#3 511 b-c#3 512 b-c#2 513 c-d#3 514 c-d#2 515 d-e#2 516 e-f#1 517 . 518 519 iter snapshots=(2,3) 520 first 521 next 522 next 523 next 524 tombstones 525 ---- 526 a#3,15:d 527 b#2,15:e 528 c#1,15:f 529 . 530 a-b#3 531 b-c#3 532 b-c#2 533 c-d#3 534 c-d#2 535 c-d#1 536 d-e#2 537 d-e#1 538 e-f#1 539 . 540 541 define 542 a.RANGEDEL.10:k 543 f.SET.9:f 544 f.SET.8:f 545 ---- 546 547 iter snapshots=(9,10) 548 first 549 next 550 tombstones f 551 next 552 tombstones 553 ---- 554 a#10,15:k 555 f#9,1:f 556 a-f#10 557 . 558 f#8,1:f 559 f-k#10 560 . 561 562 define 563 f.RANGEDEL.10:k 564 f.SET.9:f 565 f.SET.8:f 566 ---- 567 568 iter snapshots=(9,10) 569 first 570 next 571 tombstones f 572 next 573 tombstones 574 ---- 575 f#10,15:k 576 f#9,1:f 577 . 578 f#8,1:f 579 f-k#10 580 . 581 582 define 583 a.SET.1:a 584 b.RANGEDEL.2:d 585 c.RANGEDEL.3:e 586 d.SET.4:d 587 ---- 588 589 iter 590 first 591 next 592 next 593 next 594 tombstones c 595 tombstones 596 ---- 597 a#1,1:a 598 b#2,15:d 599 c#3,15:e 600 d#4,1:d 601 b-c#2 602 . 603 c-d#3 604 d-e#3 605 . 606 607 iter snapshots=3 608 first 609 next 610 next 611 next 612 tombstones c 613 tombstones 614 ---- 615 a#1,1:a 616 b#2,15:d 617 c#3,15:e 618 d#4,1:d 619 b-c#2 620 . 621 c-d#3 622 c-d#2 623 d-e#3 624 . 625 626 define 627 a.SET.1:a 628 b.RANGEDEL.2:d 629 c.SET.4:d 630 ---- 631 632 iter 633 first 634 next 635 next 636 tombstones c 637 tombstones 638 ---- 639 a#1,1:a 640 b#2,15:d 641 c#4,1:d 642 b-c#2 643 . 644 c-d#2 645 . 646 647 define 648 a.RANGEDEL.2:d 649 a.SET.2:a 650 b.SET.2:b 651 c.SET.2:c 652 ---- 653 654 iter 655 first 656 next 657 next 658 next 659 next 660 ---- 661 a#2,15:d 662 a#2,1:a 663 b#2,1:b 664 c#2,1:c 665 . 666 667 define 668 a.SINGLEDEL.1: 669 ---- 670 671 iter 672 first 673 next 674 ---- 675 a#1,7: 676 . 677 678 iter elide-tombstones=true 679 first 680 ---- 681 . 682 ineffectual-single-deletes: a 683 684 define 685 a.SINGLEDEL.2: 686 a.SINGLEDEL.1: 687 ---- 688 689 iter 690 first 691 next 692 ---- 693 a#2,7: 694 . 695 ineffectual-single-deletes: a 696 697 define 698 a.SINGLEDEL.3: 699 a.SINGLEDEL.2: 700 a.SET.1:a 701 ---- 702 703 iter 704 first 705 ---- 706 . 707 ineffectual-single-deletes: a 708 709 define 710 a.SET.3:a 711 b.SINGLEDEL.2: 712 b.DEL.1: 713 ---- 714 715 iter 716 first 717 next 718 next 719 ---- 720 a#3,1:a 721 b#2,0: 722 . 723 ineffectual-single-deletes: b 724 725 define 726 a.SINGLEDEL.2: 727 a.DEL.1: 728 ---- 729 730 iter 731 first 732 next 733 ---- 734 a#2,0: 735 . 736 ineffectual-single-deletes: a 737 738 iter elide-tombstones=true 739 first 740 ---- 741 . 742 ineffectual-single-deletes: a 743 744 define 745 a.SINGLEDEL.2: 746 a.MERGE.1: 747 ---- 748 749 iter 750 first 751 ---- 752 . 753 754 iter elide-tombstones=true 755 first 756 ---- 757 . 758 759 define 760 a.SINGLEDEL.2: 761 a.SET.1:b 762 ---- 763 764 iter 765 first 766 ---- 767 . 768 769 # SET that meets a SINGLEDEL is transformed into a SETWITHDEL. 770 771 define 772 a.SET.2:b 773 a.SINGLEDEL.1: 774 ---- 775 776 iter 777 first 778 next 779 ---- 780 a#2,18:b 781 . 782 783 # We don't notice the ineffectual single delete since the SET causes all 784 # SingleDelete error checking to be skipped. 785 iter elide-tombstones=true 786 first 787 next 788 ---- 789 a#2,18:b 790 . 791 792 define 793 a.MERGE.6:b 794 a.SINGLEDEL.5: 795 a.SET.4:a 796 ---- 797 798 iter 799 first 800 next 801 ---- 802 a#6,18:b[base] 803 . 804 805 # Non-deterministic use of SINGLEDEL where there are two older SETs that have 806 # not been deleted or single deleted. It is permitted to shadow both, since 807 # MERGE turns into a SETWITHDELETE when it meets the SINGLEDEL. 808 define 809 a.MERGE.6:b 810 a.SINGLEDEL.5: 811 a.SET.4:a 812 a.SET.3:a 813 ---- 814 815 iter 816 first 817 next 818 ---- 819 a#6,18:b[base] 820 . 821 822 define 823 a.SINGLEDEL.2: 824 a.SET.1:b 825 b.SET.3:c 826 ---- 827 828 iter 829 first 830 next 831 ---- 832 b#3,1:c 833 . 834 835 define 836 a.SINGLEDEL.3: 837 a.SET.2:b 838 a.SET.1:a 839 ---- 840 841 iter 842 first 843 next 844 ---- 845 a#1,1:a 846 . 847 invariant-violation-single-deletes: a 848 849 define 850 a.SINGLEDEL.3: 851 a.MERGE.2:b 852 a.MERGE.1:a 853 ---- 854 855 # SINGLEDEL consumes the first MERGE. 856 iter 857 first 858 next 859 ---- 860 a#1,2:a 861 . 862 invariant-violation-single-deletes: a 863 864 define 865 a.SINGLEDEL.4: 866 a.SET.3:val 867 a.SINGLEDEL.2: 868 a.SET.1:val 869 ---- 870 871 iter 872 first 873 ---- 874 . 875 876 iter snapshots=2 877 first 878 next 879 next 880 ---- 881 a#2,7: 882 a#1,1:val 883 . 884 885 define 886 a.SINGLEDEL.4: 887 a.SET.3:val 888 a.DEL.2: 889 a.SET.1:val 890 ---- 891 892 iter 893 first 894 next 895 ---- 896 a#2,0: 897 . 898 899 iter snapshots=2 900 first 901 next 902 next 903 ---- 904 a#2,0: 905 a#1,1:val 906 . 907 908 iter snapshots=3 909 first 910 next 911 ---- 912 a#2,0: 913 . 914 915 iter snapshots=(2,3) 916 first 917 next 918 next 919 ---- 920 a#2,0: 921 a#1,1:val 922 . 923 924 define 925 a.SINGLEDEL.4: 926 a.SET.3:c 927 a.MERGE.2:b 928 a.SET.1:a 929 ---- 930 931 iter 932 first 933 next 934 ---- 935 a#2,1:ab[base] 936 . 937 invariant-violation-single-deletes: a 938 939 iter snapshots=2 940 first 941 next 942 next 943 ---- 944 a#2,2:b 945 a#1,1:a 946 . 947 invariant-violation-single-deletes: a 948 949 iter snapshots=3 950 first 951 next 952 ---- 953 a#2,1:ab[base] 954 . 955 invariant-violation-single-deletes: a 956 957 iter snapshots=(2,3,4) 958 first 959 next 960 next 961 next 962 next 963 ---- 964 a#4,7: 965 a#3,1:c 966 a#2,2:b 967 a#1,1:a 968 . 969 970 define 971 a.SINGLEDEL.3: 972 a.RANGEDEL.2:c 973 a.SET.1:val 974 ---- 975 976 iter 977 first 978 next 979 next 980 tombstones 981 ---- 982 a#3,7: 983 a#2,15:c 984 . 985 a-c#2 986 . 987 988 define 989 a.RANGEDEL.3:d 990 a.DEL.2: 991 a.SET.1:a 992 d.DEL.2: 993 ---- 994 995 iter 996 first 997 next 998 next 999 tombstones 1000 ---- 1001 a#3,15:d 1002 d#2,0: 1003 . 1004 a-d#3 1005 . 1006 1007 iter snapshots=3 1008 first 1009 next 1010 next 1011 next 1012 ---- 1013 a#3,15:d 1014 a#2,0: 1015 d#2,0: 1016 . 1017 1018 iter snapshots=2 1019 first 1020 next 1021 next 1022 next 1023 ---- 1024 a#3,15:d 1025 a#1,1:a 1026 d#2,0: 1027 . 1028 1029 iter snapshots=1 1030 first 1031 next 1032 next 1033 ---- 1034 a#3,15:d 1035 d#2,0: 1036 . 1037 1038 define 1039 a.MERGE.2:a 1040 b.RANGEDEL.1:c 1041 ---- 1042 1043 iter 1044 first 1045 tombstones a 1046 next 1047 next 1048 tombstones 1049 ---- 1050 a#2,2:a 1051 . 1052 b#1,15:c 1053 . 1054 b-c#1 1055 . 1056 1057 define 1058 a.MERGE.2:v2 1059 a.RANGEDEL.1:b 1060 a.MERGE.1:v1 1061 ---- 1062 1063 iter allow-zero-seqnum=true 1064 first 1065 next 1066 next 1067 next 1068 tombstones 1069 ---- 1070 a#2,2:v2 1071 a#1,15:b 1072 a#0,2:v1 1073 . 1074 a-b#1 1075 . 1076 1077 # Verify that we transform merge+del -> set. 1078 1079 define 1080 a.MERGE.5:5 1081 a.DEL.3: 1082 a.MERGE.1:1 1083 ---- 1084 1085 iter 1086 first 1087 next 1088 ---- 1089 a#5,18:5[base] 1090 . 1091 1092 iter allow-zero-seqnum=true 1093 first 1094 next 1095 ---- 1096 a#0,18:5[base] 1097 . 1098 1099 iter elide-tombstones=true 1100 first 1101 next 1102 ---- 1103 a#5,18:5[base] 1104 . 1105 1106 iter snapshots=2 1107 first 1108 next 1109 next 1110 ---- 1111 a#5,18:5[base] 1112 a#1,2:1 1113 . 1114 1115 iter snapshots=2 elide-tombstones=true 1116 first 1117 next 1118 next 1119 ---- 1120 a#5,18:5[base] 1121 a#1,2:1 1122 . 1123 1124 # Verify that merge+rangedel -> merge. 1125 1126 define 1127 a.RANGEDEL.3:c 1128 b.MERGE.5:5 1129 b.SET.2:2 1130 b.MERGE.1:1 1131 ---- 1132 1133 iter 1134 first 1135 next 1136 next 1137 ---- 1138 a#3,15:c 1139 b#5,2:5 1140 . 1141 1142 iter allow-zero-seqnum=true 1143 first 1144 next 1145 next 1146 ---- 1147 a#3,15:c 1148 b#0,2:5 1149 . 1150 1151 iter snapshots=2 1152 first 1153 next 1154 next 1155 ---- 1156 a#3,15:c 1157 b#5,2:5 1158 b#1,2:1 1159 1160 define 1161 a.RANGEDEL.3:c 1162 b.MERGE.5:5 1163 b.MERGE.2:2 1164 b.MERGE.1:1 1165 ---- 1166 1167 iter 1168 first 1169 next 1170 next 1171 ---- 1172 a#3,15:c 1173 b#5,2:5 1174 . 1175 1176 iter snapshots=2 1177 first 1178 next 1179 next 1180 ---- 1181 a#3,15:c 1182 b#5,2:5 1183 b#1,2:1 1184 1185 # SET that meets a DEL is transformed into a SETWITHDEL. 1186 1187 define 1188 a.SET.2:b 1189 a.DEL.1: 1190 ---- 1191 1192 iter 1193 first 1194 next 1195 ---- 1196 a#2,18:b 1197 . 1198 1199 iter snapshots=2 1200 first 1201 next 1202 next 1203 ---- 1204 a#2,1:b 1205 a#1,0: 1206 . 1207 1208 define 1209 a.SET.3:c 1210 a.DEL.2: 1211 a.SET.1:b 1212 ---- 1213 1214 iter 1215 first 1216 next 1217 ---- 1218 a#3,18:c 1219 . 1220 1221 iter snapshots=2 1222 first 1223 next 1224 next 1225 ---- 1226 a#3,18:c 1227 a#1,1:b 1228 . 1229 1230 define 1231 a.SET.3:c 1232 a.SET.2:b 1233 a.DEL.1: 1234 ---- 1235 1236 iter 1237 first 1238 next 1239 ---- 1240 a#3,18:c 1241 . 1242 1243 iter snapshots=3 1244 first 1245 next 1246 next 1247 ---- 1248 a#3,1:c 1249 a#2,18:b 1250 . 1251 1252 iter snapshots=2 1253 first 1254 next 1255 next 1256 ---- 1257 a#3,1:c 1258 a#1,0: 1259 . 1260 1261 define 1262 a.DEL.3: 1263 a.SET.2:b 1264 a.DEL.1: 1265 ---- 1266 1267 iter 1268 first 1269 next 1270 ---- 1271 a#3,0: 1272 . 1273 1274 iter snapshots=3 1275 first 1276 next 1277 next 1278 ---- 1279 a#3,0: 1280 a#2,18:b 1281 . 1282 1283 iter snapshots=2 1284 first 1285 next 1286 next 1287 ---- 1288 a#3,0: 1289 a#1,0: 1290 . 1291 1292 # SETWITHDEL-eligible entries at or under a RANGEDEL at the same user key should 1293 # be skipped. 1294 define 1295 a.SET.3:c 1296 a.RANGEDEL.2:z 1297 a.SET.2:b 1298 a.DEL.1: 1299 ---- 1300 1301 iter allow-zero-seqnum=true 1302 first 1303 next 1304 next 1305 ---- 1306 a#0,18:c 1307 a#2,15:z 1308 . 1309 1310 iter allow-zero-seqnum=true snapshots=3 1311 first 1312 next 1313 next 1314 next 1315 ---- 1316 a#3,1:c 1317 a#2,15:z 1318 a#0,1:b 1319 . 1320 1321 iter allow-zero-seqnum=true snapshots=2 1322 first 1323 next 1324 next 1325 next 1326 ---- 1327 a#3,18:c 1328 a#2,15:z 1329 a#1,0: 1330 . 1331 1332 define 1333 a.SET.4:c 1334 a.RANGEDEL.3:z 1335 a.SET.2:b 1336 a.DEL.1: 1337 ---- 1338 1339 iter 1340 first 1341 next 1342 next 1343 ---- 1344 a#4,18:c 1345 a#3,15:z 1346 . 1347 1348 # Invalid keys are emitted under SETWITHDEL. 1349 1350 define 1351 a.SET.2:b 1352 a.INVALID.1: 1353 ---- 1354 1355 iter 1356 first 1357 next 1358 ---- 1359 a#2,18:b 1360 err=invalid internal key kind: INVALID 1361 1362 define 1363 a.SET.3:c 1364 a.INVALID.2: 1365 a.SET.1:b 1366 ---- 1367 1368 iter 1369 first 1370 next 1371 ---- 1372 a#3,18:c 1373 err=invalid internal key kind: INVALID 1374 1375 # SINGLEDEL that meets a SETWITHDEL is transformed into a DEL. 1376 1377 define 1378 a.SINGLEDEL.3: 1379 a.SETWITHDEL.2:d 1380 b.SET.1:c 1381 ---- 1382 1383 iter 1384 first 1385 next 1386 next 1387 ---- 1388 a#3,0: 1389 b#1,1:c 1390 . 1391 1392 iter snapshots=2 1393 first 1394 next 1395 next 1396 ---- 1397 a#3,0: 1398 b#1,1:c 1399 . 1400 1401 iter snapshots=3 1402 first 1403 next 1404 next 1405 next 1406 ---- 1407 a#3,7: 1408 a#2,18:d 1409 b#1,1:c 1410 . 1411 1412 define 1413 a.SETWITHDEL.3:3 1414 a.SET.2:d 1415 b.SET.1:c 1416 ---- 1417 1418 iter 1419 first 1420 next 1421 next 1422 ---- 1423 a#3,18:3 1424 b#1,1:c 1425 . 1426 1427 iter snapshots=3 1428 first 1429 next 1430 next 1431 next 1432 ---- 1433 a#3,18:3 1434 a#2,1:d 1435 b#1,1:c 1436 .