@@ -367,6 +367,106 @@ fn build_numeric_field_filter_expression(
367
367
#[ allow( clippy:: enum_glob_use) ]
368
368
use ScalarPredicate :: * ;
369
369
match filter. field {
370
+ AdvisoryRating => {
371
+ let expr = view_track_search:: advisory_rating;
372
+ let expr_not_null = ifnull ( expr, encode_advisory_rating ( Default :: default ( ) ) ) ;
373
+ // TODO: Check and limit/clamp value range when converting from f64 to i16
374
+ match filter. predicate {
375
+ LessThan ( value) => Box :: new ( expr_not_null. lt ( value as i16 ) ) ,
376
+ LessOrEqual ( value) => Box :: new ( expr_not_null. le ( value as i16 ) ) ,
377
+ GreaterThan ( value) => Box :: new ( expr_not_null. gt ( value as i16 ) ) ,
378
+ GreaterOrEqual ( value) => Box :: new ( expr_not_null. ge ( value as i16 ) ) ,
379
+ Equal ( value) => {
380
+ if let Some ( value) = value {
381
+ Box :: new ( expr_not_null. eq ( value as i16 ) )
382
+ } else {
383
+ Box :: new ( expr. is_null ( ) )
384
+ }
385
+ }
386
+ NotEqual ( value) => {
387
+ if let Some ( value) = value {
388
+ Box :: new ( expr_not_null. ne ( value as i16 ) )
389
+ } else {
390
+ Box :: new ( expr. is_not_null ( ) )
391
+ }
392
+ }
393
+ }
394
+ }
395
+ ArtworkDataSize => {
396
+ let expr = view_track_search:: artwork_data_size;
397
+ let expr_not_null = ifnull ( expr, 0 ) ;
398
+ // TODO: Check and limit/clamp value range when converting from f64 to i64
399
+ match filter. predicate {
400
+ LessThan ( value) => Box :: new ( expr_not_null. lt ( value as i64 ) ) ,
401
+ LessOrEqual ( value) => Box :: new ( expr_not_null. le ( value as i64 ) ) ,
402
+ GreaterThan ( value) => Box :: new ( expr_not_null. gt ( value as i64 ) ) ,
403
+ GreaterOrEqual ( value) => Box :: new ( expr_not_null. ge ( value as i64 ) ) ,
404
+ Equal ( value) => {
405
+ if let Some ( value) = value {
406
+ Box :: new ( expr_not_null. eq ( value as i64 ) )
407
+ } else {
408
+ Box :: new ( expr. is_null ( ) )
409
+ }
410
+ }
411
+ NotEqual ( value) => {
412
+ if let Some ( value) = value {
413
+ Box :: new ( expr_not_null. ne ( value as i64 ) )
414
+ } else {
415
+ Box :: new ( expr. is_not_null ( ) )
416
+ }
417
+ }
418
+ }
419
+ }
420
+ ArtworkImageHeight => {
421
+ let expr = view_track_search:: artwork_image_height;
422
+ let expr_not_null = ifnull ( expr, 0 ) ;
423
+ // TODO: Check and limit/clamp value range when converting from f64 to i16
424
+ match filter. predicate {
425
+ LessThan ( value) => Box :: new ( expr_not_null. lt ( value as i16 ) ) ,
426
+ LessOrEqual ( value) => Box :: new ( expr_not_null. le ( value as i16 ) ) ,
427
+ GreaterThan ( value) => Box :: new ( expr_not_null. gt ( value as i16 ) ) ,
428
+ GreaterOrEqual ( value) => Box :: new ( expr_not_null. ge ( value as i16 ) ) ,
429
+ Equal ( value) => {
430
+ if let Some ( value) = value {
431
+ Box :: new ( expr_not_null. eq ( value as i16 ) )
432
+ } else {
433
+ Box :: new ( expr. is_null ( ) )
434
+ }
435
+ }
436
+ NotEqual ( value) => {
437
+ if let Some ( value) = value {
438
+ Box :: new ( expr_not_null. ne ( value as i16 ) )
439
+ } else {
440
+ Box :: new ( expr. is_not_null ( ) )
441
+ }
442
+ }
443
+ }
444
+ }
445
+ ArtworkImageWidth => {
446
+ let expr = view_track_search:: artwork_image_width;
447
+ let expr_not_null = ifnull ( expr, 0 ) ;
448
+ // TODO: Check and limit/clamp value range when converting from f64 to i16
449
+ match filter. predicate {
450
+ LessThan ( value) => Box :: new ( expr_not_null. lt ( value as i16 ) ) ,
451
+ LessOrEqual ( value) => Box :: new ( expr_not_null. le ( value as i16 ) ) ,
452
+ GreaterThan ( value) => Box :: new ( expr_not_null. gt ( value as i16 ) ) ,
453
+ GreaterOrEqual ( value) => Box :: new ( expr_not_null. ge ( value as i16 ) ) ,
454
+ Equal ( value) => {
455
+ if let Some ( value) = value {
456
+ Box :: new ( expr_not_null. eq ( value as i16 ) )
457
+ } else {
458
+ Box :: new ( expr. is_null ( ) )
459
+ }
460
+ }
461
+ NotEqual ( value) => {
462
+ if let Some ( value) = value {
463
+ Box :: new ( expr_not_null. ne ( value as i16 ) )
464
+ } else {
465
+ Box :: new ( expr. is_not_null ( ) )
466
+ }
467
+ }
468
+ }
469
+ }
370
470
AudioDurationMs => {
371
471
let expr = view_track_search:: audio_duration_ms;
372
472
let expr_not_null = ifnull ( expr, DurationMs :: empty ( ) . value ( ) ) ;
@@ -513,31 +613,6 @@ fn build_numeric_field_filter_expression(
513
613
}
514
614
}
515
615
}
516
- AdvisoryRating => {
517
- let expr = view_track_search:: advisory_rating;
518
- let expr_not_null = ifnull ( expr, encode_advisory_rating ( Default :: default ( ) ) ) ;
519
- // TODO: Check and limit/clamp value range when converting from f64 to i16
520
- match filter. predicate {
521
- LessThan ( value) => Box :: new ( expr_not_null. lt ( value as i16 ) ) ,
522
- LessOrEqual ( value) => Box :: new ( expr_not_null. le ( value as i16 ) ) ,
523
- GreaterThan ( value) => Box :: new ( expr_not_null. gt ( value as i16 ) ) ,
524
- GreaterOrEqual ( value) => Box :: new ( expr_not_null. ge ( value as i16 ) ) ,
525
- Equal ( value) => {
526
- if let Some ( value) = value {
527
- Box :: new ( expr_not_null. eq ( value as i16 ) )
528
- } else {
529
- Box :: new ( expr. is_null ( ) )
530
- }
531
- }
532
- NotEqual ( value) => {
533
- if let Some ( value) = value {
534
- Box :: new ( expr_not_null. ne ( value as i16 ) )
535
- } else {
536
- Box :: new ( expr. is_not_null ( ) )
537
- }
538
- }
539
- }
540
- }
541
616
TrackNumber => {
542
617
let expr = view_track_search:: track_number;
543
618
let expr_not_null = ifnull ( expr, 0 ) ;
0 commit comments