11use std:: path:: Path ;
22
3- use gitql_ast:: expression:: Expression ;
4- use gitql_ast:: expression:: SymbolExpression ;
5- use gitql_core:: environment:: Environment ;
6- use gitql_core:: object:: GitQLObject ;
7- use gitql_core:: object:: Group ;
83use gitql_core:: object:: Row ;
94use gitql_core:: value:: Value ;
10- use gitql_engine:: data_provider:: select_values;
115use gitql_engine:: data_provider:: DataProvider ;
12- use gitql_engine:: engine_evaluator:: evaluate_expression;
136
147pub struct FileDataProvider {
158 pub paths : Vec < String > ,
@@ -23,26 +16,7 @@ impl FileDataProvider {
2316}
2417
2518impl DataProvider for FileDataProvider {
26- fn provide (
27- & self ,
28- env : & mut Environment ,
29- table : & str ,
30- fields_names : & [ String ] ,
31- titles : & [ String ] ,
32- fields_values : & [ Box < dyn Expression > ] ,
33- hidden_selection_count : i64 ,
34- ) -> Result < GitQLObject , String > {
35- let mut groups: Vec < Group > = vec ! [ ] ;
36- if table. is_empty ( ) {
37- let group = select_values ( env, titles, fields_values) ?;
38- groups. push ( group) ;
39-
40- return Ok ( GitQLObject {
41- titles : titles. to_vec ( ) ,
42- groups,
43- } ) ;
44- }
45-
19+ fn provide ( & self , _table : & str , selected_columns : & [ String ] ) -> Result < Vec < Row > , String > {
4620 let mut files: Vec < String > = vec ! [ ] ;
4721 for path in self . paths . iter ( ) {
4822 let files_tree = traverse_file_tree ( path, & self . excludes ) ;
@@ -54,28 +28,15 @@ impl DataProvider for FileDataProvider {
5428 }
5529 }
5630
31+ let names_len = selected_columns. len ( ) as i64 ;
5732 let mut rows: Vec < Row > = Vec :: with_capacity ( files. len ( ) ) ;
5833
59- let names_len = fields_names. len ( ) as i64 ;
60- let values_len = fields_values. len ( ) as i64 ;
61- let padding = names_len - values_len;
62-
6334 for file in files {
6435 let mut values: Vec < Value > = Vec :: with_capacity ( names_len as usize ) ;
6536 let path = Path :: new ( & file) ;
6637
6738 for index in 0 ..names_len {
68- if index >= hidden_selection_count && ( index - padding) >= 0 {
69- let value = & fields_values[ ( index - padding) as usize ] ;
70- if value. as_any ( ) . downcast_ref :: < SymbolExpression > ( ) . is_none ( ) {
71- let evaluated = evaluate_expression ( env, value, titles, & values) ?;
72- values. push ( evaluated) ;
73- continue ;
74- }
75- }
76-
77- let field_name = & fields_names[ index as usize ] ;
78-
39+ let field_name = & selected_columns[ index as usize ] ;
7940 if field_name == "path" {
8041 let file_path_string = path. to_str ( ) . unwrap_or ( "" ) ;
8142 values. push ( Value :: Text ( file_path_string. to_string ( ) ) ) ;
@@ -124,11 +85,7 @@ impl DataProvider for FileDataProvider {
12485 rows. push ( Row { values } ) ;
12586 }
12687
127- groups. push ( Group { rows } ) ;
128- Ok ( GitQLObject {
129- titles : titles. to_vec ( ) ,
130- groups,
131- } )
88+ Ok ( rows)
13289 }
13390}
13491
0 commit comments