(
query: String,
arguments: &Arguments,
files: &[String],
env: &mut Environment,
reporter: &mut DiagnosticReporter,
)
| 115 | } |
| 116 | |
| 117 | fn execute_fileql_query( |
| 118 | query: String, |
| 119 | arguments: &Arguments, |
| 120 | files: &[String], |
| 121 | env: &mut Environment, |
| 122 | reporter: &mut DiagnosticReporter, |
| 123 | ) { |
| 124 | let front_start = std::time::Instant::now(); |
| 125 | let tokenizer_result = Tokenizer::tokenize(query.clone()); |
| 126 | if tokenizer_result.is_err() { |
| 127 | let diagnostic = tokenizer_result.err().unwrap(); |
| 128 | reporter.report_diagnostic(&query, *diagnostic); |
| 129 | return; |
| 130 | } |
| 131 | |
| 132 | let tokens = tokenizer_result.ok().unwrap(); |
| 133 | if tokens.is_empty() { |
| 134 | return; |
| 135 | } |
| 136 | |
| 137 | let parser_result = parser::parse_gql(tokens, env); |
| 138 | if parser_result.is_err() { |
| 139 | let diagnostic = parser_result.err().unwrap(); |
| 140 | reporter.report_diagnostic(&query, *diagnostic); |
| 141 | return; |
| 142 | } |
| 143 | |
| 144 | let query_node = parser_result.ok().unwrap(); |
| 145 | let front_duration = front_start.elapsed(); |
| 146 | |
| 147 | let engine_start = std::time::Instant::now(); |
| 148 | let files = files.to_vec(); |
| 149 | let excludes = arguments.excludes.to_vec(); |
| 150 | let file_provider = FileDataProvider::new(files, excludes); |
| 151 | let provider: Box<dyn DataProvider> = Box::new(file_provider); |
| 152 | let evaluation_result = engine::evaluate(env, &provider, query_node); |
| 153 | |
| 154 | // Report Runtime exceptions if they exists |
| 155 | if evaluation_result.is_err() { |
| 156 | reporter.report_diagnostic( |
| 157 | &query, |
| 158 | Diagnostic::exception(&evaluation_result.err().unwrap()), |
| 159 | ); |
| 160 | return; |
| 161 | } |
| 162 | |
| 163 | // Render the result only if they are selected groups not any other statement |
| 164 | // Render the result only if they are selected groups not any other statement |
| 165 | let engine_duration = engine_start.elapsed(); |
| 166 | |
| 167 | let printer: Box<dyn OutputPrinter> = match arguments.output_format { |
| 168 | OutputFormat::Render => { |
| 169 | Box::new(TablePrinter::new(arguments.pagination, arguments.page_size)) |
| 170 | } |
| 171 | OutputFormat::JSON => Box::new(JSONPrinter {}), |
| 172 | OutputFormat::CSV => Box::new(CSVPrinter {}), |
| 173 | }; |
| 174 |
no outgoing calls
no test coverage detected