github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/testdata/table_stats_deletion_iter (about)

     1  # The example used in the documentation for tableRangedDeletionIter. An iterator
     2  # over the following table:
     3  #
     4  #
     5  #         |---------|     |---------|         |-------| RANGEKEYDELs
     6  #   |-----------|-------------|           |-----|       RANGEDELs
     7  # __________________________________________________________
     8  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
     9  #
    10  # yields the following spans:
    11  #
    12  #      1       3       1    3    2          1  3   2
    13  #   |-----|---------|-----|---|-----|     |---|-|-----|
    14  # __________________________________________________________
    15  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
    16  #
    17  # where:
    18  # - 1: homogenous span with range dels only
    19  # - 2: homogenous span with range key dels only
    20  # - 3: heterogeneous span with range dels and range key dels
    21  
    22  build
    23  a-g:{(#0,RANGEDEL)}
    24  g-n:{(#0,RANGEDEL)}
    25  t-w:{(#0,RANGEDEL)}
    26  d-i:{(#0,RANGEKEYDEL)}
    27  l-q:{(#0,RANGEKEYDEL)}
    28  v-z:{(#0,RANGEKEYDEL)}
    29  ----
    30  000000:[a#0,RANGEDEL-z#inf,RANGEKEYDEL]
    31  
    32  spans
    33  ----
    34  a-d:{(#0,RANGEDEL)}
    35  d-i:{(#0,RANGEKEYDEL) (#0,RANGEDEL)}
    36  i-l:{(#0,RANGEDEL)}
    37  l-n:{(#0,RANGEKEYDEL) (#0,RANGEDEL)}
    38  n-q:{(#0,RANGEKEYDEL)}
    39  t-v:{(#0,RANGEDEL)}
    40  v-w:{(#0,RANGEKEYDEL) (#0,RANGEDEL)}
    41  w-z:{(#0,RANGEKEYDEL)}
    42  
    43  # The iterator elides anything other than range deletes and range key deletes.
    44  
    45  #   |---------------RANGEKEYUNSET----------------------|
    46  #   |---------------RANGEKEYSET------------------------|
    47  #   |---------------RANGEKEYDEL------------------------|
    48  # __________________________________________________________
    49  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
    50  #
    51  # Becomes:
    52  #   |---------------RANGEKEYDEL------------------------|
    53  # __________________________________________________________
    54  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
    55  
    56  build
    57  a-z:{(#0,RANGEKEYDEL) (#0,RANGEKEYSET,@1,foo) (#0,RANGEKEYUNSET,@2)}
    58  ----
    59  000000:[a#0,RANGEKEYSET-z#inf,RANGEKEYDEL]
    60  
    61  spans
    62  ----
    63  a-z:{(#0,RANGEKEYDEL)}
    64  
    65  # The same as the above, except that the RANGEKEYDEL is at a lower sequence
    66  # number than the SET and UNSET. The three keys exist at different sequence
    67  # numbers, with the DEL at the bottom to avoid the perceived affects of
    68  # shadowing.
    69  
    70  build
    71  a-z:{(#3,RANGEKEYSET,@1,foo) (#2,RANGEKEYUNSET,@2) (#1,RANGEKEYDEL)}
    72  ----
    73  000000:[a#3,RANGEKEYSET-z#inf,RANGEKEYDEL]
    74  
    75  spans
    76  ----
    77  a-z:{(#1,RANGEKEYDEL)}
    78  
    79  #   |-RANGEKEYSET-|-RANGEKEYUNSET-|-RANGEKEYDEL--------|
    80  # __________________________________________________________
    81  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
    82  #
    83  # Becomes:
    84  #                                 |-RANGEKEYDEL-------|
    85  # __________________________________________________________
    86  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
    87  
    88  build
    89  a-h:{(#0,RANGEKEYSET,@1,foo)}
    90  h-p:{(#0,RANGEKEYUNSET,@1)}
    91  p-z:{(#0,RANGEKEYDEL)}
    92  ----
    93  000000:[a#0,RANGEKEYSET-z#inf,RANGEKEYDEL]
    94  
    95  spans
    96  ----
    97  p-z:{(#0,RANGEKEYDEL)}
    98  
    99  #   |-RANGEKEYSET-|-RANGEKEYUNSET-|-RANGEKEYDEL--------|
   100  #   |--RANGEDEL-----------------------------|
   101  # __________________________________________________________
   102  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
   103  #
   104  # Becomes:
   105  #
   106  #   |---------------1-------------|----3----|----2----|
   107  # __________________________________________________________
   108  #   a b c d e f g h i j k l m n o p q r s t u v w x y z
   109  
   110  build
   111  a-u:{(#0,RANGEDEL)}
   112  a-h:{(#0,RANGEKEYSET,@1,foo)}
   113  h-p:{(#0,RANGEKEYUNSET,@1)}
   114  p-z:{(#0,RANGEKEYDEL)}
   115  ----
   116  000000:[a#0,RANGEKEYSET-z#inf,RANGEKEYDEL]
   117  
   118  spans
   119  ----
   120  a-p:{(#0,RANGEDEL)}
   121  p-u:{(#0,RANGEKEYDEL) (#0,RANGEDEL)}
   122  u-z:{(#0,RANGEKEYDEL)}
   123  
   124  # An iterator over a table with neither range dels or range key dels present
   125  # yields no spans.
   126  
   127  build
   128  a-m:{(#0,RANGEKEYSET,@1,foo)}
   129  m-z:{(#0,RANGEKEYUNSET,@1)}
   130  ----
   131  000000:[a#0,RANGEKEYSET-z#inf,RANGEKEYUNSET]
   132  
   133  spans
   134  ----
   135  (none)
   136  
   137  # Abutting spans that are merged emit only the largest and smallest key.
   138  
   139  build
   140  a-c:{(#4,RANGEDEL) (#3,RANGEDEL) (#1,RANGEDEL)}
   141  c-d:{(#9,RANGEDEL) (#7,RANGEDEL) (#6,RANGEDEL) (#2,RANGEDEL)}
   142  ----
   143  000000:[a#4,RANGEDEL-d#inf,RANGEDEL]
   144  
   145  spans
   146  ----
   147  a-d:{(#9,RANGEDEL) (#1,RANGEDEL)}
   148  
   149  # The same as above, but for range key dels.
   150  
   151  build
   152  a-c:{(#4,RANGEKEYDEL) (#3,RANGEKEYDEL) (#1,RANGEKEYDEL)}
   153  c-d:{(#9,RANGEKEYDEL) (#7,RANGEKEYDEL) (#6,RANGEKEYDEL) (#2,RANGEKEYDEL)}
   154  ----
   155  000000:[a#4,RANGEKEYDEL-d#inf,RANGEKEYDEL]
   156  
   157  spans
   158  ----
   159  a-d:{(#9,RANGEKEYDEL) (#1,RANGEKEYDEL)}
   160  
   161  # The same as above, but for mixed key kinds. The resulting span has four keys,
   162  # given the respective largest / smallest keys from the range del and range key
   163  # del spans are interleaved.
   164  
   165  build
   166  a-c:{(#4,RANGEDEL) (#2,RANGEDEL)}
   167  a-c:{(#3,RANGEKEYDEL) (#1,RANGEKEYDEL)}
   168  ----
   169  000000:[a#4,RANGEDEL-c#inf,RANGEDEL]
   170  
   171  spans
   172  ----
   173  a-c:{(#4,RANGEDEL) (#3,RANGEKEYDEL) (#2,RANGEDEL) (#1,RANGEKEYDEL)}
   174  
   175  # "Hetrogenous spans" (i.e. spans containing both range dels and range key dels)
   176  # are preserved when abutting spans are merged. This tests that the reducing
   177  # function does not "lose information" of the merged spans, effectively
   178  # resulting in the span switching types from a heterogeneous span to a
   179  # homogenous span.
   180  
   181  # 10 |-------|---|---| RANGEDELs
   182  # 5  |-------|---|     RANGEKEYDELs
   183  # 3  |-------|---|---| RANGEDELs
   184  # _____________________
   185  #    a   b   c   d   e
   186  
   187  build
   188  a-c:{(#10,RANGEDEL) (#3,RANGEDEL)}
   189  c-d:{(#10,RANGEDEL) (#3,RANGEDEL)}
   190  d-e:{(#10,RANGEDEL) (#3,RANGEDEL)}
   191  a-c:{(#5,RANGEKEYDEL)}
   192  c-d:{(#5,RANGEKEYDEL)}
   193  ----
   194  000000:[a#10,RANGEDEL-e#inf,RANGEDEL]
   195  
   196  spans
   197  ----
   198  a-d:{(#10,RANGEDEL) (#5,RANGEKEYDEL) (#3,RANGEDEL)}
   199  d-e:{(#10,RANGEDEL) (#3,RANGEDEL)}