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

     1  
     2  # Simple case.
     3  
     4  define
     5  file
     6    a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
     7  file
     8    b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
     9    c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
    10  ----
    11  
    12  iter
    13  seek-ge a
    14  seek-ge apple
    15  seek-ge b
    16  seek-ge banana
    17  seek-ge c
    18  seek-ge cantalope
    19  seek-ge d
    20  seek-ge dragonfruit
    21  ----
    22  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    23  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    24  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    25  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    26  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    27  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    28  .
    29  .
    30  
    31  iter
    32  seek-lt a
    33  seek-lt apple
    34  seek-lt b
    35  seek-lt banana
    36  seek-lt c
    37  seek-lt cantalope
    38  seek-lt d
    39  seek-lt dragonfruit
    40  prev
    41  ----
    42  .
    43  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    44  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    45  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    46  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    47  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    48  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    49  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    50  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    51  
    52  iter
    53  seek-ge a
    54  prev
    55  seek-lt d
    56  next
    57  ----
    58  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    59  .
    60  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    61  .
    62  
    63  iter
    64  first
    65  next
    66  next
    67  next
    68  ----
    69  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    70  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    71  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    72  .
    73  
    74  iter
    75  last
    76  prev
    77  prev
    78  prev
    79  ----
    80  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    81  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    82  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    83  .
    84  
    85  # Set some bounds
    86  
    87  iter
    88  seek-ge a
    89  seek-ge b
    90  seek-ge c
    91  seek-ge d
    92  seek-lt a
    93  seek-lt b
    94  seek-lt c
    95  seek-lt d
    96  ----
    97  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
    98  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
    99  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   100  .
   101  .
   102  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   103  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   104  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   105  
   106  
   107  iter
   108  seek-lt cc
   109  prev
   110  prev
   111  prev
   112  ----
   113  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   114  b-c:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   115  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   116  .
   117  
   118  # Test skipping over empty/point-key-only files in both directions.
   119  
   120  define
   121  file
   122    a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   123  file
   124    point:b.SET.1:foo
   125  file
   126    c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   127    d-e:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   128  ----
   129  
   130  num-files
   131  ----
   132  3
   133  
   134  iter
   135  first
   136  next
   137  next
   138  next
   139  ----
   140  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   141  b-c:{} (file = 000001.sst)
   142  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   143  d-e:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   144  
   145  iter
   146  last
   147  prev
   148  prev
   149  prev
   150  ----
   151  d-e:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   152  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   153  b-c:{} (file = 000003.sst)
   154  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   155  
   156  # Test straddle keys between files.
   157  
   158  define
   159  file
   160    a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   161  file
   162    c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   163  file
   164    e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   165  file
   166    g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   167  ----
   168  
   169  iter
   170  first
   171  next
   172  next
   173  next
   174  next
   175  next
   176  next
   177  next
   178  ----
   179  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   180  b-c:{} (file = 000001.sst)
   181  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   182  d-e:{} (file = 000002.sst)
   183  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   184  f-g:{} (file = 000003.sst)
   185  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000004.sst)
   186  .
   187  
   188  iter
   189  last
   190  prev
   191  prev
   192  prev
   193  prev
   194  prev
   195  prev
   196  prev
   197  ----
   198  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000004.sst)
   199  f-g:{} (file = 000004.sst)
   200  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   201  d-e:{} (file = 000003.sst)
   202  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   203  b-c:{} (file = 000002.sst)
   204  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   205  .
   206  
   207  # The below case seeks into a file straddle, then iterates forward and back to
   208  # it, and confirms that changing iterator directions on a straddle does the
   209  # right thing.
   210  
   211  iter
   212  seek-ge bb
   213  next
   214  prev
   215  next
   216  prev
   217  prev
   218  ----
   219  b-c:{} (file = 000001.sst)
   220  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   221  b-c:{} (file = 000002.sst)
   222  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   223  b-c:{} (file = 000002.sst)
   224  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   225  
   226  # The same case as above, but with inverted directions.
   227  
   228  iter
   229  seek-lt dd
   230  prev
   231  next
   232  prev
   233  next
   234  next
   235  ----
   236  d-e:{} (file = 000001.sst)
   237  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   238  d-e:{} (file = 000002.sst)
   239  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   240  d-e:{} (file = 000002.sst)
   241  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   242  
   243  iter
   244  seek-lt dd
   245  prev
   246  next
   247  prev
   248  next
   249  next
   250  ----
   251  d-e:{} (file = 000003.sst)
   252  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   253  d-e:{} (file = 000002.sst)
   254  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   255  d-e:{} (file = 000002.sst)
   256  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   257  
   258  # Seeks right at the bound should return nothing.
   259  
   260  iter
   261  seek-lt bb
   262  ----
   263  b-c:{} (file = 000003.sst)
   264  
   265  iter
   266  seek-ge dd
   267  ----
   268  d-e:{} (file = 000003.sst)
   269  
   270  iter
   271  seek-lt d
   272  prev
   273  next
   274  prev
   275  prev
   276  prev
   277  next
   278  next
   279  ----
   280  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   281  b-c:{} (file = 000002.sst)
   282  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   283  b-c:{} (file = 000002.sst)
   284  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   285  .
   286  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   287  b-c:{} (file = 000001.sst)
   288  
   289  # A bunch of files with point keys only should not fragment straddles.
   290  
   291  define
   292  file
   293    a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   294  file
   295    point:c.SET.1:foo
   296  file
   297    point:d.SET.1:foo
   298  file
   299    e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   300  file
   301    point:g.SET.1:foo
   302  file
   303    h-i:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   304  ----
   305  
   306  iter
   307  first
   308  next
   309  next
   310  next
   311  next
   312  next
   313  ----
   314  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   315  b-e:{} (file = 000001.sst)
   316  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000004.sst)
   317  f-h:{} (file = 000004.sst)
   318  h-i:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000006.sst)
   319  .
   320  
   321  iter
   322  last
   323  prev
   324  prev
   325  prev
   326  prev
   327  prev
   328  ----
   329  h-i:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000006.sst)
   330  f-h:{} (file = 000006.sst)
   331  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000004.sst)
   332  b-e:{} (file = 000004.sst)
   333  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   334  .
   335  
   336  # Test files with range keys and rangedels
   337  
   338  define
   339  file
   340    a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   341    point:a.SET.1:foo
   342    point:b.SET.1:foo
   343  file
   344    c-e:{(#3,RANGEKEYSET,@3,baz) (#3,RANGEKEYSET,@1,bar)}
   345    point:c.RANGEDEL.2:f
   346    point:d.SET.1:foo
   347  file
   348    g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   349    i-j:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   350    point:f.RANGEDEL.2:g
   351  ----
   352  
   353  iter rangedel
   354  first
   355  next
   356  next
   357  next
   358  ----
   359  c-f:{(#2,RANGEDEL)} (file = 000002.sst)
   360  f-g:{(#2,RANGEDEL)} (file = 000003.sst)
   361  .
   362  .
   363  
   364  iter rangedel
   365  last
   366  prev
   367  prev
   368  prev
   369  ----
   370  f-g:{(#2,RANGEDEL)} (file = 000003.sst)
   371  c-f:{(#2,RANGEDEL)} (file = 000002.sst)
   372  .
   373  .
   374  
   375  iter rangedel
   376  seek-ge c
   377  next
   378  next
   379  ----
   380  c-f:{(#2,RANGEDEL)} (file = 000002.sst)
   381  f-g:{(#2,RANGEDEL)} (file = 000003.sst)
   382  .
   383  
   384  iter rangedel
   385  seek-lt ff
   386  prev
   387  next
   388  prev
   389  prev
   390  ----
   391  f-g:{(#2,RANGEDEL)} (file = 000003.sst)
   392  c-f:{(#2,RANGEDEL)} (file = 000002.sst)
   393  f-g:{(#2,RANGEDEL)} (file = 000003.sst)
   394  c-f:{(#2,RANGEDEL)} (file = 000002.sst)
   395  .
   396  
   397  close-iter
   398  ----
   399  ok
   400  
   401  # Test that a regular LevelIter ignores rangedels and emits straddle spans.
   402  
   403  iter
   404  first
   405  next
   406  next
   407  next
   408  next
   409  next
   410  ----
   411  a-b:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   412  b-c:{} (file = 000001.sst)
   413  c-e:{(#3,RANGEKEYSET,@3,baz) (#3,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   414  e-g:{} (file = 000002.sst)
   415  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   416  i-j:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   417  
   418  iter
   419  seek-ge c
   420  next
   421  next
   422  next
   423  next
   424  ----
   425  c-e:{(#3,RANGEKEYSET,@3,baz) (#3,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   426  e-g:{} (file = 000002.sst)
   427  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   428  i-j:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   429  .
   430  
   431  # Test seeking outside of bounds with straddles.
   432  
   433  define
   434  file
   435    c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   436  file
   437    e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   438  file
   439    g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)}
   440  ----
   441  
   442  iter
   443  seek-lt j
   444  next
   445  prev
   446  prev
   447  ----
   448  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   449  .
   450  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   451  f-g:{} (file = 000003.sst)
   452  
   453  iter
   454  seek-lt j
   455  prev
   456  prev
   457  next
   458  next
   459  ----
   460  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   461  f-g:{} (file = 000003.sst)
   462  e-f:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000002.sst)
   463  f-g:{} (file = 000002.sst)
   464  g-h:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000003.sst)
   465  
   466  iter
   467  seek-ge a
   468  prev
   469  next
   470  next
   471  ----
   472  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   473  .
   474  c-d:{(#2,RANGEKEYSET,@3,foo) (#1,RANGEKEYSET,@1,bar)} (file = 000001.sst)
   475  d-e:{} (file = 000001.sst)