@@ -133,6 +133,14 @@ impl SortOrder {
133
133
pub fn is_unsorted ( & self ) -> bool {
134
134
self . fields . is_empty ( )
135
135
}
136
+
137
+ /// Set the order id for the sort order
138
+ pub fn with_order_id ( self , order_id : i64 ) -> SortOrder {
139
+ SortOrder {
140
+ order_id,
141
+ fields : self . fields ,
142
+ }
143
+ }
136
144
}
137
145
138
146
impl SortOrderBuilder {
@@ -160,13 +168,13 @@ impl SortOrderBuilder {
160
168
}
161
169
162
170
/// Creates a new bound sort order.
163
- pub fn build ( & self , schema : Schema ) -> Result < SortOrder > {
171
+ pub fn build ( & self , schema : & Schema ) -> Result < SortOrder > {
164
172
let unbound_sort_order = self . build_unbound ( ) ?;
165
173
SortOrderBuilder :: check_compatibility ( unbound_sort_order, schema)
166
174
}
167
175
168
176
/// Returns the given sort order if it is compatible with the given schema
169
- fn check_compatibility ( sort_order : SortOrder , schema : Schema ) -> Result < SortOrder > {
177
+ fn check_compatibility ( sort_order : SortOrder , schema : & Schema ) -> Result < SortOrder > {
170
178
let sort_fields = & sort_order. fields ;
171
179
for sort_field in sort_fields {
172
180
match schema. field_by_id ( sort_field. source_id ) {
@@ -290,6 +298,35 @@ mod tests {
290
298
)
291
299
}
292
300
301
+ #[ test]
302
+ fn test_build_unbound_returns_correct_default_order_id_for_no_fields ( ) {
303
+ assert_eq ! (
304
+ SortOrder :: builder( )
305
+ . build_unbound( )
306
+ . expect( "Expected an Ok value" )
307
+ . order_id,
308
+ SortOrder :: UNSORTED_ORDER_ID
309
+ )
310
+ }
311
+
312
+ #[ test]
313
+ fn test_build_unbound_returns_correct_default_order_id_for_fields ( ) {
314
+ let sort_field = SortField :: builder ( )
315
+ . source_id ( 2 )
316
+ . direction ( SortDirection :: Ascending )
317
+ . null_order ( NullOrder :: First )
318
+ . transform ( Transform :: Identity )
319
+ . build ( ) ;
320
+ assert_ne ! (
321
+ SortOrder :: builder( )
322
+ . with_sort_field( sort_field. clone( ) )
323
+ . build_unbound( )
324
+ . expect( "Expected an Ok value" )
325
+ . order_id,
326
+ SortOrder :: UNSORTED_ORDER_ID
327
+ )
328
+ }
329
+
293
330
#[ test]
294
331
fn test_build_unbound_should_return_unsorted_sort_order ( ) {
295
332
assert_eq ! (
@@ -367,7 +404,7 @@ mod tests {
367
404
. transform ( Transform :: Identity )
368
405
. build ( ) ,
369
406
)
370
- . build ( schema) ;
407
+ . build ( & schema) ;
371
408
372
409
assert_eq ! (
373
410
sort_order_builder_result
@@ -406,7 +443,7 @@ mod tests {
406
443
. transform ( Transform :: Identity )
407
444
. build ( ) ,
408
445
)
409
- . build ( schema) ;
446
+ . build ( & schema) ;
410
447
411
448
assert_eq ! (
412
449
sort_order_builder_result
@@ -438,7 +475,7 @@ mod tests {
438
475
. transform ( Transform :: Year )
439
476
. build ( ) ,
440
477
)
441
- . build ( schema) ;
478
+ . build ( & schema) ;
442
479
443
480
assert_eq ! (
444
481
sort_order_builder_result
@@ -468,7 +505,7 @@ mod tests {
468
505
469
506
let sort_order_builder_result = SortOrder :: builder ( )
470
507
. with_sort_field ( sort_field. clone ( ) )
471
- . build ( schema) ;
508
+ . build ( & schema) ;
472
509
473
510
assert_eq ! (
474
511
sort_order_builder_result. expect( "Expected an Ok value" ) ,
0 commit comments