@@ -728,6 +728,58 @@ pub(super) async fn load_and_filter_data_index_multi(
728728 Ok ( final_result)
729729}
730730
731+ /// Execute query against an `MftIndex` and return results as a `DataFrame`.
732+ ///
733+ /// This function uses the fast `IndexQuery` path for filtering and then
734+ /// converts the results to a `DataFrame` for downstream processing.
735+ #[ cfg( windows) ]
736+ fn execute_index_query (
737+ index : & uffs_mft:: MftIndex ,
738+ filters : & QueryFilters < ' _ > ,
739+ resolve_paths : bool ,
740+ ) -> Result < uffs_mft:: DataFrame > {
741+ use uffs_core:: { IndexQuery , TypeFilter , compile_parsed_pattern} ;
742+
743+ let mut query = IndexQuery :: new ( index) ;
744+
745+ let pattern = compile_parsed_pattern ( filters. parsed ) ;
746+ query = query. with_pattern_result ( pattern) ;
747+
748+ if let Some ( ext_str) = filters. ext_filter {
749+ let parsed_ext_filter = ExtensionFilter :: parse ( ext_str)
750+ . map_err ( |err| anyhow:: anyhow!( "Invalid extension filter: {err}" ) ) ?;
751+ let exts: Vec < & str > = parsed_ext_filter
752+ . extensions ( )
753+ . iter ( )
754+ . map ( String :: as_str)
755+ . collect ( ) ;
756+ query = query. extensions ( & exts) ;
757+ }
758+
759+ if filters. files_only {
760+ query = query. with_type_filter ( TypeFilter :: FilesOnly ) ;
761+ } else if filters. dirs_only {
762+ query = query. with_type_filter ( TypeFilter :: DirsOnly ) ;
763+ }
764+
765+ if let Some ( min) = filters. min_size {
766+ query = query. min_size ( min) ;
767+ }
768+ if let Some ( max) = filters. max_size {
769+ query = query. max_size ( max) ;
770+ }
771+
772+ if filters. limit > 0 {
773+ query = query. limit ( filters. limit as usize ) ;
774+ }
775+
776+ query = query. case_sensitive ( filters. parsed . is_case_sensitive ( ) ) ;
777+ query = query. with_resolve_paths ( resolve_paths) ;
778+
779+ let results = query. collect ( ) ;
780+ results_to_dataframe ( index, results, resolve_paths)
781+ }
782+
731783/// Build and execute the MFT query with all filters applied.
732784#[ tracing:: instrument(
733785 level = "debug" ,
0 commit comments