@@ -16,8 +16,8 @@ use super::format::unescape;
16
16
use super :: statistics:: ChannelStatistics ;
17
17
use crate :: query:: builder:: { QueryBuilder , QueryBuilderResult } ;
18
18
use crate :: query:: types:: {
19
- ControlListAllLimit , ControlListAllOffset , ListAllMetaData , QueryGenericLang , QueryMetaData ,
20
- QuerySearchLimit , QuerySearchOffset ,
19
+ ListLimit , ListMetaData , ListOffset , QueryGenericLang , QueryMetaData , QuerySearchLimit ,
20
+ QuerySearchOffset ,
21
21
} ;
22
22
use crate :: store:: fst:: StoreFSTPool ;
23
23
use crate :: store:: kv:: StoreKVPool ;
@@ -490,6 +490,48 @@ impl ChannelCommandSearch {
490
490
}
491
491
}
492
492
493
+ pub fn dispatch_list ( mut parts : SplitWhitespace ) -> ChannelResult {
494
+ match (
495
+ parts. next ( ) ,
496
+ parts. next ( ) ,
497
+ ChannelCommandBase :: parse_text_parts ( & mut parts) ,
498
+ ) {
499
+ ( Some ( collection) , Some ( bucket) , Some ( _text) ) => {
500
+ debug ! (
501
+ "dispatching list of words for the collection {} on bucket: {}" ,
502
+ collection, bucket
503
+ ) ;
504
+
505
+ let mut last_meta_err = None ;
506
+ let mut list_limit = APP_CONF . server . control_list_limit ;
507
+ let mut offset: u32 = 0 ;
508
+
509
+ while let Some ( meta_result) = ChannelCommandBase :: parse_next_meta_parts ( & mut parts)
510
+ {
511
+ match Self :: handle_list_meta ( meta_result) {
512
+ Ok ( metadata) => match metadata {
513
+ ( Some ( limit) , None ) => list_limit = limit,
514
+ ( None , Some ( defined_offset) ) => offset = defined_offset,
515
+ _ => { }
516
+ } ,
517
+ Err ( parse_err) => last_meta_err = Some ( parse_err) ,
518
+ }
519
+ }
520
+
521
+ if let Some ( err) = last_meta_err {
522
+ return Err ( err) ;
523
+ }
524
+
525
+ ChannelCommandBase :: commit_result_operation ( QueryBuilder :: list (
526
+ collection, bucket, list_limit, offset,
527
+ ) )
528
+ }
529
+ _ => Err ( ChannelCommandError :: InvalidFormat (
530
+ "LIST <collection> <bucket> [LIMIT(<count>)]? [OFFSET(<count>)]?" ,
531
+ ) ) ,
532
+ }
533
+ }
534
+
493
535
pub fn dispatch_help ( parts : SplitWhitespace ) -> ChannelResult {
494
536
ChannelCommandBase :: generic_dispatch_help ( parts, & * MANUAL_MODE_SEARCH )
495
537
}
@@ -571,6 +613,41 @@ impl ChannelCommandSearch {
571
613
) ) ,
572
614
}
573
615
}
616
+
617
+ fn handle_list_meta ( meta_result : MetaPartsResult ) -> Result < ListMetaData , ChannelCommandError > {
618
+ match meta_result {
619
+ Ok ( ( meta_key, meta_value) ) => {
620
+ debug ! ( "handle list meta: {} = {}" , meta_key, meta_value) ;
621
+
622
+ match meta_key {
623
+ "LIMIT" => {
624
+ if let Ok ( list_limit_parsed) = meta_value. parse :: < ListLimit > ( ) {
625
+ Ok ( ( Some ( list_limit_parsed) , None ) )
626
+ } else {
627
+ Err ( ChannelCommandBase :: make_error_invalid_meta_value (
628
+ meta_key, meta_value,
629
+ ) )
630
+ }
631
+ }
632
+ "OFFSET" => {
633
+ if let Ok ( query_offset_parsed) = meta_value. parse :: < ListOffset > ( ) {
634
+ Ok ( ( None , Some ( query_offset_parsed) ) )
635
+ } else {
636
+ Err ( ChannelCommandBase :: make_error_invalid_meta_value (
637
+ meta_key, meta_value,
638
+ ) )
639
+ }
640
+ }
641
+ _ => Err ( ChannelCommandBase :: make_error_invalid_meta_key (
642
+ meta_key, meta_value,
643
+ ) ) ,
644
+ }
645
+ }
646
+ Err ( err) => Err ( ChannelCommandBase :: make_error_invalid_meta_key (
647
+ err. 0 , err. 1 ,
648
+ ) ) ,
649
+ }
650
+ }
574
651
}
575
652
576
653
impl ChannelCommandIngest {
@@ -755,47 +832,6 @@ impl ChannelCommandIngest {
755
832
}
756
833
757
834
impl ChannelCommandControl {
758
- fn handle_list_all_meta (
759
- meta_result : MetaPartsResult ,
760
- ) -> Result < ListAllMetaData , ChannelCommandError > {
761
- match meta_result {
762
- Ok ( ( meta_key, meta_value) ) => {
763
- debug ! (
764
- "handle control list-all meta: {} = {}" ,
765
- meta_key, meta_value
766
- ) ;
767
-
768
- match meta_key {
769
- "LIMIT" => {
770
- if let Ok ( list_limit_parsed) = meta_value. parse :: < ControlListAllLimit > ( ) {
771
- Ok ( ( Some ( list_limit_parsed) , None ) )
772
- } else {
773
- Err ( ChannelCommandBase :: make_error_invalid_meta_value (
774
- meta_key, meta_value,
775
- ) )
776
- }
777
- }
778
- "OFFSET" => {
779
- if let Ok ( query_offset_parsed) = meta_value. parse :: < ControlListAllOffset > ( )
780
- {
781
- Ok ( ( None , Some ( query_offset_parsed) ) )
782
- } else {
783
- Err ( ChannelCommandBase :: make_error_invalid_meta_value (
784
- meta_key, meta_value,
785
- ) )
786
- }
787
- }
788
- _ => Err ( ChannelCommandBase :: make_error_invalid_meta_key (
789
- meta_key, meta_value,
790
- ) ) ,
791
- }
792
- }
793
- Err ( err) => Err ( ChannelCommandBase :: make_error_invalid_meta_key (
794
- err. 0 , err. 1 ,
795
- ) ) ,
796
- }
797
- }
798
-
799
835
pub fn dispatch_trigger ( mut parts : SplitWhitespace ) -> ChannelResult {
800
836
match ( parts. next ( ) , parts. next ( ) , parts. next ( ) ) {
801
837
( None , _, _) => Ok ( vec ! [ ChannelCommandResponse :: Result ( format!(
@@ -882,46 +918,6 @@ impl ChannelCommandControl {
882
918
pub fn dispatch_help ( parts : SplitWhitespace ) -> ChannelResult {
883
919
ChannelCommandBase :: generic_dispatch_help ( parts, & * MANUAL_MODE_CONTROL )
884
920
}
885
-
886
- pub fn dispatch_list ( mut parts : SplitWhitespace ) -> ChannelResult {
887
- match (
888
- parts. next ( ) , // collection
889
- parts. next ( ) , // bucket
890
- ChannelCommandBase :: parse_text_parts ( & mut parts) ,
891
- ) {
892
- ( Some ( collection) , Some ( bucket) , Some ( _text) ) => {
893
- debug ! (
894
- "dispatching list of words for the collection {} on bucket: {}" ,
895
- collection, bucket
896
- ) ;
897
- let mut last_meta_err = None ;
898
- let mut list_limit = APP_CONF . server . control_list_limit ;
899
- let mut offset: u32 = 0 ;
900
- while let Some ( meta_result) = ChannelCommandBase :: parse_next_meta_parts ( & mut parts)
901
- {
902
- match Self :: handle_list_all_meta ( meta_result) {
903
- Ok ( metadata) => match metadata {
904
- ( Some ( limit) , None ) => list_limit = limit,
905
- ( None , Some ( defined_offset) ) => offset = defined_offset,
906
- _ => { }
907
- } ,
908
- Err ( parse_err) => last_meta_err = Some ( parse_err) ,
909
- }
910
- }
911
-
912
- if let Some ( err) = last_meta_err {
913
- return Err ( err) ;
914
- }
915
-
916
- ChannelCommandBase :: commit_result_operation ( QueryBuilder :: list (
917
- collection, bucket, list_limit, offset,
918
- ) )
919
- }
920
- _ => Err ( ChannelCommandError :: InvalidFormat (
921
- "LIST <collection> <bucket> [LIMIT(<count>)]? [OFFSET(<count>)]?" ,
922
- ) ) ,
923
- }
924
- }
925
921
}
926
922
927
923
impl fmt:: Display for ChannelCommandError {
0 commit comments