@@ -40,7 +40,7 @@ private static byte[][] PopulateCursorValues(LightningCursor cursor, int count =
40
40
private static byte [ ] [ ] PopulateMultipleCursorValues ( LightningCursor cursor , string key = "TestKey" )
41
41
{
42
42
var values = Enumerable . Range ( 1 , 5 ) . Select ( BitConverter . GetBytes ) . ToArray ( ) ;
43
- var result = cursor . PutMultiple ( UTF8 . GetBytes ( key ) , values ) ;
43
+ var result = cursor . Put ( UTF8 . GetBytes ( key ) , values ) ;
44
44
Assert . Equal ( MDBResultCode . Success , result ) ;
45
45
var notDuplicate = values [ 0 ] ;
46
46
result = cursor . Put ( notDuplicate , notDuplicate , CursorPutOptions . NoDuplicateData ) ;
@@ -68,13 +68,13 @@ public void CursorShouldPutValues()
68
68
}
69
69
70
70
[ Fact ]
71
- public void CursorShouldMoveToSpanKey ( )
71
+ public void CursorShouldSetSpanKey ( )
72
72
{
73
73
_env . RunCursorScenario ( ( tx , db , c ) =>
74
74
{
75
75
var keys = PopulateCursorValues ( c ) ;
76
76
var firstKey = keys . First ( ) ;
77
- var result = c . MoveTo ( firstKey . AsSpan ( ) ) ;
77
+ var result = c . Set ( firstKey . AsSpan ( ) ) ;
78
78
Assert . Equal ( MDBResultCode . Success , result ) ;
79
79
var current = c . GetCurrent ( ) ;
80
80
Assert . Equal ( firstKey , current . key . CopyToNewArray ( ) ) ;
@@ -88,7 +88,7 @@ public void CursorShouldMoveToLast()
88
88
{
89
89
var keys = PopulateCursorValues ( c ) ;
90
90
var lastKey = keys . Last ( ) ;
91
- var result = c . MoveToLast ( ) ;
91
+ var result = c . Last ( ) ;
92
92
Assert . Equal ( MDBResultCode . Success , result ) ;
93
93
var current = c . GetCurrent ( ) ;
94
94
Assert . Equal ( lastKey , current . key . CopyToNewArray ( ) ) ;
@@ -102,7 +102,7 @@ public void CursorShouldMoveToFirst()
102
102
{
103
103
var keys = PopulateCursorValues ( c ) ;
104
104
var firstKey = keys . First ( ) ;
105
- var result = c . MoveToFirst ( ) ;
105
+ var result = c . First ( ) ;
106
106
Assert . Equal ( MDBResultCode . Success , result ) ;
107
107
var current = c . GetCurrent ( ) ;
108
108
Assert . Equal ( firstKey , current . key . CopyToNewArray ( ) ) ;
@@ -134,7 +134,7 @@ public void CursorShouldDeleteElements()
134
134
var keys = PopulateCursorValues ( c ) . Take ( 2 ) . ToArray ( ) ;
135
135
for ( var i = 0 ; i < 2 ; ++ i )
136
136
{
137
- c . MoveNext ( ) ;
137
+ c . Next ( ) ;
138
138
c . Delete ( ) ;
139
139
}
140
140
@@ -158,8 +158,8 @@ public void ShouldGetMultiple()
158
158
{
159
159
var key = UTF8 . GetBytes ( "TestKey" ) ;
160
160
var keys = PopulateMultipleCursorValues ( c ) ;
161
- c . MoveTo ( key ) ;
162
- c . MoveNextDuplicate ( ) ;
161
+ c . Set ( key ) ;
162
+ c . NextDuplicate ( ) ;
163
163
var ( resultCode , _, value ) = c . GetMultiple ( ) ;
164
164
Assert . Equal ( MDBResultCode . Success , resultCode ) ;
165
165
Assert . Equal ( keys , value . CopyToNewArray ( ) . Split ( sizeof ( int ) ) . ToArray ( ) ) ;
@@ -173,7 +173,7 @@ public void ShouldGetNextMultiple()
173
173
{
174
174
var key = UTF8 . GetBytes ( "TestKey" ) ;
175
175
var keys = PopulateMultipleCursorValues ( c ) ;
176
- c . MoveTo ( key ) ;
176
+ c . Set ( key ) ;
177
177
var ( resultCode , _, value ) = c . NextMultiple ( ) ;
178
178
Assert . Equal ( MDBResultCode . Success , resultCode ) ;
179
179
Assert . Equal ( keys , value . CopyToNewArray ( ) . Split ( sizeof ( int ) ) . ToArray ( ) ) ;
@@ -186,82 +186,109 @@ public void ShouldAdvanceKeyToClosestWhenKeyNotFound()
186
186
_env . RunCursorScenario ( ( tx , db , c ) =>
187
187
{
188
188
var expected = PopulateCursorValues ( c ) . First ( ) ;
189
- var result = c . MoveTo ( UTF8 . GetBytes ( "key" ) ) ;
189
+ var result = c . Set ( UTF8 . GetBytes ( "key" ) ) ;
190
190
Assert . Equal ( MDBResultCode . NotFound , result ) ;
191
191
var ( _, key , _) = c . GetCurrent ( ) ;
192
192
Assert . Equal ( expected , key . CopyToNewArray ( ) ) ;
193
193
} ) ;
194
194
}
195
195
196
196
[ Fact ]
197
- public void ShouldMoveToAndGet ( )
197
+ public void ShouldSetKeyAndGet ( )
198
198
{
199
199
_env . RunCursorScenario ( ( tx , db , c ) =>
200
200
{
201
201
var expected = PopulateCursorValues ( c ) . ElementAt ( 2 ) ;
202
- var result = c . MoveToAndGet ( expected ) ;
202
+ var result = c . SetKey ( expected ) ;
203
203
Assert . Equal ( MDBResultCode . Success , result . resultCode ) ;
204
204
Assert . Equal ( expected , result . key . CopyToNewArray ( ) ) ;
205
205
} ) ;
206
206
}
207
207
208
208
[ Fact ]
209
- public void ShouldMoveToAndGetWithSpan ( )
209
+ public void ShouldSetKeyAndGetWithSpan ( )
210
210
{
211
211
_env . RunCursorScenario ( ( tx , db , c ) =>
212
212
{
213
213
var expected = PopulateCursorValues ( c ) . ElementAt ( 2 ) ;
214
- var result = c . MoveToAndGet ( expected . AsSpan ( ) ) ;
214
+ var result = c . SetKey ( expected . AsSpan ( ) ) ;
215
215
Assert . Equal ( MDBResultCode . Success , result . resultCode ) ;
216
216
Assert . Equal ( expected , result . key . CopyToNewArray ( ) ) ;
217
217
} ) ;
218
218
}
219
219
220
220
[ Fact ]
221
- public void ShouldMoveTo ( )
221
+ public void ShouldGetBoth ( )
222
222
{
223
223
_env . RunCursorScenario ( ( tx , db , c ) =>
224
224
{
225
225
var expected = PopulateCursorValues ( c ) . ElementAt ( 2 ) ;
226
- var result = c . MoveTo ( expected , expected ) ;
226
+ var result = c . GetBoth ( expected , expected ) ;
227
227
Assert . Equal ( MDBResultCode . Success , result ) ;
228
228
} , DatabaseOpenFlags . DuplicatesFixed | DatabaseOpenFlags . Create ) ;
229
229
}
230
230
231
231
[ Fact ]
232
- public void ShouldMoveToWithSpan ( )
232
+ public void ShouldGetBothWithSpan ( )
233
233
{
234
234
_env . RunCursorScenario ( ( tx , db , c ) =>
235
235
{
236
236
var expected = PopulateCursorValues ( c ) . ElementAt ( 2 ) ;
237
237
var expectedSpan = expected . AsSpan ( ) ;
238
- var result = c . MoveTo ( expectedSpan , expectedSpan ) ;
238
+ var result = c . GetBoth ( expectedSpan , expectedSpan ) ;
239
239
Assert . Equal ( MDBResultCode . Success , result ) ;
240
240
} , DatabaseOpenFlags . DuplicatesFixed | DatabaseOpenFlags . Create ) ;
241
241
}
242
242
243
243
[ Fact ]
244
- public void ShouldMoveToFirstValueAfter ( )
244
+ public void ShouldMoveToPrevious ( )
245
+ {
246
+ _env . RunCursorScenario ( ( tx , db , c ) =>
247
+ {
248
+ var expected = PopulateCursorValues ( c ) . ElementAt ( 2 ) ;
249
+ var expectedSpan = expected . AsSpan ( ) ;
250
+ c . GetBoth ( expectedSpan , expectedSpan ) ;
251
+ var result = c . Previous ( ) ;
252
+ Assert . Equal ( MDBResultCode . Success , result ) ;
253
+ } ) ;
254
+ }
255
+
256
+ [ Fact ]
257
+ public void ShouldSetRangeWithSpan ( )
258
+ {
259
+ _env . RunCursorScenario ( ( tx , db , c ) =>
260
+ {
261
+ var values = PopulateCursorValues ( c ) ;
262
+ var firstAfter = values [ 0 ] . AsSpan ( ) ;
263
+ var result = c . SetRange ( firstAfter ) ;
264
+ Assert . Equal ( MDBResultCode . Success , result ) ;
265
+ var current = c . GetCurrent ( ) ;
266
+ Assert . Equal ( values [ 0 ] , current . value . CopyToNewArray ( ) ) ;
267
+ } ) ;
268
+ }
269
+
270
+ [ Fact ]
271
+ public void ShouldGetBothRange ( )
245
272
{
246
273
_env . RunCursorScenario ( ( tx , db , c ) =>
247
274
{
248
275
var key = UTF8 . GetBytes ( "TestKey" ) ;
249
276
var values = PopulateMultipleCursorValues ( c ) ;
250
- var result = c . MoveToFirstValueAfter ( key , values [ 1 ] ) ;
277
+ var result = c . GetBothRange ( key , values [ 1 ] ) ;
251
278
Assert . Equal ( MDBResultCode . Success , result ) ;
252
279
var current = c . GetCurrent ( ) ;
253
280
Assert . Equal ( values [ 1 ] , current . value . CopyToNewArray ( ) ) ;
254
281
} , DatabaseOpenFlags . DuplicatesFixed | DatabaseOpenFlags . Create ) ;
255
282
}
256
283
257
284
[ Fact ]
258
- public void ShouldMoveToFirstValueAfterWithSpan ( )
285
+ public void ShouldGetBothRangeWithSpan ( )
259
286
{
260
287
_env . RunCursorScenario ( ( tx , db , c ) =>
261
288
{
262
289
var key = UTF8 . GetBytes ( "TestKey" ) . AsSpan ( ) ;
263
290
var values = PopulateMultipleCursorValues ( c ) ;
264
- var result = c . MoveToFirstValueAfter ( key , values [ 1 ] . AsSpan ( ) ) ;
291
+ var result = c . GetBothRange ( key , values [ 1 ] . AsSpan ( ) ) ;
265
292
Assert . Equal ( MDBResultCode . Success , result ) ;
266
293
var current = c . GetCurrent ( ) ;
267
294
Assert . Equal ( values [ 1 ] , current . value . CopyToNewArray ( ) ) ;
@@ -275,9 +302,9 @@ public void ShouldMoveToFirstDuplicate()
275
302
{
276
303
var key = UTF8 . GetBytes ( "TestKey" ) ;
277
304
var values = PopulateMultipleCursorValues ( c ) ;
278
- var result = c . MoveToFirstValueAfter ( key , values [ 1 ] ) ;
305
+ var result = c . GetBothRange ( key , values [ 1 ] ) ;
279
306
Assert . Equal ( MDBResultCode . Success , result ) ;
280
- result = c . MoveToFirstDuplicate ( ) ;
307
+ result = c . FirstDuplicate ( ) ;
281
308
Assert . Equal ( MDBResultCode . Success , result ) ;
282
309
var current = c . GetCurrent ( ) ;
283
310
Assert . Equal ( values [ 0 ] , current . value . CopyToNewArray ( ) ) ;
@@ -291,8 +318,8 @@ public void ShouldMoveToLastDuplicate()
291
318
{
292
319
var key = UTF8 . GetBytes ( "TestKey" ) ;
293
320
var values = PopulateMultipleCursorValues ( c ) ;
294
- c . MoveTo ( key ) ;
295
- var result = c . MoveToLastDuplicate ( ) ;
321
+ c . Set ( key ) ;
322
+ var result = c . LastDuplicate ( ) ;
296
323
Assert . Equal ( MDBResultCode . Success , result ) ;
297
324
var current = c . GetCurrent ( ) ;
298
325
Assert . Equal ( values [ 4 ] , current . value . CopyToNewArray ( ) ) ;
@@ -305,7 +332,7 @@ public void ShouldMoveToNextNoDuplicate()
305
332
_env . RunCursorScenario ( ( tx , db , c ) =>
306
333
{
307
334
var values = PopulateMultipleCursorValues ( c ) ;
308
- var result = c . MoveNextNoDuplicate ( ) ;
335
+ var result = c . NextNoDuplicate ( ) ;
309
336
Assert . Equal ( MDBResultCode . Success , result ) ;
310
337
var current = c . GetCurrent ( ) ;
311
338
Assert . Equal ( values [ 0 ] , current . value . CopyToNewArray ( ) ) ;
@@ -321,5 +348,19 @@ public void ShouldRenewSameTransaction()
321
348
Assert . Equal ( MDBResultCode . Success , result ) ;
322
349
} , transactionFlags : TransactionBeginFlags . ReadOnly ) ;
323
350
}
351
+
352
+ [ Fact ]
353
+ public void ShouldDeleteDuplicates ( )
354
+ {
355
+ _env . RunCursorScenario ( ( tx , db , c ) =>
356
+ {
357
+ var key = UTF8 . GetBytes ( "TestKey" ) ;
358
+ PopulateMultipleCursorValues ( c ) ;
359
+ c . Set ( key ) ;
360
+ c . DeleteDuplicateData ( ) ;
361
+ var result = c . Set ( key ) ;
362
+ Assert . Equal ( MDBResultCode . NotFound , result ) ;
363
+ } , DatabaseOpenFlags . DuplicatesFixed | DatabaseOpenFlags . Create ) ;
364
+ }
324
365
}
325
366
}
0 commit comments